Fix #132: Added a preference to disable visible password input flag

This commit is contained in:
Akash Yadav
2022-03-20 17:46:24 +05:30
parent 8ea32c6561
commit 9841b59f9f
8 changed files with 75 additions and 41 deletions
+1
View File
@@ -30,6 +30,7 @@
<entry key="..\:/Projects/AndroidStudioProjects/AndroidIDE/app/src/main/res/drawable/ic_github.xml" value="0.21837606837606838" />
<entry key="..\:/Projects/AndroidStudioProjects/AndroidIDE/app/src/main/res/drawable/ic_linear_layout.xml" value="0.175" />
<entry key="..\:/Projects/AndroidStudioProjects/AndroidIDE/app/src/main/res/drawable/ic_min_sdk.xml" value="0.147" />
<entry key="..\:/Projects/AndroidStudioProjects/AndroidIDE/app/src/main/res/drawable/ic_password_input.xml" value="0.147" />
<entry key="..\:/Projects/AndroidStudioProjects/AndroidIDE/app/src/main/res/drawable/ic_pick_color.xml" value="0.147" />
<entry key="..\:/Projects/AndroidStudioProjects/AndroidIDE/app/src/main/res/drawable/ic_relative_layout.xml" value="0.175" />
<entry key="..\:/Projects/AndroidStudioProjects/AndroidIDE/app/src/main/res/drawable/ic_save.xml" value="0.26205128205128203" />
@@ -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;
@@ -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...
@@ -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
@@ -0,0 +1,8 @@
<!-- drawable/form_textbox_password.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#fff" android:pathData="M17,7H22V17H17V19A1,1 0 0,0 18,20H20V22H17.5C16.95,22 16,21.55 16,21C16,21.55 15.05,22 14.5,22H12V20H14A1,1 0 0,0 15,19V5A1,1 0 0,0 14,4H12V2H14.5C15.05,2 16,2.45 16,3C16,2.45 16.95,2 17.5,2H20V4H18A1,1 0 0,0 17,5V7M2,7H13V9H4V15H13V17H2V7M20,15V9H17V15H20M8.5,12A1.5,1.5 0 0,0 7,10.5A1.5,1.5 0 0,0 5.5,12A1.5,1.5 0 0,0 7,13.5A1.5,1.5 0 0,0 8.5,12M13,10.89C12.39,10.33 11.44,10.38 10.88,11C10.32,11.6 10.37,12.55 11,13.11C11.55,13.63 12.43,13.63 13,13.11V10.89Z" />
</vector>
+2
View File
@@ -347,6 +347,8 @@
<string name="title_format_code">Format code</string>
<string name="idepref_java_useGoogleStyle_title">Use Google Java Style code formatting</string>
<string name="idepref_java_useGoogleStyle_summary">Use Google Java Style code formatting configuration for formatting Java source code.</string>
<string name="idepref_visiblePassword_title">Visible password flag</string>
<string name="idepref_visiblePassword_summary">Use for visible password input type flag in editor. This makes sure that no suggestions are proposed by soft keyboard.</string>
</resources>
@@ -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 = "<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);
}
@@ -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;
}