This commit is contained in:
An Bui 2025-03-12 22:44:53 +07:00
parent cb12c18f13
commit 2fb3d37909
36 changed files with 1147 additions and 57 deletions

View file

@ -4,6 +4,14 @@
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2025-03-11T14:14:17.547643300Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="Default" identifier="serial=192.168.1.99:36879;connection=b3c558c0" />
</handle>
</Target>
</DropdownSelection>
<DialogSelection />
</SelectionState>
<SelectionState runConfigName="shell-loader">
<option name="selectionMode" value="DROPDOWN" />

View file

@ -11,7 +11,7 @@ android {
minSdk minApi
targetSdk targetApi
versionCode 21
versionName "v2.9.5-3dfx-italianice"
versionName "v2.9.5-3dfx-jello"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}

View file

@ -1205,6 +1205,25 @@ public class RfbProto {
os.write(eventBuf, 0, eventBufLen);
}
void writeAkey(int _KEY) throws IOException {
try {
// Press
eventBufLen = 0;
writeKeyEvent(_KEY, true);
os.write(eventBuf, 0, eventBufLen);
// Release
eventBufLen = 0;
writeKeyEvent(_KEY, false);
// Reset VNC server modifiers state
writeModifierKeyEvents(0);
os.write(eventBuf, 0, eventBufLen);
} catch (IOException e) {
e.printStackTrace();
}
}
void writeCtrlAltDel() throws IOException {
final int DELETE = 0xffff;
final int CTRLALT = VncCanvas.CTRL_MASK | VncCanvas.ALT_MASK;
@ -1227,6 +1246,98 @@ public class RfbProto {
e.printStackTrace();
}
}
void writeCtrlC() throws IOException {
final int CKEY = 67;
final int CTRL = VncCanvas.CTRL_MASK;
try {
// Press
eventBufLen = 0;
writeModifierKeyEvents(CTRL);
writeKeyEvent(CKEY, true);
os.write(eventBuf, 0, eventBufLen);
// Release
eventBufLen = 0;
writeModifierKeyEvents(CTRL);
writeKeyEvent(CKEY, false);
// Reset VNC server modifiers state
writeModifierKeyEvents(0);
os.write(eventBuf, 0, eventBufLen);
} catch (IOException e) {
e.printStackTrace();
}
}
void writeCtrlX() throws IOException {
final int XKEY = 88;
final int CTRL = VncCanvas.CTRL_MASK;
try {
// Press
eventBufLen = 0;
writeModifierKeyEvents(CTRL);
writeKeyEvent(XKEY, true);
os.write(eventBuf, 0, eventBufLen);
// Release
eventBufLen = 0;
writeModifierKeyEvents(CTRL);
writeKeyEvent(XKEY, false);
// Reset VNC server modifiers state
writeModifierKeyEvents(0);
os.write(eventBuf, 0, eventBufLen);
} catch (IOException e) {
e.printStackTrace();
}
}
void writeCtrlV() throws IOException {
final int VKEY = 86;
final int CTRL = VncCanvas.CTRL_MASK;
try {
// Press
eventBufLen = 0;
writeModifierKeyEvents(CTRL);
writeKeyEvent(VKEY, true);
os.write(eventBuf, 0, eventBufLen);
// Release
eventBufLen = 0;
writeModifierKeyEvents(CTRL);
writeKeyEvent(VKEY, false);
// Reset VNC server modifiers state
writeModifierKeyEvents(0);
os.write(eventBuf, 0, eventBufLen);
} catch (IOException e) {
e.printStackTrace();
}
}
void writeCtrlA() throws IOException {
final int AKEY = 65;
final int CTRL = VncCanvas.CTRL_MASK;
try {
// Press
eventBufLen = 0;
writeModifierKeyEvents(CTRL);
writeKeyEvent(AKEY, true);
os.write(eventBuf, 0, eventBufLen);
// Release
eventBufLen = 0;
writeModifierKeyEvents(CTRL);
writeKeyEvent(AKEY, false);
// Reset VNC server modifiers state
writeModifierKeyEvents(0);
os.write(eventBuf, 0, eventBufLen);
} catch (IOException e) {
e.printStackTrace();
}
}
//
// Write a key event message. We may need to send modifier key events

View file

@ -1211,6 +1211,78 @@ public class VncCanvas extends AppCompatImageView {
}
public void sendMetaKey1Down(int key, int flags) {
try {
rfb.writeKeyEvent(key, flags, true);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void sendMetaKey1Up(int key, int flags) {
try {
rfb.writeKeyEvent(key, flags, false);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void sendAKey(int _key) {
try {
rfb.writeAkey(_key);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void sendCtrlAltDel() {
try {
rfb.writeCtrlAltDel();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void sendCtrlC() {
try {
rfb.writeCtrlC();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void sendCtrlX() {
try {
rfb.writeCtrlX();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void sendCtrlV() {
try {
rfb.writeCtrlV();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void sendCtrlA() {
try {
rfb.writeCtrlA();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void sendText(String s) {
int l = s.length();
for (int i = 0; i < l; i++) {

View file

@ -1,6 +1,7 @@
package com.vectras.qemu;
import android.androidVNC.AbstractScaling;
import android.androidVNC.RfbProto;
import android.androidVNC.VncCanvasActivity;
import androidx.appcompat.app.ActionBar;
@ -15,9 +16,12 @@ import android.annotation.SuppressLint;
import android.app.Activity;
import androidx.appcompat.app.AlertDialog;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
@ -29,9 +33,12 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.SystemClock;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Display;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
@ -39,9 +46,12 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
@ -49,6 +59,7 @@ import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.text.TextWatcher;
import com.vectras.vm.*;
@ -63,7 +74,11 @@ import com.vectras.vm.widgets.JoystickView;
import com.vectras.vterm.Terminal;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Objects;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;
@ -75,6 +90,9 @@ import org.json.JSONObject;
*/
public class MainVNCActivity extends VncCanvasActivity {
private Timer _timer = new Timer();
private TimerTask timerTask;
public static boolean started = false;
public static final int KEYBOARD = 10000;
public static final int QUIT = 10001;
@ -95,6 +113,20 @@ public class MainVNCActivity extends VncCanvasActivity {
public static MainVNCActivity activity;
public static LinearLayout desktop;
public static LinearLayout gamepad;
private LinearLayout sendkeylayout;
private RecyclerView sendkeylist;
private EditText sendtextEdittext;
private ImageButton sendtextButton;
private ImageButton hidesendkeyButton;
private ImageButton sendselectallkeyButton;
private ImageButton sendcutButton;
private ImageButton sendcopykeyButton;
private ImageButton sendpastekeyButton;
private ImageButton senddelkeyButton;
private ArrayList<HashMap<String, Object>> listmapForSendKey = new ArrayList<>();
private LinearLayoutManager rvLayoutManager;
@Override
public void onCreate(Bundle b) {
@ -161,6 +193,17 @@ public class MainVNCActivity extends VncCanvasActivity {
ImageButton leftGameBtn = findViewById(R.id.leftGameBtn);
ImageButton rightGameBtn = findViewById(R.id.rightGameBtn);
ImageButton enterGameBtn = findViewById(R.id.enterGameBtn);
ImageButton ctrlaltdelBtn = findViewById(R.id.ctrlaltdelBtn);
sendkeylayout = findViewById(R.id.sendkeylayout);
sendkeylist = findViewById(R.id.sendkeylist);
sendtextEdittext = findViewById(R.id.sendtextEdittext);
sendtextButton = findViewById(R.id.sendtextButton);
hidesendkeyButton = findViewById(R.id.hidesendkeyButton);
sendselectallkeyButton = findViewById(R.id.sendselectallkeyButton);
sendpastekeyButton = findViewById(R.id.sendpastekeyButton);
sendcutButton = findViewById(R.id.sendcutButton);
sendcopykeyButton = findViewById(R.id.sendcopykeyButton);
senddelkeyButton = findViewById(R.id.senddelkeyButton);
qmpBtn = findViewById(R.id.btnQmp);
ImageButton appsBtn = findViewById(R.id.btnPrograms);
appsBtn.setVisibility(View.GONE);
@ -246,6 +289,19 @@ public class MainVNCActivity extends VncCanvasActivity {
keyDownUp(KeyEvent.KEYCODE_TAB);
}
});
ctrlaltdelBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (sendkeylayout.getVisibility() == View.VISIBLE) {
sendkeylayout.setVisibility(View.GONE);
sendtextEdittext.setEnabled(false);
sendtextEdittext.setEnabled(true);
} else {
sendkeylayout.setVisibility(View.VISIBLE);
}
//sendCtrlAtlDelKey();
}
});
tabGameBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@ -314,8 +370,8 @@ public class MainVNCActivity extends VncCanvasActivity {
// Stop the service
MainService.stopService();
//Terminal.killQemuProcess();
VectrasApp.killcurrentqemuprocess(getApplicationContext());
finish();
//VectrasApp.killcurrentqemuprocess(getApplicationContext());
shutdownthisvm();
})
.setNegativeButton(getString(R.string.no), null)
.show();
@ -351,6 +407,27 @@ public class MainVNCActivity extends VncCanvasActivity {
}, 200);
}
});
keyboardBtn.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (sendkeylayout.getVisibility() == View.VISIBLE) {
sendkeylayout.setVisibility(View.GONE);
sendtextEdittext.setEnabled(false);
sendtextEdittext.setEnabled(true);
} else {
sendkeylayout.setVisibility(View.VISIBLE);
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
sendtextEdittext.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(sendtextEdittext, InputMethodManager.SHOW_IMPLICIT);
}
}, 500);
}
return false;
}
});
controllersBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@ -540,9 +617,91 @@ public class MainVNCActivity extends VncCanvasActivity {
sendKey(KeyEvent.KEYCODE_ESCAPE, false);
}
});
sendselectallkeyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
vncCanvas.sendCtrlA();
}
});
sendcutButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
vncCanvas.sendCtrlX();
}
});
sendcopykeyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
vncCanvas.sendCtrlC();
}
});
sendpastekeyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
vncCanvas.sendCtrlV();
}
});
senddelkeyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_FORWARD_DEL));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_FORWARD_DEL));
}
});
hidesendkeyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendkeylayout.setVisibility(View.GONE);
sendtextEdittext.setEnabled(false);
sendtextEdittext.setEnabled(true);
}
});
sendtextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
vncCanvas.sendText(sendtextEdittext.getText().toString());
sendtextEdittext.setText("");
}
});
ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
R.layout.container_function, functionsArray);
sendtextEdittext.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.length() == 0) {
sendtextButton.setVisibility(View.GONE);
} else {
sendtextButton.setVisibility(View.VISIBLE);
}
}
});
sendtextEdittext.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_SEND) {
vncCanvas.sendText(sendtextEdittext.getText().toString());
sendtextEdittext.setText("");
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(sendtextEdittext.getWindowToken(), 0);
handled = true;
}
return handled;
}
});
ArrayAdapter < String > adapter = new ArrayAdapter<>(this,
R.layout.container_function, functionsArray);
ListView listView = findViewById(R.id.functions);
listView.setAdapter(adapter);
@ -576,6 +735,9 @@ public class MainVNCActivity extends VncCanvasActivity {
}
}
});
sendkeylayout.setVisibility(View.GONE);
sendtextButton.setVisibility(View.GONE);
sendkeydialog();
}
public boolean rightClick(final MotionEvent e, final int i) {
@ -643,30 +805,7 @@ public class MainVNCActivity extends VncCanvasActivity {
}
public void sendCtrlAtlDelKey() {
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_CTRL_LEFT));
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ALT_LEFT));
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_CTRL_LEFT));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ALT_LEFT));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL));
vncCanvas.sendCtrlAltDel();
}
private void setDefaulViewMode() {
@ -1257,16 +1396,22 @@ public class MainVNCActivity extends VncCanvasActivity {
}
@Override
public void onBackPressed() {
super.onBackPressed();
FrameLayout l = findViewById(R.id.mainControl);
if (l != null) {
if (l.getVisibility() == View.VISIBLE) {
l.setVisibility(View.GONE);
} else
l.setVisibility(View.VISIBLE);
if (sendkeylayout.getVisibility() == View.VISIBLE) {
sendkeylayout.setVisibility(View.GONE);
} else {
FrameLayout l = findViewById(R.id.mainControl);
if (l != null) {
if (l.getVisibility() == View.VISIBLE) {
l.setVisibility(View.GONE);
} else
l.setVisibility(View.VISIBLE);
}
started = false;
finish();
}
started = false;
}
public void onHideToolbar() {
@ -1295,4 +1440,122 @@ public class MainVNCActivity extends VncCanvasActivity {
}, 1000);
}
private void shutdownthisvm() {
vncCanvas.sendMetaKey1(50, 6);
timerTask = new TimerTask() {
@Override
public void run() {
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_Q));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_Q));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_U));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_U));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_I));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_I));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_T));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_T));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ENTER));
finish();
}
};
_timer.schedule(timerTask, 1000);
}
private void sendkeydialog() {
VectrasApp.setupSendKeyListForListmap(listmapForSendKey);
rvLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,false);
sendkeylist.setAdapter(new Recyclerview1Adapter(listmapForSendKey));
sendkeylist.setLayoutManager(rvLayoutManager);
sendkeylist.setHasFixedSize(true);
}
public class Recyclerview1Adapter extends RecyclerView.Adapter<Recyclerview1Adapter.ViewHolder> {
ArrayList<HashMap<String, Object>> _data;
public Recyclerview1Adapter(ArrayList<HashMap<String, Object>> _arr) {
_data = _arr;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater _inflater = getLayoutInflater();
View _v = _inflater.inflate(R.layout.layout_for_send_keys, null);
RecyclerView.LayoutParams _lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
_v.setLayoutParams(_lp);
return new ViewHolder(_v);
}
@Override
public void onBindViewHolder(ViewHolder _holder, final int _position) {
View _view = _holder.itemView;
RecyclerView.LayoutParams _lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
_view.setLayoutParams(_lp);
final LinearLayout _all = _view.findViewById(R.id.all);
final TextView _textViewKeyName = _view.findViewById(R.id.textViewKeyName);
final ImageView _imageViewKey = _view.findViewById(R.id.imageViewKey);
_textViewKeyName.setTextColor(0xff000000);
if ((boolean) _data.get(_position).get("useIcon")) {
_textViewKeyName.setVisibility(View.GONE);
_imageViewKey.setVisibility(View.VISIBLE);
_imageViewKey.setImageResource((int) _data.get(_position).get("rIcon"));
} else {
_imageViewKey.setVisibility(View.GONE);
_textViewKeyName.setVisibility(View.VISIBLE);
_textViewKeyName.setText(_data.get(_position).get("keyname").toString());
}
_all.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View _view) {
if (_position == 0) {
sendCtrlAtlDelKey();
} else {
if ((boolean) _data.get(_position).get("useKeyEvent")) {
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, (int) _data.get(_position).get("keycode")));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, (int) _data.get(_position).get("keycode")));
} else {
vncCanvas.sendAKey((int) _data.get(_position).get("keycode"));
}
}
}
});
}
@Override
public int getItemCount() {
return _data.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View v) {
super(v);
}
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int pointerCount = event.getPointerCount();
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
if (pointerCount == 3) {
MotionEvent e = MotionEvent.obtain(1000, 1000, MotionEvent.ACTION_DOWN, vncCanvas.mouseX, vncCanvas.mouseY,
0);
((TouchpadInputHandler) VncCanvasActivity.inputHandler).middleClick(e);
} else if (pointerCount == 2) {
MotionEvent e = MotionEvent.obtain(1000, 1000, MotionEvent.ACTION_DOWN, vncCanvas.mouseX, vncCanvas.mouseY,
0);
((TouchpadInputHandler) VncCanvasActivity.inputHandler).rightClick(e);
}
break;
}
return super.onTouchEvent(event);
}
}

