Browse Source

Merge pull request #1657 from rhari991/device-credentials-unlock

Add support for device credentials
Andy Scherzinger 6 năm trước cách đây
mục cha
commit
b5bc9b6578
69 tập tin đã thay đổi với 478 bổ sung845 xóa
  1. 26 0
      drawable_resources/whats_new_device_credentials.svg
  2. 1 0
      lint.xml
  3. 1 1
      src/main/AndroidManifest.xml
  4. 27 28
      src/main/java/com/owncloud/android/authentication/PassCodeManager.java
  5. 21 0
      src/main/java/com/owncloud/android/db/PreferenceManager.java
  6. 6 0
      src/main/java/com/owncloud/android/features/FeatureList.java
  7. 10 0
      src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java
  8. 11 0
      src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java
  9. 0 341
      src/main/java/com/owncloud/android/ui/activity/FingerprintActivity.java
  10. 6 4
      src/main/java/com/owncloud/android/ui/activity/ManageSpaceActivity.java
  11. 0 3
      src/main/java/com/owncloud/android/ui/activity/PassCodeActivity.java
  12. 112 91
      src/main/java/com/owncloud/android/ui/activity/Preferences.java
  13. 95 0
      src/main/java/com/owncloud/android/ui/activity/RequestCredentialsActivity.java
  14. 136 0
      src/main/java/com/owncloud/android/utils/DeviceCredentialUtils.java
  15. BIN
      src/main/res/drawable-hdpi/whats_new_device_credentials.png
  16. 0 7
      src/main/res/drawable/ic_fingerprint.xml
  17. 0 65
      src/main/res/layout/fingerprintlock.xml
  18. 0 3
      src/main/res/values-ar/strings.xml
  19. 0 7
      src/main/res/values-b+en+001/strings.xml
  20. 0 3
      src/main/res/values-ca/strings.xml
  21. 0 5
      src/main/res/values-cs-rCZ/strings.xml
  22. 0 3
      src/main/res/values-da/strings.xml
  23. 0 6
      src/main/res/values-de/strings.xml
  24. 0 6
      src/main/res/values-el/strings.xml
  25. 0 6
      src/main/res/values-es-rAR/strings.xml
  26. 0 7
      src/main/res/values-es-rCL/strings.xml
  27. 0 7
      src/main/res/values-es-rCO/strings.xml
  28. 0 7
      src/main/res/values-es-rCR/strings.xml
  29. 0 7
      src/main/res/values-es-rDO/strings.xml
  30. 0 7
      src/main/res/values-es-rEC/strings.xml
  31. 0 7
      src/main/res/values-es-rGT/strings.xml
  32. 0 7
      src/main/res/values-es-rHN/strings.xml
  33. 0 7
      src/main/res/values-es-rMX/strings.xml
  34. 0 7
      src/main/res/values-es-rNI/strings.xml
  35. 0 7
      src/main/res/values-es-rPA/strings.xml
  36. 0 7
      src/main/res/values-es-rPE/strings.xml
  37. 0 7
      src/main/res/values-es-rPR/strings.xml
  38. 0 7
      src/main/res/values-es-rPY/strings.xml
  39. 0 7
      src/main/res/values-es-rSV/strings.xml
  40. 0 7
      src/main/res/values-es-rUY/strings.xml
  41. 0 7
      src/main/res/values-es/strings.xml
  42. 0 1
      src/main/res/values-eu/strings.xml
  43. 0 5
      src/main/res/values-fi-rFI/strings.xml
  44. 0 7
      src/main/res/values-fr/strings.xml
  45. 0 7
      src/main/res/values-hu-rHU/strings.xml
  46. 0 6
      src/main/res/values-in/strings.xml
  47. 0 6
      src/main/res/values-is/strings.xml
  48. 0 7
      src/main/res/values-it/strings.xml
  49. 0 6
      src/main/res/values-ja-rJP/strings.xml
  50. 0 7
      src/main/res/values-ka-rGE/strings.xml
  51. 0 3
      src/main/res/values-ko/strings.xml
  52. 0 6
      src/main/res/values-lt-rLT/strings.xml
  53. 0 7
      src/main/res/values-nb-rNO/strings.xml
  54. 0 7
      src/main/res/values-nl/strings.xml
  55. 0 7
      src/main/res/values-pl/strings.xml
  56. 0 7
      src/main/res/values-pt-rBR/strings.xml
  57. 0 7
      src/main/res/values-ru/strings.xml
  58. 0 3
      src/main/res/values-sk-rSK/strings.xml
  59. 0 3
      src/main/res/values-sl/strings.xml
  60. 0 6
      src/main/res/values-sq/strings.xml
  61. 0 7
      src/main/res/values-sr/strings.xml
  62. 0 6
      src/main/res/values-sv/strings.xml
  63. 0 7
      src/main/res/values-tr/strings.xml
  64. 0 6
      src/main/res/values-zh-rCN/strings.xml
  65. 0 5
      src/main/res/values-zh-rTW/strings.xml
  66. 0 1
      src/main/res/values/dims.xml
  67. 10 1
      src/main/res/values/setup.xml
  68. 11 7
      src/main/res/values/strings.xml
  69. 5 6
      src/main/res/xml/preferences.xml

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 26 - 0
drawable_resources/whats_new_device_credentials.svg


+ 1 - 0
lint.xml

@@ -29,6 +29,7 @@
 
     <issue id="UnusedResources">
         <ignore path="**/values-b+en+001/strings.xml"/>
+        <ignore path="**/values-b+es+419/strings.xml" />
         <ignore path="**/values-pt-rPT/strings.xml"/>
         <ignore path="**/values-ro/strings.xml"/>
         <ignore path="**/values-zh-rCN/strings.xml"/>

+ 1 - 1
src/main/AndroidManifest.xml

@@ -241,7 +241,7 @@
         <service android:name=".media.MediaService" />
 
         <activity android:name=".ui.activity.PassCodeActivity" />
-        <activity android:name=".ui.activity.FingerprintActivity"/>
+        <activity android:name=".ui.activity.RequestCredentialsActivity" />
         <activity android:name=".ui.activity.ConflictsResolveActivity"/>
         <activity android:name=".ui.activity.GenericExplanationActivity"/>
         <activity android:name=".ui.activity.ErrorsWhileCopyingHandlerActivity"/>

+ 27 - 28
src/main/java/com/owncloud/android/authentication/PassCodeManager.java

