diff --git a/app/src/main/java/com/termux/app/TermuxActivity.java b/app/src/main/java/com/termux/app/TermuxActivity.java
index 36b96a97..729a636a 100644
--- a/app/src/main/java/com/termux/app/TermuxActivity.java
+++ b/app/src/main/java/com/termux/app/TermuxActivity.java
@@ -259,7 +259,8 @@ public final class TermuxActivity extends Activity implements ServiceConnection
if (mTermuxTerminalViewClient != null)
mTermuxTerminalViewClient.onStart();
- addTermuxActivityRootViewGlobalLayoutListener();
+ if (mPreferences.isTerminalMarginAdjustmentEnabled())
+ addTermuxActivityRootViewGlobalLayoutListener();
registerTermuxActivityBroadcastReceiver();
}
diff --git a/app/src/main/java/com/termux/app/fragments/settings/termux/TerminalViewPreferencesFragment.java b/app/src/main/java/com/termux/app/fragments/settings/termux/TerminalViewPreferencesFragment.java
new file mode 100644
index 00000000..ed10d18a
--- /dev/null
+++ b/app/src/main/java/com/termux/app/fragments/settings/termux/TerminalViewPreferencesFragment.java
@@ -0,0 +1,77 @@
+package com.termux.app.fragments.settings.termux;
+
+import android.content.Context;
+import android.os.Bundle;
+
+import androidx.annotation.Keep;
+import androidx.preference.PreferenceDataStore;
+import androidx.preference.PreferenceFragmentCompat;
+import androidx.preference.PreferenceManager;
+
+import com.termux.R;
+import com.termux.shared.settings.preferences.TermuxAppSharedPreferences;
+
+@Keep
+public class TerminalViewPreferencesFragment extends PreferenceFragmentCompat {
+
+ @Override
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+ Context context = getContext();
+ if (context == null) return;
+
+ PreferenceManager preferenceManager = getPreferenceManager();
+ preferenceManager.setPreferenceDataStore(TerminalViewPreferencesDataStore.getInstance(context));
+
+ setPreferencesFromResource(R.xml.termux_terminal_view_preferences, rootKey);
+ }
+
+}
+
+class TerminalViewPreferencesDataStore extends PreferenceDataStore {
+
+ private final Context mContext;
+ private final TermuxAppSharedPreferences mPreferences;
+
+ private static TerminalViewPreferencesDataStore mInstance;
+
+ private TerminalViewPreferencesDataStore(Context context) {
+ mContext = context;
+ mPreferences = TermuxAppSharedPreferences.build(context, true);
+ }
+
+ public static synchronized TerminalViewPreferencesDataStore getInstance(Context context) {
+ if (mInstance == null) {
+ mInstance = new TerminalViewPreferencesDataStore(context);
+ }
+ return mInstance;
+ }
+
+
+
+ @Override
+ public void putBoolean(String key, boolean value) {
+ if (mPreferences == null) return;
+ if (key == null) return;
+
+ switch (key) {
+ case "terminal_margin_adjustment":
+ mPreferences.setTerminalMarginAdjustment(value);
+ break;
+ default:
+ break;
+ }
+ }
+
+ @Override
+ public boolean getBoolean(String key, boolean defValue) {
+ if (mPreferences == null) return false;
+
+ switch (key) {
+ case "terminal_margin_adjustment":
+ return mPreferences.isTerminalMarginAdjustmentEnabled();
+ default:
+ return false;
+ }
+ }
+
+}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5f396302..c5133bb2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -168,6 +168,20 @@
Soft keyboard will be enabled only if no hardware keyboard is connected.
+
+ Terminal View
+ Preferences for terminal view
+
+
+ View
+
+
+ Terminal Margin Adjustment
+ Terminal margin adjustment will be disabled.
+ Terminal margin adjustment will be enabled. It should be enabled to try to fix the issue where soft keyboard covers part of extra keys/terminal view. If it causes screen flickering on your devices, then disable it. (Default)
+
+
+
&TERMUX_TASKER_APP_NAME;
Preferences for &TERMUX_TASKER_APP_NAME; app
diff --git a/app/src/main/res/xml/termux_preferences.xml b/app/src/main/res/xml/termux_preferences.xml
index f28c775d..90353c51 100644
--- a/app/src/main/res/xml/termux_preferences.xml
+++ b/app/src/main/res/xml/termux_preferences.xml
@@ -10,4 +10,9 @@
app:summary="@string/termux_terminal_io_preferences_summary"
app:fragment="com.termux.app.fragments.settings.termux.TerminalIOPreferencesFragment"/>
+
+
diff --git a/app/src/main/res/xml/termux_terminal_view_preferences.xml b/app/src/main/res/xml/termux_terminal_view_preferences.xml
new file mode 100644
index 00000000..3f668633
--- /dev/null
+++ b/app/src/main/res/xml/termux_terminal_view_preferences.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
diff --git a/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxAppSharedPreferences.java b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxAppSharedPreferences.java
index c2979ee0..7bcf408a 100644
--- a/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxAppSharedPreferences.java
+++ b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxAppSharedPreferences.java
@@ -91,6 +91,16 @@ public class TermuxAppSharedPreferences {
+ public boolean isTerminalMarginAdjustmentEnabled() {
+ return SharedPreferenceUtils.getBoolean(mSharedPreferences, TERMUX_APP.KEY_TERMINAL_MARGIN_ADJUSTMENT, TERMUX_APP.DEFAULT_TERMINAL_MARGIN_ADJUSTMENT);
+ }
+
+ public void setTerminalMarginAdjustment(boolean value) {
+ SharedPreferenceUtils.setBoolean(mSharedPreferences, TERMUX_APP.KEY_TERMINAL_MARGIN_ADJUSTMENT, value, false);
+ }
+
+
+
public boolean isSoftKeyboardEnabled() {
return SharedPreferenceUtils.getBoolean(mSharedPreferences, TERMUX_APP.KEY_SOFT_KEYBOARD_ENABLED, TERMUX_APP.DEFAULT_VALUE_KEY_SOFT_KEYBOARD_ENABLED);
}
diff --git a/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxPreferenceConstants.java b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxPreferenceConstants.java
index efec9d98..074aa602 100644
--- a/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxPreferenceConstants.java
+++ b/termux-shared/src/main/java/com/termux/shared/settings/preferences/TermuxPreferenceConstants.java
@@ -1,7 +1,7 @@
package com.termux.shared.settings.preferences;
/*
- * Version: v0.10.0
+ * Version: v0.11.0
*
* Changelog
*
@@ -44,6 +44,10 @@ package com.termux.shared.settings.preferences;
* - 0.10.0 (2021-05-12)
* - Added following to `TERMUX_APP`:
* `KEY_SOFT_KEYBOARD_ENABLED_ONLY_IF_NO_HARDWARE` and `DEFAULT_VALUE_KEY_SOFT_KEYBOARD_ENABLED_ONLY_IF_NO_HARDWARE`.
+ *
+ * - 0.11.0 (2021-07-08)
+ * - Added following to `TERMUX_APP`:
+ * `KEY_DISABLE_TERMINAL_MARGIN_ADJUSTMENT`.
*/
/**
@@ -60,6 +64,15 @@ public final class TermuxPreferenceConstants {
*/
public static final class TERMUX_APP {
+ /**
+ * Defines the key for whether terminal view margin adjustment that is done to prevent soft
+ * keyboard from covering bottom part of terminal view on some devices is enabled or not.
+ * Margin adjustment may cause screen flickering on some devices and so should be disabled.
+ */
+ public static final String KEY_TERMINAL_MARGIN_ADJUSTMENT = "terminal_margin_adjustment";
+ public static final boolean DEFAULT_TERMINAL_MARGIN_ADJUSTMENT = true;
+
+
/**
* Defines the key for whether to show terminal toolbar containing extra keys and text input field.
*/