View file

@ -20,6 +20,7 @@ import android.os.Looper;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup;
@ -963,4 +964,231 @@ public class VectrasApp extends Application {
command = command.replaceAll("https://", "http://");
return command.replaceAll("xssFjnj58Id", _url);
}
public static void setupSendKeyListForListmap(ArrayList<HashMap<String, Object>> listmapForSendKey) {
HashMap<String, Object> mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "Ctrl + Alt + Del");
mapForAddItems.put("keycode", 0);
mapForAddItems.put("useKeyEvent", false);
mapForAddItems.put("useIcon", false);
mapForAddItems.put("rIcon", 0);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "Esc");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_ESCAPE);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", false);
mapForAddItems.put("rIcon", 0);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "Windows");
mapForAddItems.put("keycode", 91);
mapForAddItems.put("useKeyEvent", false);
mapForAddItems.put("useIcon", true);
mapForAddItems.put("rIcon", R.drawable.grid_view_24px);
listmapForSendKey.add(mapForAddItems);
// mapForAddItems = new HashMap<>();
// mapForAddItems.put("keyname", "Menu");
// mapForAddItems.put("keycode", 93);
// mapForAddItems.put("useKeyEvent", false);
// mapForAddItems.put("useIcon", true);
// mapForAddItems.put("rIcon", R.drawable.menu_24px);
// listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "Backspace");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_DEL);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", true);
mapForAddItems.put("rIcon", R.drawable.backspace_24px);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "Enter");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_ENTER);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", true);
mapForAddItems.put("rIcon", R.drawable.keyboard_return_24px);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "Tab");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_TAB);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", true);
mapForAddItems.put("rIcon", R.drawable.sync_alt_24px);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "Up");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_DPAD_UP);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", true);
mapForAddItems.put("rIcon", R.drawable.arrow_upward_24px);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "Down");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_DPAD_DOWN);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", true);
mapForAddItems.put("rIcon", R.drawable.arrow_downward_24px);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "Left");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_DPAD_LEFT);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", true);
mapForAddItems.put("rIcon", R.drawable.arrow_back_24px);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "Left");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_DPAD_RIGHT);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", true);
mapForAddItems.put("rIcon", R.drawable.arrow_forward_24px);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "Home");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_MOVE_HOME);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", true);
mapForAddItems.put("rIcon", R.drawable.vertical_align_top_24px);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "End");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_MOVE_END);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", true);
mapForAddItems.put("rIcon", R.drawable.vertical_align_bottom_24px);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "End");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_PAGE_UP);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", true);
mapForAddItems.put("rIcon", R.drawable.arrow_warm_up_24px);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "End");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_PAGE_DOWN);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", true);
mapForAddItems.put("rIcon", R.drawable.arrow_cool_down_24px);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "End");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_INSERT);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", true);
mapForAddItems.put("rIcon", R.drawable.insert_text_24px);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "F1");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_F1);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", false);
mapForAddItems.put("rIcon", 0);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "F2");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_F2);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", false);
mapForAddItems.put("rIcon", 0);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "F3");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_F3);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", false);
mapForAddItems.put("rIcon", 0);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "F4");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_F4);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", false);
mapForAddItems.put("rIcon", 0);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "F5");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_F5);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", false);
mapForAddItems.put("rIcon", 0);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "F6");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_F6);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", false);
mapForAddItems.put("rIcon", 0);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "F7");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_F7);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", false);
mapForAddItems.put("rIcon", 0);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "F8");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_F8);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", false);
mapForAddItems.put("rIcon", 0);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "F9");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_F9);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", false);
mapForAddItems.put("rIcon", 0);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "F10");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_F10);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", false);
mapForAddItems.put("rIcon", 0);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "F11");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_F11);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", false);
mapForAddItems.put("rIcon", 0);
listmapForSendKey.add(mapForAddItems);
mapForAddItems = new HashMap<>();
mapForAddItems.put("keyname", "F12");
mapForAddItems.put("keycode", KeyEvent.KEYCODE_F12);
mapForAddItems.put("useKeyEvent", true);
mapForAddItems.put("useIcon", false);
mapForAddItems.put("rIcon", 0);
listmapForSendKey.add(mapForAddItems);
}
}

