From e0ad9ff57391963c28f702e45cc156d243a43acb Mon Sep 17 00:00:00 2001 From: agnostic-apollo Date: Thu, 8 Jul 2021 12:17:49 +0500 Subject: [PATCH] Allow users to disable terminal margin adjustment from termux settings Previously in (32135025) support was added with `disable-terminal-margin-adjustment` `termux.properties` property to disable terminal margin adjustment in case in causes screen flickering or other issues on some devices. It has now been removed in (7aefd943) and moved to Termux Settings since if it causes issues at startup and users can't access `termux.properties` file from the terminal, they will have to use SAF or root to access it, which will require an external app. Users can set the value from the `Termux Settings` -> `Termux` -> `Terminal View` -> `Terminal Margin Adjustment` toggle. The `Termux Settings` can be accessed from left drawer in termux and from the android launcher shortcut for Termux Settings, usually accessible by long holding on Termux icon. --- .../java/com/termux/app/TermuxActivity.java | 3 +- .../TerminalViewPreferencesFragment.java | 77 +++++++++++++++++++ app/src/main/res/values/strings.xml | 14 ++++ app/src/main/res/xml/termux_preferences.xml | 5 ++ .../xml/termux_terminal_view_preferences.xml | 15 ++++ .../TermuxAppSharedPreferences.java | 10 +++ .../TermuxPreferenceConstants.java | 15 +++- 7 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/termux/app/fragments/settings/termux/TerminalViewPreferencesFragment.java create mode 100644 app/src/main/res/xml/termux_terminal_view_preferences.xml 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. */