From 5e39a13a3289d6600e98d4a638e6072bf864a0af Mon Sep 17 00:00:00 2001
From: wisest_wizard <12suhangp34@gmail.com>
Date: Fri, 27 Aug 2021 07:57:57 +0530
Subject: [PATCH 01/14] Add feature: Customizable Extra-Keys
This will make use of `termux-shared` jitpack library
---
app/build.gradle | 4 +-
.../java/com/termux/x11/MainActivity.java | 26 ++-
.../com/termux/x11/TerminalExtraKeys.java | 149 ++++++++++++++++++
.../termux/x11/TermuxAppSharedProperties.java | 89 +++++++++++
app/src/main/res/layout/main_activity.xml | 12 +-
build.gradle | 6 +-
6 files changed, 263 insertions(+), 23 deletions(-)
create mode 100644 app/src/main/java/com/termux/x11/TerminalExtraKeys.java
create mode 100644 app/src/main/java/com/termux/x11/TermuxAppSharedProperties.java
diff --git a/app/build.gradle b/app/build.gradle
index 9bc38471b..5ea069b31 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,7 +1,7 @@
apply plugin: 'com.android.application'
android {
- compileSdkVersion 28
+ compileSdkVersion 30
defaultConfig {
applicationId "com.termux.x11"
minSdkVersion 24
@@ -59,4 +59,6 @@ dependencies {
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'androidx.annotation:annotation:1.3.0'
implementation 'androidx.drawerlayout:drawerlayout:1.1.1'
+ implementation 'com.termux.termux-app:termux-shared:master-SNAPSHOT'
+ implementation "com.google.guava:guava:24.1-jre"
}
diff --git a/app/src/main/java/com/termux/x11/MainActivity.java b/app/src/main/java/com/termux/x11/MainActivity.java
index 46ed1b601..7cd5042e4 100644
--- a/app/src/main/java/com/termux/x11/MainActivity.java
+++ b/app/src/main/java/com/termux/x11/MainActivity.java
@@ -18,27 +18,23 @@
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.FrameLayout;
+import com.termux.shared.terminal.io.extrakeys.ExtraKeysView;
+import com.termux.x11.TermuxAppSharedProperties;
+import com.termux.x11.TerminalExtraKeys;
public class MainActivity extends AppCompatActivity {
- private static int[] keys = {
- KeyEvent.KEYCODE_ESCAPE,
- KeyEvent.KEYCODE_TAB,
- KeyEvent.KEYCODE_CTRL_LEFT,
- KeyEvent.KEYCODE_ALT_LEFT,
- KeyEvent.KEYCODE_DPAD_UP,
- KeyEvent.KEYCODE_DPAD_DOWN,
- KeyEvent.KEYCODE_DPAD_LEFT,
- KeyEvent.KEYCODE_DPAD_RIGHT,
- };
-
- AdditionalKeyboardView kbd;
+ private TermuxAppSharedProperties mProperties;
+
+ ExtraKeysView kbd;
FrameLayout frm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- LorieService.setMainActivity(this);
+ mProperties = new TermuxAppSharedProperties(this);
+
+ LorieService.setMainActivity(this);
LorieService.start(LorieService.ACTION_START_FROM_ACTIVITY);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN|
@@ -51,6 +47,8 @@ protected void onCreate(Bundle savedInstanceState) {
kbd = findViewById(R.id.additionalKbd);
frm = findViewById(R.id.frame);
+ kbd.setExtraKeysViewClient(new TerminalExtraKeys(LorieService.getOnKeyListener(), this));
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
getWindow().
getDecorView().
@@ -83,7 +81,7 @@ public void onLorieServiceStart(LorieService instance) {
SurfaceView lorieView = findViewById(R.id.lorieView);
instance.setListeners(lorieView);
- kbd.reload(keys, lorieView, LorieService.getOnKeyListener());
+ kbd.reload(mProperties.getExtraKeysInfo());
}
@Override
diff --git a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
new file mode 100644
index 000000000..13727ce5b
--- /dev/null
+++ b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
@@ -0,0 +1,149 @@
+package com.termux.x11;
+
+import android.view.KeyEvent;
+import android.view.View;
+import android.widget.Button;
+import android.view.SurfaceView;
+import android.annotation.SuppressLint;
+import android.view.Gravity;
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Context;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.view.KeyEvent;
+import android.view.KeyCharacterMap;
+import android.text.TextUtils;
+import android.app.ActivityManager;
+
+import java.lang.Character;
+
+import androidx.annotation.NonNull;
+import androidx.drawerlayout.widget.DrawerLayout;
+
+import com.termux.shared.terminal.io.extrakeys.ExtraKeyButton;
+import com.termux.shared.terminal.io.extrakeys.ExtraKeysView;
+import com.termux.shared.terminal.io.extrakeys.SpecialButton;
+
+import static com.termux.shared.terminal.io.extrakeys.ExtraKeysConstants.PRIMARY_KEY_CODES_FOR_STRINGS;
+
+public class TerminalExtraKeys implements ExtraKeysView.IExtraKeysView {
+
+ private final View.OnKeyListener mEventListener;
+ private final MainActivity act;
+
+ public TerminalExtraKeys(@NonNull View.OnKeyListener eventlistener, MainActivity mact) {
+ mEventListener = eventlistener;
+ act = mact;
+ }
+
+ private final KeyCharacterMap mVirtualKeyboardKeyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
+ static final String ACTION_START_PREFERENCES_ACTIVITY = "com.termux.x11.start_preferences_activity";
+
+ @Override
+ public void onExtraKeyButtonClick(View view, ExtraKeyButton buttonInfo, Button button) {
+ if (buttonInfo.isMacro()) {
+ String[] keys = buttonInfo.getKey().split(" ");
+ boolean ctrlDown = false;
+ boolean altDown = false;
+ boolean shiftDown = false;
+ boolean fnDown = false;
+ for (String key : keys) {
+ if (SpecialButton.CTRL.getKey().equals(key)) {
+ ctrlDown = true;
+ } else if (SpecialButton.ALT.getKey().equals(key)) {
+ altDown = true;
+ } else if (SpecialButton.SHIFT.getKey().equals(key)) {
+ shiftDown = true;
+ } else if (SpecialButton.FN.getKey().equals(key)) {
+ fnDown = true;
+ } else {
+ onTerminalExtraKeyButtonClick(view, key, ctrlDown, altDown, shiftDown, fnDown);
+ ctrlDown = false;
+ altDown = false;
+ shiftDown = false;
+ fnDown = false;
+ }
+ }
+ } else {
+ onLorieExtraKeyButtonClick(view, buttonInfo.getKey(), false, false, false, false);
+ }
+ }
+
+ protected void onTerminalExtraKeyButtonClick(View view, String key, boolean ctrlDown, boolean altDown, boolean shiftDown, boolean fnDown) {
+ SurfaceView lorieView = act.findViewById(R.id.lorieView);
+ if (PRIMARY_KEY_CODES_FOR_STRINGS.containsKey(key)) {
+ Integer keyCode = PRIMARY_KEY_CODES_FOR_STRINGS.get(key);
+ if (keyCode == null) return;
+ int metaState = 0;
+ if (ctrlDown) metaState |= KeyEvent.META_CTRL_ON | KeyEvent.META_CTRL_LEFT_ON;
+ if (altDown) metaState |= KeyEvent.META_ALT_ON | KeyEvent.META_ALT_LEFT_ON;
+ if (shiftDown) metaState |= KeyEvent.META_SHIFT_ON | KeyEvent.META_SHIFT_LEFT_ON;
+ if (fnDown) metaState |= KeyEvent.META_FUNCTION_ON;
+
+ KeyEvent keyEvent = new KeyEvent(0, 0, KeyEvent.ACTION_UP, keyCode, 0, metaState);
+ mEventListener.onKey(lorieView, keyCode, keyEvent);
+
+ } else {
+ // not a control char
+ key.codePoints().forEach(codePoint -> {
+ char ch[];
+ ch = Character.toChars(codePoint);
+ KeyEvent[] events = mVirtualKeyboardKeyCharacterMap.getEvents(ch);
+ if (events != null) {
+ for (KeyEvent event : events) {
+ Integer keyCode = event.getKeyCode();
+ mEventListener.onKey(lorieView, keyCode, event);
+ }
+ }
+ });
+ }
+ }
+
+ @Override
+ public boolean performExtraKeyButtonHapticFeedback(View view, ExtraKeyButton buttonInfo, Button button) {
+ return false;
+ }
+
+ public void paste(CharSequence input) {
+ SurfaceView lorieView = act.findViewById(R.id.lorieView);
+ KeyEvent[] events = mVirtualKeyboardKeyCharacterMap.getEvents(input.toString().toCharArray());
+ if (events != null) {
+ for (KeyEvent event : events) {
+ Integer keyCode = event.getKeyCode();
+ mEventListener.onKey(lorieView, keyCode, event);
+ }
+ }
+ }
+
+ @SuppressLint("RtlHardcoded")
+ public void onLorieExtraKeyButtonClick(View view, String key, boolean ctrlDown, boolean altDown, boolean shiftDown, boolean fnDown) {
+ if ("KEYBOARD".equals(key)) {
+
+ if (act.kbd!=null) {
+ act.kbd.requestFocus();
+ KeyboardUtils.toggleKeyboardVisibility(act);
+ }
+
+ } else if ("DRAWER".equals(key)) {
+ Intent preferencesIntent = new Intent(act, LoriePreferences.class);
+ preferencesIntent.setAction(ACTION_START_PREFERENCES_ACTIVITY);
+
+ PendingIntent pendingPreferencesIntent = PendingIntent.getActivity(act, 0, preferencesIntent, 0);
+
+ } else if ("PASTE".equals(key)) {
+
+ ClipboardManager clipboard = (ClipboardManager) act.getSystemService(Context.CLIPBOARD_SERVICE);
+ ClipData clipData = clipboard.getPrimaryClip();
+
+ if (clipData != null) {
+ CharSequence pasted = clipData.getItemAt(0).coerceToText(act);
+ if (!TextUtils.isEmpty(pasted)) paste(pasted);
+ }
+
+ } else {
+ onTerminalExtraKeyButtonClick(view, key, ctrlDown, altDown, shiftDown, fnDown);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/termux/x11/TermuxAppSharedProperties.java b/app/src/main/java/com/termux/x11/TermuxAppSharedProperties.java
new file mode 100644
index 000000000..53be82860
--- /dev/null
+++ b/app/src/main/java/com/termux/x11/TermuxAppSharedProperties.java
@@ -0,0 +1,89 @@
+package com.termux.x11;
+
+import android.content.Context;
+
+import com.termux.shared.terminal.io.extrakeys.ExtraKeysConstants;
+import com.termux.shared.terminal.io.extrakeys.ExtraKeysConstants.EXTRA_KEY_DISPLAY_MAPS;
+import com.termux.shared.terminal.io.extrakeys.ExtraKeysInfo;
+import com.termux.shared.logger.Logger;
+import com.termux.shared.settings.properties.TermuxPropertyConstants;
+import com.termux.shared.settings.properties.TermuxSharedProperties;
+
+import org.json.JSONException;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import androidx.annotation.NonNull;
+
+public class TermuxAppSharedProperties extends TermuxSharedProperties {
+
+ private ExtraKeysInfo mExtraKeysInfo;
+
+ private static final String LOG_TAG = "TermuxAppSharedProperties";
+
+ public TermuxAppSharedProperties(@NonNull Context context) {
+ super(context);
+ }
+
+ /**
+ * Reload the termux properties from disk into an in-memory cache.
+ */
+ @Override
+ public void loadTermuxPropertiesFromDisk() {
+ super.loadTermuxPropertiesFromDisk();
+
+ setExtraKeys();
+ }
+
+ /**
+ * Set the terminal extra keys.
+ */
+ private void setExtraKeys() {
+ mExtraKeysInfo = null;
+
+ try {
+ // The mMap stores the extra key and style string values while loading properties
+ // Check {@link #getExtraKeysInternalPropertyValueFromValue(String)} and
+ // {@link #getExtraKeysStyleInternalPropertyValueFromValue(String)}
+ String extrakeys = (String) getInternalPropertyValue(TermuxPropertyConstants.KEY_EXTRA_KEYS, true);
+ String extraKeysStyle = (String) getInternalPropertyValue(TermuxPropertyConstants.KEY_EXTRA_KEYS_STYLE, true);
+
+ ExtraKeysConstants.ExtraKeyDisplayMap extraKeyDisplayMap = ExtraKeysInfo.getCharDisplayMapForStyle(extraKeysStyle);
+ if (EXTRA_KEY_DISPLAY_MAPS.DEFAULT_CHAR_DISPLAY.equals(extraKeyDisplayMap) && !TermuxPropertyConstants.DEFAULT_IVALUE_EXTRA_KEYS_STYLE.equals(extraKeysStyle)) {
+ Logger.logError(TermuxSharedProperties.LOG_TAG, "The style \"" + extraKeysStyle + "\" for the key \"" + TermuxPropertyConstants.KEY_EXTRA_KEYS_STYLE + "\" is invalid. Using default style instead.");
+ extraKeysStyle = TermuxPropertyConstants.DEFAULT_IVALUE_EXTRA_KEYS_STYLE;
+ }
+
+ mExtraKeysInfo = new ExtraKeysInfo(extrakeys, extraKeysStyle, ExtraKeysConstants.CONTROL_CHARS_ALIASES);
+ } catch (JSONException e) {
+ Logger.showToast(mContext, "Could not load and set the \"" + TermuxPropertyConstants.KEY_EXTRA_KEYS + "\" property from the properties file: " + e.toString(), true);
+ Logger.logStackTraceWithMessage(LOG_TAG, "Could not load and set the \"" + TermuxPropertyConstants.KEY_EXTRA_KEYS + "\" property from the properties file: ", e);
+
+ try {
+ mExtraKeysInfo = new ExtraKeysInfo(TermuxPropertyConstants.DEFAULT_IVALUE_EXTRA_KEYS, TermuxPropertyConstants.DEFAULT_IVALUE_EXTRA_KEYS_STYLE, ExtraKeysConstants.CONTROL_CHARS_ALIASES);
+ } catch (JSONException e2) {
+ Logger.showToast(mContext, "Can't create default extra keys",true);
+ Logger.logStackTraceWithMessage(LOG_TAG, "Could create default extra keys: ", e);
+ mExtraKeysInfo = null;
+ }
+ }
+ }
+
+
+
+ public ExtraKeysInfo getExtraKeysInfo() {
+ return mExtraKeysInfo;
+ }
+
+
+
+ /**
+ * Load the {@link TermuxPropertyConstants#KEY_TERMINAL_TRANSCRIPT_ROWS} value from termux properties file on disk.
+ */
+ public static int getTerminalTranscriptRows(Context context) {
+ return (int) TermuxSharedProperties.getInternalPropertyValue(context, TermuxPropertyConstants.KEY_TERMINAL_TRANSCRIPT_ROWS);
+ }
+
+}
diff --git a/app/src/main/res/layout/main_activity.xml b/app/src/main/res/layout/main_activity.xml
index 029994187..8ae89d373 100644
--- a/app/src/main/res/layout/main_activity.xml
+++ b/app/src/main/res/layout/main_activity.xml
@@ -15,15 +15,13 @@
-
-
-
diff --git a/build.gradle b/build.gradle
index 0663994ee..a829c2a77 100644
--- a/build.gradle
+++ b/build.gradle
@@ -18,7 +18,11 @@ allprojects {
repositories {
google()
jcenter()
-
+
+ maven {
+ name 'jitpack'
+ url 'https://jitpack.io'
+ }
}
}
From 70a4007ba27df3ca2a3eb1ca02f81598ce451109 Mon Sep 17 00:00:00 2001
From: wisest_wizard <12suhangp34@gmail.com>
Date: Mon, 30 Aug 2021 10:52:16 +0530
Subject: [PATCH 02/14] Remove old remnants of AdditionalKeyboardview
---
.../termux/x11/AdditionalKeyboardView.java | 202 ------------------
.../java/com/termux/x11/LorieService.java | 20 +-
.../java/com/termux/x11/MainActivity.java | 97 +++++++--
.../com/termux/x11/TerminalExtraKeys.java | 68 ++++--
.../termux/x11/TerminalToolbarViewPager.java | 105 +++++++++
.../termux/x11/TermuxAppSharedProperties.java | 7 +-
app/src/main/res/layout/main_activity.xml | 20 +-
.../view_terminal_toolbar_extra_keys.xml | 8 +
.../view_terminal_toolbar_text_input.xml | 16 ++
app/src/main/res/xml/preferences.xml | 8 +-
10 files changed, 286 insertions(+), 265 deletions(-)
delete mode 100644 app/src/main/java/com/termux/x11/AdditionalKeyboardView.java
create mode 100644 app/src/main/java/com/termux/x11/TerminalToolbarViewPager.java
create mode 100644 app/src/main/res/layout/view_terminal_toolbar_extra_keys.xml
create mode 100644 app/src/main/res/layout/view_terminal_toolbar_text_input.xml
diff --git a/app/src/main/java/com/termux/x11/AdditionalKeyboardView.java b/app/src/main/java/com/termux/x11/AdditionalKeyboardView.java
deleted file mode 100644
index 5436afa54..000000000
--- a/app/src/main/java/com/termux/x11/AdditionalKeyboardView.java
+++ /dev/null
@@ -1,202 +0,0 @@
-package com.termux.x11;
-
-import android.annotation.SuppressLint;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.graphics.Rect;
-import android.preference.PreferenceManager;
-import androidx.appcompat.widget.AppCompatTextView;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.Gravity;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewTreeObserver;
-import android.widget.HorizontalScrollView;
-import android.widget.FrameLayout;
-import android.widget.LinearLayout;
-import android.view.SurfaceView;
-import java.util.HashMap;
-import java.util.Map;
-
-@SuppressWarnings({"unused", "FieldCanBeLocal"})
-public class AdditionalKeyboardView extends HorizontalScrollView implements ViewTreeObserver.OnGlobalLayoutListener {
- private final static int KEYCODE_BASE = 300;
- public final static int PREFERENCES_KEY = KEYCODE_BASE + 1;
- public final static int KEY_HEIGHT_DP = 35;
-
- private boolean softKbdVisible;
- private Context ctx;
- private View targetView = null;
- private View.OnKeyListener targetListener = null;
- private int density;
- private LinearLayout root;
- public AdditionalKeyboardView(Context context) {
- super(context);
- init(context);
- }
- public AdditionalKeyboardView(Context context, AttributeSet attrs) {
- super(context, attrs);
- init(context);
- }
-
- @SuppressLint("SetTextI18n")
- private void init(Context context) {
- ctx = context;
- density = (int) context.getResources().getDisplayMetrics().density;
-
- getViewTreeObserver().addOnGlobalLayoutListener(this);
-
- setBackgroundColor(0xFF000000);
- LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, KEY_HEIGHT_DP * density);
- root = new LinearLayout(context);
- root.setLayoutParams(lp);
- root.setOrientation(LinearLayout.HORIZONTAL);
- addView(root);
- }
-
- @Override
- public void onGlobalLayout() {
- SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(ctx);
- if (!preferences.getBoolean("showAdditionalKbd", true)) {
- if (getVisibility() != View.GONE)
- setVisibility(View.GONE);
- return;
- } else {
-
- int visibility = View.VISIBLE;
- softKbdVisible = (visibility == View.VISIBLE);
-
- if (!softKbdVisible)
- setVisibility(visibility);
- }
- }
-
- public void reload(int[] keys, View TargetView, View.OnKeyListener TargetListener) {
- targetView = TargetView;
- targetListener = TargetListener;
- root.removeAllViews();
- LayoutParams lp = new LayoutParams(60 * density,LayoutParams.MATCH_PARENT);
- lp.setMargins(density*3, 0, density*3, 0);
- for (int keyCode : keys) {
- if (keyCode != KeyEvent.KEYCODE_UNKNOWN) {
- Key key = new Key(ctx, keyCode);
- root.addView(key, lp);
- }
- }
- }
-
- private class Key extends AppCompatTextView implements View.OnClickListener, View.OnTouchListener {
- private static final int TEXT_COLOR = 0xFFFFFFFF;
- private static final int BUTTON_COLOR = 0x0000FFFF;
- private static final int INTERESTING_COLOR = 0xFF80DEEA;
- private static final int BUTTON_PRESSED_COLOR = 0x7FFFFFFF;
- /**
- * Keys are displayed in a natural looking way, like "▶" for "RIGHT"
- */
- final Map keyCodesForString = new HashMap() {{
- put(KeyEvent.KEYCODE_ESCAPE, "ESC");
- put(KeyEvent.KEYCODE_MOVE_HOME, "HOME");
- put(KeyEvent.KEYCODE_MOVE_END, "END");
- put(KeyEvent.KEYCODE_PAGE_UP, "PGUP");
- put(KeyEvent.KEYCODE_PAGE_DOWN, "PGDN");
- put(KeyEvent.KEYCODE_CTRL_LEFT, "CTRL");
- put(KeyEvent.KEYCODE_ALT_LEFT, "ALT");
- put(KeyEvent.KEYCODE_INSERT, "INS");
- put(KeyEvent.KEYCODE_FORWARD_DEL, "⌦"); // U+2326 ⌦ ERASE TO THE RIGHT not well known but easy to understand
- put(KeyEvent.KEYCODE_DEL, "⌫"); // U+232B ⌫ ERASE TO THE LEFT sometimes seen and easy to understand
- put(KeyEvent.KEYCODE_DPAD_UP, "▲"); // U+25B2 ▲ BLACK UP-POINTING TRIANGLE
- put(KeyEvent.KEYCODE_DPAD_LEFT, "◀"); // U+25C0 ◀ BLACK LEFT-POINTING TRIANGLE
- put(KeyEvent.KEYCODE_DPAD_RIGHT, "▶"); // U+25B6 ▶ BLACK RIGHT-POINTING TRIANGLE
- put(KeyEvent.KEYCODE_DPAD_DOWN, "▼"); // U+25BC ▼ BLACK DOWN-POINTING TRIANGLE
- put(KeyEvent.KEYCODE_ENTER, "↲"); // U+21B2 ↲ DOWNWARDS ARROW WITH TIP LEFTWARDS
- put(KeyEvent.KEYCODE_TAB, "↹"); // U+21B9 ↹ LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
- put(KeyEvent.KEYCODE_MINUS, "―"); // U+2015 ― HORIZONTAL BAR
- put(-1, "⚙"); // U+2699 ⚙ GEAR
- }};
-
- void sendKey(int keyCode, boolean down) {
- if (targetListener == null || targetView == null) {
- Log.e("AdditionalKeyboardView", "target view or target listener is unset");
- return;
- }
-
- targetListener.onKey(targetView, keyCode, new KeyEvent((down?KeyEvent.ACTION_DOWN:KeyEvent.ACTION_UP), keyCode));
- }
-
- boolean toggle;
- boolean checked = false;
- int kc;
- public Key(Context context, int keyCode) {
- super(context);
- kc = keyCode;
- switch (keyCode) {
- case KeyEvent.KEYCODE_CTRL_LEFT:
- case KeyEvent.KEYCODE_CTRL_RIGHT:
- case KeyEvent.KEYCODE_ALT_LEFT:
- case KeyEvent.KEYCODE_ALT_RIGHT:
- case KeyEvent.KEYCODE_SHIFT_LEFT:
- case KeyEvent.KEYCODE_SHIFT_RIGHT:
- toggle = true;
- break;
- default:
- toggle = false;
- }
-
-
- setTextColor(TEXT_COLOR);
- setBackgroundColor(BUTTON_COLOR);
- String text = keyCodesForString.get(keyCode);
- float textWidth = getPaint().measureText(text);
- setWidth((int) (textWidth + 20 * density));
- setText(text);
- setGravity(Gravity.CENTER);
- setOnClickListener(this);
- setOnTouchListener(this);
- }
-
- @Override
- public void onClick(View v) {
- if (toggle) {
- checked = !checked;
- if (checked) {
- setTextColor(INTERESTING_COLOR);
- setBackgroundColor(BUTTON_PRESSED_COLOR);
- sendKey(kc, true);
- } else {
- setTextColor(TEXT_COLOR);
- setBackgroundColor(BUTTON_COLOR);
- sendKey(kc, false);
- }
- }
- }
-
- private Rect rect;
- @Override
- public boolean onTouch(View v, MotionEvent e) {
- switch(e.getAction()) {
- case MotionEvent.ACTION_BUTTON_PRESS:
- case MotionEvent.ACTION_POINTER_DOWN:
- case MotionEvent.ACTION_DOWN:
- setTextColor(INTERESTING_COLOR);
- setBackgroundColor(BUTTON_PRESSED_COLOR);
- if (!toggle) sendKey(kc, true);
- break;
- case MotionEvent.ACTION_CANCEL:
- case MotionEvent.ACTION_BUTTON_RELEASE:
- case MotionEvent.ACTION_POINTER_UP:
- case MotionEvent.ACTION_UP:
- if (!toggle) {
- setTextColor(TEXT_COLOR);
- setBackgroundColor(BUTTON_COLOR);
- sendKey(kc, false);
- }
- break;
- default:
- break;
- }
- return false;
- }
- }
-}
diff --git a/app/src/main/java/com/termux/x11/LorieService.java b/app/src/main/java/com/termux/x11/LorieService.java
index ff0a9b25e..2c64ff41f 100644
--- a/app/src/main/java/com/termux/x11/LorieService.java
+++ b/app/src/main/java/com/termux/x11/LorieService.java
@@ -220,7 +220,6 @@ public int onStartCommand(Intent intent, int flags, int startId) {
}
onPreferencesChanged();
-
return START_REDELIVER_INTENT;
}
@@ -399,7 +398,7 @@ public boolean onKey(View v, int keyCode, KeyEvent e) {
svc.pointerButton(TouchParser.BTN_RIGHT, (e.getAction() == KeyEvent.ACTION_DOWN) ? TouchParser.ACTION_DOWN : TouchParser.ACTION_UP);
rightPressed = (e.getAction() == KeyEvent.ACTION_DOWN);
} else if (e.getAction() == KeyEvent.ACTION_UP) {
- if (act.kbd!=null) act.kbd.requestFocus();
+ if (act.getTerminalToolbarViewPager()!=null) act.getTerminalToolbarViewPager().requestFocus();
KeyboardUtils.toggleKeyboardVisibility(act);
}
return true;
@@ -505,28 +504,28 @@ public static void unzip(InputStream zipStream, File targetDirectory) throws IOE
private void windowChanged(Surface s, int w, int h, int pw, int ph) {windowChanged(compositor, s, w, h, pw, ph);}
private native void windowChanged(long compositor, Surface surface, int width, int height, int mmWidth, int mmHeight);
-
+
private void touchDown(int id, float x, float y) { touchDown(compositor, id, (int) x, (int) y); }
private native void touchDown(long compositor, int id, int x, int y);
-
+
private void touchMotion(int id, float x, float y) { touchMotion(compositor, id, (int) x, (int) y); }
private native void touchMotion(long compositor, int id, int x, int y);
-
+
private void touchUp(int id) { touchUp(compositor, id); }
private native void touchUp(long compositor, int id);
-
+
private void touchFrame() { touchFrame(compositor); }
private native void touchFrame(long compositor);
-
+
private void pointerMotion(float x, float y) { pointerMotion(compositor, (int) x, (int) y); }
private native void pointerMotion(long compositor, int x, int y);
-
+
private void pointerScroll(int axis, float value) { pointerScroll(compositor, axis, value); }
private native void pointerScroll(long compositor, int axis, float value);
-
+
private void pointerButton(int button, int type) { pointerButton(compositor, button, type); }
private native void pointerButton(long compositor, int button, int type);
-
+
private void keyboardKey(int key, int type, int shift, String characters) {keyboardKey(compositor, key, type, shift, characters);}
private native void keyboardKey(long compositor, int key, int type, int shift, String characters);
@@ -534,7 +533,6 @@ public static void unzip(InputStream zipStream, File targetDirectory) throws IOE
private native void passWaylandFD(long compositor, int fd);
private native long createLorieThread();
-
private native void terminate(long compositor);
public static native void startLogcatForFd(int fd);
diff --git a/app/src/main/java/com/termux/x11/MainActivity.java b/app/src/main/java/com/termux/x11/MainActivity.java
index 7cd5042e4..23ee80744 100644
--- a/app/src/main/java/com/termux/x11/MainActivity.java
+++ b/app/src/main/java/com/termux/x11/MainActivity.java
@@ -4,12 +4,15 @@
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
-import android.os.Build;
import android.preference.PreferenceManager;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
+import androidx.viewpager.widget.ViewPager;
+
import android.os.Bundle;
+import android.os.Build;
+
import android.view.KeyEvent;
import android.view.PointerIcon;
import android.view.SurfaceView;
@@ -17,18 +20,28 @@
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
+
+import android.view.ViewGroup;
+import android.view.LayoutInflater;
+
+import android.widget.Toast;
import android.widget.FrameLayout;
+
import com.termux.shared.terminal.io.extrakeys.ExtraKeysView;
+
import com.termux.x11.TermuxAppSharedProperties;
import com.termux.x11.TerminalExtraKeys;
+import com.termux.x11.TerminalToolbarViewPager;
public class MainActivity extends AppCompatActivity {
private TermuxAppSharedProperties mProperties;
+ private int mTerminalToolbarDefaultHeight;
- ExtraKeysView kbd;
+ ExtraKeysView mExtraKeysView;
FrameLayout frm;
@Override
+
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -44,16 +57,15 @@ protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main_activity);
- kbd = findViewById(R.id.additionalKbd);
frm = findViewById(R.id.frame);
- kbd.setExtraKeysViewClient(new TerminalExtraKeys(LorieService.getOnKeyListener(), this));
+ setTerminalToolbarView();
+ toggleTerminalToolbar();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
getWindow().
getDecorView().
setPointerIcon(PointerIcon.getSystemIcon(this, PointerIcon.TYPE_NULL));
-
Intent i = getIntent();
if (i != null && i.getStringExtra(LorieService.LAUNCHED_BY_COMPATION) == null) {
LorieService.sendRunCommand(this);
@@ -65,7 +77,7 @@ protected void onCreate(Bundle savedInstanceState) {
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
- if (newConfig.orientation != orientation && kbd != null && kbd.getVisibility() == View.VISIBLE) {
+ if (newConfig.orientation != orientation && this.getTerminalToolbarViewPager() != null && this.getTerminalToolbarViewPager().getVisibility() == View.VISIBLE) {
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
View view = getCurrentFocus();
if (view == null) {
@@ -77,11 +89,65 @@ public void onConfigurationChanged(@NonNull Configuration newConfig) {
orientation = newConfig.orientation;
}
+ public TermuxAppSharedProperties getProperties() {
+ return mProperties;
+ }
+
+ public ExtraKeysView getExtraKeysView() {
+ return mExtraKeysView;
+ }
+
+ public void setExtraKeysView(ExtraKeysView extraKeysView) {
+ mExtraKeysView = extraKeysView;
+ }
+
public void onLorieServiceStart(LorieService instance) {
+ instance.setListeners(this.getlorieView());
+ SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
+ }
+
+ public SurfaceView getlorieView() {
SurfaceView lorieView = findViewById(R.id.lorieView);
+ return lorieView;
+ }
+
+ public ViewPager getTerminalToolbarViewPager() {
+ return (ViewPager) findViewById(R.id.terminal_toolbar_view_pager);
+ }
+
+ private void setTerminalToolbarView() {
+ final ViewPager terminalToolbarViewPager = getTerminalToolbarViewPager();
+
+ ViewGroup.LayoutParams layoutParams = terminalToolbarViewPager.getLayoutParams();
+ mTerminalToolbarDefaultHeight = layoutParams.height;
+
+ setLorieToolbarHeight();
+
+ terminalToolbarViewPager.setAdapter(new TerminalToolbarViewPager.PageAdapter(this, LorieService.getOnKeyListener()));
+ terminalToolbarViewPager.addOnPageChangeListener(new TerminalToolbarViewPager.OnPageChangeListener(this, terminalToolbarViewPager));
+ }
+
+ private void setLorieToolbarHeight() {
+ final ViewPager terminalToolbarViewPager = getTerminalToolbarViewPager();
+ if (terminalToolbarViewPager == null) return;
+
+ ViewGroup.LayoutParams layoutParams = terminalToolbarViewPager.getLayoutParams();
+ layoutParams.height = (int) Math.round(mTerminalToolbarDefaultHeight *
+ (mProperties.getExtraKeysInfo() == null ? 0 : mProperties.getExtraKeysInfo().getMatrix().length) *
+ mProperties.getTerminalToolbarHeightScaleFactor());
+ terminalToolbarViewPager.setLayoutParams(layoutParams);
+ }
- instance.setListeners(lorieView);
- kbd.reload(mProperties.getExtraKeysInfo());
+
+ public void toggleTerminalToolbar() {
+ final ViewPager terminalToolbarViewPager = getTerminalToolbarViewPager();
+ if (terminalToolbarViewPager == null) return;
+
+ SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
+ boolean showNow = preferences.getBoolean("Toolbar", true);
+
+ terminalToolbarViewPager.setVisibility(showNow ? View.VISIBLE : View.GONE);
+ findViewById(R.id.terminal_toolbar_view_pager).requestFocus();
}
@Override
@@ -113,22 +179,15 @@ public void onUserLeaveHint () {
@Override
public void onPictureInPictureModeChanged (boolean isInPictureInPictureMode, Configuration newConfig) {
- SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
if (isInPictureInPictureMode) {
- if (kbd.getVisibility() != View.GONE)
- kbd.setVisibility(View.GONE);
+ if (this.getTerminalToolbarViewPager().getVisibility() != View.GONE)
+ this.getTerminalToolbarViewPager().setVisibility(View.GONE);
frm.setPadding(0,0,0,0);
return;
} else {
- if (kbd.getVisibility() != View.VISIBLE)
- if (preferences.getBoolean("showAdditionalKbd", true)) {
- kbd.setVisibility(View.VISIBLE);
- int paddingDp = 35;
- float density = this.getResources().getDisplayMetrics().density;
- int paddingPixel = (int)(paddingDp * density);
- frm.setPadding(0,0,0,paddingPixel);
- }
+ if (this.getTerminalToolbarViewPager().getVisibility() != View.VISIBLE)
+ this.getTerminalToolbarViewPager().setVisibility(View.VISIBLE);
return;
}
}
diff --git a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
index 13727ce5b..2def90bce 100644
--- a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
+++ b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
@@ -15,6 +15,7 @@
import android.view.KeyCharacterMap;
import android.text.TextUtils;
import android.app.ActivityManager;
+import android.app.Activity;
import java.lang.Character;
@@ -58,7 +59,7 @@ public void onExtraKeyButtonClick(View view, ExtraKeyButton buttonInfo, Button b
} else if (SpecialButton.FN.getKey().equals(key)) {
fnDown = true;
} else {
- onTerminalExtraKeyButtonClick(view, key, ctrlDown, altDown, shiftDown, fnDown);
+ onLorieExtraKeyButtonClick(view, key, ctrlDown, altDown, shiftDown, fnDown);
ctrlDown = false;
altDown = false;
shiftDown = false;
@@ -71,18 +72,32 @@ public void onExtraKeyButtonClick(View view, ExtraKeyButton buttonInfo, Button b
}
protected void onTerminalExtraKeyButtonClick(View view, String key, boolean ctrlDown, boolean altDown, boolean shiftDown, boolean fnDown) {
- SurfaceView lorieView = act.findViewById(R.id.lorieView);
if (PRIMARY_KEY_CODES_FOR_STRINGS.containsKey(key)) {
Integer keyCode = PRIMARY_KEY_CODES_FOR_STRINGS.get(key);
if (keyCode == null) return;
int metaState = 0;
- if (ctrlDown) metaState |= KeyEvent.META_CTRL_ON | KeyEvent.META_CTRL_LEFT_ON;
- if (altDown) metaState |= KeyEvent.META_ALT_ON | KeyEvent.META_ALT_LEFT_ON;
- if (shiftDown) metaState |= KeyEvent.META_SHIFT_ON | KeyEvent.META_SHIFT_LEFT_ON;
- if (fnDown) metaState |= KeyEvent.META_FUNCTION_ON;
+ int metaAltState = 0;
- KeyEvent keyEvent = new KeyEvent(0, 0, KeyEvent.ACTION_UP, keyCode, 0, metaState);
- mEventListener.onKey(lorieView, keyCode, keyEvent);
+ if (ctrlDown) {
+ metaState |= KeyEvent.META_CTRL_ON | KeyEvent.META_CTRL_LEFT_ON;
+ }
+
+ if (altDown) {
+ metaState |= KeyEvent.META_ALT_ON | KeyEvent.META_ALT_LEFT_ON;
+ }
+
+ if (shiftDown) {
+ metaState |= KeyEvent.META_SHIFT_ON | KeyEvent.META_SHIFT_LEFT_ON;
+ }
+
+ if (fnDown) {
+ metaState |= KeyEvent.META_FUNCTION_ON;
+ }
+ onControlCharused(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, keyCode, 0, metaState), ctrlDown, fnDown, shiftDown, altDown);
+
+ if (!ctrlDown | !altDown) {
+ onControlCharused(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_UP, keyCode, 0, metaState), ctrlDown, fnDown, shiftDown, altDown);
+ }
} else {
// not a control char
@@ -93,7 +108,7 @@ protected void onTerminalExtraKeyButtonClick(View view, String key, boolean ctrl
if (events != null) {
for (KeyEvent event : events) {
Integer keyCode = event.getKeyCode();
- mEventListener.onKey(lorieView, keyCode, event);
+ mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(KeyEvent.ACTION_UP, keyCode));
}
}
});
@@ -106,12 +121,11 @@ public boolean performExtraKeyButtonHapticFeedback(View view, ExtraKeyButton but
}
public void paste(CharSequence input) {
- SurfaceView lorieView = act.findViewById(R.id.lorieView);
KeyEvent[] events = mVirtualKeyboardKeyCharacterMap.getEvents(input.toString().toCharArray());
if (events != null) {
for (KeyEvent event : events) {
Integer keyCode = event.getKeyCode();
- mEventListener.onKey(lorieView, keyCode, event);
+ mEventListener.onKey(act.getlorieView(), keyCode, event);
}
}
}
@@ -120,16 +134,15 @@ public void paste(CharSequence input) {
public void onLorieExtraKeyButtonClick(View view, String key, boolean ctrlDown, boolean altDown, boolean shiftDown, boolean fnDown) {
if ("KEYBOARD".equals(key)) {
- if (act.kbd!=null) {
- act.kbd.requestFocus();
+ if (act.getTerminalToolbarViewPager()!=null) {
+ act.getTerminalToolbarViewPager().requestFocus();
KeyboardUtils.toggleKeyboardVisibility(act);
}
} else if ("DRAWER".equals(key)) {
- Intent preferencesIntent = new Intent(act, LoriePreferences.class);
- preferencesIntent.setAction(ACTION_START_PREFERENCES_ACTIVITY);
-
- PendingIntent pendingPreferencesIntent = PendingIntent.getActivity(act, 0, preferencesIntent, 0);
+ Intent preferencesIntent = new Intent(act, LoriePreferences.class);
+ preferencesIntent.setAction(ACTION_START_PREFERENCES_ACTIVITY);
+ act.startActivity(preferencesIntent);
} else if ("PASTE".equals(key)) {
@@ -146,4 +159,25 @@ public void onLorieExtraKeyButtonClick(View view, String key, boolean ctrlDown,
}
}
+ public void onControlCharused(View mview, int keyCode, KeyEvent e, boolean cd, boolean fnd, boolean sd, boolean altd) {
+
+ mEventListener.onKey(mview, keyCode, e);
+ if (cd = true) {
+ readExtraKeysSpecialButton(SpecialButton.CTRL);
+ }
+ if (fnd = true) {
+ readExtraKeysSpecialButton(SpecialButton.FN);
+ }
+ if (sd = true) {
+ readExtraKeysSpecialButton(SpecialButton.SHIFT);
+ }
+ if (altd = true) {
+ readExtraKeysSpecialButton(SpecialButton.ALT);
+ }
+ }
+
+ public void readExtraKeysSpecialButton(SpecialButton specialButton) {
+ Boolean state = act.getExtraKeysView().readSpecialButton(specialButton, true);
+
+ }
}
diff --git a/app/src/main/java/com/termux/x11/TerminalToolbarViewPager.java b/app/src/main/java/com/termux/x11/TerminalToolbarViewPager.java
new file mode 100644
index 000000000..885795d25
--- /dev/null
+++ b/app/src/main/java/com/termux/x11/TerminalToolbarViewPager.java
@@ -0,0 +1,105 @@
+package com.termux.x11;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.KeyEvent;
+import android.view.KeyCharacterMap;
+
+import android.widget.EditText;
+
+import androidx.annotation.NonNull;
+import androidx.viewpager.widget.PagerAdapter;
+import androidx.viewpager.widget.ViewPager;
+
+import com.termux.shared.terminal.io.extrakeys.ExtraKeysView;
+import com.termux.x11.TerminalExtraKeys;
+
+public class TerminalToolbarViewPager {
+
+ public static class PageAdapter extends PagerAdapter {
+
+ final MainActivity act;
+ private final View.OnKeyListener mEventListener;
+ private final KeyCharacterMap mVirtualKeyboardKeyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
+
+ public PageAdapter(MainActivity activity, View.OnKeyListener listen) {
+ this.act = activity;
+ this.mEventListener = listen;
+ }
+
+ @Override
+ public int getCount() {
+ return 2;
+ }
+
+ @Override
+ public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
+ return view == object;
+ }
+
+ @NonNull
+ @Override
+ public Object instantiateItem(@NonNull ViewGroup collection, int position) {
+ LayoutInflater inflater = LayoutInflater.from(act);
+ View layout;
+ if (position == 0) {
+ layout = inflater.inflate(R.layout.view_terminal_toolbar_extra_keys, collection, false);
+ ExtraKeysView extraKeysView = (ExtraKeysView) layout;
+ extraKeysView.reload(act.getProperties().getExtraKeysInfo());
+ extraKeysView.setExtraKeysViewClient(new TerminalExtraKeys(mEventListener, act));
+ act.setExtraKeysView(extraKeysView);
+ } else {
+ layout = inflater.inflate(R.layout.view_terminal_toolbar_text_input, collection, false);
+ final EditText editText = layout.findViewById(R.id.terminal_toolbar_text_input);
+
+ editText.setOnEditorActionListener((v, actionId, event) -> {
+ String textToSend = editText.getText().toString();
+ if (textToSend.length() == 0) textToSend = "\r";
+
+ KeyEvent[] events = mVirtualKeyboardKeyCharacterMap.getEvents(textToSend.toCharArray());
+ for (KeyEvent evnt : events) {
+ Integer keyCode = evnt.getKeyCode();
+ mEventListener.onKey(act.getlorieView(), keyCode, evnt);
+ }
+
+ editText.setText("");
+ return true;
+ });
+ }
+ collection.addView(layout);
+ return layout;
+ }
+
+ @Override
+ public void destroyItem(@NonNull ViewGroup collection, int position, @NonNull Object view) {
+ collection.removeView((View) view);
+ }
+
+ }
+
+
+
+ public static class OnPageChangeListener extends ViewPager.SimpleOnPageChangeListener {
+
+ final MainActivity act;
+ final ViewPager mTerminalToolbarViewPager;
+
+ public OnPageChangeListener(MainActivity activity, ViewPager viewPager) {
+ this.act = activity;
+ this.mTerminalToolbarViewPager = viewPager;
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ if (position == 0) {
+ act.getlorieView().requestFocus();
+ } else {
+ final EditText editText = mTerminalToolbarViewPager.findViewById(R.id.terminal_toolbar_text_input);
+ if (editText != null) editText.requestFocus();
+ }
+ }
+
+ }
+
+}
diff --git a/app/src/main/java/com/termux/x11/TermuxAppSharedProperties.java b/app/src/main/java/com/termux/x11/TermuxAppSharedProperties.java
index 53be82860..a0faba33c 100644
--- a/app/src/main/java/com/termux/x11/TermuxAppSharedProperties.java
+++ b/app/src/main/java/com/termux/x11/TermuxAppSharedProperties.java
@@ -22,9 +22,11 @@ public class TermuxAppSharedProperties extends TermuxSharedProperties {
private ExtraKeysInfo mExtraKeysInfo;
private static final String LOG_TAG = "TermuxAppSharedProperties";
+ public static final String TERMUX_X11_APP_NAME = "Termux:X11";
public TermuxAppSharedProperties(@NonNull Context context) {
- super(context);
+ super(context, TERMUX_X11_APP_NAME, TermuxPropertyConstants.getTermuxPropertiesFile(),
+ TermuxPropertyConstants.TERMUX_PROPERTIES_LIST, new SharedPropertiesParserClient());
}
/**
@@ -83,7 +85,8 @@ public ExtraKeysInfo getExtraKeysInfo() {
* Load the {@link TermuxPropertyConstants#KEY_TERMINAL_TRANSCRIPT_ROWS} value from termux properties file on disk.
*/
public static int getTerminalTranscriptRows(Context context) {
- return (int) TermuxSharedProperties.getInternalPropertyValue(context, TermuxPropertyConstants.KEY_TERMINAL_TRANSCRIPT_ROWS);
+ return (int) TermuxSharedProperties.getInternalPropertyValue(context, TermuxPropertyConstants.getTermuxPropertiesFile(),
+ TermuxPropertyConstants.KEY_TERMINAL_TRANSCRIPT_ROWS, new SharedPropertiesParserClient());
}
}
diff --git a/app/src/main/res/layout/main_activity.xml b/app/src/main/res/layout/main_activity.xml
index 8ae89d373..90cf541a5 100644
--- a/app/src/main/res/layout/main_activity.xml
+++ b/app/src/main/res/layout/main_activity.xml
@@ -1,12 +1,13 @@
-
+ android:id="@+id/frame"
+ android:layout_above="@+id/terminal_toolbar_view_pager">
-
+ android:layout_height="37.5dp"
+ android:background="@android:drawable/screen_background_dark_transparent"
+ android:layout_alignParentBottom="true" />
-
+
diff --git a/app/src/main/res/layout/view_terminal_toolbar_extra_keys.xml b/app/src/main/res/layout/view_terminal_toolbar_extra_keys.xml
new file mode 100644
index 000000000..2cafc9e43
--- /dev/null
+++ b/app/src/main/res/layout/view_terminal_toolbar_extra_keys.xml
@@ -0,0 +1,8 @@
+
+
diff --git a/app/src/main/res/layout/view_terminal_toolbar_text_input.xml b/app/src/main/res/layout/view_terminal_toolbar_text_input.xml
new file mode 100644
index 000000000..86b3ce92d
--- /dev/null
+++ b/app/src/main/res/layout/view_terminal_toolbar_text_input.xml
@@ -0,0 +1,16 @@
+
+
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 827577a94..a577b4ea4 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -1,12 +1,12 @@
-
+
-
+ android:summary="Show keyboard with additional keys. Will apply on app restart"
+ android:key="Toolbar" />
+
Date: Mon, 20 Sep 2021 16:25:22 +0530
Subject: [PATCH 03/14] Code cleanup
---
.../com/termux/x11/TerminalExtraKeys.java | 26 ++-----------------
1 file changed, 2 insertions(+), 24 deletions(-)
diff --git a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
index 2def90bce..0fc4a3287 100644
--- a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
+++ b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
@@ -93,10 +93,10 @@ protected void onTerminalExtraKeyButtonClick(View view, String key, boolean ctrl
if (fnDown) {
metaState |= KeyEvent.META_FUNCTION_ON;
}
- onControlCharused(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, keyCode, 0, metaState), ctrlDown, fnDown, shiftDown, altDown);
+ mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, keyCode, 0, metaState));
if (!ctrlDown | !altDown) {
- onControlCharused(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_UP, keyCode, 0, metaState), ctrlDown, fnDown, shiftDown, altDown);
+ mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_UP, keyCode, 0, metaState));
}
} else {
@@ -158,26 +158,4 @@ public void onLorieExtraKeyButtonClick(View view, String key, boolean ctrlDown,
onTerminalExtraKeyButtonClick(view, key, ctrlDown, altDown, shiftDown, fnDown);
}
}
-
- public void onControlCharused(View mview, int keyCode, KeyEvent e, boolean cd, boolean fnd, boolean sd, boolean altd) {
-
- mEventListener.onKey(mview, keyCode, e);
- if (cd = true) {
- readExtraKeysSpecialButton(SpecialButton.CTRL);
- }
- if (fnd = true) {
- readExtraKeysSpecialButton(SpecialButton.FN);
- }
- if (sd = true) {
- readExtraKeysSpecialButton(SpecialButton.SHIFT);
- }
- if (altd = true) {
- readExtraKeysSpecialButton(SpecialButton.ALT);
- }
- }
-
- public void readExtraKeysSpecialButton(SpecialButton specialButton) {
- Boolean state = act.getExtraKeysView().readSpecialButton(specialButton, true);
-
- }
}
From bf27a0ad6bd6b4503bd37461e445c98e743465f0 Mon Sep 17 00:00:00 2001
From: Wisest_wizard <12suhangp34@gmail.com>
Date: Mon, 27 Sep 2021 08:36:29 +0530
Subject: [PATCH 04/14] Add fullscreen mode again
I hope this will not mess up with views like last time
---
.../main/java/com/termux/x11/MainActivity.java | 16 ++++++++++++++++
app/src/main/res/xml/preferences.xml | 5 +++++
2 files changed, 21 insertions(+)
diff --git a/app/src/main/java/com/termux/x11/MainActivity.java b/app/src/main/java/com/termux/x11/MainActivity.java
index 23ee80744..c3c08e6c2 100644
--- a/app/src/main/java/com/termux/x11/MainActivity.java
+++ b/app/src/main/java/com/termux/x11/MainActivity.java
@@ -157,6 +157,22 @@ public void onWindowFocusChanged(boolean hasFocus)
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
Window window = getWindow();
+ if (hasFocus && preferences.getBoolean("fullscreen", false))
+ {
+ window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ decorView.setSystemUiVisibility(
+ View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+ | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
+ | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
+ | View.SYSTEM_UI_FLAG_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
+ } else {
+ window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ decorView.setSystemUiVisibility(0);
+ }
+
if (preferences.getBoolean("Reseed", true))
{
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index a577b4ea4..1c45ab756 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -7,6 +7,11 @@
android:summary="Show keyboard with additional keys. Will apply on app restart"
android:key="Toolbar" />
+
+
Date: Mon, 27 Sep 2021 14:08:10 +0530
Subject: [PATCH 05/14] Try to fix problems with fullscreen and screen
Reseeding
---
.../java/com/termux/x11/MainActivity.java | 59 ++++++++++++++++++-
1 file changed, 58 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/com/termux/x11/MainActivity.java b/app/src/main/java/com/termux/x11/MainActivity.java
index c3c08e6c2..5434efed7 100644
--- a/app/src/main/java/com/termux/x11/MainActivity.java
+++ b/app/src/main/java/com/termux/x11/MainActivity.java
@@ -23,6 +23,8 @@
import android.view.ViewGroup;
import android.view.LayoutInflater;
+import android.view.ViewTreeObserver;
+import android.graphics.Rect;
import android.widget.Toast;
import android.widget.FrameLayout;
@@ -175,7 +177,13 @@ public void onWindowFocusChanged(boolean hasFocus)
if (preferences.getBoolean("Reseed", true))
{
- window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
+ if (preferences.getBoolean("fullscreen", false))
+ {
+ window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
+ } else {
+ // Taken from Stackoverflow answer https://stackoverflow.com/questions/7417123/android-how-to-adjust-layout-in-full-screen-mode-when-softkeyboard-is-visible/7509285#
+ AndroidBug5497Workaround.assistActivity(this);
+ }
} else {
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN|
WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
@@ -209,3 +217,52 @@ public void onPictureInPictureModeChanged (boolean isInPictureInPictureMode, Con
}
}
+
+
+private class AndroidBug5497Workaround {
+
+ // For more information, see https://issuetracker.google.com/issues/36911528
+ // To use this class, simply invoke assistActivity() on an Activity that already has its content view set.
+
+ public static void assistActivity (Activity activity) {
+ new AndroidBug5497Workaround(activity);
+ }
+
+ private View mChildOfContent;
+ private int usableHeightPrevious;
+ private FrameLayout.LayoutParams frameLayoutParams;
+
+ private AndroidBug5497Workaround(Activity activity) {
+ FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);
+ mChildOfContent = content.getChildAt(0);
+ mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
+ public void onGlobalLayout() {
+ possiblyResizeChildOfContent();
+ }
+ });
+ frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();
+ }
+
+ private void possiblyResizeChildOfContent() {
+ int usableHeightNow = computeUsableHeight();
+ if (usableHeightNow != usableHeightPrevious) {
+ int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();
+ int heightDifference = usableHeightSansKeyboard - usableHeightNow;
+ if (heightDifference > (usableHeightSansKeyboard/4)) {
+ // keyboard probably just became visible
+ frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;
+ } else {
+ // keyboard probably just became hidden
+ frameLayoutParams.height = usableHeightSansKeyboard;
+ }
+ mChildOfContent.requestLayout();
+ usableHeightPrevious = usableHeightNow;
+ }
+ }
+
+ private int computeUsableHeight() {
+ Rect r = new Rect();
+ mChildOfContent.getWindowVisibleDisplayFrame(r);
+ return (r.bottom - r.top);
+ }
+}
From dd8e108097d02eff7dc70148bb8574f436b7236d Mon Sep 17 00:00:00 2001
From: Wisest_wizard <12suhangp34@gmail.com>
Date: Mon, 27 Sep 2021 14:29:26 +0530
Subject: [PATCH 06/14] Use a seperate public class for fullscreenworkaround
---
.../com/termux/x11/Fullscreenworkaround.java | 55 ++++++++++++++++++
.../java/com/termux/x11/MainActivity.java | 57 ++-----------------
2 files changed, 59 insertions(+), 53 deletions(-)
create mode 100644 app/src/main/java/com/termux/x11/Fullscreenworkaround.java
diff --git a/app/src/main/java/com/termux/x11/Fullscreenworkaround.java b/app/src/main/java/com/termux/x11/Fullscreenworkaround.java
new file mode 100644
index 000000000..c0639ef89
--- /dev/null
+++ b/app/src/main/java/com/termux/x11/Fullscreenworkaround.java
@@ -0,0 +1,55 @@
+package com.termux.x11;
+
+import android.view.ViewTreeObserver;
+import android.graphics.Rect;
+import android.widget.FrameLayout;
+import android.view.View;
+import android.app.Activity;
+
+public class Fullscreenworkaround {
+
+ // For more information, see https://issuetracker.google.com/issues/36911528
+ // To use this class, simply invoke assistActivity() on an Activity that already has its content view set.
+
+ public static void assistActivity (Activity activity) {
+ new Fullscreenworkaround(activity);
+ }
+
+ private View mChildOfContent;
+ private int usableHeightPrevious;
+ private FrameLayout.LayoutParams frameLayoutParams;
+
+ private Fullscreenworkaround(Activity activity) {
+ FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);
+ mChildOfContent = content.getChildAt(0);
+ mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
+ public void onGlobalLayout() {
+ possiblyResizeChildOfContent();
+ }
+ });
+ frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();
+ }
+
+ private void possiblyResizeChildOfContent() {
+ int usableHeightNow = computeUsableHeight();
+ if (usableHeightNow != usableHeightPrevious) {
+ int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();
+ int heightDifference = usableHeightSansKeyboard - usableHeightNow;
+ if (heightDifference > (usableHeightSansKeyboard/4)) {
+ // keyboard probably just became visible
+ frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;
+ } else {
+ // keyboard probably just became hidden
+ frameLayoutParams.height = usableHeightSansKeyboard;
+ }
+ mChildOfContent.requestLayout();
+ usableHeightPrevious = usableHeightNow;
+ }
+ }
+
+ private int computeUsableHeight() {
+ Rect r = new Rect();
+ mChildOfContent.getWindowVisibleDisplayFrame(r);
+ return (r.bottom - r.top);
+ }
+}
diff --git a/app/src/main/java/com/termux/x11/MainActivity.java b/app/src/main/java/com/termux/x11/MainActivity.java
index 5434efed7..a1d5c8476 100644
--- a/app/src/main/java/com/termux/x11/MainActivity.java
+++ b/app/src/main/java/com/termux/x11/MainActivity.java
@@ -23,8 +23,6 @@
import android.view.ViewGroup;
import android.view.LayoutInflater;
-import android.view.ViewTreeObserver;
-import android.graphics.Rect;
import android.widget.Toast;
import android.widget.FrameLayout;
@@ -34,6 +32,7 @@
import com.termux.x11.TermuxAppSharedProperties;
import com.termux.x11.TerminalExtraKeys;
import com.termux.x11.TerminalToolbarViewPager;
+import com.termux.x11.Fullscreenworkaround;
public class MainActivity extends AppCompatActivity {
@@ -158,6 +157,7 @@ public void onWindowFocusChanged(boolean hasFocus)
super.onWindowFocusChanged(hasFocus);
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
Window window = getWindow();
+ View decorView = window.getDecorView();
if (hasFocus && preferences.getBoolean("fullscreen", false))
{
@@ -181,8 +181,8 @@ public void onWindowFocusChanged(boolean hasFocus)
{
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
} else {
- // Taken from Stackoverflow answer https://stackoverflow.com/questions/7417123/android-how-to-adjust-layout-in-full-screen-mode-when-softkeyboard-is-visible/7509285#
- AndroidBug5497Workaround.assistActivity(this);
+ // Taken from Stackoverflow answer https://stackoverflow.com/questions/7417123/android-how-to-adjust-layout-in-full-screen-mode-when-softkeyboard-is-visible/7509285#
+ Fullscreenworkaround.assistActivity(this);
}
} else {
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN|
@@ -217,52 +217,3 @@ public void onPictureInPictureModeChanged (boolean isInPictureInPictureMode, Con
}
}
-
-
-private class AndroidBug5497Workaround {
-
- // For more information, see https://issuetracker.google.com/issues/36911528
- // To use this class, simply invoke assistActivity() on an Activity that already has its content view set.
-
- public static void assistActivity (Activity activity) {
- new AndroidBug5497Workaround(activity);
- }
-
- private View mChildOfContent;
- private int usableHeightPrevious;
- private FrameLayout.LayoutParams frameLayoutParams;
-
- private AndroidBug5497Workaround(Activity activity) {
- FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);
- mChildOfContent = content.getChildAt(0);
- mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
- public void onGlobalLayout() {
- possiblyResizeChildOfContent();
- }
- });
- frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();
- }
-
- private void possiblyResizeChildOfContent() {
- int usableHeightNow = computeUsableHeight();
- if (usableHeightNow != usableHeightPrevious) {
- int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();
- int heightDifference = usableHeightSansKeyboard - usableHeightNow;
- if (heightDifference > (usableHeightSansKeyboard/4)) {
- // keyboard probably just became visible
- frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;
- } else {
- // keyboard probably just became hidden
- frameLayoutParams.height = usableHeightSansKeyboard;
- }
- mChildOfContent.requestLayout();
- usableHeightPrevious = usableHeightNow;
- }
- }
-
- private int computeUsableHeight() {
- Rect r = new Rect();
- mChildOfContent.getWindowVisibleDisplayFrame(r);
- return (r.bottom - r.top);
- }
-}
From d59149cde1e8817b2d9963344ffe52d1a0fde3aa Mon Sep 17 00:00:00 2001
From: Suhan Paradkar <12suhangp34@gmail.com>
Date: Fri, 17 Dec 2021 12:11:06 +0530
Subject: [PATCH 07/14] Try handling CTRL and ALT keys in Lorie
---
.../java/com/termux/x11/LorieService.java | 6 ++---
.../com/termux/x11/TerminalExtraKeys.java | 6 ++---
.../jni/lorie/backend/android/android-app.cpp | 25 ++++++++++++++++++-
3 files changed, 29 insertions(+), 8 deletions(-)
diff --git a/app/src/main/java/com/termux/x11/LorieService.java b/app/src/main/java/com/termux/x11/LorieService.java
index 2c64ff41f..58393ec66 100644
--- a/app/src/main/java/com/termux/x11/LorieService.java
+++ b/app/src/main/java/com/termux/x11/LorieService.java
@@ -416,7 +416,7 @@ public boolean onKey(View v, int keyCode, KeyEvent e) {
if (e.getAction() == KeyEvent.ACTION_DOWN) action = TouchParser.ACTION_DOWN;
if (e.getAction() == KeyEvent.ACTION_UP) action = TouchParser.ACTION_UP;
- svc.keyboardKey(action, keyCode, e.isShiftPressed() ? 1 : 0, e.getCharacters());
+ svc.keyboardKey(action, keyCode, e.isShiftPressed() ? 1 : 0, e.isCtrlPressed() ? 1 : 0, e.isAltPressed() ? 1 : 0, e.getCharacters());
return true;
}
@@ -526,8 +526,8 @@ public static void unzip(InputStream zipStream, File targetDirectory) throws IOE
private void pointerButton(int button, int type) { pointerButton(compositor, button, type); }
private native void pointerButton(long compositor, int button, int type);
- private void keyboardKey(int key, int type, int shift, String characters) {keyboardKey(compositor, key, type, shift, characters);}
- private native void keyboardKey(long compositor, int key, int type, int shift, String characters);
+ private void keyboardKey(int key, int type, int shift, int ctrl, int alt, String characters) {keyboardKey(compositor, key, type, shift, ctrl, alt, characters);}
+ private native void keyboardKey(long compositor, int key, int type, int shift, int ctrl, int alt, String characters);
private void passWaylandFD(int fd) {passWaylandFD(compositor, fd);}
private native void passWaylandFD(long compositor, int fd);
diff --git a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
index 0fc4a3287..51c4595a9 100644
--- a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
+++ b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
@@ -93,11 +93,9 @@ protected void onTerminalExtraKeyButtonClick(View view, String key, boolean ctrl
if (fnDown) {
metaState |= KeyEvent.META_FUNCTION_ON;
}
- mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, keyCode, 0, metaState));
- if (!ctrlDown | !altDown) {
- mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_UP, keyCode, 0, metaState));
- }
+ mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, keyCode, 0, metaState));
+ mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_UP, keyCode, 0, metaState));
} else {
// not a control char
diff --git a/app/src/main/jni/lorie/backend/android/android-app.cpp b/app/src/main/jni/lorie/backend/android/android-app.cpp
index 537af65ac..fba2a5c6d 100644
--- a/app/src/main/jni/lorie/backend/android/android-app.cpp
+++ b/app/src/main/jni/lorie/backend/android/android-app.cpp
@@ -318,7 +318,7 @@ extern "C" void android_keycode_get_eventcode(int kc, int *ec, int *shift);
extern "C" JNIEXPORT void JNICALL
JNI_DECLARE(LorieService, keyboardKey)(JNIEnv *env, unused jobject instance,
jlong jcompositor, jint type,
- jint key_code, jint jshift,
+ jint key_code, jint jshift, jint jctrl, jint jalt,
jstring characters_) {
if (jcompositor == 0) return;
LorieBackendAndroid *b = fromLong(jcompositor);
@@ -327,6 +327,9 @@ JNI_DECLARE(LorieService, keyboardKey)(JNIEnv *env, unused jobject instance,
int event_code = 0;
int shift = jshift;
+ int ctrl = jctrl;
+ int alt = jalt;
+
if (characters_ != nullptr) characters = (char*) env->GetStringUTFChars(characters_, nullptr);
if (key_code && !characters) {
android_keycode_get_eventcode(key_code, &event_code, &shift);
@@ -363,6 +366,16 @@ JNI_DECLARE(LorieService, keyboardKey)(JNIEnv *env, unused jobject instance,
b->keyboard_key(42, WL_KEYBOARD_KEY_STATE_PRESSED); // Send KEY_LEFTSHIFT
});
+ if (ctrl || jctrl)
+ b->post([b]() {
+ b->keyboard_key(17, WL_KEYBOARD_KEY_STATE_PRESSED);
+ });
+
+ if (alt || jalt)
+ b->post([b]() {
+ b->keyboard_key(18, WL_KEYBOARD_KEY_STATE_PRESSED);
+ });
+
// For some reason Android do not send ACTION_DOWN for non-English characters
if (characters)
b->post([b, event_code]() {
@@ -373,6 +386,16 @@ JNI_DECLARE(LorieService, keyboardKey)(JNIEnv *env, unused jobject instance,
b->keyboard_key(static_cast(event_code), static_cast(type));
});
+ if (alt || jalt)
+ b->post([b]() {
+ b->keyboard_key(18, WL_KEYBOARD_KEY_STATE_RELEASED); // Send KEY_LEFTSHIFT
+ });
+
+ if (ctrl || jctrl)
+ b->post([b]() {
+ b->keyboard_key(17, WL_KEYBOARD_KEY_STATE_RELEASED); // Send KEY_LEFTSHIFT
+ });
+
if (shift || jshift)
b->post([b]() {
b->keyboard_key(42, WL_KEYBOARD_KEY_STATE_RELEASED); // Send KEY_LEFTSHIFT
From 4bbc2d0a56db0e6154665b0148a07fb072e0bcad Mon Sep 17 00:00:00 2001
From: Suhan Paradkar <12suhangp34@gmail.com>
Date: Sat, 18 Dec 2021 08:06:06 +0530
Subject: [PATCH 08/14] Try implementing seperate events for CTRL and ALT keys
---
.../main/java/com/termux/x11/TerminalExtraKeys.java | 12 +++++++++++-
.../main/jni/lorie/backend/android/android-app.cpp | 6 +++---
2 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
index 51c4595a9..553362a49 100644
--- a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
+++ b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
@@ -59,12 +59,12 @@ public void onExtraKeyButtonClick(View view, ExtraKeyButton buttonInfo, Button b
} else if (SpecialButton.FN.getKey().equals(key)) {
fnDown = true;
} else {
- onLorieExtraKeyButtonClick(view, key, ctrlDown, altDown, shiftDown, fnDown);
ctrlDown = false;
altDown = false;
shiftDown = false;
fnDown = false;
}
+ onLorieExtraKeyButtonClick(view, key, ctrlDown, altDown, shiftDown, fnDown);
}
} else {
onLorieExtraKeyButtonClick(view, buttonInfo.getKey(), false, false, false, false);
@@ -80,10 +80,12 @@ protected void onTerminalExtraKeyButtonClick(View view, String key, boolean ctrl
if (ctrlDown) {
metaState |= KeyEvent.META_CTRL_ON | KeyEvent.META_CTRL_LEFT_ON;
+ metaAltState |= KeyEvent.KEYCODE_CTRL_LEFT | KeyEvent.KEYCODE_CTRL_RIGHT;
}
if (altDown) {
metaState |= KeyEvent.META_ALT_ON | KeyEvent.META_ALT_LEFT_ON;
+ metaAltState |= KeyEvent.KEYCODE_ALT_LEFT | KeyEvent.KEYCODE_ALT_RIGHT;
}
if (shiftDown) {
@@ -94,9 +96,17 @@ protected void onTerminalExtraKeyButtonClick(View view, String key, boolean ctrl
metaState |= KeyEvent.META_FUNCTION_ON;
}
+ if (metaAltState != 0) {
+ mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(metaAltState, keyCode));
+ }
+
mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, keyCode, 0, metaState));
mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_UP, keyCode, 0, metaState));
+ if (metaAltState != 0) {
+ mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(metaAltState, keyCode));
+ }
+
} else {
// not a control char
key.codePoints().forEach(codePoint -> {
diff --git a/app/src/main/jni/lorie/backend/android/android-app.cpp b/app/src/main/jni/lorie/backend/android/android-app.cpp
index fba2a5c6d..814669aea 100644
--- a/app/src/main/jni/lorie/backend/android/android-app.cpp
+++ b/app/src/main/jni/lorie/backend/android/android-app.cpp
@@ -388,17 +388,17 @@ JNI_DECLARE(LorieService, keyboardKey)(JNIEnv *env, unused jobject instance,
if (alt || jalt)
b->post([b]() {
- b->keyboard_key(18, WL_KEYBOARD_KEY_STATE_RELEASED); // Send KEY_LEFTSHIFT
+ b->keyboard_key(18, WL_KEYBOARD_KEY_STATE_RELEASED);
});
if (ctrl || jctrl)
b->post([b]() {
- b->keyboard_key(17, WL_KEYBOARD_KEY_STATE_RELEASED); // Send KEY_LEFTSHIFT
+ b->keyboard_key(17, WL_KEYBOARD_KEY_STATE_RELEASED);
});
if (shift || jshift)
b->post([b]() {
- b->keyboard_key(42, WL_KEYBOARD_KEY_STATE_RELEASED); // Send KEY_LEFTSHIFT
+ b->keyboard_key(42, WL_KEYBOARD_KEY_STATE_RELEASED);
});
if (characters_ != nullptr) env->ReleaseStringUTFChars(characters_, characters);
From c76185fb150e02081468cb75388e498c9e161827 Mon Sep 17 00:00:00 2001
From: Suhan Paradkar <12suhangp34@gmail.com>
Date: Sat, 18 Dec 2021 09:28:23 +0530
Subject: [PATCH 09/14] Revert "Try handling CTRL and ALT keys in Lorie"
This reverts commit a1ad9ecd44632116530396894430f78602f55a2d.
---
.../java/com/termux/x11/LorieService.java | 6 ++---
.../com/termux/x11/TerminalExtraKeys.java | 6 +++--
.../jni/lorie/backend/android/android-app.cpp | 25 +------------------
3 files changed, 8 insertions(+), 29 deletions(-)
diff --git a/app/src/main/java/com/termux/x11/LorieService.java b/app/src/main/java/com/termux/x11/LorieService.java
index 58393ec66..2c64ff41f 100644
--- a/app/src/main/java/com/termux/x11/LorieService.java
+++ b/app/src/main/java/com/termux/x11/LorieService.java
@@ -416,7 +416,7 @@ public boolean onKey(View v, int keyCode, KeyEvent e) {
if (e.getAction() == KeyEvent.ACTION_DOWN) action = TouchParser.ACTION_DOWN;
if (e.getAction() == KeyEvent.ACTION_UP) action = TouchParser.ACTION_UP;
- svc.keyboardKey(action, keyCode, e.isShiftPressed() ? 1 : 0, e.isCtrlPressed() ? 1 : 0, e.isAltPressed() ? 1 : 0, e.getCharacters());
+ svc.keyboardKey(action, keyCode, e.isShiftPressed() ? 1 : 0, e.getCharacters());
return true;
}
@@ -526,8 +526,8 @@ public static void unzip(InputStream zipStream, File targetDirectory) throws IOE
private void pointerButton(int button, int type) { pointerButton(compositor, button, type); }
private native void pointerButton(long compositor, int button, int type);
- private void keyboardKey(int key, int type, int shift, int ctrl, int alt, String characters) {keyboardKey(compositor, key, type, shift, ctrl, alt, characters);}
- private native void keyboardKey(long compositor, int key, int type, int shift, int ctrl, int alt, String characters);
+ private void keyboardKey(int key, int type, int shift, String characters) {keyboardKey(compositor, key, type, shift, characters);}
+ private native void keyboardKey(long compositor, int key, int type, int shift, String characters);
private void passWaylandFD(int fd) {passWaylandFD(compositor, fd);}
private native void passWaylandFD(long compositor, int fd);
diff --git a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
index 553362a49..25db41115 100644
--- a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
+++ b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
@@ -99,9 +99,11 @@ protected void onTerminalExtraKeyButtonClick(View view, String key, boolean ctrl
if (metaAltState != 0) {
mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(metaAltState, keyCode));
}
-
mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, keyCode, 0, metaState));
- mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_UP, keyCode, 0, metaState));
+
+ if (!ctrlDown | !altDown) {
+ mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_UP, keyCode, 0, metaState));
+ }
if (metaAltState != 0) {
mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(metaAltState, keyCode));
diff --git a/app/src/main/jni/lorie/backend/android/android-app.cpp b/app/src/main/jni/lorie/backend/android/android-app.cpp
index 814669aea..932591b2a 100644
--- a/app/src/main/jni/lorie/backend/android/android-app.cpp
+++ b/app/src/main/jni/lorie/backend/android/android-app.cpp
@@ -318,7 +318,7 @@ extern "C" void android_keycode_get_eventcode(int kc, int *ec, int *shift);
extern "C" JNIEXPORT void JNICALL
JNI_DECLARE(LorieService, keyboardKey)(JNIEnv *env, unused jobject instance,
jlong jcompositor, jint type,
- jint key_code, jint jshift, jint jctrl, jint jalt,
+ jint key_code, jint jshift,
jstring characters_) {
if (jcompositor == 0) return;
LorieBackendAndroid *b = fromLong(jcompositor);
@@ -327,9 +327,6 @@ JNI_DECLARE(LorieService, keyboardKey)(JNIEnv *env, unused jobject instance,
int event_code = 0;
int shift = jshift;
- int ctrl = jctrl;
- int alt = jalt;
-
if (characters_ != nullptr) characters = (char*) env->GetStringUTFChars(characters_, nullptr);
if (key_code && !characters) {
android_keycode_get_eventcode(key_code, &event_code, &shift);
@@ -366,16 +363,6 @@ JNI_DECLARE(LorieService, keyboardKey)(JNIEnv *env, unused jobject instance,
b->keyboard_key(42, WL_KEYBOARD_KEY_STATE_PRESSED); // Send KEY_LEFTSHIFT
});
- if (ctrl || jctrl)
- b->post([b]() {
- b->keyboard_key(17, WL_KEYBOARD_KEY_STATE_PRESSED);
- });
-
- if (alt || jalt)
- b->post([b]() {
- b->keyboard_key(18, WL_KEYBOARD_KEY_STATE_PRESSED);
- });
-
// For some reason Android do not send ACTION_DOWN for non-English characters
if (characters)
b->post([b, event_code]() {
@@ -386,16 +373,6 @@ JNI_DECLARE(LorieService, keyboardKey)(JNIEnv *env, unused jobject instance,
b->keyboard_key(static_cast(event_code), static_cast(type));
});
- if (alt || jalt)
- b->post([b]() {
- b->keyboard_key(18, WL_KEYBOARD_KEY_STATE_RELEASED);
- });
-
- if (ctrl || jctrl)
- b->post([b]() {
- b->keyboard_key(17, WL_KEYBOARD_KEY_STATE_RELEASED);
- });
-
if (shift || jshift)
b->post([b]() {
b->keyboard_key(42, WL_KEYBOARD_KEY_STATE_RELEASED);
From 4de8153bdf6b84f639ee1b1f8406afa6c50c531e Mon Sep 17 00:00:00 2001
From: Suhan Paradkar <12suhangp34@gmail.com>
Date: Sun, 19 Dec 2021 13:37:46 +0530
Subject: [PATCH 10/14] Fix sharedproperties
---
.../java/com/termux/x11/MainActivity.java | 2 +-
.../com/termux/x11/TerminalExtraKeys.java | 27 +++++-----
.../termux/x11/TermuxAppSharedProperties.java | 49 +++++++++++++++++--
3 files changed, 62 insertions(+), 16 deletions(-)
diff --git a/app/src/main/java/com/termux/x11/MainActivity.java b/app/src/main/java/com/termux/x11/MainActivity.java
index a1d5c8476..ac457103c 100644
--- a/app/src/main/java/com/termux/x11/MainActivity.java
+++ b/app/src/main/java/com/termux/x11/MainActivity.java
@@ -46,7 +46,7 @@ public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mProperties = new TermuxAppSharedProperties(this);
+ mProperties = TermuxAppSharedProperties.build(this);
LorieService.setMainActivity(this);
LorieService.start(LorieService.ACTION_START_FROM_ACTIVITY);
diff --git a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
index 25db41115..98e5d0b13 100644
--- a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
+++ b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
@@ -33,6 +33,8 @@ public class TerminalExtraKeys implements ExtraKeysView.IExtraKeysView {
private final View.OnKeyListener mEventListener;
private final MainActivity act;
+ private int metaAltState = 0;
+
public TerminalExtraKeys(@NonNull View.OnKeyListener eventlistener, MainActivity mact) {
mEventListener = eventlistener;
act = mact;
@@ -76,7 +78,6 @@ protected void onTerminalExtraKeyButtonClick(View view, String key, boolean ctrl
Integer keyCode = PRIMARY_KEY_CODES_FOR_STRINGS.get(key);
if (keyCode == null) return;
int metaState = 0;
- int metaAltState = 0;
if (ctrlDown) {
metaState |= KeyEvent.META_CTRL_ON | KeyEvent.META_CTRL_LEFT_ON;
@@ -96,18 +97,9 @@ protected void onTerminalExtraKeyButtonClick(View view, String key, boolean ctrl
metaState |= KeyEvent.META_FUNCTION_ON;
}
- if (metaAltState != 0) {
- mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(metaAltState, keyCode));
- }
- mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, keyCode, 0, metaState));
-
- if (!ctrlDown | !altDown) {
- mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_UP, keyCode, 0, metaState));
- }
- if (metaAltState != 0) {
- mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(metaAltState, keyCode));
- }
+ mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, keyCode, 0, metaState));
+ mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(0, 0, KeyEvent.ACTION_UP, keyCode, 0, metaState));
} else {
// not a control char
@@ -117,8 +109,19 @@ protected void onTerminalExtraKeyButtonClick(View view, String key, boolean ctrl
KeyEvent[] events = mVirtualKeyboardKeyCharacterMap.getEvents(ch);
if (events != null) {
for (KeyEvent event : events) {
+
Integer keyCode = event.getKeyCode();
+
+ if (metaAltState != 0) {
+ mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(metaAltState, keyCode));
+ }
+
mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(KeyEvent.ACTION_UP, keyCode));
+
+ if (metaAltState != 0) {
+ mEventListener.onKey(act.getlorieView(), keyCode, new KeyEvent(metaAltState, keyCode));
+ metaAltState = 0;
+ }
}
}
});
diff --git a/app/src/main/java/com/termux/x11/TermuxAppSharedProperties.java b/app/src/main/java/com/termux/x11/TermuxAppSharedProperties.java
index a0faba33c..bb06a57b4 100644
--- a/app/src/main/java/com/termux/x11/TermuxAppSharedProperties.java
+++ b/app/src/main/java/com/termux/x11/TermuxAppSharedProperties.java
@@ -1,6 +1,7 @@
package com.termux.x11;
import android.content.Context;
+import android.net.Uri;
import com.termux.shared.terminal.io.extrakeys.ExtraKeysConstants;
import com.termux.shared.terminal.io.extrakeys.ExtraKeysConstants.EXTRA_KEY_DISPLAY_MAPS;
@@ -8,12 +9,17 @@
import com.termux.shared.logger.Logger;
import com.termux.shared.settings.properties.TermuxPropertyConstants;
import com.termux.shared.settings.properties.TermuxSharedProperties;
+import com.termux.shared.termux.TermuxConstants;
import org.json.JSONException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.io.File;
+import java.io.InputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
import androidx.annotation.NonNull;
@@ -24,9 +30,46 @@ public class TermuxAppSharedProperties extends TermuxSharedProperties {
private static final String LOG_TAG = "TermuxAppSharedProperties";
public static final String TERMUX_X11_APP_NAME = "Termux:X11";
- public TermuxAppSharedProperties(@NonNull Context context) {
- super(context, TERMUX_X11_APP_NAME, TermuxPropertyConstants.getTermuxPropertiesFile(),
- TermuxPropertyConstants.TERMUX_PROPERTIES_LIST, new SharedPropertiesParserClient());
+ private TermuxAppSharedProperties(@NonNull Context context, File propertiesFile) {
+ super(context, TERMUX_X11_APP_NAME, propertiesFile,
+ TermuxPropertyConstants.TERMUX_PROPERTIES_LIST, new SharedPropertiesParserClient());
+ }
+
+ public static TermuxAppSharedProperties build(Context context) {
+ Uri propertiesFileUri = Uri.parse("content://" + TermuxConstants.TERMUX_FILE_SHARE_URI_AUTHORITY + TermuxConstants.TERMUX_PROPERTIES_PRIMARY_FILE_PATH);
+ File propertiesFile = new File(context.getFilesDir(), "termux.properties");
+ runTermuxContentProviderReadCommand(context, propertiesFileUri, propertiesFile);
+ return new TermuxAppSharedProperties(context, propertiesFile);
+ }
+
+ private static void runTermuxContentProviderReadCommand(Context context, Uri inputUri, File outFile) {
+ InputStream inputStream = null;
+ FileOutputStream fileOutputStream = null;
+
+ try {
+ inputStream = context.getContentResolver().openInputStream(inputUri);
+
+ if (!outFile.exists())
+ outFile.createNewFile();
+ fileOutputStream = new FileOutputStream(outFile);
+ byte[] buffer = new byte[4096];
+ int readBytes;
+ while ((readBytes = inputStream.read(buffer)) > 0) {
+ // Log.d(LOG_TAG, "data: " + new String(buffer, 0, readBytes, Charset.defaultCharset()));
+ fileOutputStream.write(buffer, 0, readBytes);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ if (inputStream != null)
+ inputStream.close();
+ if (fileOutputStream != null)
+ fileOutputStream.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
}
/**
From f5fdaebac74c4247fe05ac327b8e75077b7becf0 Mon Sep 17 00:00:00 2001
From: Suhan Paradkar <12suhangp34@gmail.com>
Date: Wed, 22 Dec 2021 08:00:27 +0530
Subject: [PATCH 11/14] Send Keyevents for Specialbuttons
---
app/build.gradle | 2 +-
.../java/com/termux/x11/TerminalExtraKeys.java | 17 +++++++++++++++++
2 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/app/build.gradle b/app/build.gradle
index 5ea069b31..5b8bf2f35 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -59,6 +59,6 @@ dependencies {
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'androidx.annotation:annotation:1.3.0'
implementation 'androidx.drawerlayout:drawerlayout:1.1.1'
- implementation 'com.termux.termux-app:termux-shared:master-SNAPSHOT'
+ implementation 'com.github.agnostic-apollo.termux-app:termux-shared:temp-extrakeys-SNAPSHOT'
implementation "com.google.guava:guava:24.1-jre"
}
diff --git a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
index 98e5d0b13..be7cb67ff 100644
--- a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
+++ b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
@@ -43,6 +43,23 @@ public TerminalExtraKeys(@NonNull View.OnKeyListener eventlistener, MainActivity
private final KeyCharacterMap mVirtualKeyboardKeyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
static final String ACTION_START_PREFERENCES_ACTIVITY = "com.termux.x11.start_preferences_activity";
+ @Override
+ public void onAnyExtraKeyButtonClick(View view, @NonNull ExtraKeyButton buttonInfo, Button button) {
+ if (isSpecialButton(buttonInfo)) {
+ if (mLongPressCount > 0) return;
+ SpecialButtonState state = mSpecialButtons.get(SpecialButton.valueOf(buttonInfo.getKey()));
+ if (state == null) return;
+ super.onExtraKeyButtonClick(view, buttonInfo, button);
+
+ // Toggle active state and disable lock state if new state is not active
+ state.setIsActive(!state.isActive);
+ if (!state.isActive)
+ state.setIsLocked(false);
+ } else {
+ super.onExtraKeyButtonClick(view, buttonInfo, button);
+ }
+ }
+
@Override
public void onExtraKeyButtonClick(View view, ExtraKeyButton buttonInfo, Button button) {
if (buttonInfo.isMacro()) {
From c54811f3e8cfbacc83e83da4cd161ed352fb6904 Mon Sep 17 00:00:00 2001
From: Suhan Paradkar <12suhangp34@gmail.com>
Date: Wed, 22 Dec 2021 11:49:32 +0530
Subject: [PATCH 12/14] Update TerminalExtraKeys constructor
---
app/src/main/java/com/termux/x11/TerminalExtraKeys.java | 4 +++-
.../main/java/com/termux/x11/TerminalToolbarViewPager.java | 2 +-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
index be7cb67ff..d5f83e7e8 100644
--- a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
+++ b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
@@ -32,12 +32,14 @@ public class TerminalExtraKeys implements ExtraKeysView.IExtraKeysView {
private final View.OnKeyListener mEventListener;
private final MainActivity act;
+ private final ExtraKeysView mExtraKeysView;
private int metaAltState = 0;
- public TerminalExtraKeys(@NonNull View.OnKeyListener eventlistener, MainActivity mact) {
+ public TerminalExtraKeys(@NonNull View.OnKeyListener eventlistener, MainActivity mact, ExtraKeysView extrakeysview) {
mEventListener = eventlistener;
act = mact;
+ mExtraKeysView = extrakeysview;
}
private final KeyCharacterMap mVirtualKeyboardKeyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
diff --git a/app/src/main/java/com/termux/x11/TerminalToolbarViewPager.java b/app/src/main/java/com/termux/x11/TerminalToolbarViewPager.java
index 885795d25..2b8c85c05 100644
--- a/app/src/main/java/com/termux/x11/TerminalToolbarViewPager.java
+++ b/app/src/main/java/com/termux/x11/TerminalToolbarViewPager.java
@@ -47,7 +47,7 @@ public Object instantiateItem(@NonNull ViewGroup collection, int position) {
layout = inflater.inflate(R.layout.view_terminal_toolbar_extra_keys, collection, false);
ExtraKeysView extraKeysView = (ExtraKeysView) layout;
extraKeysView.reload(act.getProperties().getExtraKeysInfo());
- extraKeysView.setExtraKeysViewClient(new TerminalExtraKeys(mEventListener, act));
+ extraKeysView.setExtraKeysViewClient(new TerminalExtraKeys(mEventListener, act, extraKeysView));
act.setExtraKeysView(extraKeysView);
} else {
layout = inflater.inflate(R.layout.view_terminal_toolbar_text_input, collection, false);
From 13d99f6102c47e0f2bc0bba581eea57811d5c364 Mon Sep 17 00:00:00 2001
From: Wisest_wizard <76830230+suhan-paradkar@users.noreply.github.com>
Date: Mon, 6 Jun 2022 09:27:23 +0530
Subject: [PATCH 13/14] Update build.gradle
---
app/build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/build.gradle b/app/build.gradle
index 5b8bf2f35..5ea069b31 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -59,6 +59,6 @@ dependencies {
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'androidx.annotation:annotation:1.3.0'
implementation 'androidx.drawerlayout:drawerlayout:1.1.1'
- implementation 'com.github.agnostic-apollo.termux-app:termux-shared:temp-extrakeys-SNAPSHOT'
+ implementation 'com.termux.termux-app:termux-shared:master-SNAPSHOT'
implementation "com.google.guava:guava:24.1-jre"
}
From e4884510aacd5736cbe70302f63f727b72a64272 Mon Sep 17 00:00:00 2001
From: Wisest_wizard <12suhangp34@gmail.com>
Date: Mon, 6 Jun 2022 11:49:53 +0530
Subject: [PATCH 14/14] Fix imports
---
app/src/main/java/com/termux/x11/MainActivity.java | 2 +-
.../main/java/com/termux/x11/TerminalExtraKeys.java | 8 ++++----
.../java/com/termux/x11/TerminalToolbarViewPager.java | 2 +-
.../java/com/termux/x11/TermuxAppSharedProperties.java | 10 +++++-----
4 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/app/src/main/java/com/termux/x11/MainActivity.java b/app/src/main/java/com/termux/x11/MainActivity.java
index ac457103c..ba94a16e7 100644
--- a/app/src/main/java/com/termux/x11/MainActivity.java
+++ b/app/src/main/java/com/termux/x11/MainActivity.java
@@ -27,7 +27,7 @@
import android.widget.Toast;
import android.widget.FrameLayout;
-import com.termux.shared.terminal.io.extrakeys.ExtraKeysView;
+import com.termux.shared.termux.extrakeys.ExtraKeysView;
import com.termux.x11.TermuxAppSharedProperties;
import com.termux.x11.TerminalExtraKeys;
diff --git a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
index d5f83e7e8..01a0f178f 100644
--- a/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
+++ b/app/src/main/java/com/termux/x11/TerminalExtraKeys.java
@@ -22,11 +22,11 @@
import androidx.annotation.NonNull;
import androidx.drawerlayout.widget.DrawerLayout;
-import com.termux.shared.terminal.io.extrakeys.ExtraKeyButton;
-import com.termux.shared.terminal.io.extrakeys.ExtraKeysView;
-import com.termux.shared.terminal.io.extrakeys.SpecialButton;
+import com.termux.shared.termux.extrakeys.ExtraKeyButton;
+import com.termux.shared.termux.extrakeys.ExtraKeysView;
+import com.termux.shared.termux.extrakeys.SpecialButton;
-import static com.termux.shared.terminal.io.extrakeys.ExtraKeysConstants.PRIMARY_KEY_CODES_FOR_STRINGS;
+import static com.termux.shared.termux.extrakeys.ExtraKeysConstants.PRIMARY_KEY_CODES_FOR_STRINGS;
public class TerminalExtraKeys implements ExtraKeysView.IExtraKeysView {
diff --git a/app/src/main/java/com/termux/x11/TerminalToolbarViewPager.java b/app/src/main/java/com/termux/x11/TerminalToolbarViewPager.java
index 2b8c85c05..a6c7a2746 100644
--- a/app/src/main/java/com/termux/x11/TerminalToolbarViewPager.java
+++ b/app/src/main/java/com/termux/x11/TerminalToolbarViewPager.java
@@ -12,7 +12,7 @@
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
-import com.termux.shared.terminal.io.extrakeys.ExtraKeysView;
+import com.termux.shared.termux.extrakeys.ExtraKeysView;
import com.termux.x11.TerminalExtraKeys;
public class TerminalToolbarViewPager {
diff --git a/app/src/main/java/com/termux/x11/TermuxAppSharedProperties.java b/app/src/main/java/com/termux/x11/TermuxAppSharedProperties.java
index bb06a57b4..991698f6f 100644
--- a/app/src/main/java/com/termux/x11/TermuxAppSharedProperties.java
+++ b/app/src/main/java/com/termux/x11/TermuxAppSharedProperties.java
@@ -3,12 +3,12 @@
import android.content.Context;
import android.net.Uri;
-import com.termux.shared.terminal.io.extrakeys.ExtraKeysConstants;
-import com.termux.shared.terminal.io.extrakeys.ExtraKeysConstants.EXTRA_KEY_DISPLAY_MAPS;
-import com.termux.shared.terminal.io.extrakeys.ExtraKeysInfo;
+import com.termux.shared.termux.extrakeys.ExtraKeysConstants;
+import com.termux.shared.termux.extrakeys.ExtraKeysConstants.EXTRA_KEY_DISPLAY_MAPS;
+import com.termux.shared.termux.extrakeys.ExtraKeysInfo;
import com.termux.shared.logger.Logger;
-import com.termux.shared.settings.properties.TermuxPropertyConstants;
-import com.termux.shared.settings.properties.TermuxSharedProperties;
+import com.termux.shared.termux.settings.properties.TermuxPropertyConstants;
+import com.termux.shared.termux.settings.properties.TermuxSharedProperties;
import com.termux.shared.termux.TermuxConstants;
import org.json.JSONException;