diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1869a74d2..7a0e0be6a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,6 +17,7 @@ android:required="false" /> imageView.setVisibility(View.GONE); } } -} \ No newline at end of file +} diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardLockerApplication.java b/app/src/main/java/protect/card_locker/LoyaltyCardLockerApplication.java new file mode 100644 index 000000000..c53584520 --- /dev/null +++ b/app/src/main/java/protect/card_locker/LoyaltyCardLockerApplication.java @@ -0,0 +1,15 @@ +package protect.card_locker; + +import android.app.Application; +import android.support.v7.app.AppCompatDelegate; + +import protect.card_locker.preferences.Settings; + +public class LoyaltyCardLockerApplication extends Application { + public void onCreate() { + super.onCreate(); + + Settings settings = new Settings(getApplicationContext()); + AppCompatDelegate.setDefaultNightMode(settings.getTheme()); + } +} diff --git a/app/src/main/java/protect/card_locker/MainActivity.java b/app/src/main/java/protect/card_locker/MainActivity.java index b1a0a7e0f..68b736ca1 100644 --- a/app/src/main/java/protect/card_locker/MainActivity.java +++ b/app/src/main/java/protect/card_locker/MainActivity.java @@ -9,11 +9,13 @@ import android.content.ClipboardManager; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.content.res.Configuration; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; +import android.support.v7.app.AppCompatDelegate; import android.support.v7.widget.SearchView; import android.support.v7.widget.Toolbar; import android.util.Log; @@ -34,6 +36,7 @@ import java.util.Calendar; import java.util.Map; import protect.card_locker.intro.IntroActivity; +import protect.card_locker.preferences.Settings; import protect.card_locker.preferences.SettingsActivity; public class MainActivity extends AppCompatActivity @@ -89,6 +92,9 @@ public class MainActivity extends AppCompatActivity MenuItem searchItem = menu.findItem(R.id.action_search); searchItem.collapseActionView(); } + + // In case the theme changed + recreate(); } } @@ -335,8 +341,19 @@ public class MainActivity extends AppCompatActivity } WebView wv = new WebView(this); + + // Set CSS for dark mode if dark mode + String css = ""; + Configuration config = getResources().getConfiguration(); + int currentNightMode = config.uiMode & Configuration.UI_MODE_NIGHT_MASK; + if(currentNightMode == Configuration.UI_MODE_NIGHT_YES) + { + css = ""; + } + String html = "" + + css + "\""" + "

" + String.format(getString(R.string.about_title_fmt), diff --git a/app/src/main/java/protect/card_locker/preferences/Settings.java b/app/src/main/java/protect/card_locker/preferences/Settings.java index 4fe3c9074..f6c9fb026 100644 --- a/app/src/main/java/protect/card_locker/preferences/Settings.java +++ b/app/src/main/java/protect/card_locker/preferences/Settings.java @@ -5,6 +5,7 @@ import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.support.annotation.IntegerRes; import android.support.annotation.StringRes; +import android.support.v7.app.AppCompatDelegate; import protect.card_locker.R; @@ -29,6 +30,11 @@ public class Settings return context.getResources().getInteger(resId); } + private String getString(@StringRes int keyId, String defaultValue) + { + return settings.getString(getResString(keyId), defaultValue); + } + private int getInt(@StringRes int keyId, @IntegerRes int defaultId) { return settings.getInt(getResString(keyId), getResInt(defaultId)); @@ -39,6 +45,22 @@ public class Settings return settings.getBoolean(getResString(keyId), defaultValue); } + public int getTheme() + { + String value = getString(R.string.settings_key_theme, getResString(R.string.settings_key_system_theme)); + + if(value.equals(getResString(R.string.settings_key_light_theme))) + { + return AppCompatDelegate.MODE_NIGHT_NO; + } + else if(value.equals(getResString(R.string.settings_key_dark_theme))) + { + return AppCompatDelegate.MODE_NIGHT_YES; + } + + return AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM; + } + public int getCardTitleListFontSize() { return getInt(R.string.settings_key_card_title_list_font_size, R.integer.settings_card_title_list_font_size_sp); diff --git a/app/src/main/java/protect/card_locker/preferences/SettingsActivity.java b/app/src/main/java/protect/card_locker/preferences/SettingsActivity.java index 167682048..ee1bccbbb 100644 --- a/app/src/main/java/protect/card_locker/preferences/SettingsActivity.java +++ b/app/src/main/java/protect/card_locker/preferences/SettingsActivity.java @@ -1,9 +1,11 @@ package protect.card_locker.preferences; import android.os.Bundle; +import android.preference.Preference; import android.preference.PreferenceFragment; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; +import android.support.v7.app.AppCompatDelegate; import android.view.MenuItem; import protect.card_locker.R; @@ -44,12 +46,35 @@ public class SettingsActivity extends AppCompatActivity public static class SettingsFragment extends PreferenceFragment { @Override - public void onCreate(Bundle savedInstanceState) + public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Load the preferences from an XML resource addPreferencesFromResource(R.xml.preferences); + + findPreference(getResources().getString(R.string.settings_key_theme)).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() + { + @Override + public boolean onPreferenceChange(Preference preference, Object o) + { + if(o.toString().equals(getResources().getString(R.string.settings_key_light_theme))) + { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + } + else if(o.toString().equals(getResources().getString(R.string.settings_key_dark_theme))) + { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + } + else + { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM); + } + + getActivity().recreate(); + return true; + } + }); } } } diff --git a/app/src/main/res/layout/loyalty_card_edit_activity.xml b/app/src/main/res/layout/loyalty_card_edit_activity.xml index 84e2a412c..4ce3df789 100644 --- a/app/src/main/res/layout/loyalty_card_edit_activity.xml +++ b/app/src/main/res/layout/loyalty_card_edit_activity.xml @@ -362,7 +362,8 @@ + android:layout_height="wrap_content" + android:background="@color/inputBackground"> diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml new file mode 100644 index 000000000..766606060 --- /dev/null +++ b/app/src/main/res/values-night/colors.xml @@ -0,0 +1,18 @@ + + + + + #3f51b5 + #757de8 + #002984 + #ffc107 + #fff350 + #c79100 + #000000 + #ffffff + + #070707 + #000000 + #222222 + #666666 + \ No newline at end of file diff --git a/app/src/main/res/values/settings.xml b/app/src/main/res/values/settings.xml index fe2d9bc01..882dc2567 100644 --- a/app/src/main/res/values/settings.xml +++ b/app/src/main/res/values/settings.xml @@ -1,5 +1,17 @@ + + @string/settings_key_system_theme + @string/settings_key_light_theme + @string/settings_key_dark_theme + + + + @string/settings_system_theme + @string/settings_light_theme + @string/settings_dark_theme + + #f16364 #f58559 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 46edaf584..aa4298aea 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -114,6 +114,14 @@ Settings User interface + Theme + pref_theme + System theme + system + Light theme + light + Dark theme + dark Card title list font size pref_card_title_list_font_size_sp Card note list font size diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index d7c6cc296..e1b073e67 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,7 +1,7 @@ -