diff options
author | stefan-niedermann <info@niedermann.it> | 2020-01-25 15:41:44 +0300 |
---|---|---|
committer | stefan-niedermann <info@niedermann.it> | 2020-01-25 15:41:44 +0300 |
commit | d8ea4da54c92ebb4d65ebb07685a11de6109181a (patch) | |
tree | 8f89ce3a0f533120067854997e7b06ee8cfba221 /app/src | |
parent | a1be4f72849142ef99b32f7f782347d8ca22e45c (diff) |
#365 Password protection
Added preference UI
Diffstat (limited to 'app/src')
6 files changed, 51 insertions, 13 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/PreferencesFragment.java b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/PreferencesFragment.java index 757af1bc..3cddea75 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/PreferencesFragment.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/PreferencesFragment.java @@ -5,11 +5,11 @@ import android.os.Bundle; import android.util.Log; import androidx.annotation.Nullable; -import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; import androidx.preference.SwitchPreference; import it.niedermann.owncloud.notes.R; +import it.niedermann.owncloud.notes.util.DeviceCredentialUtil; import it.niedermann.owncloud.notes.util.Notes; public class PreferencesFragment extends PreferenceFragmentCompat { @@ -25,8 +25,18 @@ public class PreferencesFragment extends PreferenceFragmentCompat { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.preferences); - final SwitchPreference themePref = (SwitchPreference) findPreference(getString(R.string.pref_key_theme)); - themePref.setOnPreferenceChangeListener((Preference preference, Object newValue) -> { + final SwitchPreference lockPref = findPreference(getString(R.string.pref_key_lock)); + if (!DeviceCredentialUtil.areCredentialsAvailable(getContext())) { + lockPref.setVisible(false); + } else { + lockPref.setOnPreferenceChangeListener((preference, newValue) -> { + Notes.setLockedPreference((Boolean) newValue); + return true; + }); + } + + final SwitchPreference themePref = findPreference(getString(R.string.pref_key_theme)); + themePref.setOnPreferenceChangeListener((preference, newValue) -> { Boolean darkTheme = (Boolean) newValue; Notes.setAppTheme(darkTheme); getActivity().setResult(Activity.RESULT_OK); @@ -34,8 +44,8 @@ public class PreferencesFragment extends PreferenceFragmentCompat { return true; }); - final SwitchPreference wifiOnlyPref = (SwitchPreference) findPreference(getString(R.string.pref_key_wifi_only)); - wifiOnlyPref.setOnPreferenceChangeListener((Preference preference, Object newValue) -> { + final SwitchPreference wifiOnlyPref = findPreference(getString(R.string.pref_key_wifi_only)); + wifiOnlyPref.setOnPreferenceChangeListener((preference, newValue) -> { Boolean syncOnWifiOnly = (Boolean) newValue; Log.v(TAG, "syncOnWifiOnly: " + syncOnWifiOnly); return true; diff --git a/app/src/main/java/it/niedermann/owncloud/notes/util/DeviceCredentialUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/util/DeviceCredentialUtil.java index 6d656fba..b093d90c 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/util/DeviceCredentialUtil.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/util/DeviceCredentialUtil.java @@ -5,17 +5,14 @@ import android.content.Context; import android.os.Build; import android.util.Log; -import androidx.annotation.RequiresApi; - /** * Utility class with methods for handling device credentials. */ -@RequiresApi(Build.VERSION_CODES.M) -class DeviceCredentialUtils { +public class DeviceCredentialUtil { - private static final String TAG = DeviceCredentialUtils.class.getCanonicalName(); + private static final String TAG = DeviceCredentialUtil.class.getCanonicalName(); - private DeviceCredentialUtils() { + private DeviceCredentialUtil() { // utility class -> private constructor } @@ -23,7 +20,12 @@ class DeviceCredentialUtils { KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); if (keyguardManager != null) { - return keyguardManager.isKeyguardSecure(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + return keyguardManager.isKeyguardSecure(); + } else { + Log.i(TAG, "No credentials are available on Android " + Build.VERSION.CODENAME); + return false; + } } else { Log.e(TAG, "Keyguard manager is null"); return false; diff --git a/app/src/main/java/it/niedermann/owncloud/notes/util/Notes.java b/app/src/main/java/it/niedermann/owncloud/notes/util/Notes.java index b44a8b04..591d52fe 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/util/Notes.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/util/Notes.java @@ -4,11 +4,15 @@ import android.app.Application; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; +import android.util.Log; import androidx.appcompat.app.AppCompatDelegate; public class Notes extends Application { + private static final String TAG = Notes.class.getCanonicalName(); + private static final String DARK_THEME = "darkTheme"; + private static boolean lockedPreference = false; private static boolean locked = true; @Override @@ -30,8 +34,13 @@ public class Notes extends Application { return prefs.getBoolean(DARK_THEME, false); } + public static void setLockedPreference(boolean lockedPreference) { + Log.d(TAG, "New locked preference: " + lockedPreference); + Notes.lockedPreference = lockedPreference; + } + public static boolean isLocked() { - return locked; + return lockedPreference && locked; } public static void lock() { diff --git a/app/src/main/res/drawable/ic_lock_grey600_24dp.xml b/app/src/main/res/drawable/ic_lock_grey600_24dp.xml new file mode 100644 index 00000000..d6561c0b --- /dev/null +++ b/app/src/main/res/drawable/ic_lock_grey600_24dp.xml @@ -0,0 +1,5 @@ +<vector android:autoMirrored="true" android:height="24dp" + android:tint="#666666" android:viewportHeight="24.0" + android:viewportWidth="24.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#FF000000" android:pathData="M18,8h-1L17,6c0,-2.76 -2.24,-5 -5,-5S7,3.24 7,6v2L6,8c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,10c0,-1.1 -0.9,-2 -2,-2zM12,17c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2zM15.1,8L8.9,8L8.9,6c0,-1.71 1.39,-3.1 3.1,-3.1 1.71,0 3.1,1.39 3.1,3.1v2z"/> +</vector> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 18119a1a..753e429f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -43,6 +43,7 @@ <string name="settings_font_title">Monospace font</string> <string name="settings_font_size">Font size</string> <string name="settings_wifi_only">Sync only on Wi-Fi</string> + <string name="settings_lock">Password protection</string> <!-- Certificates --> @@ -111,6 +112,7 @@ <string name="pref_key_font" translatable="false">font</string> <string name="pref_key_font_size" translatable="false">fontSize</string> <string name="pref_key_wifi_only" translatable="false">wifiOnly</string> + <string name="pref_key_lock" translatable="false">lock</string> <string name="pref_key_last_note_mode" translatable="false">lastNoteMode</string> <string name="pref_value_mode_edit" translatable="false">edit</string> <string name="pref_value_mode_preview" translatable="false">preview</string> @@ -121,6 +123,7 @@ <string name="pref_value_theme_light">Light</string> <string name="pref_value_font_normal">Normal</string> <string name="pref_value_wifi_and_mobile">Sync on Wi-Fi and mobile data</string> + <string name="pref_value_lock">Password protection</string> <string name="simple_error">Error</string> <string name="simple_close">Close</string> <string name="simple_copy">Copy</string> @@ -145,6 +148,7 @@ <string name="bulk_notes_restored">Restored %1$d notes</string> <string name="category_readonly">Read only</string> <string name="unlock_notes">Unlock notes</string> + <string name="simple_beta">Beta</string> <!-- Array: note modes --> <string-array name="noteMode_entries"> diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index d1668a87..3b3c4ead 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -1,6 +1,14 @@ <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> + <SwitchPreference + android:defaultValue="@string/pref_value_lock" + android:icon="@drawable/ic_lock_grey600_24dp" + android:key="@string/pref_key_lock" + android:layout="@layout/item_pref" + android:summary="@string/simple_beta" + android:title="@string/settings_lock" /> + <ListPreference android:defaultValue="@string/pref_value_mode_edit" android:entries="@array/noteMode_entries" |