View file

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal"
android:autoMirrored="true">
<path
android:fillColor="@android:color/white"
android:pathData="M313,520L537,744L480,800L160,480L480,160L537,216L313,440L800,440L800,520L313,520Z"/>
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M480,880L200,600L256,543L440,727L440,440L520,440L520,727L704,544L760,600L480,880ZM440,360L440,240L520,240L520,360L440,360ZM440,160L440,80L520,80L520,160L440,160Z"/>
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M440,160L440,647L216,423L160,480L480,800L800,480L744,423L520,647L520,160L440,160Z"/>
</vector>

View file

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal"
android:autoMirrored="true">
<path
android:fillColor="@android:color/white"
android:pathData="M647,520L160,520L160,440L647,440L423,216L480,160L800,480L480,800L423,744L647,520Z"/>
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M440,800L440,313L216,537L160,480L480,160L800,480L744,537L520,313L520,800L440,800Z"/>
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M440,233L256,416L200,360L480,80L760,360L704,417L520,233L520,520L440,520L440,233ZM440,720L440,600L520,600L520,720L440,720ZM440,880L440,800L520,800L520,880L440,880Z"/>
</vector>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/design_default_color_background" />
<corners android:topLeftRadius="7dp" android:bottomLeftRadius="7dp" android:topRightRadius="7dp" android:bottomRightRadius="7dp" />
</shape>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/design_default_color_background" />
<corners android:topLeftRadius="10dp" android:bottomLeftRadius="10dp" android:topRightRadius="25dp" android:bottomRightRadius="25dp" />
</shape>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/design_default_color_background" />
<corners android:topLeftRadius="25dp" android:bottomLeftRadius="25dp" android:topRightRadius="10dp" android:bottomRightRadius="10dp" />
</shape>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#20757575" />
<corners android:topLeftRadius="7dp" android:bottomLeftRadius="7dp" android:topRightRadius="7dp" android:bottomRightRadius="7dp" />
</shape>