@@ -1,4 +1,4 @@
-/**
+/*
  *   ownCloud Android client application
  *
  *   @author David A. Velasco
@@ -22,16 +22,16 @@ package com.owncloud.android.authentication;
 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
 import android.os.Build;
 import android.os.PowerManager;
-import android.preference.PreferenceManager;
 import android.view.WindowManager;
 
 import com.owncloud.android.MainApp;
-import com.owncloud.android.ui.activity.FingerprintActivity;
+import com.owncloud.android.db.PreferenceManager;
 import com.owncloud.android.ui.activity.PassCodeActivity;
 import com.owncloud.android.ui.activity.Preferences;
+import com.owncloud.android.ui.activity.RequestCredentialsActivity;
+import com.owncloud.android.utils.DeviceCredentialUtils;
 
 import java.util.HashSet;
 import java.util.Set;
@@ -40,10 +40,12 @@ public class PassCodeManager {
 
     private static final Set<Class> exemptOfPasscodeActivities;
 
+    public static final int PASSCODE_ACTIVITY = 9999;
+
     static {
         exemptOfPasscodeActivities = new HashSet<>();
         exemptOfPasscodeActivities.add(PassCodeActivity.class);
-        exemptOfPasscodeActivities.add(FingerprintActivity.class);
+        exemptOfPasscodeActivities.add(RequestCredentialsActivity.class);
         // other activities may be exempted, if needed
     }
 
@@ -62,10 +64,10 @@ public class PassCodeManager {
         return passCodeManagerInstance;
     }
 
-    protected PassCodeManager() {}
+    private PassCodeManager() {}
 
     public void onActivityCreated(Activity activity) {
-        if (passCodeIsEnabled() || fingerprintIsEnabled()) {
+        if (passCodeIsEnabled() || deviceCredentialsAreEnabled(activity)) {
             activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
         } else {
             activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
@@ -78,17 +80,15 @@ public class PassCodeManager {
             Intent i = new Intent(MainApp.getAppContext(), PassCodeActivity.class);
             i.setAction(PassCodeActivity.ACTION_CHECK);
             i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
-            activity.startActivity(i);
+            activity.startActivityForResult(i, PASSCODE_ACTIVITY);
         }
 
         if (!exemptOfPasscodeActivities.contains(activity.getClass()) &&
-                Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
-                fingerprintShouldBeRequested() && FingerprintActivity.isFingerprintReady(MainApp.getAppContext())) {
-
-            Intent i = new Intent(MainApp.getAppContext(), FingerprintActivity.class);
-            i.setAction(PassCodeActivity.ACTION_CHECK);
+                Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && deviceCredentialsShouldBeRequested(activity) &&
+                !DeviceCredentialUtils.tryEncrypt(activity)) {
+            Intent i = new Intent(MainApp.getAppContext(), RequestCredentialsActivity.class);
             i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
-            activity.startActivity(i);
+            activity.startActivityForResult(i, PASSCODE_ACTIVITY);
         }
 
         visibleActivitiesCounter++;    // keep it AFTER passCodeShouldBeRequested was checked
@@ -100,7 +100,8 @@ public class PassCodeManager {
         }
         setUnlockTimestamp();
         PowerManager powerMgr = (PowerManager) activity.getSystemService(Context.POWER_SERVICE);
-        if ((passCodeIsEnabled() || fingerprintIsEnabled())&& powerMgr != null && !powerMgr.isScreenOn()) {
+        if ((passCodeIsEnabled() || deviceCredentialsAreEnabled(activity)) && powerMgr != null
+                && !powerMgr.isScreenOn()) {
             activity.moveTaskToBack(true);
         }
     }
@@ -110,25 +111,23 @@ public class PassCodeManager {
     }
 
     private boolean passCodeShouldBeRequested() {
-        return (passCodeIsEnabled() && hasAuthenticationTimeoutExpired());
+        return (System.currentTimeMillis() - timestamp) > PASS_CODE_TIMEOUT &&
+                visibleActivitiesCounter <= 0 && passCodeIsEnabled();
     }
 
     private boolean passCodeIsEnabled() {
-        SharedPreferences appPrefs = PreferenceManager.getDefaultSharedPreferences(MainApp.getAppContext());
-        return (appPrefs.getBoolean(PassCodeActivity.PREFERENCE_SET_PASSCODE, false));
-    }
-
-    private boolean fingerprintShouldBeRequested() {
-        return (fingerprintIsEnabled() && hasAuthenticationTimeoutExpired());
+        return PreferenceManager.getLockPreference(MainApp.getAppContext()).equals(Preferences.LOCK_PASSCODE);
     }
 
-    private boolean hasAuthenticationTimeoutExpired() {
-        return (System.currentTimeMillis() - timestamp) > PASS_CODE_TIMEOUT && visibleActivitiesCounter <= 0;
+    private boolean deviceCredentialsShouldBeRequested(Activity activity) {
+        return (System.currentTimeMillis() - timestamp) > PASS_CODE_TIMEOUT && visibleActivitiesCounter <= 0 &&
+                deviceCredentialsAreEnabled(activity);
     }
 
-    private boolean fingerprintIsEnabled() {
-        SharedPreferences appPrefs = PreferenceManager.getDefaultSharedPreferences(MainApp.getAppContext());
-        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
-                appPrefs.getBoolean(Preferences.PREFERENCE_USE_FINGERPRINT, false);
+    private boolean deviceCredentialsAreEnabled(Activity activity) {
+        return PreferenceManager.getLockPreference(MainApp.getAppContext()).equals(Preferences.LOCK_DEVICE_CREDENTIALS)
+                || Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
+                        (PreferenceManager.isUseFingerprint(MainApp.getAppContext())
+                                && DeviceCredentialUtils.areCredentialsAvailable(activity));
     }
 }

+ 21 - 0
src/main/java/com/owncloud/android/db/PreferenceManager.java

@@ -28,6 +28,7 @@ import com.owncloud.android.datamodel.ArbitraryDataProvider;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.ui.activity.ComponentsGetter;
+import com.owncloud.android.ui.activity.Preferences;
 import com.owncloud.android.utils.FileSortOrder;
 
 import static com.owncloud.android.ui.fragment.OCFileListFragment.FOLDER_LAYOUT_LIST;
@@ -181,6 +182,26 @@ public abstract class PreferenceManager {
         saveStringPreference(context, AUTO_PREF__LAST_UPLOAD_PATH, path);
     }
 
+    /**
+     * Gets the lock preference configured by the user.
+     *
+     * @param context Caller {@link Context}, used to access to shared preferences manager.
+     * @return lock     lock preference value.
+     */
+    public static String getLockPreference(Context context) {
+        return getDefaultSharedPreferences(context).getString(Preferences.PREFERENCE_LOCK, "");
+    }
+
+    /**
+     * Gets the lock via fingerprint preference configured by the user.
+     *
+     * @param context Caller {@link Context}, used to access to shared preferences manager.
+     * @return useFingerprint     is lock via fingerprint preference.
+     */
+    public static boolean isUseFingerprint(Context context) {
+        return getDefaultSharedPreferences(context).getBoolean(Preferences.PREFERENCE_USE_FINGERPRINT, false);
+    }
+
     /**
      * Get preferred folder display type.
      *

+ 6 - 0
src/main/java/com/owncloud/android/features/FeatureList.java

@@ -41,6 +41,7 @@ public class FeatureList {
 
     private static final int VERSION_1_0_0 = 10000099;
     private static final int VERSION_3_0_0 = 30000099;
+    private static final int VERSION_3_3_0 = 30030099;
     private static final int BETA_VERSION_0 = 0;
 
     static public ArrayList<FeatureItem> get(boolean isMultiAccount) {
@@ -69,6 +70,11 @@ public class FeatureList {
                 R.string.whats_new_ipv6_content, VERSION_3_0_0,
                 BETA_VERSION_0, SHOW_ON_UPGRADE, false, false));
 
+        // 3.3.0
+        featuresList.add(new FeatureItem(R.drawable.whats_new_device_credentials,
+                R.string.whats_new_device_credentials_title, R.string.whats_new_device_credentials_content,
+                VERSION_3_3_0, BETA_VERSION_0, SHOW_ON_UPGRADE, false, false));
+
         return featuresList;
     }
 

+ 10 - 0
src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java

@@ -26,6 +26,7 @@ import android.annotation.TargetApi;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
+import android.content.SharedPreferences;
 import android.content.res.AssetFileDescriptor;
 import android.database.Cursor;
 import android.graphics.Point;
@@ -34,6 +35,7 @@ import android.os.CancellationSignal;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.ParcelFileDescriptor;
+import android.preference.PreferenceManager;
 import android.provider.DocumentsProvider;
 import android.util.Log;
 import android.widget.Toast;
@@ -47,6 +49,7 @@ import com.owncloud.android.files.services.FileDownloader;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.operations.SynchronizeFileOperation;
 import com.owncloud.android.ui.activity.ConflictsResolveActivity;
+import com.owncloud.android.ui.activity.Preferences;
 import com.owncloud.android.utils.FileStorageUtils;
 
 import org.nextcloud.providers.cursors.FileCursor;
@@ -68,6 +71,13 @@ public class DocumentsStorageProvider extends DocumentsProvider {
 
     @Override
     public Cursor queryRoots(String[] projection) throws FileNotFoundException {
+
+        SharedPreferences appPrefs = PreferenceManager.getDefaultSharedPreferences(MainApp.getAppContext());
+        if (appPrefs.getString(Preferences.PREFERENCE_LOCK, "").equals(Preferences.LOCK_PASSCODE) ||
+                appPrefs.getString(Preferences.PREFERENCE_LOCK, "").equals(Preferences.LOCK_DEVICE_CREDENTIALS)) {
+            return new FileCursor(new String[]{});
+        }
+        
         initiateStorageMap();
 
         final RootCursor result = new RootCursor(projection);

+ 11 - 0
src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java

@@ -34,6 +34,7 @@ import android.graphics.PorterDuff;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.LayerDrawable;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.support.design.widget.NavigationView;
@@ -59,6 +60,7 @@ import com.bumptech.glide.request.target.SimpleTarget;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.authentication.PassCodeManager;
 import com.owncloud.android.datamodel.ArbitraryDataProvider;
 import com.owncloud.android.datamodel.ExternalLinksProvider;
 import com.owncloud.android.datamodel.OCFile;
@@ -1228,6 +1230,15 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
             } else {
                 updateAccountList();
             }
+        } else if (requestCode == PassCodeManager.PASSCODE_ACTIVITY &&
+                Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && data != null) {
+            int result = data.getIntExtra(RequestCredentialsActivity.KEY_CHECK_RESULT,
+                    RequestCredentialsActivity.KEY_CHECK_RESULT_FALSE);
+
+            if (result == RequestCredentialsActivity.KEY_CHECK_RESULT_CANCEL) {
+                Log_OC.d(TAG, "PassCodeManager cancelled");
+                super.onBackPressed();
+            }
         }
     }
 

+ 0 - 341
src/main/java/com/owncloud/android/ui/activity/FingerprintActivity.java

@@ -1,341 +0,0 @@
-/*
- *   Nextcloud Android client application
- *
- *   @author Florian Lentz
- *   Copyright (C) 2017 Florian Lentz
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- *   License as published by the Free Software Foundation; either
- *   version 3 of the License, or any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- *   You should have received a copy of the GNU Affero General Public
- *   License along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package com.owncloud.android.ui.activity;
-
-import android.Manifest;
-import android.app.KeyguardManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.res.ColorStateList;
-import android.graphics.Color;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import android.hardware.fingerprint.FingerprintManager;
-import android.os.Build;
-import android.os.Bundle;
-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;
-import android.support.v7.widget.Toolbar;
-import android.view.KeyEvent;
-import android.widget.ImageView;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.owncloud.android.MainApp;
-import com.owncloud.android.R;
-import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.utils.ThemeUtils;
-
-import java.io.IOException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.CertificateException;
-
-import javax.crypto.Cipher;
-import javax.crypto.KeyGenerator;
-import javax.crypto.NoSuchPaddingException;
-import javax.crypto.SecretKey;
-
-/**
- * Activity to handle access to the app based on the fingerprint.
- */
-@RequiresApi(Build.VERSION_CODES.M)
-public class FingerprintActivity extends AppCompatActivity {
-
-    private static final String TAG = FingerprintActivity.class.getSimpleName();
-
-    public final static String KEY_CHECK_RESULT = "KEY_CHECK_RESULT";
-
-    public static final String ANDROID_KEY_STORE = "AndroidKeyStore";
-
-    private KeyStore keyStore;
-    // Variable used for storing the key in the Android Keystore container
-    private static final String KEY_NAME = "Nextcloud";
-    private Cipher cipher;
-
-    private CancellationSignal cancellationSignal;
-
-    /**
-     * Initializes the activity.
-     *
-     * @param savedInstanceState    Previously saved state - irrelevant in this case
-     */
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.fingerprintlock);
-
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-            getWindow().setStatusBarColor(ThemeUtils.primaryDarkColor(this));
-        }
-
-        Toolbar toolbar = findViewById(R.id.toolbar);
-        toolbar.setTitleTextColor(ThemeUtils.fontColor(this));
-        toolbar.setBackground(new ColorDrawable(ThemeUtils.primaryColor(this, false)));
-    }
-
-    private void startFingerprint() {
-        TextView fingerprintTextView = findViewById(R.id.scanfingerprinttext);
-
-        FingerprintManager fingerprintManager =
-                (FingerprintManager) MainApp.getAppContext().getSystemService(Context.FINGERPRINT_SERVICE);
-
-        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT)
-                != PackageManager.PERMISSION_GRANTED) {
-            return;
-        }
-        KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
-
-        if (keyguardManager.isKeyguardSecure()) {
-            generateKey();
-
-            if (cipherInit()) {
-                FingerprintManager.CryptoObject cryptoObject = new FingerprintManager.CryptoObject(cipher);
-                FingerprintHandler.Callback callback = new FingerprintHandler.Callback() {
-                    @Override
-                    public void onAuthenticated() {
-                        fingerprintResult(true);
-                    }
-
-                    @Override
-                    public void onFailed(String error) {
-                        Toast.makeText(MainApp.getAppContext(), error, Toast.LENGTH_LONG).show();
-                        ImageView imageView = findViewById(R.id.fingerprinticon);
-                        int[][] states = new int[][]{
-                                new int[]{android.R.attr.state_activated},
-                                new int[]{-android.R.attr.state_activated}
-                        };
-                        int[] colors = new int[]{Color.parseColor("#FF0000"), Color.RED};
-                        ColorStateList csl = new ColorStateList(states, colors);
-                        Drawable drawable = DrawableCompat.wrap(imageView.getDrawable());
-                        DrawableCompat.setTintList(drawable, csl);
-                        imageView.setImageDrawable(drawable);
-                    }
-                };
-
-                FingerprintHandler helper = new FingerprintHandler(fingerprintTextView, callback);
-                cancellationSignal = new CancellationSignal();
-                if (ActivityCompat.checkSelfPermission(MainApp.getAppContext(), Manifest.permission.USE_FINGERPRINT)
-                        != PackageManager.PERMISSION_GRANTED) {
-                    return;
-                }
-                fingerprintManager.authenticate(cryptoObject, cancellationSignal, 0, helper, null);
-            }
-        }
-    }
-
-    @Override
-    public void onResume(){
-        super.onResume();
-        startFingerprint();
-        ImageView imageView = findViewById(R.id.fingerprinticon);
-        imageView.setImageDrawable(ThemeUtils.tintDrawable(R.drawable.ic_fingerprint, ThemeUtils.primaryColor(this)));
-    }
-
-    @Override
-    public void onStop(){
-        super.onStop();
-        if(cancellationSignal != null) {
-            cancellationSignal.cancel();
-        }
-    }
-
-    /**
-     * Overrides click on the BACK arrow to prevent fingerprint from being worked around.
-     *
-     * @param keyCode Key code of the key that triggered the down event.
-     * @param event   Event triggered.
-     * @return 'True' when the key event was processed by this method.
-     */
-    @Override
-    public boolean onKeyDown(int keyCode, KeyEvent event) {
-        return keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0 || super.onKeyDown(keyCode, event);
-    }
-
-    protected void generateKey() {
-        try {
-            keyStore = KeyStore.getInstance(ANDROID_KEY_STORE);
-        } catch (Exception e) {
-            Log_OC.e(TAG, "Error getting KeyStore", e);
-        }
-
-        KeyGenerator keyGenerator;
-        try {
-            keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, ANDROID_KEY_STORE);
-
-            keyStore.load(null);
-            keyGenerator.init(
-                    new KeyGenParameterSpec.Builder(
-                            KEY_NAME, KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT
-                    )
-                            .setBlockModes(KeyProperties.BLOCK_MODE_CBC)
-                            .setUserAuthenticationRequired(true)
-                            .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
-                            .build());
-            keyGenerator.generateKey();
-        } catch (NoSuchAlgorithmException | InvalidAlgorithmParameterException | CertificateException | IOException |
-                NoSuchProviderException e) {
-            Log_OC.e(TAG, "Exception: " + e.getMessage());
-        }
-    }
-
-    public boolean cipherInit() {
-        try {
-            cipher = Cipher.getInstance(
-                    KeyProperties.KEY_ALGORITHM_AES + "/"
-                            + KeyProperties.BLOCK_MODE_CBC + "/"
-                            + KeyProperties.ENCRYPTION_PADDING_PKCS7);
-        } catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
-            return false;
-        }
-
-        try {
-            keyStore.load(null);
-            SecretKey key = (SecretKey) keyStore.getKey(KEY_NAME, null);
-            cipher.init(Cipher.ENCRYPT_MODE, key);
-            return true;
-        } catch (KeyPermanentlyInvalidatedException e) {
-            return false;
-        } catch (KeyStoreException
-                | CertificateException
-                | UnrecoverableKeyException
-                | IOException
-                | NoSuchAlgorithmException
-                | InvalidKeyException e) {
-            return false;
-        }
-    }
-
-    private void fingerprintResult(boolean fingerOk) {
-        if (fingerOk) {
-            Intent resultIntent = new Intent();
-            resultIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
-            resultIntent.putExtra(KEY_CHECK_RESULT, true);
-            setResult(RESULT_OK, resultIntent);
-            finish();
-        } else {
-            showErrorAndRestart(R.string.fingerprint_unknown);
-        }
-    }
-
-    private void showErrorAndRestart(int errorMessage) {
-        CharSequence errorSeq = getString(errorMessage);
-        Toast.makeText(this, errorSeq, Toast.LENGTH_LONG).show();
-    }
-
-    @RequiresApi(api = Build.VERSION_CODES.M)
-    static public boolean isFingerprintCapable(Context context) {
-        try {
-            FingerprintManager fingerprintManager =
-                    (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);
-
-            if (ActivityCompat.checkSelfPermission(context, Manifest.permission.USE_FINGERPRINT)
-                    != PackageManager.PERMISSION_GRANTED) {
-                return false;
-            }
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-                return fingerprintManager.isHardwareDetected();
-            }
-        } catch (Exception e) {
-            return false;
-        }
-        return false;
-    }
-
-    static public boolean isFingerprintReady(Context context) {
-        try {
-            FingerprintManager fingerprintManager =
-                    (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);
-
-            return ActivityCompat.checkSelfPermission(context, Manifest.permission.USE_FINGERPRINT) ==
-                    PackageManager.PERMISSION_GRANTED && fingerprintManager.isHardwareDetected() &&
-                    fingerprintManager.hasEnrolledFingerprints();
-        } catch (Exception e) {
-            return false;
-        }
-    }
-}
-
-@RequiresApi(api = Build.VERSION_CODES.M)
-class FingerprintHandler extends FingerprintManager.AuthenticationCallback {
-
-    private TextView text;
-    private Callback callback;
-
-    // Constructor
-    FingerprintHandler(TextView mText, Callback mCallback) {
-        text = mText;
-        callback = mCallback;
-    }
-
-    @Override
-    public void onAuthenticationError(int errMsgId, CharSequence errString) {
-        // this.update(String.valueOf(errString), false);
-    }
-
-    @Override
-    public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
-        this.update(String.valueOf(helpString), false);
-    }
-
-    @Override
-    public void onAuthenticationFailed() {
-        this.update(MainApp.getAppContext().getString(R.string.fingerprint_unknown), false);
-    }
-
-    @Override
-    public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
-        this.update("Fingerprint Authentication succeeded.", true);
-    }
-
-    public void update(final String e, Boolean success) {
-        if(success) {
-            text.postDelayed(new Runnable() {
-                @Override
-                public void run() {
-                    callback.onAuthenticated();
-                }
-            }, 0);
-        } else {
-            text.postDelayed(new Runnable() {
-                @Override
-                public void run() {
-                    callback.onFailed(e);
-                }
-            }, 0);
-        }
-    }
-
-    interface Callback {
-        void onAuthenticated();
-        void onFailed(String error);
-    }
-}

+ 6 - 4
src/main/java/com/owncloud/android/ui/activity/ManageSpaceActivity.java

