From 9841b59f9f35e709e9161748e97250cd4a349f85 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Sun, 20 Mar 2022 17:46:24 +0530 Subject: [PATCH] Fix #132: Added a preference to disable visible password input flag --- .idea/misc.xml | 1 + .../preferences/EditorPreferences.java | 15 ++++++ .../views/editor/CodeEditorView.java | 7 +++ .../androidide/views/editor/IDEEditor.java | 17 +++++-- .../main/res/drawable/ic_password_input.xml | 8 ++++ app/src/main/res/values/strings.xml | 2 + .../managers/PreferenceManager.java | 48 +++++++++---------- .../androidide/models/ConstantsBridge.java | 18 +++---- 8 files changed, 75 insertions(+), 41 deletions(-) create mode 100644 app/src/main/res/drawable/ic_password_input.xml diff --git a/.idea/misc.xml b/.idea/misc.xml index b2b601070..50f7ed36b 100755 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -30,6 +30,7 @@ + diff --git a/app/src/main/java/com/itsaky/androidide/fragments/preferences/EditorPreferences.java b/app/src/main/java/com/itsaky/androidide/fragments/preferences/EditorPreferences.java index a7572423b..bc2516dc6 100755 --- a/app/src/main/java/com/itsaky/androidide/fragments/preferences/EditorPreferences.java +++ b/app/src/main/java/com/itsaky/androidide/fragments/preferences/EditorPreferences.java @@ -20,6 +20,7 @@ package com.itsaky.androidide.fragments.preferences; import static com.itsaky.androidide.managers.PreferenceManager.KEY_EDITOR_AUTO_SAVE; import static com.itsaky.androidide.managers.PreferenceManager.KEY_EDITOR_DRAW_HEX; import static com.itsaky.androidide.managers.PreferenceManager.KEY_EDITOR_FLAG_LINE_BREAK; +import static com.itsaky.androidide.managers.PreferenceManager.KEY_EDITOR_FLAG_PASSWORD; import static com.itsaky.androidide.managers.PreferenceManager.KEY_EDITOR_FLAG_WS_EMPTY_LINE; import static com.itsaky.androidide.managers.PreferenceManager.KEY_EDITOR_FLAG_WS_INNER; import static com.itsaky.androidide.managers.PreferenceManager.KEY_EDITOR_FLAG_WS_LEADING; @@ -35,10 +36,12 @@ import static com.itsaky.androidide.models.PrefBasedJavaServerSettings.KEY_JAVA_ import android.os.Bundle; import android.view.LayoutInflater; + import androidx.annotation.NonNull; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; import androidx.preference.SwitchPreference; + import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.itsaky.androidide.R; import com.itsaky.androidide.app.StudioApp; @@ -71,6 +74,7 @@ public class EditorPreferences extends BasePreferenceFragment final var usePopupActions = new SwitchPreference(getContext()); final var horizontalPopup = new SwitchPreference(getContext()); final var useGoogleCodeStyle = new SwitchPreference(getContext()); + final var visiblePasswordFlag = new SwitchPreference(getContext()); final var javaMatchLower = new SwitchPreference(getContext()); @@ -127,9 +131,15 @@ public class EditorPreferences extends BasePreferenceFragment useGoogleCodeStyle.setTitle(getString(R.string.idepref_java_useGoogleStyle_title)); useGoogleCodeStyle.setSummary(getString(R.string.idepref_java_useGoogleStyle_summary)); + visiblePasswordFlag.setIcon(R.drawable.ic_password_input); + visiblePasswordFlag.setKey(KEY_EDITOR_FLAG_PASSWORD); + visiblePasswordFlag.setTitle(getString(R.string.idepref_visiblePassword_title)); + visiblePasswordFlag.setSummary(getString(R.string.idepref_visiblePassword_summary)); + commonCategory.setTitle(getString(R.string.idepref_editor_category_common)); commonCategory.addPreference(fontSize); commonCategory.addPreference(fontLigatures); + commonCategory.addPreference(visiblePasswordFlag); commonCategory.addPreference(usePopupActions); commonCategory.addPreference(horizontalPopup); commonCategory.addPreference(nonPrintable); @@ -153,6 +163,7 @@ public class EditorPreferences extends BasePreferenceFragment autoSave.setOnPreferenceChangeListener(this); javaMatchLower.setOnPreferenceChangeListener(this); useGoogleCodeStyle.setOnPreferenceChangeListener(this); + visiblePasswordFlag.setOnPreferenceChangeListener(this); fontLigatures.setChecked(getPrefManager().getBoolean(KEY_EDITOR_FONT_LIGATURES, true)); usePopupActions.setChecked(getPrefManager().getBoolean(KEY_EDITOR_USE_POPUP, false)); @@ -162,6 +173,7 @@ public class EditorPreferences extends BasePreferenceFragment javaMatchLower.setChecked(getPrefManager().getBoolean(KEY_JAVA_PREF_MATCH_LOWER, false)); useGoogleCodeStyle.setChecked( getPrefManager().getBoolean(KEY_JAVA_PREF_GOOGLE_CODE_STYLE, false)); + visiblePasswordFlag.setChecked(getPrefManager().getBoolean(KEY_EDITOR_FLAG_PASSWORD, true)); } @Override @@ -169,6 +181,9 @@ public class EditorPreferences extends BasePreferenceFragment final boolean value = (boolean) newValue; switch (preference.getKey()) { + case KEY_EDITOR_FLAG_PASSWORD: + ConstantsBridge.EDITOR_PREF_VISIBLE_PASSWORD_CHANGED = true; + break; case KEY_EDITOR_DRAW_HEX: ConstantsBridge.EDITOR_PREF_DRAW_HEX_CHANGED = true; break; diff --git a/app/src/main/java/com/itsaky/androidide/views/editor/CodeEditorView.java b/app/src/main/java/com/itsaky/androidide/views/editor/CodeEditorView.java index 7c5a90ca2..a77e7eec6 100644 --- a/app/src/main/java/com/itsaky/androidide/views/editor/CodeEditorView.java +++ b/app/src/main/java/com/itsaky/androidide/views/editor/CodeEditorView.java @@ -291,6 +291,8 @@ public class CodeEditorView extends FrameLayout { boolean ligaturesChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_LIGATURES_CHANGED; boolean flagsChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_FLAGS_CHANGED; boolean drawHexChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_DRAW_HEX_CHANGED; + boolean inputFlagsChanged = + isFirstCreate || ConstantsBridge.EDITOR_PREF_VISIBLE_PASSWORD_CHANGED; final PreferenceManager prefs = StudioApp.getInstance().getPrefManager(); if (sizeChanged) { @@ -335,6 +337,11 @@ public class CodeEditorView extends FrameLayout { ConstantsBridge.EDITOR_PREF_FLAGS_CHANGED = false; } + if (inputFlagsChanged) { + binding.editor.setInputType(IDEEditor.createInputFlags()); + ConstantsBridge.EDITOR_PREF_VISIBLE_PASSWORD_CHANGED = false; + } + if (drawHexChanged) { // TODO Do something about this // Maybe use spans... diff --git a/app/src/main/java/com/itsaky/androidide/views/editor/IDEEditor.java b/app/src/main/java/com/itsaky/androidide/views/editor/IDEEditor.java index 6615f022a..f2119b370 100644 --- a/app/src/main/java/com/itsaky/androidide/views/editor/IDEEditor.java +++ b/app/src/main/java/com/itsaky/androidide/views/editor/IDEEditor.java @@ -106,12 +106,21 @@ public class IDEEditor extends CodeEditor { subscribeEvent( ContentChangeEvent.class, (event, unsubscribe) -> handleContentChange(event)); - // default editor input type + no suggestions flag - setInputType( + setInputType(createInputFlags()); + } + + public static int createInputFlags() { + var flags = EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE - | EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS - | EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); + | EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS; + if (StudioApp.getInstance() + .getPrefManager() + .getBoolean(PreferenceManager.KEY_EDITOR_FLAG_PASSWORD, true)) { + flags |= EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD; + } + + return flags; } @NonNull diff --git a/app/src/main/res/drawable/ic_password_input.xml b/app/src/main/res/drawable/ic_password_input.xml new file mode 100644 index 000000000..e6e756fe0 --- /dev/null +++ b/app/src/main/res/drawable/ic_password_input.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 883d9e473..50a4fb863 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -347,6 +347,8 @@ Format code Use Google Java Style code formatting Use Google Java Style code formatting configuration for formatting Java source code. + Visible password flag + Use for visible password input type flag in editor. This makes sure that no suggestions are proposed by soft keyboard. diff --git a/common/src/main/java/com/itsaky/androidide/managers/PreferenceManager.java b/common/src/main/java/com/itsaky/androidide/managers/PreferenceManager.java index a4b024c15..221f3e40a 100755 --- a/common/src/main/java/com/itsaky/androidide/managers/PreferenceManager.java +++ b/common/src/main/java/com/itsaky/androidide/managers/PreferenceManager.java @@ -23,16 +23,12 @@ import android.content.SharedPreferences; public class PreferenceManager { - private final SharedPreferences prefs; - public static final String KEY_FRAMEWORK_DOWNLOADED = "framework_downloaded"; public static final String KEY_FRAMEWORK_INSTALLED = "framework_installed"; public static final String KEY_IS_FIRST_PROJECT_BUILD = "project_isFirstBuild"; - public static final String KEY_OPEN_PROJECTS = "idepref_general_autoOpenProjects"; public static final String KEY_CONFIRM_PROJECT_OPEN = "idepref_general_confirmProjectOpen"; public static final String KEY_TERMINAL_USE_SYSTEM_SHELL = "idepref_general_terminalShell"; - public static final String KEY_EDITOR_FLAG_WS_LEADING = "idepref_editor_wsLeading"; public static final String KEY_EDITOR_FLAG_WS_TRAILING = "idepref_editor_wsTrailing"; public static final String KEY_EDITOR_FLAG_WS_INNER = "idepref_editor_wsInner"; @@ -46,15 +42,15 @@ public class PreferenceManager { public static final String KEY_EDITOR_FONT_LIGATURES = "idepref_editor_fontLigatures"; public static final String KEY_EDITOR_USE_POPUP = "idepref_editor_usePopup"; public static final String KEY_EDITOR_HORIZONTAL_POPUP = "idepref_editor_horizontalPopup"; - + public static final String KEY_EDITOR_FLAG_PASSWORD = "idepref_editor_flagPassword"; public static final String KEY_GRADLE_CMD_STACK_TRACE = "idepref_gradleCmd_stacktrace"; public static final String KEY_GRADLE_CMD_DEBUG = "idepref_gradleCmd_debug"; public static final String KEY_GRADLE_CMD_SCAN = "idepref_gradleCmd_scan"; public static final String KEY_GRADLE_CMD_INFO = "idepref_gradleCmd_info"; public static final String KEY_GRADLE_CMD_WARNING_MODE = "idepref_gradleCmd_warningMode"; - public static final String KEY_LAST_OPENED_PROJECT = "ide_last_project"; public static final String NO_OPENED_PROJECT = ""; + private final SharedPreferences prefs; @SuppressLint("CommitPrefEdits") public PreferenceManager(Context ctx) { @@ -113,14 +109,14 @@ public class PreferenceManager { return prefs.getString(key, defaultValue); } - public PreferenceManager setOpenedProject(String root) { - return putString(KEY_LAST_OPENED_PROJECT, root); - } - public String getOpenedProject() { return getString(KEY_LAST_OPENED_PROJECT, NO_OPENED_PROJECT); } + public PreferenceManager setOpenedProject(String root) { + return putString(KEY_LAST_OPENED_PROJECT, root); + } + public boolean wasProjectOpened() { return !getOpenedProject().equals(NO_OPENED_PROJECT); } @@ -141,38 +137,38 @@ public class PreferenceManager { return getBoolean(KEY_GRADLE_CMD_INFO, true); } - public boolean isGradleDebugEnabled() { - return getBoolean(KEY_GRADLE_CMD_DEBUG); - } - - public boolean isGradleScanEnabled() { - return getBoolean(KEY_GRADLE_CMD_SCAN); - } - - public boolean isGradleWarningEnabled() { - return getBoolean(KEY_GRADLE_CMD_WARNING_MODE); - } - - public PreferenceManager setGradleStacktraceEnabled(boolean enabled) { - return putBoolean(KEY_GRADLE_CMD_STACK_TRACE, enabled); - } - public PreferenceManager setGradleInfoEnabled(boolean enabled) { return putBoolean(KEY_GRADLE_CMD_INFO, enabled); } + public boolean isGradleDebugEnabled() { + return getBoolean(KEY_GRADLE_CMD_DEBUG); + } + public PreferenceManager setGradleDebugEnabled(boolean enabled) { return putBoolean(KEY_GRADLE_CMD_DEBUG, enabled); } + public boolean isGradleScanEnabled() { + return getBoolean(KEY_GRADLE_CMD_SCAN); + } + public PreferenceManager setGradleScanEnabled(boolean enabled) { return putBoolean(KEY_GRADLE_CMD_SCAN, enabled); } + public boolean isGradleWarningEnabled() { + return getBoolean(KEY_GRADLE_CMD_WARNING_MODE); + } + public PreferenceManager setGradleWarningEnabled(boolean enabled) { return putBoolean(KEY_GRADLE_CMD_WARNING_MODE, enabled); } + public PreferenceManager setGradleStacktraceEnabled(boolean enabled) { + return putBoolean(KEY_GRADLE_CMD_STACK_TRACE, enabled); + } + public int getEditorTabSize() { return getInt(KEY_EDITOR_TAB_SIZE, 4); } diff --git a/common/src/main/java/com/itsaky/androidide/models/ConstantsBridge.java b/common/src/main/java/com/itsaky/androidide/models/ConstantsBridge.java index 72d40b2cd..a0bdbaf71 100755 --- a/common/src/main/java/com/itsaky/androidide/models/ConstantsBridge.java +++ b/common/src/main/java/com/itsaky/androidide/models/ConstantsBridge.java @@ -19,17 +19,6 @@ package com.itsaky.androidide.models; public class ConstantsBridge { - public static boolean EDITOR_PREF_SIZE_CHANGED = false; - public static boolean EDITOR_PREF_LIGATURES_CHANGED = false; - public static boolean EDITOR_PREF_FLAGS_CHANGED = false; - public static boolean EDITOR_PREF_DRAW_HEX_CHANGED = false; - public static boolean CLASS_LOAD_SUCCESS = true; - - public static boolean SPLASH_TO_MAIN = false; - - // Always compared in lowercase - public static final String CUSTOM_COMMENT_WARNING_TOKEN = "#warn "; - public static final String VIRTUAL_KEYS = "[" + "\n [" @@ -57,4 +46,11 @@ public class ConstantsBridge { + "\n \"PGDN\"" + "\n ]" + "\n]"; + public static boolean EDITOR_PREF_SIZE_CHANGED = false; + public static boolean EDITOR_PREF_LIGATURES_CHANGED = false; + public static boolean EDITOR_PREF_FLAGS_CHANGED = false; + public static boolean EDITOR_PREF_DRAW_HEX_CHANGED = false; + public static boolean EDITOR_PREF_VISIBLE_PASSWORD_CHANGED = false; + public static boolean CLASS_LOAD_SUCCESS = true; + public static boolean SPLASH_TO_MAIN = false; }