diff options
author | Alex Ning <chineseperson5@gmail.com> | 2020-03-20 09:52:50 +0000 |
---|---|---|
committer | Alex Ning <chineseperson5@gmail.com> | 2020-03-20 09:52:50 +0000 |
commit | c827d6f1cd03505083ed6baf914f77682c2861a6 (patch) | |
tree | 1fc6d75a43c612193a9b8504e246c34bdb580d3a | |
parent | 587dfccd32fadcf402f128da08bd9859b1dac06e (diff) | |
download | infinity-for-reddit-c827d6f1cd03505083ed6baf914f77682c2861a6.tar infinity-for-reddit-c827d6f1cd03505083ed6baf914f77682c2861a6.tar.gz infinity-for-reddit-c827d6f1cd03505083ed6baf914f77682c2861a6.tar.bz2 infinity-for-reddit-c827d6f1cd03505083ed6baf914f77682c2861a6.tar.lz infinity-for-reddit-c827d6f1cd03505083ed6baf914f77682c2861a6.tar.xz infinity-for-reddit-c827d6f1cd03505083ed6baf914f77682c2861a6.tar.zst infinity-for-reddit-c827d6f1cd03505083ed6baf914f77682c2861a6.zip |
Customizing light, dark and amoled themes is now available.
4 files changed, 188 insertions, 8 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/CustomizeThemeActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/CustomizeThemeActivity.java index e345cc8f..b496502f 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/CustomizeThemeActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/CustomizeThemeActivity.java @@ -3,7 +3,9 @@ package ml.docilealligator.infinityforreddit.Activity; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; +import android.view.Menu; import android.view.MenuItem; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.widget.Toolbar; @@ -23,6 +25,7 @@ import butterknife.BindView; import butterknife.ButterKnife; import ml.docilealligator.infinityforreddit.Adapter.CustomizeThemeRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.AsyncTask.GetCustomThemeAsyncTask; +import ml.docilealligator.infinityforreddit.AsyncTask.InsertCustomThemeAsyncTask; import ml.docilealligator.infinityforreddit.CustomTheme.CustomTheme; import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeSettingsItem; import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeViewModel; @@ -30,6 +33,7 @@ import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; +import ml.docilealligator.infinityforreddit.Utils.CustomThemeSharedPreferencesUtils; public class CustomizeThemeActivity extends BaseActivity { @@ -54,6 +58,10 @@ public class CustomizeThemeActivity extends BaseActivity { CustomThemeWrapper customThemeWrapper; public CustomThemeViewModel customThemeViewModel; + + private int themeType; + private String themeName; + private ArrayList<CustomThemeSettingsItem> customThemeSettingsItems; private CustomizeThemeRecyclerViewAdapter adapter; @Override @@ -67,7 +75,6 @@ public class CustomizeThemeActivity extends BaseActivity { applyCustomTheme(); - setTitle(getIntent().getStringExtra(EXTRA_THEME_NAME)); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); @@ -75,13 +82,14 @@ public class CustomizeThemeActivity extends BaseActivity { recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setAdapter(adapter); - customThemeViewModel = new ViewModelProvider(this, new CustomThemeViewModel.Factory(redditDataRoomDatabase)) - .get(CustomThemeViewModel.class); + customThemeSettingsItems = new ArrayList<>(); int androidVersion = Build.VERSION.SDK_INT; if (getIntent().hasExtra(EXTRA_THEME_TYPE)) { + customThemeViewModel = new ViewModelProvider(this, new CustomThemeViewModel.Factory(redditDataRoomDatabase)) + .get(CustomThemeViewModel.class); LiveData<CustomTheme> customThemeLiveData; - int themeType = getIntent().getIntExtra(EXTRA_THEME_TYPE, EXTRA_LIGHT_THEME); + themeType = getIntent().getIntExtra(EXTRA_THEME_TYPE, EXTRA_LIGHT_THEME); switch (themeType) { case EXTRA_DARK_THEME: setTitle(getString(R.string.customize_dark_theme_fragment_title)); @@ -98,7 +106,6 @@ public class CustomizeThemeActivity extends BaseActivity { } customThemeLiveData.observe(this, customTheme -> { - ArrayList<CustomThemeSettingsItem> customThemeSettingsItems; if (customTheme == null) { switch (themeType) { case EXTRA_DARK_THEME: @@ -130,18 +137,68 @@ public class CustomizeThemeActivity extends BaseActivity { adapter.setCustomThemeSettingsItem(customThemeSettingsItems); }); } else { - new GetCustomThemeAsyncTask(redditDataRoomDatabase, getIntent().getStringExtra(EXTRA_THEME_NAME), - customTheme -> adapter.setCustomThemeSettingsItem( - CustomThemeSettingsItem.convertCustomThemeToSettingsItem(CustomizeThemeActivity.this, customTheme))).execute(); + themeName = getIntent().getStringExtra(EXTRA_THEME_NAME); + setTitle(themeName); + new GetCustomThemeAsyncTask(redditDataRoomDatabase, themeName, + customTheme -> { + customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem(CustomizeThemeActivity.this, customTheme); + adapter.setCustomThemeSettingsItem(customThemeSettingsItems); + }).execute(); } } @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.customize_theme_activity, menu); + applyMenuItemTheme(menu); + return true; + } + + @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); return true; + case R.id.action_save_customize_theme_activity: + if (themeName == null) { + switch (themeType) { + case CustomThemeSharedPreferencesUtils.DARK: + themeName = "Indigo Dark"; + break; + case CustomThemeSharedPreferencesUtils.AMOLED: + themeName = "Indigo Amoled"; + break; + default: + themeName = "Indigo"; + } + } + + CustomTheme customTheme = CustomTheme.convertSettingsItemsToCustomTheme(customThemeSettingsItems, themeName); + + switch (themeType) { + case CustomThemeSharedPreferencesUtils.DARK: + customTheme.isLightTheme = false; + customTheme.isDarkTheme = true; + customTheme.isAmoledTheme = false; + break; + case CustomThemeSharedPreferencesUtils.AMOLED: + customTheme.isLightTheme = false; + customTheme.isDarkTheme = false; + customTheme.isAmoledTheme = true; + break; + default: + customTheme.isLightTheme = true; + customTheme.isDarkTheme = false; + customTheme.isAmoledTheme = false; + } + + new InsertCustomThemeAsyncTask(redditDataRoomDatabase, customTheme, () -> { + Toast.makeText(CustomizeThemeActivity.this, R.string.saved, Toast.LENGTH_SHORT).show(); + finish(); + }).execute(); + + return true; } return false; diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/AsyncTask/InsertCustomThemeAsyncTask.java b/app/src/main/java/ml/docilealligator/infinityforreddit/AsyncTask/InsertCustomThemeAsyncTask.java new file mode 100644 index 00000000..2bdb149d --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/AsyncTask/InsertCustomThemeAsyncTask.java @@ -0,0 +1,35 @@ +package ml.docilealligator.infinityforreddit.AsyncTask; + +import android.os.AsyncTask; + +import ml.docilealligator.infinityforreddit.CustomTheme.CustomTheme; +import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; + +public class InsertCustomThemeAsyncTask extends AsyncTask<Void, Void, Void> { + private RedditDataRoomDatabase redditDataRoomDatabase; + private InsertCustomThemeAsyncTaskListener insertCustomThemeAsyncTaskListener; + private CustomTheme customTheme; + + public interface InsertCustomThemeAsyncTaskListener { + void success(); + } + + public InsertCustomThemeAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, CustomTheme customTheme, + InsertCustomThemeAsyncTaskListener insertCustomThemeAsyncTaskListener) { + this.redditDataRoomDatabase = redditDataRoomDatabase; + this.customTheme = customTheme; + this.insertCustomThemeAsyncTaskListener = insertCustomThemeAsyncTaskListener; + } + + @Override + protected Void doInBackground(Void... voids) { + redditDataRoomDatabase.customThemeDao().insert(customTheme); + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + super.onPostExecute(aVoid); + insertCustomThemeAsyncTaskListener.success(); + } +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/CustomTheme/CustomTheme.java b/app/src/main/java/ml/docilealligator/infinityforreddit/CustomTheme/CustomTheme.java index bb7da9db..374030ac 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/CustomTheme/CustomTheme.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/CustomTheme/CustomTheme.java @@ -5,6 +5,8 @@ import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.PrimaryKey; +import java.util.ArrayList; + @Entity(tableName = "custom_themes") public class CustomTheme { @PrimaryKey @@ -151,4 +153,80 @@ public class CustomTheme { public CustomTheme(@NonNull String name) { this.name = name; } + + public static CustomTheme convertSettingsItemsToCustomTheme(ArrayList<CustomThemeSettingsItem> customThemeSettingsItems, String themeName) { + CustomTheme customTheme = new CustomTheme(themeName); + + if (customThemeSettingsItems.isEmpty()) { + return customTheme; + } + + customTheme.colorPrimary = customThemeSettingsItems.get(0).colorValue; + customTheme.colorPrimaryDark = customThemeSettingsItems.get(1).colorValue; + customTheme.colorAccent = customThemeSettingsItems.get(2).colorValue; + customTheme.colorPrimaryLightTheme = customThemeSettingsItems.get(3).colorValue; + customTheme.primaryTextColor = customThemeSettingsItems.get(4).colorValue; + customTheme.secondaryTextColor = customThemeSettingsItems.get(5).colorValue; + customTheme.postTitleColor = customThemeSettingsItems.get(6).colorValue; + customTheme.postContentColor = customThemeSettingsItems.get(7).colorValue; + customTheme.commentColor = customThemeSettingsItems.get(8).colorValue; + customTheme.buttonTextColor = customThemeSettingsItems.get(9).colorValue; + customTheme.chipTextColor = customThemeSettingsItems.get(10).colorValue; + customTheme.backgroundColor = customThemeSettingsItems.get(11).colorValue; + customTheme.cardViewBackgroundColor = customThemeSettingsItems.get(12).colorValue; + customTheme.commentBackgroundColor = customThemeSettingsItems.get(13).colorValue; + customTheme.bottomAppBarBackgroundColor = customThemeSettingsItems.get(14).colorValue; + customTheme.primaryIconColor = customThemeSettingsItems.get(15).colorValue; + customTheme.postIconAndInfoColor = customThemeSettingsItems.get(16).colorValue; + customTheme.commentIconAndInfoColor = customThemeSettingsItems.get(17).colorValue; + customTheme.fabIconColor = customThemeSettingsItems.get(18).colorValue; + customTheme.toolbarPrimaryTextAndIconColor = customThemeSettingsItems.get(19).colorValue; + customTheme.toolbarSecondaryTextColor = customThemeSettingsItems.get(20).colorValue; + customTheme.circularProgressBarBackground = customThemeSettingsItems.get(21).colorValue; + customTheme.tabLayoutWithExpandedCollapsingToolbarTabBackground = customThemeSettingsItems.get(22).colorValue; + customTheme.tabLayoutWithExpandedCollapsingToolbarTextColor = customThemeSettingsItems.get(23).colorValue; + customTheme.tabLayoutWithExpandedCollapsingToolbarTabIndicator = customThemeSettingsItems.get(24).colorValue; + customTheme.tabLayoutWithCollapsedCollapsingToolbarTabBackground = customThemeSettingsItems.get(25).colorValue; + customTheme.tabLayoutWithCollapsedCollapsingToolbarTextColor = customThemeSettingsItems.get(26).colorValue; + customTheme.tabLayoutWithCollapsedCollapsingToolbarTabIndicator = customThemeSettingsItems.get(27).colorValue; + customTheme.upvoted = customThemeSettingsItems.get(28).colorValue; + customTheme.downvoted = customThemeSettingsItems.get(29).colorValue; + customTheme.postTypeBackgroundColor = customThemeSettingsItems.get(30).colorValue; + customTheme.postTypeTextColor = customThemeSettingsItems.get(31).colorValue; + customTheme.spoilerBackgroundColor = customThemeSettingsItems.get(32).colorValue; + customTheme.spoilerTextColor = customThemeSettingsItems.get(33).colorValue; + customTheme.nsfwBackgroundColor = customThemeSettingsItems.get(34).colorValue; + customTheme.nsfwTextColor = customThemeSettingsItems.get(35).colorValue; + customTheme.flairBackgroundColor = customThemeSettingsItems.get(36).colorValue; + customTheme.flairTextColor = customThemeSettingsItems.get(37).colorValue; + customTheme.archivedTint = customThemeSettingsItems.get(38).colorValue; + customTheme.lockedIconTint = customThemeSettingsItems.get(39).colorValue; + customTheme.crosspostIconTint = customThemeSettingsItems.get(40).colorValue; + customTheme.stickiedPostIconTint = customThemeSettingsItems.get(41).colorValue; + customTheme.subscribed = customThemeSettingsItems.get(42).colorValue; + customTheme.unsubscribed = customThemeSettingsItems.get(43).colorValue; + customTheme.username = customThemeSettingsItems.get(44).colorValue; + customTheme.subreddit = customThemeSettingsItems.get(45).colorValue; + customTheme.authorFlairTextColor = customThemeSettingsItems.get(46).colorValue; + customTheme.submitter = customThemeSettingsItems.get(47).colorValue; + customTheme.moderator = customThemeSettingsItems.get(48).colorValue; + customTheme.singleCommentThreadBackgroundColor = customThemeSettingsItems.get(49).colorValue; + customTheme.unreadMessageBackgroundColor = customThemeSettingsItems.get(50).colorValue; + customTheme.dividerColor = customThemeSettingsItems.get(51).colorValue; + customTheme.noPreviewLinkBackgroundColor = customThemeSettingsItems.get(52).colorValue; + customTheme.voteAndReplyUnavailableButtonColor = customThemeSettingsItems.get(53).colorValue; + customTheme.commentVerticalBarColor1 = customThemeSettingsItems.get(54).colorValue; + customTheme.commentVerticalBarColor2 = customThemeSettingsItems.get(55).colorValue; + customTheme.commentVerticalBarColor3 = customThemeSettingsItems.get(56).colorValue; + customTheme.commentVerticalBarColor4 = customThemeSettingsItems.get(57).colorValue; + customTheme.commentVerticalBarColor5 = customThemeSettingsItems.get(58).colorValue; + customTheme.commentVerticalBarColor6 = customThemeSettingsItems.get(59).colorValue; + customTheme.commentVerticalBarColor7 = customThemeSettingsItems.get(60).colorValue; + customTheme.navBarColor = customThemeSettingsItems.get(61).colorValue; + customTheme.isLightStatusBar = customThemeSettingsItems.get(62).isEnabled; + customTheme.isLightNavBar = customThemeSettingsItems.get(63).isEnabled; + customTheme.isChangeStatusBarIconColorAfterToolbarCollapsedInImmersiveInterface = customThemeSettingsItems.get(64).isEnabled; + + return customTheme; + } } diff --git a/app/src/main/res/menu/customize_theme_activity.xml b/app/src/main/res/menu/customize_theme_activity.xml new file mode 100644 index 00000000..0e363e0f --- /dev/null +++ b/app/src/main/res/menu/customize_theme_activity.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + <item + android:id="@+id/action_save_customize_theme_activity" + android:orderInCategory="1" + android:title="@string/action_save" + android:icon="@drawable/ic_check_circle_toolbar_24dp" + app:showAsAction="ifRoom" /> +</menu>
\ No newline at end of file |