@@ -52,10 +52,10 @@ public class ManageSpaceActivity extends AppCompatActivity {
         actionBar.setDisplayHomeAsUpEnabled(true);
         actionBar.setTitle(R.string.manage_space_title);
 
-        TextView descriptionTextView = (TextView) findViewById(R.id.general_description);
+        TextView descriptionTextView = findViewById(R.id.general_description);
         descriptionTextView.setText(getString(R.string.manage_space_description, getString(R.string.app_name)));
 
-        Button clearDataButton = (Button) findViewById(R.id.clearDataButton);
+        Button clearDataButton = findViewById(R.id.clearDataButton);
         clearDataButton.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
@@ -94,7 +94,9 @@ public class ManageSpaceActivity extends AppCompatActivity {
             SharedPreferences appPrefs = PreferenceManager
                     .getDefaultSharedPreferences(getApplicationContext());
 
-            boolean passCodeEnable = appPrefs.getBoolean(PassCodeActivity.PREFERENCE_SET_PASSCODE, false);
+            String lockPref = appPrefs.getString(Preferences.PREFERENCE_LOCK, Preferences.LOCK_NONE);
+            boolean passCodeEnable = appPrefs.getString(Preferences.PREFERENCE_LOCK, "")
+                    .equals(Preferences.LOCK_PASSCODE);
 
             String passCodeDigits[] = new String[4];
             if (passCodeEnable) {
@@ -122,7 +124,7 @@ public class ManageSpaceActivity extends AppCompatActivity {
                 appPrefsEditor.putString(PassCodeActivity.PREFERENCE_PASSCODE_D4, passCodeDigits[3]);
             }
 
-            appPrefsEditor.putBoolean(PassCodeActivity.PREFERENCE_SET_PASSCODE, passCodeEnable);
+            appPrefsEditor.putString(Preferences.PREFERENCE_LOCK, lockPref);
             result = result && appPrefsEditor.commit();
 
             return result;

+ 0 - 3
src/main/java/com/owncloud/android/ui/activity/PassCodeActivity.java

@@ -56,9 +56,6 @@ public class PassCodeActivity extends AppCompatActivity {
     public final static String KEY_PASSCODE  = "KEY_PASSCODE";
     public final static String KEY_CHECK_RESULT = "KEY_CHECK_RESULT";
 
-    // NOTE: PREFERENCE_SET_PASSCODE must have the same value as preferences.xml-->android:key for passcode preference
-    public final static String PREFERENCE_SET_PASSCODE = "set_pincode";
-
     public final static String PREFERENCE_PASSCODE_D = "PrefPinCode";
     public final static String PREFERENCE_PASSCODE_D1 = "PrefPinCode1";
     public final static String PREFERENCE_PASSCODE_D2 = "PrefPinCode2";

+ 112 - 91
src/main/java/com/owncloud/android/ui/activity/Preferences.java

@@ -70,11 +70,13 @@ import com.owncloud.android.lib.common.ExternalLinkType;
 import com.owncloud.android.lib.common.OwnCloudAccount;
 import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
 import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.utils.DeviceCredentialUtils;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.MimeTypeUtil;
 import com.owncloud.android.utils.ThemeUtils;
 
 import java.io.IOException;
+import java.util.ArrayList;
 
 /**
  * An Activity that allows the user to change the application's settings.
@@ -86,11 +88,18 @@ public class Preferences extends PreferenceActivity
 
     private static final String TAG = Preferences.class.getSimpleName();
 
+    public static final String PREFERENCE_LOCK= "lock";
+
+    public static final String LOCK_NONE = "none";
+    public static final String LOCK_PASSCODE = "passcode";
+    public static final String LOCK_DEVICE_CREDENTIALS = "device_credentials";
+
     public final static String PREFERENCE_USE_FINGERPRINT = "use_fingerprint";
     public static final String PREFERENCE_EXPERT_MODE = "expert_mode";
 
     private static final int ACTION_REQUEST_PASSCODE = 5;
     private static final int ACTION_CONFIRM_PASSCODE = 6;
+    private static final int ACTION_CONFIRM_DEVICE_CREDENTIALS = 7;
 
     private static final int ACTION_REQUEST_CODE_DAVDROID_SETUP = 10;
 
@@ -103,14 +112,14 @@ public class Preferences extends PreferenceActivity
      */
     private Uri mUri;
 
-    private SwitchPreference pCode;
-    private SwitchPreference fPrint;
+    private ListPreference mLock;
     private SwitchPreference mShowHiddenFiles;
     private SwitchPreference mExpertMode;
     private AppCompatDelegate mDelegate;
 
     private ListPreference mPrefStoragePath;
     private String mStoragePath;
+    private String pendingLock;
 
     public static class PreferenceKeys {
         public static final String STORAGE_PATH = "storage_path";
@@ -502,26 +511,26 @@ public class Preferences extends PreferenceActivity
                 accentColor));
 
         boolean fPassCodeEnabled = getResources().getBoolean(R.bool.passcode_enabled);
-        boolean fPrintEnabled = getResources().getBoolean(R.bool.fingerprint_enabled);
+        boolean fDeviceCredentialsEnabled = getResources().getBoolean(R.bool.device_credentials_enabled);
         boolean fShowHiddenFilesEnabled = getResources().getBoolean(R.bool.show_hidden_files_enabled);
+        boolean fSyncedFolderLightEnabled = getResources().getBoolean(R.bool.syncedFolder_light);
 
-        setupPasscodePreference(preferenceCategoryDetails, fPassCodeEnabled);
-
-        setupFingerprintPreference(preferenceCategoryDetails, fPrintEnabled);
+        setupLockPreference(preferenceCategoryDetails, fPassCodeEnabled, fDeviceCredentialsEnabled);
 
         setupHiddenFilesPreference(preferenceCategoryDetails, fShowHiddenFilesEnabled);
 
-        setupExpertModePreference(preferenceCategoryDetails);
+        setupExpertModePreference(preferenceCategoryDetails, fSyncedFolderLightEnabled);
 
-        if (!fShowHiddenFilesEnabled && !fPrintEnabled && !fPassCodeEnabled) {
+        if (!fPassCodeEnabled && !fDeviceCredentialsEnabled && !fShowHiddenFilesEnabled && fSyncedFolderLightEnabled) {
             preferenceScreen.removePreference(preferenceCategoryDetails);
         }
     }
 
-    private void setupExpertModePreference(PreferenceCategory preferenceCategoryDetails) {
+    private void setupExpertModePreference(PreferenceCategory preferenceCategoryDetails,
+                                           boolean fSyncedFolderLightEnabled) {
         mExpertMode = (SwitchPreference) findPreference(PREFERENCE_EXPERT_MODE);
 
-        if (getResources().getBoolean(R.bool.syncedFolder_light)) {
+        if (fSyncedFolderLightEnabled) {
             preferenceCategoryDetails.removePreference(mExpertMode);
         } else {
             mExpertMode = (SwitchPreference) findPreference(PREFERENCE_EXPERT_MODE);
@@ -569,78 +578,56 @@ public class Preferences extends PreferenceActivity
         }
     }
 
-    private void setupFingerprintPreference(PreferenceCategory preferenceCategoryDetails, boolean fPrintEnabled) {
-        fPrint = (SwitchPreference) findPreference(PREFERENCE_USE_FINGERPRINT);
-        if (fPrint != null) {
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-                if (FingerprintActivity.isFingerprintCapable(MainApp.getAppContext()) && fPrintEnabled) {
-                    final Activity activity = this;
-                    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(PREFERENCE_USE_FINGERPRINT, incoming);
-                                    editor.apply();
-                                    return true;
-                                } else {
-                                    if (incoming) {
-                                        DisplayUtils.showSnackMessage(activity, R.string.prefs_fingerprint_notsetup);
-                                        fPrint.setChecked(false);
-                                    }
-                                    SharedPreferences appPrefs =
-                                            PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
-                                    SharedPreferences.Editor editor = appPrefs.edit();
-                                    editor.putBoolean(PREFERENCE_USE_FINGERPRINT, false);
-                                    editor.apply();
-                                    return false;
-                                }
-                            } else {
-                                return false;
-                            }
-                        }
-                    });
-                    if (!FingerprintActivity.isFingerprintReady(MainApp.getAppContext())) {
-                        fPrint.setChecked(false);
-                    }
-
-                } else {
-                    preferenceCategoryDetails.removePreference(fPrint);
-                }
-            } else {
-                preferenceCategoryDetails.removePreference(fPrint);
+    private void setupLockPreference(PreferenceCategory preferenceCategoryDetails,
+                                     boolean passCodeEnabled,
+                                     boolean deviceCredentialsEnabled) {
+        mLock = (ListPreference) findPreference(PREFERENCE_LOCK);
+        if (mLock != null && (passCodeEnabled || deviceCredentialsEnabled)) {
+            ArrayList<String> lockEntries = new ArrayList<>(3);
+            lockEntries.add(getString(R.string.prefs_lock_none));
+            lockEntries.add(getString(R.string.prefs_lock_using_passcode));
+            lockEntries.add(getString(R.string.prefs_lock_using_device_credentials));
+
+            ArrayList<String> lockValues = new ArrayList<>(3);
+            lockValues.add(LOCK_NONE);
+            lockValues.add(LOCK_PASSCODE);
+            lockValues.add(LOCK_DEVICE_CREDENTIALS);
+
+            if (!passCodeEnabled) {
+                lockEntries.remove(1);
+                lockValues.remove(1);
+            } else if (!deviceCredentialsEnabled || Build.VERSION.SDK_INT < Build.VERSION_CODES.M ||
+                    !DeviceCredentialUtils.areCredentialsAvailable(getApplicationContext())) {
+                lockEntries.remove(2);
+                lockValues.remove(2);
             }
-        }
-    }
-
-    private void setupPasscodePreference(PreferenceCategory preferenceCategoryDetails, boolean fPassCodeEnabled) {
-        pCode = (SwitchPreference) findPreference(PassCodeActivity.PREFERENCE_SET_PASSCODE);
-        if (pCode != null && fPassCodeEnabled) {
-            pCode.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+            String[] lockEntriesArr = new String[lockEntries.size()];
+            lockEntriesArr = lockEntries.toArray(lockEntriesArr);
+            String[] lockValuesArr = new String[lockValues.size()];
+            lockValuesArr = lockValues.toArray(lockValuesArr);
+
+            mLock.setEntries(lockEntriesArr);
+            mLock.setEntryValues(lockValuesArr);
+            mLock.setSummary(mLock.getEntry());
+            mLock.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
                 @Override
-                public boolean onPreferenceChange(Preference preference, Object newValue) {
-                    Intent i = new Intent(getApplicationContext(), PassCodeActivity.class);
-                    Boolean incoming = (Boolean) newValue;
-
-                    i.setAction(
-                            incoming ? PassCodeActivity.ACTION_REQUEST_WITH_RESULT :
-                                    PassCodeActivity.ACTION_CHECK_WITH_RESULT
-                    );
-
-                    startActivityForResult(i, incoming ? ACTION_REQUEST_PASSCODE :
-                            ACTION_CONFIRM_PASSCODE);
-
-                    // Don't update just yet, we will decide on it in onActivityResult
+                public boolean onPreferenceChange(Preference preference, Object o) {
+                    pendingLock = LOCK_NONE;
+                    String oldValue = ((ListPreference) preference).getValue();
+                    String newValue = (String) o;
+                    if (!oldValue.equals(newValue)) {
+                        if (oldValue.equals(LOCK_NONE)) {
+                            enableLock(newValue);
+                        } else {
+                            pendingLock = newValue;
+                            disableLock(oldValue);
+                        }
+                    }
                     return false;
                 }
             });
         } else {
-            preferenceCategoryDetails.removePreference(pCode);
+            preferenceCategoryDetails.removePreference(mLock);
         }
     }
 
@@ -692,6 +679,35 @@ public class Preferences extends PreferenceActivity
         }
     }
 
+    private void enableLock(String lock) {
+        pendingLock = LOCK_NONE;
+        if (lock.equals(LOCK_PASSCODE)) {
+            Intent i = new Intent(getApplicationContext(), PassCodeActivity.class);
+            i.setAction(PassCodeActivity.ACTION_REQUEST_WITH_RESULT);
+            startActivityForResult(i, ACTION_REQUEST_PASSCODE);
+        } else if (lock.equals(LOCK_DEVICE_CREDENTIALS)){
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
+                    !DeviceCredentialUtils.areCredentialsAvailable(getApplicationContext())) {
+                DisplayUtils.showSnackMessage(this, R.string.prefs_lock_device_credentials_not_setup);
+            } else {
+                DisplayUtils.showSnackMessage(this, R.string.prefs_lock_device_credentials_enabled);
+                mLock.setValue(LOCK_DEVICE_CREDENTIALS);
+                mLock.setSummary(mLock.getEntry());
+            }
+        }
+    }
+
+    private void disableLock(String lock) {
+        if (lock.equals(LOCK_PASSCODE)) {
+            Intent i = new Intent(getApplicationContext(), PassCodeActivity.class);
+            i.setAction(PassCodeActivity.ACTION_CHECK_WITH_RESULT);
+            startActivityForResult(i, ACTION_CONFIRM_PASSCODE);
+        } else if (lock.equals(LOCK_DEVICE_CREDENTIALS)) {
+            Intent i = new Intent(getApplicationContext(), RequestCredentialsActivity.class);
+            startActivityForResult(i, ACTION_CONFIRM_DEVICE_CREDENTIALS);
+        }
+    }
+
     private void setupGeneralCategory(int accentColor) {
         PreferenceCategory preferenceCategoryGeneral = (PreferenceCategory) findPreference("general");
         preferenceCategoryGeneral.setTitle(ThemeUtils.getColoredTitle(getString(R.string.prefs_category_general),
@@ -825,14 +841,7 @@ public class Preferences extends PreferenceActivity
         t.start();
     }
 
-    @Override
-    protected void onResume() {
-        super.onResume();
 
-        SharedPreferences appPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
-        boolean state = appPrefs.getBoolean(PassCodeActivity.PREFERENCE_SET_PASSCODE, false);
-        pCode.setChecked(state);
-    }
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
@@ -853,27 +862,39 @@ public class Preferences extends PreferenceActivity
                 for (int i = 1; i <= 4; ++i) {
                     appPrefs.putString(PassCodeActivity.PREFERENCE_PASSCODE_D + i, passcode.substring(i - 1, i));
                 }
-                appPrefs.putBoolean(PassCodeActivity.PREFERENCE_SET_PASSCODE, true);
                 appPrefs.apply();
+                mLock.setValue(LOCK_PASSCODE);
+                mLock.setSummary(mLock.getEntry());
                 DisplayUtils.showSnackMessage(this, R.string.pass_code_stored);
             }
         } else if (requestCode == ACTION_CONFIRM_PASSCODE && resultCode == RESULT_OK) {
             if (data.getBooleanExtra(PassCodeActivity.KEY_CHECK_RESULT, false)) {
-
-                SharedPreferences.Editor appPrefs = PreferenceManager
-                        .getDefaultSharedPreferences(getApplicationContext()).edit();
-                appPrefs.putBoolean(PassCodeActivity.PREFERENCE_SET_PASSCODE, false);
-                appPrefs.apply();
+                mLock.setValue(LOCK_NONE);
+                mLock.setSummary(mLock.getEntry());
 
                 DisplayUtils.showSnackMessage(this, R.string.pass_code_removed);
+                if (!pendingLock.equals(LOCK_NONE)) {
+                    enableLock(pendingLock);
+                }
             }
         } else if (requestCode == ACTION_REQUEST_CODE_DAVDROID_SETUP && resultCode == RESULT_OK) {
             DisplayUtils.showSnackMessage(this, R.string.prefs_calendar_contacts_sync_setup_successful);
+        } else if (requestCode == ACTION_CONFIRM_DEVICE_CREDENTIALS && resultCode == RESULT_OK &&
+            Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
+                data.getIntExtra(RequestCredentialsActivity.KEY_CHECK_RESULT,
+                        RequestCredentialsActivity.KEY_CHECK_RESULT_FALSE) == 
+                        RequestCredentialsActivity.KEY_CHECK_RESULT_TRUE) {
+            mLock.setValue(LOCK_NONE);
+            mLock.setSummary(mLock.getEntry());
+            DisplayUtils.showSnackMessage(this, R.string.credentials_disabled);
+            if (!pendingLock.equals(LOCK_NONE)) {
+                enableLock(pendingLock);
+            }
         }
     }
-
-    @NonNull
+    
     @Override
+    @NonNull
     public MenuInflater getMenuInflater() {
         return getDelegate().getMenuInflater();
     }

+ 95 - 0
src/main/java/com/owncloud/android/ui/activity/RequestCredentialsActivity.java