View file

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal"
android:autoMirrored="true">
<path
android:fillColor="@android:color/white"
android:pathData="M456,640L560,536L664,640L720,584L616,480L720,376L664,320L560,424L456,320L400,376L504,480L400,584L456,640ZM360,800Q341,800 324,791.5Q307,783 296,768L80,480L296,192Q307,177 324,168.5Q341,160 360,160L800,160Q833,160 856.5,183.5Q880,207 880,240L880,720Q880,753 856.5,776.5Q833,800 800,800L360,800ZM180,480L360,720Q360,720 360,720Q360,720 360,720L800,720Q800,720 800,720Q800,720 800,720L800,240Q800,240 800,240Q800,240 800,240L360,240Q360,240 360,240Q360,240 360,240L180,480ZM580,480Q580,480 580,480Q580,480 580,480L580,480Q580,480 580,480Q580,480 580,480L580,480Q580,480 580,480Q580,480 580,480L580,480L580,480Q580,480 580,480Q580,480 580,480Z"/>
</vector>

View file

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal"
android:autoMirrored="true">
<path
android:fillColor="@android:color/white"
android:pathData="M760,840L480,560L386,654Q394,669 397,686Q400,703 400,720Q400,786 353,833Q306,880 240,880Q174,880 127,833Q80,786 80,720Q80,654 127,607Q174,560 240,560Q257,560 274,563Q291,566 306,574L400,480L306,386Q291,394 274,397Q257,400 240,400Q174,400 127,353Q80,306 80,240Q80,174 127,127Q174,80 240,80Q306,80 353,127Q400,174 400,240Q400,257 397,274Q394,291 386,306L880,800L880,840L760,840ZM600,440L520,360L760,120L880,120L880,160L600,440ZM240,320Q273,320 296.5,296.5Q320,273 320,240Q320,207 296.5,183.5Q273,160 240,160Q207,160 183.5,183.5Q160,207 160,240Q160,273 183.5,296.5Q207,320 240,320ZM480,500Q488,500 494,494Q500,488 500,480Q500,472 494,466Q488,460 480,460Q472,460 466,466Q460,472 460,480Q460,488 466,494Q472,500 480,500ZM240,800Q273,800 296.5,776.5Q320,753 320,720Q320,687 296.5,663.5Q273,640 240,640Q207,640 183.5,663.5Q160,687 160,720Q160,753 183.5,776.5Q207,800 240,800Z"/>
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M200,840Q167,840 143.5,816.5Q120,793 120,760L120,200Q120,167 143.5,143.5Q167,120 200,120L367,120Q378,85 410,62.5Q442,40 480,40Q520,40 551.5,62.5Q583,85 594,120L760,120Q793,120 816.5,143.5Q840,167 840,200L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM200,760L760,760Q760,760 760,760Q760,760 760,760L760,200Q760,200 760,200Q760,200 760,200L680,200L680,320L280,320L280,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760ZM480,200Q497,200 508.5,188.5Q520,177 520,160Q520,143 508.5,131.5Q497,120 480,120Q463,120 451.5,131.5Q440,143 440,160Q440,177 451.5,188.5Q463,200 480,200Z"/>
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M120,440L120,120L440,120L440,440L120,440ZM120,840L120,520L440,520L440,840L120,840ZM520,440L520,120L840,120L840,440L520,440ZM520,840L520,520L840,520L840,840L520,840ZM200,360L360,360L360,200L200,200L200,360ZM600,360L760,360L760,200L600,200L600,360ZM600,760L760,760L760,600L600,600L600,760ZM200,760L360,760L360,600L200,600L200,760ZM600,360L600,360L600,360L600,360ZM600,600L600,600L600,600L600,600ZM360,600L360,600L360,600L360,600ZM360,360L360,360L360,360L360,360Z"/>
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M440,640L440,400L320,400L320,320L640,320L640,400L520,400L520,640L440,640ZM40,920L40,680L120,680L120,280L40,280L40,40L280,40L280,120L680,120L680,40L920,40L920,280L840,280L840,680L920,680L920,920L680,920L680,840L280,840L280,920L40,920ZM280,760L680,760L680,680L760,680L760,280L680,280L680,200L280,200L280,280L200,280L200,680L280,680L280,760ZM120,200L200,200L200,120L120,120L120,200ZM760,200L840,200L840,120L760,120L760,200ZM760,840L840,840L840,760L760,760L760,840ZM120,840L200,840L200,760L120,760L120,840ZM200,200L200,200L200,200L200,200ZM760,200L760,200L760,200L760,200ZM760,760L760,760L760,760L760,760ZM200,760L200,760L200,760L200,760Z"/>
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M480,616L240,376L296,320L480,504L664,320L720,376L480,616Z"/>
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M240,720L240,640L720,640L720,720L240,720ZM480,224L720,464L664,520L480,336L296,520L240,464L480,224Z"/>
</vector>

