diff --git a/app/src/main/java/me/impy/aegis/AddProfileActivity.java b/app/src/main/java/me/impy/aegis/AddProfileActivity.java
index 24efcb46..5e9a405e 100644
--- a/app/src/main/java/me/impy/aegis/AddProfileActivity.java
+++ b/app/src/main/java/me/impy/aegis/AddProfileActivity.java
@@ -3,7 +3,6 @@ package me.impy.aegis;
import android.app.Activity;
import android.content.Intent;
import android.support.design.widget.FloatingActionButton;
-import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
@@ -12,7 +11,7 @@ import android.widget.TextView;
import me.impy.aegis.crypto.KeyInfo;
-public class AddProfileActivity extends AppCompatActivity {
+public class AddProfileActivity extends AegisActivity {
private KeyProfile _keyProfile;
private EditText _profileName;
@@ -21,14 +20,10 @@ public class AddProfileActivity extends AppCompatActivity {
private TextView _textPeriod;
private TextView _textOtp;
- private AegisApplication _app;
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- _app = (AegisApplication) getApplication();
- setPreferredTheme();
setContentView(R.layout.activity_add_profile);
_profileName = findViewById(R.id.addProfileName);
@@ -60,6 +55,15 @@ public class AddProfileActivity extends AppCompatActivity {
//_profileName.setText(_keyProfile.Info.getAccountName());
}
+ @Override
+ protected void setPreferredTheme(boolean nightMode) {
+ if (nightMode) {
+ setTheme(R.style.AppTheme_Dark_TransparentActionBar);
+ } else {
+ setTheme(R.style.AppTheme_Default_TransparentActionBar);
+ }
+ }
+
private void initializeForm() {
KeyInfo info = _keyProfile.getEntry().getInfo();
_profileName.setText(info.getAccountName());
@@ -81,12 +85,4 @@ public class AddProfileActivity extends AppCompatActivity {
return super.onOptionsItemSelected(item);
}
}
-
- private void setPreferredTheme() {
- if (_app.getPreferences().getBoolean("pref_night_mode", false)) {
- setTheme(R.style.AppTheme_Dark_TransparentActionBar);
- } else {
- setTheme(R.style.AppTheme_Default_TransparentActionBar);
- }
- }
}
diff --git a/app/src/main/java/me/impy/aegis/AegisActivity.java b/app/src/main/java/me/impy/aegis/AegisActivity.java
new file mode 100644
index 00000000..f7b96355
--- /dev/null
+++ b/app/src/main/java/me/impy/aegis/AegisActivity.java
@@ -0,0 +1,23 @@
+package me.impy.aegis;
+
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+
+public abstract class AegisActivity extends AppCompatActivity {
+ private AegisApplication _app;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ _app = (AegisApplication) getApplication();
+
+ boolean nightMode = _app.getPreferences().getBoolean("pref_night_mode", false);
+ setPreferredTheme(nightMode);
+ }
+
+ protected AegisApplication getApp() {
+ return _app;
+ }
+
+ protected abstract void setPreferredTheme(boolean nightMode);
+}
diff --git a/app/src/main/java/me/impy/aegis/AuthActivity.java b/app/src/main/java/me/impy/aegis/AuthActivity.java
index c1428b1c..f5716998 100644
--- a/app/src/main/java/me/impy/aegis/AuthActivity.java
+++ b/app/src/main/java/me/impy/aegis/AuthActivity.java
@@ -4,7 +4,6 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;
import android.support.v7.app.AlertDialog;
-import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
@@ -28,7 +27,7 @@ import me.impy.aegis.crypto.slots.SlotCollection;
import me.impy.aegis.helpers.FingerprintUiHelper;
import me.impy.aegis.helpers.AuthHelper;
-public class AuthActivity extends AppCompatActivity implements FingerprintUiHelper.Callback, SlotCollectionTask.Callback {
+public class AuthActivity extends AegisActivity implements FingerprintUiHelper.Callback, SlotCollectionTask.Callback {
public static final int RESULT_OK = 0;
public static final int RESULT_EXCEPTION = 1;
@@ -76,6 +75,15 @@ public class AuthActivity extends AppCompatActivity implements FingerprintUiHelp
});
}
+ @Override
+ protected void setPreferredTheme(boolean nightMode) {
+ if (nightMode) {
+ setTheme(R.style.AppTheme_Dark);
+ } else {
+ setTheme(R.style.AppTheme_Default);
+ }
+ }
+
private void showError() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Decryption error");
diff --git a/app/src/main/java/me/impy/aegis/MainActivity.java b/app/src/main/java/me/impy/aegis/MainActivity.java
index 79122daa..4adff153 100644
--- a/app/src/main/java/me/impy/aegis/MainActivity.java
+++ b/app/src/main/java/me/impy/aegis/MainActivity.java
@@ -14,7 +14,6 @@ import android.os.Build;
import android.support.design.widget.BottomSheetDialog;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AlertDialog;
-import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
@@ -41,7 +40,7 @@ import me.impy.aegis.importers.DatabaseImporter;
import me.impy.aegis.helpers.SimpleItemTouchHelperCallback;
import me.impy.aegis.util.ByteInputStream;
-public class MainActivity extends AppCompatActivity implements KeyProfileAdapter.Listener {
+public class MainActivity extends AegisActivity implements KeyProfileAdapter.Listener {
// activity request codes
private static final int CODE_GET_KEYINFO = 0;
private static final int CODE_ADD_KEYINFO = 1;
@@ -68,14 +67,6 @@ public class MainActivity extends AppCompatActivity implements KeyProfileAdapter
_app = (AegisApplication) getApplication();
_db = _app.getDatabaseManager();
- // set the theme
- if (_app.getPreferences().getBoolean("pref_night_mode", false)) {
- _nightMode = true;
- setTheme(R.style.AppTheme_Dark_NoActionBar);
- } else {
- setPreferredTheme();
- }
-
// set up the main view
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
@@ -108,9 +99,7 @@ public class MainActivity extends AppCompatActivity implements KeyProfileAdapter
try {
_db.load();
if (!_db.isUnlocked()) {
- Intent intent = new Intent(this, AuthActivity.class);
- intent.putExtra("slots", _db.getFile().getSlots());
- startActivityForResult(intent, CODE_DECRYPT);
+ startAuthActivity();
}
} catch (FileNotFoundException e) {
// start the intro if the db file was not found
@@ -130,6 +119,16 @@ public class MainActivity extends AppCompatActivity implements KeyProfileAdapter
}
}
+ @Override
+ protected void setPreferredTheme(boolean nightMode) {
+ if (nightMode) {
+ setTheme(R.style.AppTheme_Dark_NoActionBar);
+ } else if (_nightMode) {
+ setTheme(R.style.AppTheme_Default_NoActionBar);
+ }
+ _nightMode = nightMode;
+ }
+
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
@@ -353,7 +352,7 @@ public class MainActivity extends AppCompatActivity implements KeyProfileAdapter
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "An error occurred while trying to load/decrypt the database", Toast.LENGTH_LONG).show();
- recreate();
+ startAuthActivity();
return;
}
@@ -367,7 +366,7 @@ public class MainActivity extends AppCompatActivity implements KeyProfileAdapter
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "An error occurred while trying to decrypt the database", Toast.LENGTH_LONG).show();
- recreate();
+ startAuthActivity();
return;
}
@@ -400,7 +399,12 @@ public class MainActivity extends AppCompatActivity implements KeyProfileAdapter
@Override
protected void onResume() {
super.onResume();
- setPreferredTheme();
+
+ boolean nightMode = _app.getPreferences().getBoolean("pref_night_mode", false);
+ if (nightMode != _nightMode) {
+ setPreferredTheme(nightMode);
+ recreate();
+ }
}
private BottomSheetDialog createBottomSheet(KeyProfile profile) {
@@ -485,15 +489,19 @@ public class MainActivity extends AppCompatActivity implements KeyProfileAdapter
e.printStackTrace();
Toast.makeText(this, "An error occurred while trying to lock the database", Toast.LENGTH_LONG).show();
}
- Intent intent = new Intent(this, AuthActivity.class);
- intent.putExtra("slots", _db.getFile().getSlots());
- startActivityForResult(intent, CODE_DECRYPT);
+ startAuthActivity();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
+ private void startAuthActivity() {
+ Intent intent = new Intent(this, AuthActivity.class);
+ intent.putExtra("slots", _db.getFile().getSlots());
+ startActivityForResult(intent, CODE_DECRYPT);
+ }
+
private void initializeAppShortcuts() {
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1) {
return;
@@ -523,23 +531,6 @@ public class MainActivity extends AppCompatActivity implements KeyProfileAdapter
}
}
- private void setPreferredTheme() {
- boolean restart = false;
- if (_app.getPreferences().getBoolean("pref_night_mode", false)) {
- if (!_nightMode) {
- setTheme(R.style.AppTheme_Dark_NoActionBar);
- restart = true;
- }
- } else if (_nightMode) {
- setTheme(R.style.AppTheme_Default_NoActionBar);
- restart = true;
- }
-
- if (restart) {
- recreate();
- }
- }
-
private void saveDatabase() {
try {
_db.save();
@@ -564,7 +555,7 @@ public class MainActivity extends AppCompatActivity implements KeyProfileAdapter
}
private void updateLockIcon() {
- // hide the lock icon if the database is not encrypted
+ // hide the lock icon if the database is not unlocked
if (_menu != null && _db.isUnlocked()) {
MenuItem item = _menu.findItem(R.id.action_lock);
item.setVisible(_db.getFile().isEncrypted());
diff --git a/app/src/main/java/me/impy/aegis/PreferencesActivity.java b/app/src/main/java/me/impy/aegis/PreferencesActivity.java
index 6293e3f9..25be06ce 100644
--- a/app/src/main/java/me/impy/aegis/PreferencesActivity.java
+++ b/app/src/main/java/me/impy/aegis/PreferencesActivity.java
@@ -7,23 +7,23 @@ import android.preference.PreferenceFragment;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
-public class PreferencesActivity extends AppCompatActivity {
+public class PreferencesActivity extends AegisActivity {
public static final int ACTION_EXPORT = 0;
- private AegisApplication _app;
-
@Override
- public void onCreate(Bundle savedInstanceState) {
+ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- _app = (AegisApplication) getApplication();
- if (_app.getPreferences().getBoolean("pref_night_mode", false)) {
+ getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferencesFragment()).commit();
+ }
+
+ @Override
+ protected void setPreferredTheme(boolean nightMode) {
+ if (nightMode) {
setTheme(R.style.AppTheme_Dark);
} else {
setTheme(R.style.AppTheme_Default);
}
-
- getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferencesFragment()).commit();
}
public static class PreferencesFragment extends PreferenceFragment {
diff --git a/app/src/main/java/me/impy/aegis/ScannerActivity.java b/app/src/main/java/me/impy/aegis/ScannerActivity.java
index 5cea9d6f..0b86ebc0 100644
--- a/app/src/main/java/me/impy/aegis/ScannerActivity.java
+++ b/app/src/main/java/me/impy/aegis/ScannerActivity.java
@@ -20,13 +20,13 @@ import me.impy.aegis.crypto.KeyInfo;
import me.impy.aegis.db.DatabaseEntry;
import me.impy.aegis.helpers.SquareFinderView;
-public class ScannerActivity extends Activity implements ZXingScannerView.ResultHandler {
+public class ScannerActivity extends AegisActivity implements ZXingScannerView.ResultHandler {
private static final int CODE_ASK_PERMS = 0;
private ZXingScannerView _scannerView;
@Override
- public void onCreate(Bundle state) {
+ protected void onCreate(Bundle state) {
super.onCreate(state);
_scannerView = new ZXingScannerView(this) {
@@ -42,6 +42,11 @@ public class ScannerActivity extends Activity implements ZXingScannerView.Result
ActivityCompat.requestPermissions(ScannerActivity.this, new String[]{Manifest.permission.CAMERA}, CODE_ASK_PERMS);
}
+ @Override
+ protected void setPreferredTheme(boolean nightMode) {
+
+ }
+
@Override
public void onResume() {
super.onResume();
diff --git a/app/src/main/res/layout/activity_auth.xml b/app/src/main/res/layout/activity_auth.xml
index a3c175e2..96d303aa 100644
--- a/app/src/main/res/layout/activity_auth.xml
+++ b/app/src/main/res/layout/activity_auth.xml
@@ -15,6 +15,7 @@
tools:layout_editor_absoluteX="8dp">
+ android:text="@string/authentication_enter_password"
+ android:textColor="?attr/secondaryText"/>
+ android:text="Touch sensor"
+ android:textColor="?attr/secondaryText"/>