@@ -0,0 +1,95 @@
+/*
+ *  Nextcloud Android client application
+ *
+ *  @author Harikrishnan Rajan
+ *  Copyright (C) 2017
+ *  Copyright (C) 2017 Nextcloud GmbH.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Affero General Public License version 3,
+ *  as published by the Free Software Foundation.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU Affero General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Affero General Public License
+ *  along with this program. If not, see http://www.gnu.org/licenses/.
+ *
+ */
+package com.owncloud.android.ui.activity;
+
+import android.app.Activity;
+import android.app.KeyguardManager;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import android.support.annotation.RequiresApi;
+import android.widget.Toast;
+
+import com.owncloud.android.R;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.utils.DeviceCredentialUtils;
+import com.owncloud.android.utils.DisplayUtils;
+
+/**
+ * Dummy activity that is used to handle the device's default authentication workflow.
+ */
+@RequiresApi(Build.VERSION_CODES.M)
+public class RequestCredentialsActivity extends Activity {
+
+    private static final String TAG = RequestCredentialsActivity.class.getSimpleName();
+
+    public final static String KEY_CHECK_RESULT = "KEY_CHECK_RESULT";
+    public final static int KEY_CHECK_RESULT_TRUE = 1;
+    public final static int KEY_CHECK_RESULT_FALSE = 0;
+    public final static int KEY_CHECK_RESULT_CANCEL = -1;
+    private static final int REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS = 1;
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (requestCode == REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS) {
+            if (resultCode == Activity.RESULT_OK && DeviceCredentialUtils.tryEncrypt(getApplicationContext())) {
+                finishWithResult(KEY_CHECK_RESULT_TRUE);
+            } else if (resultCode == Activity.RESULT_CANCELED) {
+                finishWithResult(KEY_CHECK_RESULT_CANCEL);
+            } else {
+                Toast.makeText(this, R.string.default_credentials_wrong, Toast.LENGTH_SHORT).show();
+                requestCredentials();
+            }
+        }
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+
+        if (DeviceCredentialUtils.areCredentialsAvailable(this)) {
+            DeviceCredentialUtils.createKey(getApplicationContext());
+            requestCredentials();
+        } else {
+            DisplayUtils.showSnackMessage(this, R.string.prefs_lock_device_credentials_not_setup);
+            finishWithResult(KEY_CHECK_RESULT_TRUE);
+        }
+    }
+
+    private void requestCredentials() {
+        KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
+        if (keyguardManager != null) {
+            Intent i = keyguardManager.createConfirmDeviceCredentialIntent(null, null);
+            startActivityForResult(i, REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS);
+        } else {
+            Log_OC.e(TAG, "Keyguard manager is null");
+            finishWithResult(KEY_CHECK_RESULT_FALSE);
+        }
+    }
+
+    private void finishWithResult(int success) {
+        Intent resultIntent = new Intent();
+        resultIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
+        resultIntent.putExtra(KEY_CHECK_RESULT, success);
+        setResult(Activity.RESULT_OK, resultIntent);
+        finish();
+    }
+}

+ 136 - 0
src/main/java/com/owncloud/android/utils/DeviceCredentialUtils.java

@@ -0,0 +1,136 @@
+/*
+ *  Nextcloud Android client application
+ *
+ *  @author Harikrishnan Rajan
+ *  Copyright (C) 2017
+ *  Copyright (C) 2017 Nextcloud GmbH.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Affero General Public License version 3,
+ *  as published by the Free Software Foundation.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU Affero General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Affero General Public License
+ *  along with this program. If not, see http://www.gnu.org/licenses/.
+ *
+ */
+package com.owncloud.android.utils;
+
+import android.app.KeyguardManager;
+import android.content.Context;
+import android.os.Build;
+import android.security.keystore.KeyGenParameterSpec;
+import android.security.keystore.KeyProperties;
+import android.support.annotation.RequiresApi;
+
+import com.owncloud.android.R;
+import com.owncloud.android.lib.common.utils.Log_OC;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.IntBuffer;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.CertificateException;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.KeyGenerator;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.SecretKey;
+
+/**
+ * Utility class with methods for handling device credentials.
+ */
+@RequiresApi(Build.VERSION_CODES.M)
+public class DeviceCredentialUtils {
+
+    private static final String TAG = DeviceCredentialUtils.class.getSimpleName();
+
+    private static final int AUTHENTICATION_DURATION_SECONDS = 30;
+
+    private static final String ANDROID_KEY_STORE = "AndroidKeyStore";
+
+    public static boolean areCredentialsAvailable(Context context) {
+        KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
+        
+        if (keyguardManager != null) {
+            return keyguardManager.isKeyguardSecure();
+        } else {
+            Log_OC.e(TAG, "Keyguard manager is null");
+            return false;
+        }
+    }
+
+    /**
+     * Creates a symmetric key in the Android Key Store which can only be used after the user has
+     * authenticated with device credentials within the last X seconds.
+     */
+    public static void createKey(Context context) {
+        // Generate a key to decrypt payment credentials, tokens, etc.
+        final String keyName = context.getResources().getString(R.string.secret_key_name);
+        try {
+            KeyStore keyStore = KeyStore.getInstance(ANDROID_KEY_STORE);
+            keyStore.load(null);
+            KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, ANDROID_KEY_STORE);
+
+            // Set the alias of the entry in Android KeyStore where the key will appear
+            // and the constrains (purposes) in the constructor of the Builder
+            keyGenerator.init(new KeyGenParameterSpec.Builder(keyName, KeyProperties.PURPOSE_ENCRYPT |
+                    KeyProperties.PURPOSE_DECRYPT)
+                    .setBlockModes(KeyProperties.BLOCK_MODE_CBC)
+                    .setUserAuthenticationRequired(true)
+                    // Require that the user has unlocked in the last 30 seconds
+                    .setUserAuthenticationValidityDurationSeconds(AUTHENTICATION_DURATION_SECONDS)
+                    .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
+                    .build());
+            keyGenerator.generateKey();
+        } catch (NoSuchAlgorithmException | NoSuchProviderException
+                | InvalidAlgorithmParameterException | KeyStoreException
+                | CertificateException | IOException e) {
+            Log_OC.e(TAG, "Exception: " + e.getMessage());
+        }
+    }
+
+    /**
+     * Tries to encrypt some data with the generated key in {@link #createKey} which
+     * only works if the user has just authenticated via device credentials.
+     */
+    public static boolean tryEncrypt(Context context) {
+        try {
+            final String keyName = context.getResources().getString(R.string.secret_key_name);
+            final int[] secretIntArray = context.getResources().getIntArray(R.array.secret_byte_array);
+            ByteBuffer byteBuffer = ByteBuffer.allocate(secretIntArray.length * 4);
+            IntBuffer intBuffer = byteBuffer.asIntBuffer();
+            intBuffer.put(secretIntArray);
+            byte[] secretByteArray = byteBuffer.array();
+            KeyStore keyStore = KeyStore.getInstance(ANDROID_KEY_STORE);
+            keyStore.load(null);
+            SecretKey secretKey = (SecretKey) keyStore.getKey(keyName, null);
+            Cipher cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/" +
+                    KeyProperties.BLOCK_MODE_CBC + "/" + KeyProperties.ENCRYPTION_PADDING_PKCS7);
+
+            // Try encrypting something, it will only work if the user authenticated within
+            // the last AUTHENTICATION_DURATION_SECONDS seconds.
+            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
+            cipher.doFinal(secretByteArray);
+
+            // If the user has recently authenticated, you will reach here.
+            return true;
+        } catch (BadPaddingException | IllegalBlockSizeException | KeyStoreException |
+                CertificateException | UnrecoverableKeyException | IOException
+                | NoSuchPaddingException | NoSuchAlgorithmException | InvalidKeyException e) {
+            return false;
+        }
+    }
+}

BIN
src/main/res/drawable-hdpi/whats_new_device_credentials.png


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 7
src/main/res/drawable/ic_fingerprint.xml


+ 0 - 65
src/main/res/layout/fingerprintlock.xml

@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Nextcloud Android client application
-
-  Copyright (C) 2017 Florian Lentz
-
-  This program is free software; you can redistribute it and/or
-  modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
-  License as published by the Free Software Foundation; either
-  version 3 of the License, or any later version.
-
-  This program is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-  GNU AFFERO GENERAL PUBLIC LICENSE for more details.
-
-  You should have received a copy of the GNU Affero General Public
-  License along with this program. If not, see <http://www.gnu.org/licenses/>.
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              xmlns:app="http://schemas.android.com/apk/res-auto"
-              android:layout_width="fill_parent"
-              android:layout_height="fill_parent"
-              android:gravity="center_horizontal"
-              android:orientation="vertical">
-
-    <android.support.v7.widget.Toolbar
-        android:id="@+id/toolbar"
-        android:layout_width="match_parent"
-        android:layout_height="?attr/actionBarSize"
-        android:background="?attr/colorPrimary"
-        app:layout_scrollFlags="scroll|enterAlways|snap"
-        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
-        app:title="@string/app_name"
-        app:titleTextColor="@color/white"/>
-
-    <LinearLayout
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
-        android:gravity="center_horizontal"
-        android:orientation="vertical"
-        android:padding="@dimen/standard_padding">
-
-        <TextView
-            android:id="@+id/scanfingerprinttext"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:gravity="center_horizontal"
-            android:padding="@dimen/standard_half_padding"
-            android:text="@string/fingerprint_scan_finger"
-            android:textColor="@android:color/black"
-            android:textSize="@dimen/scan_fingerprint_text_size"/>
-
-        <ImageView
-            android:id="@+id/fingerprinticon"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:padding="@dimen/standard_padding"
-            android:scaleType="fitCenter"
-            android:src="@drawable/ic_fingerprint"
-            android:tint="@color/primary"
-            android:contentDescription="@string/fingerprint_icon"/>
-
-    </LinearLayout>
-</LinearLayout>

+ 0 - 3
src/main/res/values-ar/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">عام</string>
     <string name="prefs_category_more">المزيد</string>
     <string name="prefs_manage_accounts">إدارة الحسابات</string>
-    <string name="prefs_passcode">الرقم السري</string>
-    <string name="prefs_fingerprint">قفل بصمه الاصبع</string>
-    <string name="prefs_fingerprint_notsetup">لم يتم ادخال اى بصمات </string>
     <string name="prefs_expert_mode">وضع متقدم</string>
     <string name="prefs_show_hidden_files">عرض الملفات المخفية</string>
     <string name="prefs_log_delete_history_button">حذف البيانات التاريخية</string>

+ 0 - 7
src/main/res/values-b+en+001/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">More</string>
     <string name="prefs_manage_accounts">Manage accounts</string>
-    <string name="prefs_passcode">Passcode lock</string>
-    <string name="prefs_fingerprint">Fingerprint lock</string>
-    <string name="prefs_fingerprint_notsetup">No fingerprints have been set up.</string>
     <string name="prefs_expert_mode">Expert mode</string>
     <string name="prefs_show_hidden_files">Show hidden files</string>
     <string name="prefs_log_delete_history_button">Delete history</string>
@@ -602,9 +599,6 @@
 
     <string name="whats_new_skip">Skip</string>
 
-    <string name="fingerprint_scan_finger">Please scan your finger</string>
-    <string name="fingerprint_unknown">Finger not recognized</string>
-
     <!-- User information -->
     <string name="user_info_email">E-mail</string>
     <string name="user_info_phone">Phone number</string>
@@ -678,7 +672,6 @@
     <string name="activity_icon">Activity icon</string>
     <string name="file_icon">File icon</string>
     <string name="user_icon">User icon</string>
-    <string name="fingerprint_icon">Fingerprint icon</string>
     <string name="favorite_icon">Favourite icon</string>
     <string name="shared_via_link_icon">Shared via link icon</string>
     <string name="synced_icon">Synced icon</string>

+ 0 - 3
src/main/res/values-ca/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Més</string>
     <string name="prefs_manage_accounts">Gestió de comptes</string>
-    <string name="prefs_passcode">Contrasenya</string>
-    <string name="prefs_fingerprint">Bloqueig d\'empremta</string>
-    <string name="prefs_fingerprint_notsetup">No s\'ha configurat cap empremta digital.</string>
     <string name="prefs_expert_mode">Mode expert</string>
     <string name="prefs_show_hidden_files">Mostra els fitxers ocults</string>
     <string name="prefs_log_delete_history_button">Esborra l\'històric</string>

+ 0 - 5
src/main/res/values-cs-rCZ/strings.xml

@@ -39,7 +39,6 @@
     <string name="prefs_category_general">Obecné</string>
     <string name="prefs_category_more">Více</string>
     <string name="prefs_manage_accounts">Spravovat účty</string>
-    <string name="prefs_passcode">Zámek bezpečnostního kódu</string>
     <string name="prefs_fingerprint">Zámek otiskem prstu</string>
     <string name="prefs_fingerprint_notsetup">Nebyly nastaveny žádné otisky prstů.</string>
     <string name="prefs_expert_mode">Režim pro experty</string>
@@ -567,9 +566,6 @@
     <string name="whats_new_ipv6_title">Podpora IPv6</string>
     <string name="whats_new_skip">Přeskočit</string>
 
-    <string name="fingerprint_scan_finger">Prosím, naskenujte svůj otisk prstu</string>
-    <string name="fingerprint_unknown">Otisk prstu nerozpoznán</string>
-
     <!-- User information -->
     <string name="user_info_email">E-mail</string>
     <string name="user_info_phone">Telefonní číslo</string>
@@ -633,7 +629,6 @@
     <string name="activity_icon">Ikona Aktivita</string>
     <string name="file_icon">Ikona Soubor</string>
     <string name="user_icon">Ikona Uživatel</string>
-    <string name="fingerprint_icon">Ikona Otisk prstu</string>
     <string name="favorite_icon">Ikona Oblíbené</string>
     <string name="shared_via_link_icon">Ikona Sdíleno odkazem</string>
     <string name="synced_icon">Ikona Synchronizováno</string>

+ 0 - 3
src/main/res/values-da/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Generel</string>
     <string name="prefs_category_more">Mere</string>
     <string name="prefs_manage_accounts">Administrer konti</string>
-    <string name="prefs_passcode">Passcode-lås</string>
-    <string name="prefs_fingerprint">Fingeraftrykslås</string>
-    <string name="prefs_fingerprint_notsetup">Ingen fingeraftryk er blevet sat op.</string>
     <string name="prefs_expert_mode">Eksperttilstand </string>
     <string name="prefs_show_hidden_files">Vis skjulte filer</string>
     <string name="prefs_log_delete_history_button">Slet historik</string>

+ 0 - 6
src/main/res/values-de/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Allgemein</string>
     <string name="prefs_category_more">Mehr</string>
     <string name="prefs_manage_accounts">Konten verwalten</string>
-    <string name="prefs_passcode">PIN gesperrt</string>
-    <string name="prefs_fingerprint">Fingerabdruck-Sperre</string>
-    <string name="prefs_fingerprint_notsetup">Keine Fingerabdrücke eingerichtet.</string>
     <string name="prefs_expert_mode">Expertenmodus</string>
     <string name="prefs_show_hidden_files">Versteckte Dateien anzeigen</string>
     <string name="prefs_log_delete_history_button">Verlauf löschen</string>
@@ -602,8 +599,6 @@
 
     <string name="whats_new_skip">Überspringen</string>
 
