瀏覽代碼

prevent crashing if fingerprint is not supported

tobiasKaminsky 8 年之前
父節點
當前提交
7a117ce1f7

+ 5 - 2
src/main/java/com/owncloud/android/ui/activity/FingerprintActivity.java

@@ -36,6 +36,7 @@ import android.os.CancellationSignal;
 import android.security.keystore.KeyGenParameterSpec;
 import android.security.keystore.KeyPermanentlyInvalidatedException;
 import android.security.keystore.KeyProperties;
+import android.support.annotation.RequiresApi;
 import android.support.v4.app.ActivityCompat;
 import android.support.v4.graphics.drawable.DrawableCompat;
 import android.support.v7.app.AppCompatActivity;
@@ -256,7 +257,8 @@ public class FingerprintActivity extends AppCompatActivity {
         Toast.makeText(this, errorSeq, Toast.LENGTH_LONG).show();
     }
 
-    final static public boolean isFingerprintCapable(Context context) {
+    @RequiresApi(api = Build.VERSION_CODES.M)
+    static public boolean isFingerprintCapable(Context context) {
         try {
             FingerprintManager fingerprintManager =
                     (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);
@@ -274,7 +276,8 @@ public class FingerprintActivity extends AppCompatActivity {
         return false;
     }
 
-    final static public boolean isFingerprintReady(Context context) {
+    @RequiresApi(api = Build.VERSION_CODES.M)
+    static public boolean isFingerprintReady(Context context) {
         try {
             FingerprintManager fingerprintManager =
                     (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);

+ 39 - 31
src/main/java/com/owncloud/android/ui/activity/Preferences.java

@@ -189,41 +189,49 @@ public class Preferences extends PreferenceActivity
         boolean fPrintEnabled = getResources().getBoolean(R.bool.fingerprint_enabled);
         fPrint = (CheckBoxPreference) findPreference(FingerprintActivity.PREFERENCE_USE_FINGERPRINT);
         if (fPrint != null) {
-            if(FingerprintActivity.isFingerprintCapable(MainApp.getAppContext()) && fPrintEnabled) {
-                fPrint.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
-                    @Override
-                    public boolean onPreferenceChange(Preference preference, Object newValue) {
-                        Boolean incoming = (Boolean) newValue;
-
-                        if(FingerprintActivity.isFingerprintReady(MainApp.getAppContext())) {
-                            SharedPreferences appPrefs =
-                                    PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
-                            SharedPreferences.Editor editor = appPrefs.edit();
-                            editor.putBoolean("use_fingerprint", incoming);
-                            editor.commit();
-                            return true;
-                        } else {
-                            if(incoming) {
-                                Toast.makeText(
-                                        MainApp.getAppContext(),
-                                        R.string.prefs_fingerprint_notsetup,
-                                        Toast.LENGTH_LONG)
-                                        .show();
-                                fPrint.setChecked(false);
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+                if (FingerprintActivity.isFingerprintCapable(MainApp.getAppContext()) && fPrintEnabled) {
+                    fPrint.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+                        @Override
+                        public boolean onPreferenceChange(Preference preference, Object newValue) {
+                            Boolean incoming = (Boolean) newValue;
+
+                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+                                if (FingerprintActivity.isFingerprintReady(MainApp.getAppContext())) {
+                                    SharedPreferences appPrefs =
+                                            PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
+                                    SharedPreferences.Editor editor = appPrefs.edit();
+                                    editor.putBoolean("use_fingerprint", incoming);
+                                    editor.apply();
+                                    return true;
+                                } else {
+                                    if (incoming) {
+                                        Toast.makeText(
+                                                MainApp.getAppContext(),
+                                                R.string.prefs_fingerprint_notsetup,
+                                                Toast.LENGTH_LONG)
+                                                .show();
+                                        fPrint.setChecked(false);
+                                    }
+                                    SharedPreferences appPrefs =
+                                            PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
+                                    SharedPreferences.Editor editor = appPrefs.edit();
+                                    editor.putBoolean("use_fingerprint", false);
+                                    editor.apply();
+                                    return false;
+                                }
+                            } else {
+                                return false;
                             }
-                            SharedPreferences appPrefs =
-                                    PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
-                            SharedPreferences.Editor editor = appPrefs.edit();
-                            editor.putBoolean("use_fingerprint", false);
-                            editor.commit();
-                            return false;
                         }
+                    });
+                    if (!FingerprintActivity.isFingerprintReady(MainApp.getAppContext())) {
+                        fPrint.setChecked(false);
                     }
-                });
-                if(!FingerprintActivity.isFingerprintReady(MainApp.getAppContext())) {
-                    fPrint.setChecked(false);
-                }
 
+                } else {
+                    preferenceCategoryDetails.removePreference(fPrint);
+                }
             } else {
                 preferenceCategoryDetails.removePreference(fPrint);
             }