Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-notes.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authorstefan-niedermann <info@niedermann.it>2020-01-25 15:41:44 +0300
committerstefan-niedermann <info@niedermann.it>2020-01-25 15:41:44 +0300
commitd8ea4da54c92ebb4d65ebb07685a11de6109181a (patch)
tree8f89ce3a0f533120067854997e7b06ee8cfba221 /app/src
parenta1be4f72849142ef99b32f7f782347d8ca22e45c (diff)
#365 Password protection
Added preference UI
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/android/fragment/PreferencesFragment.java20
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/util/DeviceCredentialUtil.java16
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/util/Notes.java11
-rw-r--r--app/src/main/res/drawable/ic_lock_grey600_24dp.xml5
-rw-r--r--app/src/main/res/values/strings.xml4
-rw-r--r--app/src/main/res/xml/preferences.xml8
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"