-    <string name="fingerprint_scan_finger">Bitte scannen Sie Ihren Finger</string>
-    <string name="fingerprint_unknown">Finger nicht erkannt</string>
 
     <!-- User information -->
     <string name="user_info_email">E-Mail</string>
@@ -679,7 +674,6 @@
     <string name="activity_icon">Aktivitäten-Icon</string>
     <string name="file_icon">Datei-Icon</string>
     <string name="user_icon">Nutzer-Icon</string>
-    <string name="fingerprint_icon">Fingerabdruck-Icon</string>
     <string name="favorite_icon">Favoriten-Icon</string>
     <string name="shared_via_link_icon">Geteilt mittels Link Icon</string>
     <string name="synced_icon">Synchronisiert-Icon</string>

+ 0 - 6
src/main/res/values-el/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Γενικά</string>
     <string name="prefs_category_more">Περισσότερα</string>
     <string name="prefs_manage_accounts">Διαχείριση λογαριασμών</string>
-    <string name="prefs_passcode">Κλείδωμα με κωδικό πρόσβασης</string>
-    <string name="prefs_fingerprint">Κλείδωμα με αποτύπωμα</string>
-    <string name="prefs_fingerprint_notsetup">Δεν έχει οριστεί αποτύπωμα</string>
     <string name="prefs_expert_mode">Λειτουργία για προχωρημένους</string>
     <string name="prefs_show_hidden_files">Εμφάνιση κρυφών αρχείων</string>
     <string name="prefs_log_delete_history_button">Διαγραφή ιστορικού</string>
@@ -527,9 +524,6 @@
     <string name="whats_new_ipv6_title">Υποστήριξη IPv6</string>
     <string name="whats_new_skip">Παράλειψη</string>
 
-    <string name="fingerprint_scan_finger">Παρακαλώ σαρρώστε το αποτύπωμά σας</string>
-    <string name="fingerprint_unknown">Το αποτύπωμα δεν αναγνωρίστηκε</string>
-
     <!-- User information -->
     <string name="user_info_email">E-mail</string>
     <string name="user_info_phone">Αριθμός τηλεφώνου</string>

+ 0 - 6
src/main/res/values-es-rAR/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
     <string name="prefs_manage_accounts">Administrar cuentas</string>
-    <string name="prefs_passcode">Bloqueo con código de seguridad</string>
-    <string name="prefs_fingerprint">Bloqueo por huella digital</string>
-    <string name="prefs_fingerprint_notsetup">No se ha establecido ninguna huella digital. </string>
     <string name="prefs_expert_mode">Modo experto</string>
     <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
     <string name="prefs_log_delete_history_button">Borrar historial</string>
@@ -434,9 +431,6 @@
 
     <string name="whats_new_skip">Saltar</string>
 
-    <string name="fingerprint_scan_finger">Favor de escanear su dedo</string>
-    <string name="fingerprint_unknown">El dedo no ha sido reconocido</string>
-
     <!-- User information -->
     <string name="user_info_email">Correo electrónico</string>
     <string name="user_info_phone">Número telefónico</string>

+ 0 - 7
src/main/res/values-es-rCL/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
     <string name="prefs_manage_accounts">Administrar cuentas</string>
-    <string name="prefs_passcode">Bloqueo con código de seguridad</string>
-    <string name="prefs_fingerprint">Bloqueo cor huella digital</string>
-    <string name="prefs_fingerprint_notsetup">No se ha establecido alguna huella digital. </string>
     <string name="prefs_expert_mode">Modo experto</string>
     <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
     <string name="prefs_log_delete_history_button">Borrar historial</string>
@@ -580,9 +577,6 @@
 
     <string name="whats_new_skip">Omitir</string>
 
-    <string name="fingerprint_scan_finger">Por favor escanea tu dedo</string>
-    <string name="fingerprint_unknown">El dedo no ha sido reconocido</string>
-
     <!-- User information -->
     <string name="user_info_email">Correo electrónico</string>
     <string name="user_info_phone">Número telefónico</string>
@@ -656,7 +650,6 @@
     <string name="activity_icon">Ícono de actividad</string>
     <string name="file_icon">Ícono de archivo</string>
     <string name="user_icon">Ícono de usuario</string>
-    <string name="fingerprint_icon">Ícono de huella digital</string>
     <string name="favorite_icon">Ícono de Favorito</string>
     <string name="shared_via_link_icon">Ícono de compartido por liga</string>
     <string name="synced_icon">Ícono de sincronizado</string>

+ 0 - 7
src/main/res/values-es-rCO/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
     <string name="prefs_manage_accounts">Administrar cuentas</string>
-    <string name="prefs_passcode">Bloqueo con código de seguridad</string>
-    <string name="prefs_fingerprint">Bloqueo cor huella digital</string>
-    <string name="prefs_fingerprint_notsetup">No se ha establecido alguna huella digital. </string>
     <string name="prefs_expert_mode">Modo experto</string>
     <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
     <string name="prefs_log_delete_history_button">Borrar historial</string>
@@ -580,9 +577,6 @@
 
     <string name="whats_new_skip">Omitir</string>
 
-    <string name="fingerprint_scan_finger">Por favor escanea tu dedo</string>
-    <string name="fingerprint_unknown">El dedo no ha sido reconocido</string>
-
     <!-- User information -->
     <string name="user_info_email">Correo electrónico</string>
     <string name="user_info_phone">Número telefónico</string>
@@ -656,7 +650,6 @@
     <string name="activity_icon">Ícono de actividad</string>
     <string name="file_icon">Ícono de archivo</string>
     <string name="user_icon">Ícono de usuario</string>
-    <string name="fingerprint_icon">Ícono de huella digital</string>
     <string name="favorite_icon">Ícono de Favorito</string>
     <string name="shared_via_link_icon">Ícono de compartido por liga</string>
     <string name="synced_icon">Ícono de sincronizado</string>

+ 0 - 7
src/main/res/values-es-rCR/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
     <string name="prefs_manage_accounts">Administrar cuentas</string>
-    <string name="prefs_passcode">Bloqueo con código de seguridad</string>
-    <string name="prefs_fingerprint">Bloqueo cor huella digital</string>
-    <string name="prefs_fingerprint_notsetup">No se ha establecido alguna huella digital. </string>
     <string name="prefs_expert_mode">Modo experto</string>
     <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
     <string name="prefs_log_delete_history_button">Borrar historial</string>
@@ -580,9 +577,6 @@
 
     <string name="whats_new_skip">Omitir</string>
 
-    <string name="fingerprint_scan_finger">Por favor escanea tu dedo</string>
-    <string name="fingerprint_unknown">El dedo no ha sido reconocido</string>
-
     <!-- User information -->
     <string name="user_info_email">Correo electrónico</string>
     <string name="user_info_phone">Número telefónico</string>
@@ -656,7 +650,6 @@
     <string name="activity_icon">Ícono de actividad</string>
     <string name="file_icon">Ícono de archivo</string>
     <string name="user_icon">Ícono de usuario</string>
-    <string name="fingerprint_icon">Ícono de huella digital</string>
     <string name="favorite_icon">Ícono de Favorito</string>
     <string name="shared_via_link_icon">Ícono de compartido por liga</string>
     <string name="synced_icon">Ícono de sincronizado</string>

+ 0 - 7
src/main/res/values-es-rDO/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
     <string name="prefs_manage_accounts">Administrar cuentas</string>
-    <string name="prefs_passcode">Bloqueo con código de seguridad</string>
-    <string name="prefs_fingerprint">Bloqueo cor huella digital</string>
-    <string name="prefs_fingerprint_notsetup">No se ha establecido alguna huella digital. </string>
     <string name="prefs_expert_mode">Modo experto</string>
     <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
     <string name="prefs_log_delete_history_button">Borrar historial</string>
@@ -580,9 +577,6 @@
 
     <string name="whats_new_skip">Omitir</string>
 
-    <string name="fingerprint_scan_finger">Por favor escanea tu dedo</string>
-    <string name="fingerprint_unknown">El dedo no ha sido reconocido</string>
-
     <!-- User information -->
     <string name="user_info_email">Correo electrónico</string>
     <string name="user_info_phone">Número telefónico</string>
@@ -656,7 +650,6 @@
     <string name="activity_icon">Ícono de actividad</string>
     <string name="file_icon">Ícono de archivo</string>
     <string name="user_icon">Ícono de usuario</string>
-    <string name="fingerprint_icon">Ícono de huella digital</string>
     <string name="favorite_icon">Ícono de Favorito</string>
     <string name="shared_via_link_icon">Ícono de compartido por liga</string>
     <string name="synced_icon">Ícono de sincronizado</string>

+ 0 - 7
src/main/res/values-es-rEC/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
     <string name="prefs_manage_accounts">Administrar cuentas</string>
-    <string name="prefs_passcode">Bloqueo con código de seguridad</string>
-    <string name="prefs_fingerprint">Bloqueo cor huella digital</string>
-    <string name="prefs_fingerprint_notsetup">No se ha establecido alguna huella digital. </string>
     <string name="prefs_expert_mode">Modo experto</string>
     <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
     <string name="prefs_log_delete_history_button">Borrar historial</string>
@@ -580,9 +577,6 @@
 
     <string name="whats_new_skip">Omitir</string>
 
-    <string name="fingerprint_scan_finger">Por favor escanea tu dedo</string>
-    <string name="fingerprint_unknown">El dedo no ha sido reconocido</string>
-
     <!-- User information -->
     <string name="user_info_email">Correo electrónico</string>
     <string name="user_info_phone">Número telefónico</string>
@@ -656,7 +650,6 @@
     <string name="activity_icon">Ícono de actividad</string>
     <string name="file_icon">Ícono de archivo</string>
     <string name="user_icon">Ícono de usuario</string>
-    <string name="fingerprint_icon">Ícono de huella digital</string>
     <string name="favorite_icon">Ícono de Favorito</string>
     <string name="shared_via_link_icon">Ícono de compartido por liga</string>
     <string name="synced_icon">Ícono de sincronizado</string>

+ 0 - 7
src/main/res/values-es-rGT/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
     <string name="prefs_manage_accounts">Administrar cuentas</string>
-    <string name="prefs_passcode">Bloqueo con código de seguridad</string>
-    <string name="prefs_fingerprint">Bloqueo cor huella digital</string>
-    <string name="prefs_fingerprint_notsetup">No se ha establecido alguna huella digital. </string>
     <string name="prefs_expert_mode">Modo experto</string>
     <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
     <string name="prefs_log_delete_history_button">Borrar historial</string>
@@ -580,9 +577,6 @@
 
     <string name="whats_new_skip">Omitir</string>
 
-    <string name="fingerprint_scan_finger">Por favor escanea tu dedo</string>
-    <string name="fingerprint_unknown">El dedo no ha sido reconocido</string>
-
     <!-- User information -->
     <string name="user_info_email">Correo electrónico</string>
     <string name="user_info_phone">Número telefónico</string>
@@ -656,7 +650,6 @@
     <string name="activity_icon">Ícono de actividad</string>
     <string name="file_icon">Ícono de archivo</string>
     <string name="user_icon">Ícono de usuario</string>
-    <string name="fingerprint_icon">Ícono de huella digital</string>
     <string name="favorite_icon">Ícono de Favorito</string>
     <string name="shared_via_link_icon">Ícono de compartido por liga</string>
     <string name="synced_icon">Ícono de sincronizado</string>

+ 0 - 7
src/main/res/values-es-rHN/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
     <string name="prefs_manage_accounts">Administrar cuentas</string>
-    <string name="prefs_passcode">Bloqueo con código de seguridad</string>
-    <string name="prefs_fingerprint">Bloqueo cor huella digital</string>
-    <string name="prefs_fingerprint_notsetup">No se ha establecido alguna huella digital. </string>
     <string name="prefs_expert_mode">Modo experto</string>
     <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
     <string name="prefs_log_delete_history_button">Borrar historial</string>
@@ -480,9 +477,6 @@
 
     <string name="whats_new_skip">Saltar</string>
 
-    <string name="fingerprint_scan_finger">Por favor escanea tu dedo</string>
-    <string name="fingerprint_unknown">El dedo no ha sido reconocido</string>
-
     <!-- User information -->
     <string name="user_info_email">Correo electrónico</string>
     <string name="user_info_phone">Número telefónico</string>
@@ -543,7 +537,6 @@
     <string name="activity_icon">Ícono de actividad</string>
     <string name="file_icon">Ícono de archivo</string>
     <string name="user_icon">Ícono de usuario</string>
-    <string name="fingerprint_icon">Ícono de huella digital</string>
     <string name="favorite_icon">Ícono de Favorito</string>
     <string name="shared_via_link_icon">Ícono de compartido por liga</string>
     <string name="synced_icon">Ícono de sincronizado</string>

+ 0 - 7
src/main/res/values-es-rMX/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
     <string name="prefs_manage_accounts">Administrar cuentas</string>
-    <string name="prefs_passcode">Bloqueo con código de seguridad</string>
-    <string name="prefs_fingerprint">Bloqueo cor huella digital</string>
-    <string name="prefs_fingerprint_notsetup">No se ha establecido alguna huella digital. </string>
     <string name="prefs_expert_mode">Modo experto</string>
     <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
     <string name="prefs_log_delete_history_button">Borrar historial</string>
@@ -602,9 +599,6 @@
 
     <string name="whats_new_skip">Omitir</string>
 
-    <string name="fingerprint_scan_finger">Por favor escanea tu dedo</string>
-    <string name="fingerprint_unknown">El dedo no ha sido reconocido</string>
-
     <!-- User information -->
     <string name="user_info_email">Correo electrónico</string>
     <string name="user_info_phone">Número telefónico</string>
@@ -678,7 +672,6 @@
     <string name="activity_icon">Ícono de actividad</string>
     <string name="file_icon">Ícono de archivo</string>
     <string name="user_icon">Ícono de usuario</string>
-    <string name="fingerprint_icon">Ícono de huella digital</string>
     <string name="favorite_icon">Ícono de Favorito</string>
     <string name="shared_via_link_icon">Ícono de compartido por liga</string>
     <string name="synced_icon">Ícono de sincronizado</string>

+ 0 - 7
src/main/res/values-es-rNI/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
     <string name="prefs_manage_accounts">Administrar cuentas</string>
-    <string name="prefs_passcode">Bloqueo con código de seguridad</string>
-    <string name="prefs_fingerprint">Bloqueo cor huella digital</string>
-    <string name="prefs_fingerprint_notsetup">No se ha establecido alguna huella digital. </string>
     <string name="prefs_expert_mode">Modo experto</string>
     <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
     <string name="prefs_log_delete_history_button">Borrar historial</string>
@@ -480,9 +477,6 @@
 
     <string name="whats_new_skip">Saltar</string>
 
-    <string name="fingerprint_scan_finger">Por favor escanea tu dedo</string>
-    <string name="fingerprint_unknown">El dedo no ha sido reconocido</string>
-
     <!-- User information -->
     <string name="user_info_email">Correo electrónico</string>
     <string name="user_info_phone">Número telefónico</string>
