From 782f24342cd9aaee6f78f054640c927c59f0b5e4 Mon Sep 17 00:00:00 2001 From: Alexander Bakker Date: Sun, 24 Dec 2017 21:42:08 +0100 Subject: [PATCH] Refactor night mode code a bit --- .../me/impy/aegis/AddProfileActivity.java | 24 +++---- .../java/me/impy/aegis/AegisActivity.java | 23 +++++++ .../main/java/me/impy/aegis/AuthActivity.java | 12 +++- .../main/java/me/impy/aegis/MainActivity.java | 65 ++++++++----------- .../me/impy/aegis/PreferencesActivity.java | 18 ++--- .../java/me/impy/aegis/ScannerActivity.java | 9 ++- app/src/main/res/layout/activity_auth.xml | 7 +- 7 files changed, 92 insertions(+), 66 deletions(-) create mode 100644 app/src/main/java/me/impy/aegis/AegisActivity.java 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 + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferencesFragment()).commit(); + } @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - _app = (AegisApplication) getApplication(); - - if (_app.getPreferences().getBoolean("pref_night_mode", false)) { + 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"/>