View file

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal"
android:autoMirrored="true">
<path
android:fillColor="@android:color/white"
android:pathData="M360,720L120,480L360,240L416,296L272,440L760,440L760,280L840,280L840,520L272,520L416,664L360,720Z"/>
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M120,720L120,640L840,640L840,720L120,720ZM120,520L120,440L840,440L840,520L120,520ZM120,320L120,240L840,240L840,320L120,320Z"/>
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M80,600L80,520L280,520L280,600L80,600ZM80,440L80,360L840,360L840,440L80,440ZM360,600L360,520L560,520L560,600L360,600ZM640,600L640,520L840,520L840,600L640,600Z"/>
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M280,680L280,280L680,280L680,680L280,680ZM360,600L600,600L600,360L360,360L360,600ZM200,760L200,840Q167,840 143.5,816.5Q120,793 120,760L200,760ZM120,680L120,600L200,600L200,680L120,680ZM120,520L120,440L200,440L200,520L120,520ZM120,360L120,280L200,280L200,360L120,360ZM200,200L120,200Q120,167 143.5,143.5Q167,120 200,120L200,200ZM280,840L280,760L360,760L360,840L280,840ZM280,200L280,120L360,120L360,200L280,200ZM440,840L440,760L520,760L520,840L440,840ZM440,200L440,120L520,120L520,200L440,200ZM600,840L600,760L680,760L680,840L600,840ZM600,200L600,120L680,120L680,200L600,200ZM760,840L760,760L840,760Q840,793 816.5,816.5Q793,840 760,840ZM760,680L760,600L840,600L840,680L760,680ZM760,520L760,440L840,440L840,520L760,520ZM760,360L760,280L840,280L840,360L760,360ZM760,200L760,120Q793,120 816.5,143.5Q840,167 840,200L760,200Z"/>
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M280,840L80,640L280,440L337,496L233,600L840,600L840,680L233,680L337,784L280,840ZM680,520L623,464L727,360L120,360L120,280L727,280L623,176L680,120L880,320L680,520Z"/>
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M160,840L160,760L800,760L800,840L160,840ZM480,680L280,480L336,424L440,528L440,120L520,120L520,528L624,424L680,480L480,680Z"/>
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M160,200L160,120L800,120L800,200L160,200ZM440,840L440,432L336,536L280,480L480,280L680,480L624,536L520,432L520,840L440,840Z"/>
</vector>