@@ -543,7 +537,6 @@
     <string name="activity_icon">Ícono de actividad</string>
     <string name="file_icon">Ícono de archivo</string>
     <string name="user_icon">Ícono de usuario</string>
-    <string name="fingerprint_icon">Ícono de huella digital</string>
     <string name="favorite_icon">Ícono de Favorito</string>
     <string name="shared_via_link_icon">Ícono de compartido por liga</string>
     <string name="synced_icon">Ícono de sincronizado</string>

+ 0 - 7
src/main/res/values-es-rPA/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
     <string name="prefs_manage_accounts">Administrar cuentas</string>
-    <string name="prefs_passcode">Bloqueo con código de seguridad</string>
-    <string name="prefs_fingerprint">Bloqueo cor huella digital</string>
-    <string name="prefs_fingerprint_notsetup">No se ha establecido alguna huella digital. </string>
     <string name="prefs_expert_mode">Modo experto</string>
     <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
     <string name="prefs_log_delete_history_button">Borrar historial</string>
@@ -480,9 +477,6 @@
 
     <string name="whats_new_skip">Saltar</string>
 
-    <string name="fingerprint_scan_finger">Por favor escanea tu dedo</string>
-    <string name="fingerprint_unknown">El dedo no ha sido reconocido</string>
-
     <!-- User information -->
     <string name="user_info_email">Correo electrónico</string>
     <string name="user_info_phone">Número telefónico</string>
@@ -543,7 +537,6 @@
     <string name="activity_icon">Ícono de actividad</string>
     <string name="file_icon">Ícono de archivo</string>
     <string name="user_icon">Ícono de usuario</string>
-    <string name="fingerprint_icon">Ícono de huella digital</string>
     <string name="favorite_icon">Ícono de Favorito</string>
     <string name="shared_via_link_icon">Ícono de compartido por liga</string>
     <string name="synced_icon">Ícono de sincronizado</string>

+ 0 - 7
src/main/res/values-es-rPE/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
     <string name="prefs_manage_accounts">Administrar cuentas</string>
-    <string name="prefs_passcode">Bloqueo con código de seguridad</string>
-    <string name="prefs_fingerprint">Bloqueo cor huella digital</string>
-    <string name="prefs_fingerprint_notsetup">No se ha establecido alguna huella digital. </string>
     <string name="prefs_expert_mode">Modo experto</string>
     <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
     <string name="prefs_log_delete_history_button">Borrar historial</string>
@@ -480,9 +477,6 @@
 
     <string name="whats_new_skip">Saltar</string>
 
-    <string name="fingerprint_scan_finger">Por favor escanea tu dedo</string>
-    <string name="fingerprint_unknown">El dedo no ha sido reconocido</string>
-
     <!-- User information -->
     <string name="user_info_email">Correo electrónico</string>
     <string name="user_info_phone">Número telefónico</string>
@@ -543,7 +537,6 @@
     <string name="activity_icon">Ícono de actividad</string>
     <string name="file_icon">Ícono de archivo</string>
     <string name="user_icon">Ícono de usuario</string>
-    <string name="fingerprint_icon">Ícono de huella digital</string>
     <string name="favorite_icon">Ícono de Favorito</string>
     <string name="shared_via_link_icon">Ícono de compartido por liga</string>
     <string name="synced_icon">Ícono de sincronizado</string>

+ 0 - 7
src/main/res/values-es-rPR/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
     <string name="prefs_manage_accounts">Administrar cuentas</string>
-    <string name="prefs_passcode">Bloqueo con código de seguridad</string>
-    <string name="prefs_fingerprint">Bloqueo cor huella digital</string>
-    <string name="prefs_fingerprint_notsetup">No se ha establecido alguna huella digital. </string>
     <string name="prefs_expert_mode">Modo experto</string>
     <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
     <string name="prefs_log_delete_history_button">Borrar historial</string>
@@ -480,9 +477,6 @@
 
     <string name="whats_new_skip">Saltar</string>
 
-    <string name="fingerprint_scan_finger">Por favor escanea tu dedo</string>
-    <string name="fingerprint_unknown">El dedo no ha sido reconocido</string>
-
     <!-- User information -->
     <string name="user_info_email">Correo electrónico</string>
     <string name="user_info_phone">Número telefónico</string>
@@ -543,7 +537,6 @@
     <string name="activity_icon">Ícono de actividad</string>
     <string name="file_icon">Ícono de archivo</string>
     <string name="user_icon">Ícono de usuario</string>
-    <string name="fingerprint_icon">Ícono de huella digital</string>
     <string name="favorite_icon">Ícono de Favorito</string>
     <string name="shared_via_link_icon">Ícono de compartido por liga</string>
     <string name="synced_icon">Ícono de sincronizado</string>

+ 0 - 7
src/main/res/values-es-rPY/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
     <string name="prefs_manage_accounts">Administrar cuentas</string>
-    <string name="prefs_passcode">Bloqueo con código de seguridad</string>
-    <string name="prefs_fingerprint">Bloqueo cor huella digital</string>
-    <string name="prefs_fingerprint_notsetup">No se ha establecido alguna huella digital. </string>
     <string name="prefs_expert_mode">Modo experto</string>
     <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
     <string name="prefs_log_delete_history_button">Borrar historial</string>
@@ -480,9 +477,6 @@
 
     <string name="whats_new_skip">Saltar</string>
 
-    <string name="fingerprint_scan_finger">Por favor escanea tu dedo</string>
-    <string name="fingerprint_unknown">El dedo no ha sido reconocido</string>
-
     <!-- User information -->
     <string name="user_info_email">Correo electrónico</string>
     <string name="user_info_phone">Número telefónico</string>
@@ -543,7 +537,6 @@
     <string name="activity_icon">Ícono de actividad</string>
     <string name="file_icon">Ícono de archivo</string>
     <string name="user_icon">Ícono de usuario</string>
-    <string name="fingerprint_icon">Ícono de huella digital</string>
     <string name="favorite_icon">Ícono de Favorito</string>
     <string name="shared_via_link_icon">Ícono de compartido por liga</string>
     <string name="synced_icon">Ícono de sincronizado</string>

+ 0 - 7
src/main/res/values-es-rSV/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
     <string name="prefs_manage_accounts">Administrar cuentas</string>
-    <string name="prefs_passcode">Bloqueo con código de seguridad</string>
-    <string name="prefs_fingerprint">Bloqueo cor huella digital</string>
-    <string name="prefs_fingerprint_notsetup">No se ha establecido alguna huella digital. </string>
     <string name="prefs_expert_mode">Modo experto</string>
     <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
     <string name="prefs_log_delete_history_button">Borrar historial</string>
@@ -580,9 +577,6 @@
 
     <string name="whats_new_skip">Omitir</string>
 
-    <string name="fingerprint_scan_finger">Por favor escanea tu dedo</string>
-    <string name="fingerprint_unknown">El dedo no ha sido reconocido</string>
-
     <!-- User information -->
     <string name="user_info_email">Correo electrónico</string>
     <string name="user_info_phone">Número telefónico</string>
@@ -656,7 +650,6 @@
     <string name="activity_icon">Ícono de actividad</string>
     <string name="file_icon">Ícono de archivo</string>
     <string name="user_icon">Ícono de usuario</string>
-    <string name="fingerprint_icon">Ícono de huella digital</string>
     <string name="favorite_icon">Ícono de Favorito</string>
     <string name="shared_via_link_icon">Ícono de compartido por liga</string>
     <string name="synced_icon">Ícono de sincronizado</string>

+ 0 - 7
src/main/res/values-es-rUY/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
     <string name="prefs_manage_accounts">Administrar cuentas</string>
-    <string name="prefs_passcode">Bloqueo con código de seguridad</string>
-    <string name="prefs_fingerprint">Bloqueo cor huella digital</string>
-    <string name="prefs_fingerprint_notsetup">No se ha establecido alguna huella digital. </string>
     <string name="prefs_expert_mode">Modo experto</string>
     <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
     <string name="prefs_log_delete_history_button">Borrar historial</string>
@@ -480,9 +477,6 @@
 
     <string name="whats_new_skip">Saltar</string>
 
-    <string name="fingerprint_scan_finger">Por favor escanea tu dedo</string>
-    <string name="fingerprint_unknown">El dedo no ha sido reconocido</string>
-
     <!-- User information -->
     <string name="user_info_email">Correo electrónico</string>
     <string name="user_info_phone">Número telefónico</string>
@@ -543,7 +537,6 @@
     <string name="activity_icon">Ícono de actividad</string>
     <string name="file_icon">Ícono de archivo</string>
     <string name="user_icon">Ícono de usuario</string>
-    <string name="fingerprint_icon">Ícono de huella digital</string>
     <string name="favorite_icon">Ícono de Favorito</string>
     <string name="shared_via_link_icon">Ícono de compartido por liga</string>
     <string name="synced_icon">Ícono de sincronizado</string>

+ 0 - 7
src/main/res/values-es/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
     <string name="prefs_manage_accounts">Gestionar cuentas</string>
-    <string name="prefs_passcode">Bloqueo con código de acceso</string>
-    <string name="prefs_fingerprint">Bloqueo con huella dactilar</string>
-    <string name="prefs_fingerprint_notsetup">No se han configurado huellas dactilares</string>
     <string name="prefs_expert_mode">Modo experto</string>
     <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
     <string name="prefs_log_delete_history_button">Eliminar historial</string>
@@ -602,9 +599,6 @@
 
     <string name="whats_new_skip">Omitir</string>
 
-    <string name="fingerprint_scan_finger">Por favor, escanea tu dedo</string>
-    <string name="fingerprint_unknown">Dedo no reconocido</string>
-
     <!-- User information -->
     <string name="user_info_email">Correo electrónico</string>
     <string name="user_info_phone">Número de teléfono</string>
@@ -678,7 +672,6 @@
     <string name="activity_icon">Icono de actividad</string>
     <string name="file_icon">Icono de archivo</string>
     <string name="user_icon">Icono de usuario</string>
-    <string name="fingerprint_icon">Icono de lector de huellas</string>
     <string name="favorite_icon">Icono de favorito</string>
     <string name="shared_via_link_icon">Icono de compartido vía enlace</string>
     <string name="synced_icon">Icono de sincronizado</string>

+ 0 - 1
src/main/res/values-eu/strings.xml

@@ -39,7 +39,6 @@
     <string name="prefs_category_general">Orokorra</string>
     <string name="prefs_category_more">Gehiago</string>
     <string name="prefs_manage_accounts">Kudeatu kontuak</string>
-    <string name="prefs_passcode">Pasakode bidezko blokeoa</string>
     <string name="prefs_fingerprint">Hatz-marka bidezko blokeoa</string>
     <string name="prefs_fingerprint_notsetup">Ez da hatz-markarik konfiguratu</string>
     <string name="prefs_expert_mode">Modu aurreratua</string>

+ 0 - 5
src/main/res/values-fi-rFI/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Yleiset</string>
     <string name="prefs_category_more">Enemmän</string>
     <string name="prefs_manage_accounts">Tilien hallinta</string>
-    <string name="prefs_passcode">Suojakoodilukitus</string>
-    <string name="prefs_fingerprint">Sormenjälkilukitus</string>
-    <string name="prefs_fingerprint_notsetup">Sormenjälkiä ei ole asetettu</string>
     <string name="prefs_expert_mode">Asiantuntijatila</string>
     <string name="prefs_show_hidden_files">Näytä piilotetut tiedostot</string>
     <string name="prefs_log_delete_history_button">Poista historia</string>
@@ -529,8 +526,6 @@
 
     <string name="whats_new_skip">Ohita</string>
 
-    <string name="fingerprint_scan_finger">Skannaa sormesi.</string>
-    <string name="fingerprint_unknown">Sormea ei tunnistettu</string>
 
     <!-- User information -->
     <string name="user_info_email">Sähköposti</string>

+ 0 - 7
src/main/res/values-fr/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Général</string>
     <string name="prefs_category_more">Plus</string>
     <string name="prefs_manage_accounts">Gestion des comptes</string>
-    <string name="prefs_passcode">Code de sécurité</string>
-    <string name="prefs_fingerprint">Verrouillage par empreinte digitale</string>
-    <string name="prefs_fingerprint_notsetup">Aucune empreinte digitale n\'a été installée.</string>
     <string name="prefs_expert_mode">Mode expert</string>
     <string name="prefs_show_hidden_files">Afficher les fichiers masqués</string>
     <string name="prefs_log_delete_history_button">Effacer le journal</string>
@@ -601,9 +598,6 @@ Veuillez contacter votre administrateur</string>
 
     <string name="whats_new_skip">Ignorer</string>
 
-    <string name="fingerprint_scan_finger">Veuillez scanner votre doigt</string>
-    <string name="fingerprint_unknown">Doigt non reconnu</string>
-
     <!-- User information -->
     <string name="user_info_email">Adresse e-mail</string>
     <string name="user_info_phone">Numéro de téléphone</string>
@@ -677,7 +671,6 @@ Veuillez contacter votre administrateur</string>
     <string name="activity_icon">Icône d\'activité</string>
     <string name="file_icon">Icône de fichier</string>
     <string name="user_icon">Icône d\'utilisateur</string>
-    <string name="fingerprint_icon">Icône de fingerprint</string>
     <string name="favorite_icon">Icône des favoris</string>
     <string name="shared_via_link_icon">Icône de partage par lien</string>
     <string name="synced_icon">Icône synchronisé</string>

+ 0 - 7
src/main/res/values-hu-rHU/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Általános</string>
     <string name="prefs_category_more">Több</string>
     <string name="prefs_manage_accounts">Fiókok kezelése</string>
-    <string name="prefs_passcode">Számkódos lezárás</string>
-    <string name="prefs_fingerprint">Lezárás Újjlenyomattal</string>
-    <string name="prefs_fingerprint_notsetup">Nincs újjlenyomat beállítva.</string>
     <string name="prefs_expert_mode">Szakértő mód</string>
     <string name="prefs_show_hidden_files">Rejtett fájlok megjelenítése</string>
     <string name="prefs_log_delete_history_button">Előzmények törlése</string>
@@ -580,9 +577,6 @@ Lépj kapcsolatba a rendszergazdával</string>
 
     <string name="whats_new_skip">Kihagy</string>
 
-    <string name="fingerprint_scan_finger">Kérlek húzd le az ujjad</string>
-    <string name="fingerprint_unknown">Ujj ismeretlen</string>
-
     <!-- User information -->
     <string name="user_info_email">E-mail</string>
     <string name="user_info_phone">Telefonszám</string>
@@ -674,7 +668,6 @@ A Nextcloud itt érhető el: https://nextcloud.com</string>
     <string name="activity_icon">Aktivitás ikon</string>
     <string name="file_icon">Fájl ikon</string>
     <string name="user_icon">Felhasználó ikon</string>
