diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Activities/MainActivity.java b/app/src/main/java/org/shadowice/flocke/andotp/Activities/MainActivity.java
index 81dfe5a1..353b8693 100644
--- a/app/src/main/java/org/shadowice/flocke/andotp/Activities/MainActivity.java
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Activities/MainActivity.java
@@ -106,15 +106,32 @@ public class MainActivity extends BaseActivity
private void showFirstTimeWarning() {
ViewGroup container = findViewById(R.id.main_content);
- View msgView = getLayoutInflater().inflate(R.layout.dialog_security_backup, container, false);
+ View msgView = getLayoutInflater().inflate(R.layout.dialog_database_encryption, container, false);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle(R.string.dialog_title_security_backup)
+ builder.setTitle(R.string.dialog_title_encryption)
.setView(msgView)
- .setPositiveButton(R.string.button_warned, new DialogInterface.OnClickListener() {
+ .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
settings.setFirstTimeWarningShown(true);
+ updateEncryption(null);
+ }
+ })
+ .setNegativeButton(R.string.button_settings, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ settings.setFirstTimeWarningShown(true);
+
+ Intent settingsIntent = new Intent(getBaseContext(), SettingsActivity.class);
+ startActivityForResult(settingsIntent, Constants.INTENT_MAIN_SETTINGS);
+ }
+ })
+ .setOnCancelListener(new DialogInterface.OnCancelListener() {
+ @Override
+ public void onCancel(DialogInterface dialogInterface) {
+ settings.setFirstTimeWarningShown(true);
+ updateEncryption(null);
}
})
.create()
@@ -316,15 +333,9 @@ public class MainActivity extends BaseActivity
authenticate(R.string.auth_msg_authenticate);
}
} else {
- if (encryptionType == EncryptionType.KEYSTORE) {
+ if (settings.getFirstTimeWarningShown()) {
if (adapter.getEncryptionKey() == null) {
- adapter.setEncryptionKey(KeyStoreHelper.loadEncryptionKeyFromKeyStore(this, false));
- }
-
- populateAdapter();
- } else if (encryptionType == EncryptionType.PASSWORD) {
- if (adapter.getEncryptionKey() == null) {
- authenticate(R.string.auth_msg_authenticate);
+ updateEncryption(null);
} else {
populateAdapter();
}
diff --git a/app/src/main/res/layout/dialog_database_encryption.xml b/app/src/main/res/layout/dialog_database_encryption.xml
new file mode 100644
index 00000000..69d322e7
--- /dev/null
+++ b/app/src/main/res/layout/dialog_database_encryption.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_security_backup.xml b/app/src/main/res/layout/dialog_security_backup.xml
deleted file mode 100644
index 62afe8a0..00000000
--- a/app/src/main/res/layout/dialog_security_backup.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/strings_main.xml b/app/src/main/res/values/strings_main.xml
index 3f04ce5c..ea8b3ca2 100644
--- a/app/src/main/res/values/strings_main.xml
+++ b/app/src/main/res/values/strings_main.xml
@@ -7,7 +7,7 @@
Scan QR-Code
Save
New tag
- You have been warned!
+ Settings
All tags
No tags
@@ -63,26 +63,32 @@
Enter details
Remove
Rename
- Security and Backups
Last used
KeyStore error
+ Database encryption
Please enter your device credentials to start andOTP.
Are you sure you want do remove the account \"%1$s\"?
- To keep your account information secure this app
- only stores it encrypted. Part of the encryption key used for this is stored in the Android
- KeyStore system. The advantage of this approach is that the key is kept separate from the
- apps data and can be backed by hardware cryptography (if your device supports this).
-
- As a drawback this makes backups of the apps
- data a little bit more difficult. If you use 3rd party apps (like Titanium Backup) you only
- backup the data files, not the encryption key and as a result such backups become useless.
-
- Please only use the internal backup functions
- provided by the app to backup your accounts! Anything else WILL lead to data loss.
-
- This message will not be shown again.
+ 1. Android KeyStore
+ 2. Password / PIN
+
+ To ensure the security of your accounts this app
+ only stores them in encrypted data files using one of the following two methods:
+ The KeyStore is a system component of Android for
+ securely storing cryptographic keys. The advantage of this approach is that the keys are
+ stored separated from the data files and can be backed by hardware cryptography (if the
+ hardware supports it). However as the keys are not stored with the apps data this method
+ prevents external backup solutions (like Titanium) from working. If you choose this method
+ you will have to rely on the internal backup functions provided by andOTP.
+ This method will encrypt your data with a key
+ generated from a password or PIN. The main advantage here is that this will work with
+ external backup solutions (like Titanium). However you will have to enter your credentials
+ every time you start andOTP.
+ By default the Android KeyStore will be used, however
+ this is known to cause problems on certain custom ROMs (and a few stock ones as well). You
+ can change the encryption in the Settings by clicking on the button below.
+
In order for andOTP to recognize which token was used last
you have to have \"tap to reveal\" enabled or use the copy button.\n\nThis message will not
be shown again.