View file

@ -20,17 +20,18 @@
android:layout_centerVertical="true"
android:orientation="vertical">
<android.androidVNC.VncCanvas
android:id="@+id/vnc_canvas"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:keepScreenOn="true" />
<android.androidVNC.VncCanvas
android:id="@+id/vnc_canvas"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:keepScreenOn="true" />
</RelativeLayout>
<include layout="@layout/controls_fragment" />
<include layout="@layout/send_key_dialog" />
</RelativeLayout>

View file

@ -203,19 +203,42 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent" />
<Button
android:id="@+id/tabBtn"
android:layout_width="wrap_content"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="15dp"
android:background="@drawable/controls_button1"
android:backgroundTint="?attr/colorPrimary"
android:clickable="true"
android:focusable="true"
android:text="TAB"
android:textColor="?attr/colorPrimary"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
android:orientation="horizontal"
android:gravity="center_vertical"
tools:ignore="MissingConstraints">
<Button
android:id="@+id/tabBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="15dp"
android:background="@drawable/controls_button1"
android:backgroundTint="?attr/colorPrimary"
android:clickable="true"
android:focusable="true"
android:text="TAB"
android:textColor="?attr/colorPrimary"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<ImageButton
android:id="@+id/ctrlaltdelBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/controls_button1"
android:backgroundTint="?attr/colorPrimary"
android:layout_margin="15dp"
android:src="@drawable/power_input_24px"
app:tint="?attr/colorPrimary"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:gravity="center_vertical"
android:id="@+id/all"
android:background="?android:attr/selectableItemBackground">
<ImageView
android:id="@+id/imageViewKey"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/round_keyboard_24"
android:paddingLeft="16sp"
android:paddingRight="16sp"
android:paddingTop="14sp"
android:paddingBottom="14sp"
app:tint="@android:color/black"/>
<TextView
android:id="@+id/textViewKeyName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:padding="16dp" />
</LinearLayout>

View file

@ -0,0 +1,131 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true"
android:gravity="bottom"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:id="@+id/sendkeylayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/backgroud_round_dialog"
android:layout_marginTop="8sp"
android:layout_marginLeft="16sp"
android:layout_marginRight="16sp"
android:layout_marginBottom="16sp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/sendkeylist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:listitem="@layout/layout_for_send_keys"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1"
android:background="@drawable/backgroud_round_edittext_50"
android:layout_marginTop="1sp"
android:layout_marginLeft="1sp"
android:animateLayoutChanges="true">
<EditText
android:id="@+id/sendtextEdittext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="Send text..."
android:textSize="20sp"
android:padding="6sp"
android:textColor="@android:color/black"
android:textColorHint="@android:color/black"
android:background="@android:color/transparent"
android:layout_weight="1"
android:imeOptions="actionSend"/>
<ImageButton
android:id="@+id/sendtextButton"
android:layout_width="57dp"
android:layout_height="wrap_content"
android:layout_margin="2sp"
android:background="@drawable/backgroud_round_dialog"
android:clickable="true"
android:focusable="true"
android:padding="10dp"
android:src="@drawable/arrow_upward_24px"
app:tint="@android:color/black" />
</LinearLayout>
<ImageButton
android:id="@+id/sendselectallkeyButton"
android:layout_width="57dp"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:padding="10dp"
android:src="@drawable/select_all_24px"
app:tint="@android:color/black" />
<ImageButton
android:id="@+id/sendcutButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:padding="10dp"
android:src="@drawable/content_cut_24px"
app:tint="@android:color/black" />
<ImageButton
android:id="@+id/sendcopykeyButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:padding="10dp"
android:src="@drawable/ic_copy"
app:tint="@android:color/black" />
<ImageButton
android:id="@+id/sendpastekeyButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:padding="10dp"
android:src="@drawable/content_paste_24px"
app:tint="@android:color/black" />
<ImageButton
android:id="@+id/senddelkeyButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:padding="10dp"
android:src="@drawable/delete_forever_24px"
app:tint="@android:color/black" />
<ImageButton
android:id="@+id/hidesendkeyButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:padding="10dp"
android:src="@drawable/keyboard_arrow_down_24px"
app:tint="@android:color/black" />
</LinearLayout>
</LinearLayout>
</LinearLayout>

View file

@ -3,7 +3,7 @@
<string name="app_name">Vectras VM</string>
<!--======================VECTRAS STRINGS====================-->
<string name="app_version" translatable="false">v2.9.5 (3dfx - Italian ice)</string>
<string name="app_version" translatable="false">v2.9.5 (3dfx - Jello)</string>
<string name="qemu_version" translatable="false">Stable</string>
<string name="str_home">Home</string>
<string name="str_logger">Logger</string>

View file

@ -1,7 +1,7 @@
{
"versionCode":"21",
"versionName":"v2.9.5-3dfx,v2.9.5-3dfx-almondcake,v2.9.5-3dfx-bread,v2.9.5-3dfx-churro,v2.9.5-3dfx-doughnut,v2.9.5-3dfx-empanada,v2.9.5-3dfx-flan,v2.9.5-3dfx-gugelhupf,v2.9.5-3dfx-hamentaschen,v2.9.5-3dfx-italianice",
"versionNameBeta":"v2.9.5-3dfx-italianice",
"versionNameBeta":"v2.9.5-3dfx-jello",
"size": "46 MB",
"url": "https://github.com/xoureldeen/Vectras-VM-Android/releases/v2.9.5",
"Message": "<h2>v2.9.5-3dfx</h2><ul><li>Bring back 3dfx support.</li><li>Enhance app execution.</li><li>Added some linux programs in x11 display.</li><li>Added alpine linux (x11).</li><li>Russian language by <a href=\"https://github.com/OFGING\" target=\"_blank\">@OFGING</a></li></ul><br><br>New updates are live!",