-    <string name="fingerprint_icon">Ujjlenyomat ikon</string>
     <string name="favorite_icon">Kedvencek ikon</string>
     <string name="shared_via_link_icon">Link ikonon keresztül megosztva</string>
     <string name="synced_icon">Szinkronizálva ikon</string>

+ 0 - 6
src/main/res/values-in/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Umum</string>
     <string name="prefs_category_more">Lainnya</string>
     <string name="prefs_manage_accounts">Kelola akun</string>
-    <string name="prefs_passcode">Kunci kode sandi</string>
-    <string name="prefs_fingerprint">Kunci Fingerprint</string>
-    <string name="prefs_fingerprint_notsetup">Belum ada fingerprint ditambahkan</string>
     <string name="prefs_expert_mode">Mode Ahli</string>
     <string name="prefs_show_hidden_files">Lihat berkas tersembunyi</string>
     <string name="prefs_log_delete_history_button">Hapus riwayat</string>
@@ -434,9 +431,6 @@
 
     <string name="whats_new_skip">Lewat</string>
 
-    <string name="fingerprint_scan_finger">Pindai jari anda.</string>
-    <string name="fingerprint_unknown">Jari tidak dikenali.</string>
-
     <!-- User information -->
     <string name="user_info_email">Surel</string>
     <string name="user_info_phone">Nomor telepon</string>

+ 0 - 6
src/main/res/values-is/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Almennt</string>
     <string name="prefs_category_more">Meira</string>
     <string name="prefs_manage_accounts">Sýsla með notandaaðganga</string>
-    <string name="prefs_passcode">Læsing með lykilkóða</string>
-    <string name="prefs_fingerprint">Fingrafaralás</string>
-    <string name="prefs_fingerprint_notsetup">Engin fingraför hafa verið sett inn.</string>
     <string name="prefs_expert_mode">Sérfræðingahamur</string>
     <string name="prefs_show_hidden_files">Sýna faldar skrár</string>
     <string name="prefs_log_delete_history_button">Eyða ferli</string>
@@ -602,9 +599,6 @@
 
     <string name="whats_new_skip">Sleppa</string>
 
-    <string name="fingerprint_scan_finger">Skannaðu fingurinn þinn</string>
-    <string name="fingerprint_unknown">Fingrafar þekktist ekki</string>
-
     <!-- User information -->
     <string name="user_info_email">Tölvupóstur</string>
     <string name="user_info_phone">Símanúmer</string>

+ 0 - 7
src/main/res/values-it/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Generale</string>
     <string name="prefs_category_more">Altro</string>
     <string name="prefs_manage_accounts">Gestisci account</string>
-    <string name="prefs_passcode">Blocco con codice di sicurezza</string>
-    <string name="prefs_fingerprint">Blocco con impronta digitale</string>
-    <string name="prefs_fingerprint_notsetup">Non è stata impostata alcuna impronta digitale</string>
     <string name="prefs_expert_mode">Modalità esperta</string>
     <string name="prefs_show_hidden_files">Mostra i file nascosti</string>
     <string name="prefs_log_delete_history_button">Elimina cronologia</string>
@@ -602,9 +599,6 @@
 
     <string name="whats_new_skip">Salta</string>
 
-    <string name="fingerprint_scan_finger">Esegui la scansione del tuo dito</string>
-    <string name="fingerprint_unknown">Dito non riconosciuto</string>
-
     <!-- User information -->
     <string name="user_info_email">Email</string>
     <string name="user_info_phone">Numero di telefono</string>
@@ -679,7 +673,6 @@
     <string name="activity_icon">Icona attività</string>
     <string name="file_icon">Icona file</string>
     <string name="user_icon">Icona utente</string>
-    <string name="fingerprint_icon">Icona impronta digitale</string>
     <string name="favorite_icon">Icona preferiti</string>
     <string name="shared_via_link_icon">Icona condivisi tramite collegamento</string>
     <string name="synced_icon">Icona sincronizzati</string>

+ 0 - 6
src/main/res/values-ja-rJP/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">一般</string>
     <string name="prefs_category_more">もっと見る</string>
     <string name="prefs_manage_accounts">アカウント管理</string>
-    <string name="prefs_passcode">パスコードロック</string>
-    <string name="prefs_fingerprint">指紋ロック</string>
-    <string name="prefs_fingerprint_notsetup">指紋は設定されていません。</string>
     <string name="prefs_expert_mode">エキスパートモード</string>
     <string name="prefs_show_hidden_files">隠しファイルを表示</string>
     <string name="prefs_log_delete_history_button">履歴の削除</string>
@@ -450,9 +447,6 @@
 
     <string name="whats_new_skip">スキップ</string>
 
-    <string name="fingerprint_scan_finger">指紋をスキャンしてください</string>
-    <string name="fingerprint_unknown">指紋が認識できません</string>
-
     <string name="user_info_phone">電話番号</string>
     <string name="user_info_address">住所</string>
     <string name="user_info_website">ウェブサイト</string>

+ 0 - 7
src/main/res/values-ka-rGE/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">ზოგადი</string>
     <string name="prefs_category_more">მეტი</string>
     <string name="prefs_manage_accounts">ანგარიშების მართვა</string>
-    <string name="prefs_passcode">ჩაკეტვა პასკოდით</string>
-    <string name="prefs_fingerprint">ჩაკეტვა თითის ანაბეჭდით</string>
-    <string name="prefs_fingerprint_notsetup">თითის ანაბეჭდები არ დაყენებულა.</string>
     <string name="prefs_expert_mode">ექპერტ-რეჟიმი</string>
     <string name="prefs_show_hidden_files">დამალული ფაილების ჩვენება</string>
     <string name="prefs_log_delete_history_button">ისტორიის წაშლა</string>
@@ -544,9 +541,6 @@
 
     <string name="whats_new_skip">გამოტოვება</string>
 
-    <string name="fingerprint_scan_finger">გთხოვთ დაასკანიროთ თქვენი თითი</string>
-    <string name="fingerprint_unknown">თითი ვერ იქნა ამოცნობილი</string>
-
     <!-- User information -->
     <string name="user_info_email">ელ-ფოსტა</string>
     <string name="user_info_phone">ტელეფონის ნომერი</string>
@@ -617,7 +611,6 @@
     <string name="activity_icon">აქტივობის პიქტოგრამა</string>
     <string name="file_icon">ფაილის პიქტოგრამა</string>
     <string name="user_icon">მომხმარებლის პიქტოგრამა</string>
-    <string name="fingerprint_icon">თითის ანაბეჭდის პიქტოგრამა</string>
     <string name="favorite_icon">რჩეულის პიქტოგრამა</string>
     <string name="shared_via_link_icon">გაზიარებულია ბმულის პიქტოგრამით</string>
     <string name="synced_icon">სინქრონიზირებული პიქტოგრამა</string>

+ 0 - 3
src/main/res/values-ko/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">일반</string>
     <string name="prefs_category_more">더 보기</string>
     <string name="prefs_manage_accounts">계정 관리</string>
-    <string name="prefs_passcode">암호 잠금</string>
-    <string name="prefs_fingerprint">지문 잠금</string>
-    <string name="prefs_fingerprint_notsetup">설정된 지문이 없습니다.</string>
     <string name="prefs_expert_mode">전문가 모드</string>
     <string name="prefs_show_hidden_files">숨겨진 파일 보기</string>
     <string name="prefs_log_delete_history_button">과거 기록 삭제</string>

+ 0 - 6
src/main/res/values-lt-rLT/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Bendras</string>
     <string name="prefs_category_more">Daugiau</string>
     <string name="prefs_manage_accounts">Tvarkyti paskyras</string>
-    <string name="prefs_passcode">Užrakinimas kodų</string>
-    <string name="prefs_fingerprint">Piršto užraktas</string>
-    <string name="prefs_fingerprint_notsetup">Nėra pirštų antspaudo užrakto</string>
     <string name="prefs_expert_mode">Eksperto režimas</string>
     <string name="prefs_show_hidden_files">Rodyti paslėptus failus</string>
     <string name="prefs_log_delete_history_button">Ištrinti istoriją</string>
@@ -458,9 +455,6 @@
 
     <string name="whats_new_skip">Praleisti</string>
 
-    <string name="fingerprint_scan_finger">Prašome nuskenuoti piršto atspaudą</string>
-    <string name="fingerprint_unknown">Atspaudas neatpažintas</string>
-
     <!-- User information -->
     <string name="user_info_email">El. paštas</string>
     <string name="user_info_phone">Telefono numeris</string>

+ 0 - 7
src/main/res/values-nb-rNO/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Generelt</string>
     <string name="prefs_category_more">Mer</string>
     <string name="prefs_manage_accounts">Håndter kontoer</string>
-    <string name="prefs_passcode">Passordlås</string>
-    <string name="prefs_fingerprint">Fingeravtrykkslås</string>
-    <string name="prefs_fingerprint_notsetup">Det har ikke blitt satt opp noen fingeravtrykk.</string>
     <string name="prefs_expert_mode">Ekspertmodus</string>
     <string name="prefs_show_hidden_files">Vis skjulte filer</string>
     <string name="prefs_log_delete_history_button">Slett historikk</string>
@@ -598,9 +595,6 @@
 
     <string name="whats_new_skip">Hopp over</string>
 
-    <string name="fingerprint_scan_finger">Skann fingeren din</string>
-    <string name="fingerprint_unknown">Gjenkjenner ikke finger</string>
-
     <!-- User information -->
     <string name="user_info_email">E-post</string>
     <string name="user_info_phone">Telefonnummer</string>
@@ -691,7 +685,6 @@ Sjekk ut Nextcloud på https://nextcloud.com</string>
     <string name="activity_icon">Aktivitetsikon</string>
     <string name="file_icon">Filikon</string>
     <string name="user_icon">Brukerikon</string>
-    <string name="fingerprint_icon">Fingeravtrykksikon</string>
     <string name="favorite_icon">Favorittikon</string>
     <string name="shared_via_link_icon">Delt via lenkeikon</string>
     <string name="synced_icon">Synkronisert-ikon</string>

+ 0 - 7
src/main/res/values-nl/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Algemeen</string>
     <string name="prefs_category_more">Meer</string>
     <string name="prefs_manage_accounts">Accounts beheren</string>
-    <string name="prefs_passcode">Toegangscode</string>
-    <string name="prefs_fingerprint">Vingerafdrukbeveiliging</string>
-    <string name="prefs_fingerprint_notsetup">Er zijn geen vingerafdrukken ingesteld.</string>
     <string name="prefs_expert_mode">Expertmodus</string>
     <string name="prefs_show_hidden_files">Verborgen bestanden weergeven</string>
     <string name="prefs_log_delete_history_button">Verwijder geschiedenis</string>
@@ -599,9 +596,6 @@
 
     <string name="whats_new_skip">Overslaan</string>
 
-    <string name="fingerprint_scan_finger">Scan je vinger</string>
-    <string name="fingerprint_unknown">Vinger niet herkend</string>
-
     <!-- User information -->
     <string name="user_info_email">Email</string>
     <string name="user_info_phone">Telefoonnummer</string>
@@ -675,7 +669,6 @@
     <string name="activity_icon">Activiteitspictogram</string>
     <string name="file_icon">Bestandpictogram</string>
     <string name="user_icon">Gebruikerspictogram</string>
-    <string name="fingerprint_icon">Vingerafdrukpictogram</string>
     <string name="favorite_icon">Favorietenpictogram</string>
     <string name="shared_via_link_icon">Gedeeld via link icoon</string>
     <string name="synced_icon">Gesynch\'d pictogram</string>

+ 0 - 7
src/main/res/values-pl/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Ogólne</string>
     <string name="prefs_category_more">Więcej</string>
     <string name="prefs_manage_accounts">Zarządzaj kontami</string>
-    <string name="prefs_passcode">Blokada kodem PIN</string>
-    <string name="prefs_fingerprint">Blokada odciskiem palca</string>
-    <string name="prefs_fingerprint_notsetup">Brak skonfigurowanych odcisków palców</string>
     <string name="prefs_expert_mode">Tryb eksperta</string>
     <string name="prefs_show_hidden_files">Pokaż ukryte pliki</string>
     <string name="prefs_log_delete_history_button">Wyczyść historię</string>
@@ -599,9 +596,6 @@
     <string name="whats_new_ipv6_title">Wsparcie IPv6</string>
     <string name="whats_new_skip">Pomiń</string>
 
-    <string name="fingerprint_scan_finger">Umieść palec na czytniku odcisku palca</string>
-    <string name="fingerprint_unknown">Nie rozpoznano odcisku palca</string>
-
     <!-- User information -->
     <string name="user_info_email">E-mail</string>
     <string name="user_info_phone">Numer telefonu</string>
@@ -664,7 +658,6 @@
     <string name="activity_icon">Ikona aktywności</string>
     <string name="file_icon">Ikona pliku</string>
     <string name="user_icon">Ikona użytkownika</string>
-    <string name="fingerprint_icon">Ikona odcisku palca</string>
     <string name="favorite_icon">Ikona ulubionych</string>
     <string name="shared_via_link_icon">Ikona udostępniania przez link</string>
     <string name="synced_icon">Ikona synchronizacji</string>

+ 0 - 7
src/main/res/values-pt-rBR/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Geral</string>
     <string name="prefs_category_more">Mais</string>
     <string name="prefs_manage_accounts">Gerenciar contas</string>
-    <string name="prefs_passcode">Bloqueio de código de acesso</string>
-    <string name="prefs_fingerprint">Bloqueio por impressão digital</string>
-    <string name="prefs_fingerprint_notsetup">Nenhuma impressão digital foi configurada.</string>
     <string name="prefs_expert_mode">Modo avançado</string>
     <string name="prefs_show_hidden_files">Mostrar arquivos ocultos</string>
     <string name="prefs_log_delete_history_button">Eliminar histórico</string>
@@ -602,9 +599,6 @@
 
     <string name="whats_new_skip">Saltar</string>
 
-    <string name="fingerprint_scan_finger">Por favor escaneie sua impressão digital</string>
-    <string name="fingerprint_unknown">Impressão digital não reconhecida</string>
-
     <!-- User information -->
     <string name="user_info_email">Email</string>
     <string name="user_info_phone">Número do telefone</string>
@@ -679,7 +673,6 @@
     <string name="activity_icon">Ícone de atividade</string>
     <string name="file_icon">Ícone de arquivo</string>
     <string name="user_icon">Ícone de usuário</string>
-    <string name="fingerprint_icon">Ícone de impressão digital</string>
     <string name="favorite_icon">Ícone de favorito</string>
     <string name="shared_via_link_icon">Ícone de compartilhamento via link</string>
     <string name="synced_icon">Ícone de sincronizado</string>

+ 0 - 7
src/main/res/values-ru/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Основные</string>
     <string name="prefs_category_more">Больше</string>
     <string name="prefs_manage_accounts">Управление аккаунтами</string>
