mirror of
https://github.com/xoureldeen/Vectras-VM-Android.git
synced 2026-05-02 00:00:25 +00:00
Jello
This commit is contained in:
parent
cb12c18f13
commit
2fb3d37909
36 changed files with 1147 additions and 57 deletions
8
.idea/deploymentTargetSelector.xml
generated
8
.idea/deploymentTargetSelector.xml
generated
|
|
@ -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" />
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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++) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
11
app/src/main/res/drawable/arrow_back_24px.xml
Normal file
11
app/src/main/res/drawable/arrow_back_24px.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/arrow_cool_down_24px.xml
Normal file
10
app/src/main/res/drawable/arrow_cool_down_24px.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/arrow_downward_24px.xml
Normal file
10
app/src/main/res/drawable/arrow_downward_24px.xml
Normal 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>
|
||||
11
app/src/main/res/drawable/arrow_forward_24px.xml
Normal file
11
app/src/main/res/drawable/arrow_forward_24px.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/arrow_upward_24px.xml
Normal file
10
app/src/main/res/drawable/arrow_upward_24px.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/arrow_warm_up_24px.xml
Normal file
10
app/src/main/res/drawable/arrow_warm_up_24px.xml
Normal 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>
|
||||
5
app/src/main/res/drawable/backgroud_round_dialog.xml
Normal file
5
app/src/main/res/drawable/backgroud_round_dialog.xml
Normal 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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
11
app/src/main/res/drawable/backspace_24px.xml
Normal file
11
app/src/main/res/drawable/backspace_24px.xml
Normal 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>
|
||||
11
app/src/main/res/drawable/content_cut_24px.xml
Normal file
11
app/src/main/res/drawable/content_cut_24px.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/content_paste_24px.xml
Normal file
10
app/src/main/res/drawable/content_paste_24px.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/grid_view_24px.xml
Normal file
10
app/src/main/res/drawable/grid_view_24px.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/insert_text_24px.xml
Normal file
10
app/src/main/res/drawable/insert_text_24px.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/keyboard_arrow_down_24px.xml
Normal file
10
app/src/main/res/drawable/keyboard_arrow_down_24px.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/keyboard_capslock_24px.xml
Normal file
10
app/src/main/res/drawable/keyboard_capslock_24px.xml
Normal 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>
|
||||
11
app/src/main/res/drawable/keyboard_return_24px.xml
Normal file
11
app/src/main/res/drawable/keyboard_return_24px.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/menu_24px.xml
Normal file
10
app/src/main/res/drawable/menu_24px.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/power_input_24px.xml
Normal file
10
app/src/main/res/drawable/power_input_24px.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/select_all_24px.xml
Normal file
10
app/src/main/res/drawable/select_all_24px.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/sync_alt_24px.xml
Normal file
10
app/src/main/res/drawable/sync_alt_24px.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/vertical_align_bottom_24px.xml
Normal file
10
app/src/main/res/drawable/vertical_align_bottom_24px.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/vertical_align_top_24px.xml
Normal file
10
app/src/main/res/drawable/vertical_align_top_24px.xml
Normal 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>
|
||||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
28
app/src/main/res/layout/layout_for_send_keys.xml
Normal file
28
app/src/main/res/layout/layout_for_send_keys.xml
Normal 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>
|
||||
131
app/src/main/res/layout/send_key_dialog.xml
Normal file
131
app/src/main/res/layout/send_key_dialog.xml
Normal 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>
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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!",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue