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;
}