-    <string name="prefs_passcode">Блокировка кодом</string>
-    <string name="prefs_fingerprint">Блокировка отпечатком пальца</string>
-    <string name="prefs_fingerprint_notsetup">Отпечатки не были настроены.</string>
     <string name="prefs_expert_mode">Экспертный режим</string>
     <string name="prefs_show_hidden_files">Показывать скрытые файлы</string>
     <string name="prefs_log_delete_history_button">Удалить историю</string>
@@ -610,9 +607,6 @@
 
     <string name="whats_new_skip">Пропустить</string>
 
-    <string name="fingerprint_scan_finger">Приложите палец</string>
-    <string name="fingerprint_unknown">Отпечаток не распознан</string>
-
     <!-- User information -->
     <string name="user_info_email">Email</string>
     <string name="user_info_phone">Номер телефона</string>
@@ -686,7 +680,6 @@
     <string name="activity_icon">Значок события</string>
     <string name="file_icon">Значок файла</string>
     <string name="user_icon">Значок пользователя</string>
-    <string name="fingerprint_icon">Значок отпечатка пальца</string>
     <string name="favorite_icon">Значок избранного</string>
     <string name="shared_via_link_icon">Значок доступного по ссылке</string>
     <string name="synced_icon">Значок синхронизированного содержимого</string>

+ 0 - 3
src/main/res/values-sk-rSK/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Všeobecné</string>
     <string name="prefs_category_more">Viac</string>
     <string name="prefs_manage_accounts">Spravovať účty</string>
-    <string name="prefs_passcode">Zámok bezpečnostného kódu</string>
-    <string name="prefs_fingerprint">Zámok odtlačkom prstu</string>
-    <string name="prefs_fingerprint_notsetup">Neboli nastavené žiadne odtlačky prstov.</string>
     <string name="prefs_expert_mode">Expertný režim</string>
     <string name="prefs_show_hidden_files">Zobraziť skryté súbory</string>
     <string name="prefs_log_delete_history_button">Vymazať históriu</string>

+ 0 - 3
src/main/res/values-sl/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Splošno</string>
     <string name="prefs_category_more">Več</string>
     <string name="prefs_manage_accounts">Upravljanje z računi</string>
-    <string name="prefs_passcode">Zakleni dostop s kodo PIN</string>
-    <string name="prefs_fingerprint">Ključavnica na prstni odtis</string>
-    <string name="prefs_fingerprint_notsetup">Prstni odtis ni nasavljen.</string>
     <string name="prefs_expert_mode">Napredni način</string>
     <string name="prefs_show_hidden_files">Prikaži skrite datoteke</string>
     <string name="prefs_log_delete_history_button">Izbriši zgodovino</string>

+ 0 - 6
src/main/res/values-sq/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Të përgjithshme</string>
     <string name="prefs_category_more">Më tepër</string>
     <string name="prefs_manage_accounts">Administroni llogaritë</string>
-    <string name="prefs_passcode">Kyçje kodkalimi</string>
-    <string name="prefs_fingerprint">Kyçuni me shenjat e gishtave</string>
-    <string name="prefs_fingerprint_notsetup">Shenjat e gishtave nuk janë vendosur</string>
     <string name="prefs_expert_mode">Mënyra eksperte</string>
     <string name="prefs_show_hidden_files">Trego skedarët e fshehur</string>
     <string name="prefs_log_delete_history_button">Fshini historikun</string>
@@ -602,9 +599,6 @@
 
     <string name="whats_new_skip">Kalo</string>
 
-    <string name="fingerprint_scan_finger">Ju lutemi skanoni gishtin tuaj</string>
-    <string name="fingerprint_unknown">Gishti nuk u njoh</string>
-
     <!-- User information -->
     <string name="user_info_email">E-mail</string>
     <string name="user_info_phone">Numri i telefonit</string>

+ 0 - 7
src/main/res/values-sr/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Опште</string>
     <string name="prefs_category_more">Остало</string>
     <string name="prefs_manage_accounts">Управљање налозима</string>
-    <string name="prefs_passcode">Закључавање кодом</string>
-    <string name="prefs_fingerprint">Закључавање отиском прста</string>
-    <string name="prefs_fingerprint_notsetup">Отисак прста није подешен.</string>
     <string name="prefs_expert_mode">Експертски режим</string>
     <string name="prefs_show_hidden_files">Прикажи скривене фајлове</string>
     <string name="prefs_log_delete_history_button">Обриши историјат</string>
@@ -607,9 +604,6 @@
 
     <string name="whats_new_skip">Прескочи</string>
 
-    <string name="fingerprint_scan_finger">Молимо скенирајте Ваш прст</string>
-    <string name="fingerprint_unknown">Прст није препознат</string>
-
     <!-- User information -->
     <string name="user_info_email">Адреса е-поште</string>
     <string name="user_info_phone">Број телефона</string>
@@ -684,7 +678,6 @@
     <string name="activity_icon">Икона активности</string>
     <string name="file_icon">Икона фајла</string>
     <string name="user_icon">Икона корисника</string>
-    <string name="fingerprint_icon">Икона отиска прста</string>
     <string name="favorite_icon">Икона омиљених</string>
     <string name="shared_via_link_icon">Икона дељења преко везе</string>
     <string name="synced_icon">Икона синхронизоване ставке</string>

+ 0 - 6
src/main/res/values-sv/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Allmänt</string>
     <string name="prefs_category_more">Mer</string>
     <string name="prefs_manage_accounts">Hantera konton</string>
-    <string name="prefs_passcode">Kodlås</string>
-    <string name="prefs_fingerprint">Fingeravtryckslås</string>
-    <string name="prefs_fingerprint_notsetup">Inget fingeravtryck har konfigurerats.</string>
     <string name="prefs_expert_mode">Expertläge</string>
     <string name="prefs_show_hidden_files">Visa dolda filer</string>
     <string name="prefs_log_delete_history_button">Radera historik</string>
@@ -499,9 +496,6 @@
 
     <string name="whats_new_skip">Hoppa över</string>
 
-    <string name="fingerprint_scan_finger">Vänligen skanna ditt finger</string>
-    <string name="fingerprint_unknown">Finger ej igenkänt</string>
-
     <!-- User information -->
     <string name="user_info_email">E-post</string>
     <string name="user_info_phone">Telefonnummer</string>

+ 0 - 7
src/main/res/values-tr/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">Genel</string>
     <string name="prefs_category_more">Daha fazla</string>
     <string name="prefs_manage_accounts">Hesap yönetimi</string>
-    <string name="prefs_passcode">Parola kod kilidi</string>
-    <string name="prefs_fingerprint">Parmak izi kilidi</string>
-    <string name="prefs_fingerprint_notsetup">Henüz bir parmak izi ayarlanmamış.</string>
     <string name="prefs_expert_mode">Uzman kipi</string>
     <string name="prefs_show_hidden_files">Gizli dosyaları görüntüle</string>
     <string name="prefs_log_delete_history_button">Geçmişi sil</string>
@@ -602,9 +599,6 @@
 
     <string name="whats_new_skip">Atla</string>
 
-    <string name="fingerprint_scan_finger">Lütfen parmağınızı tarayın</string>
-    <string name="fingerprint_unknown">Parmak tanınamadı</string>
-
     <!-- User information -->
     <string name="user_info_email">E-posta</string>
     <string name="user_info_phone">Telefon numarası</string>
@@ -679,7 +673,6 @@
     <string name="activity_icon">İşlem simgesi</string>
     <string name="file_icon">Dosya simgesi</string>
     <string name="user_icon">Kullanıcı simgesi</string>
-    <string name="fingerprint_icon">Parmakizi simgesi</string>
     <string name="favorite_icon">Sık kullanılanlar simgesi</string>
     <string name="shared_via_link_icon">Bağlantı ile paylaşılmış simgesi</string>
     <string name="synced_icon">Eşitlenmiş simgesi</string>

+ 0 - 6
src/main/res/values-zh-rCN/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">常规</string>
     <string name="prefs_category_more">更多</string>
     <string name="prefs_manage_accounts">管理账号</string>
-    <string name="prefs_passcode">安全码锁</string>
-    <string name="prefs_fingerprint">指纹锁</string>
-    <string name="prefs_fingerprint_notsetup">未设置指纹。</string>
     <string name="prefs_expert_mode">专家模式</string>
     <string name="prefs_show_hidden_files">显示隐藏文件</string>
     <string name="prefs_log_delete_history_button">删除历史</string>
@@ -551,9 +548,6 @@
 
     <string name="whats_new_skip">跳过</string>
 
-    <string name="fingerprint_scan_finger">请扫描你的手指</string>
-    <string name="fingerprint_unknown">手指未被识别</string>
-
     <!-- User information -->
     <string name="user_info_email">邮件</string>
     <string name="user_info_phone">电话号码</string>

+ 0 - 5
src/main/res/values-zh-rTW/strings.xml

@@ -39,9 +39,6 @@
     <string name="prefs_category_general">一般</string>
     <string name="prefs_category_more">更多</string>
     <string name="prefs_manage_accounts">管理帳戶</string>
-    <string name="prefs_passcode">密碼鎖</string>
-    <string name="prefs_fingerprint">指紋上鎖</string>
-    <string name="prefs_fingerprint_notsetup">尚未設置任何指紋。</string>
     <string name="prefs_expert_mode">專家模式</string>
     <string name="prefs_show_hidden_files">顯示隱藏檔案</string>
     <string name="prefs_log_delete_history_button">刪除記錄</string>
@@ -482,8 +479,6 @@
 
     <string name="whats_new_skip">略過</string>
 
-    <string name="fingerprint_scan_finger">請掃描您的指紋</string>
-    <string name="fingerprint_unknown">不認識的指紋</string>
 
     <!-- User information -->
     <string name="user_info_email">E-mail</string>

+ 0 - 1
src/main/res/values/dims.xml

@@ -112,7 +112,6 @@
     <dimen name="grid_image_kept_offline_icon_layout_height">16dp</dimen>
     <dimen name="grid_image_kept_offline_icon_layout_right_end_margin">24dp</dimen>
     <dimen name="grid_item_shared_icon_layout_top_margin">24dp</dimen>
-    <dimen name="scan_fingerprint_text_size">32sp</dimen>
     <dimen name="grid_item_local_file_indicator_layout_width">16dp</dimen>
     <dimen name="grid_item_local_file_indicator_layout_height">16dp</dimen>
     <dimen name="grid_item_kept_offline_icon_layout_width">16dp</dimen>

+ 10 - 1
src/main/res/values/setup.xml

@@ -89,8 +89,17 @@
     <bool name="bottom_toolbar_enabled">false</bool>
 
     <!-- Help, imprint and feedback, and other things -->
-    <bool name="fingerprint_enabled">true</bool>
     <bool name="passcode_enabled">true</bool>
+    <bool name="device_credentials_enabled">true</bool>
+    <string name="secret_key_name">Nextcloud</string>
+    <integer-array name="secret_byte_array">
+        <item>1</item>
+        <item>2</item>
+        <item>3</item>
+        <item>4</item>
+        <item>5</item>
+        <item>6</item>
+    </integer-array>
     <bool name="show_hidden_files_enabled">true</bool>
     <bool name="davdroid_integration_enabled">true</bool>
     <bool name="help_enabled">true</bool>

+ 11 - 7
src/main/res/values/strings.xml

@@ -39,9 +39,13 @@
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">More</string>
     <string name="prefs_manage_accounts">Manage accounts</string>
-    <string name="prefs_passcode">Passcode lock</string>
-    <string name="prefs_fingerprint">Fingerprint lock</string>
-    <string name="prefs_fingerprint_notsetup">No fingerprints have been set up.</string>
+    <string name="prefs_lock">Lock</string>
+    <string name="prefs_lock_title">Lock using</string>
+    <string name="prefs_lock_none">None</string>
+    <string name="prefs_lock_using_passcode">Passcode</string>
+    <string name="prefs_lock_using_device_credentials">Device credentials</string>
+    <string name="prefs_lock_device_credentials_enabled">Device credentials enabled</string>
+    <string name="prefs_lock_device_credentials_not_setup">No device credentials have been set up.</string>
     <string name="prefs_expert_mode">Expert mode</string>
     <string name="prefs_show_hidden_files">Show hidden files</string>
     <string name="prefs_log_delete_history_button">Delete history</string>
@@ -200,6 +204,8 @@
     <string name="foreign_files_remote_text">Remote: %1$s</string>
     <string name="upload_query_move_foreign_files">Insufficient space prevents copying the selected files into the %1$s folder. Would you like to move them there instead?</string>
     <string name="pass_code_enter_pass_code">Please enter your passcode</string>
+    <string name="default_credentials_wrong">Incorrect credentials</string>
+    <string name="credentials_disabled">Credentials disabled</string>
     
     <string name="pass_code_configure_your_pass_code">Enter your passcode</string>
     <string name="pass_code_configure_your_pass_code_explanation">The passcode will be requested every time the app is started</string>
@@ -615,9 +621,6 @@
 
     <string name="whats_new_skip">Skip</string>
 
-    <string name="fingerprint_scan_finger">Please scan your finger</string>
-    <string name="fingerprint_unknown">Finger not recognized</string>
-
     <!-- User information -->
     <string name="user_info_email">E-mail</string>
     <string name="user_info_phone">Phone number</string>
@@ -694,7 +697,6 @@
     <string name="activity_icon">Activity icon</string>
     <string name="file_icon">File icon</string>
     <string name="user_icon">User icon</string>
-    <string name="fingerprint_icon">Fingerprint icon</string>
     <string name="favorite_icon">Favorite icon</string>
     <string name="shared_via_link_icon">Shared via link icon</string>
     <string name="synced_icon">Synced icon</string>
@@ -792,4 +794,6 @@
     <string name="sharee_add_failed">Adding sharee failed</string>
     <string name="unsharing_failed">Unsharing failed</string>
     <string name="updating_share_failed">Updating share failed</string>
+    <string name="whats_new_device_credentials_title">Use Android device protection</string>
+    <string name="whats_new_device_credentials_content">Use anything like a pattern, password, pin or your fingerprint to keep your data safe.</string>
 </resources>

+ 5 - 6
src/main/res/xml/preferences.xml

@@ -39,12 +39,11 @@
 	</PreferenceCategory>
 
 	<PreferenceCategory android:title="@string/prefs_category_details" android:key="details">
-		<com.owncloud.android.ui.ThemeableSwitchPreference
-			android:title="@string/prefs_passcode"
-			android:key="set_pincode"/>
-		<com.owncloud.android.ui.ThemeableSwitchPreference
-			android:title="@string/prefs_fingerprint"
-			android:key="use_fingerprint"/>
+		<ListPreference
+			android:title="@string/prefs_lock"
+			android:key="lock"
+			android:dialogTitle="@string/prefs_lock_title"
+			android:defaultValue="none"/>
 		<com.owncloud.android.ui.ThemeableSwitchPreference
 			android:title="@string/prefs_show_hidden_files"
 			android:key="show_hidden_files"/>

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác