Support orientation change in CustomizeThemeActivity.

This commit is contained in:
Alex Ning 2020-03-20 19:50:45 +08:00
parent c827d6f1cd
commit 9c4889b1b0
10 changed files with 266 additions and 111 deletions

View File

@ -9,13 +9,13 @@ import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.AppBarLayout;
import org.greenrobot.eventbus.EventBus;
import java.util.ArrayList; import java.util.ArrayList;
import javax.inject.Inject; import javax.inject.Inject;
@ -30,6 +30,7 @@ import ml.docilealligator.infinityforreddit.CustomTheme.CustomTheme;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeSettingsItem; import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeSettingsItem;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeViewModel; import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeViewModel;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.Event.RecreateActivityEvent;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
@ -38,10 +39,11 @@ import ml.docilealligator.infinityforreddit.Utils.CustomThemeSharedPreferencesUt
public class CustomizeThemeActivity extends BaseActivity { public class CustomizeThemeActivity extends BaseActivity {
public static final String EXTRA_THEME_TYPE = "ETT"; public static final String EXTRA_THEME_TYPE = "ETT";
public static final int EXTRA_LIGHT_THEME = 0; public static final int EXTRA_LIGHT_THEME = CustomThemeSharedPreferencesUtils.LIGHT;
public static final int EXTRA_DARK_THEME = 1; public static final int EXTRA_DARK_THEME = CustomThemeSharedPreferencesUtils.DARK;
public static final int EXTRA_AMOLED_THEME = 2; public static final int EXTRA_AMOLED_THEME = CustomThemeSharedPreferencesUtils.AMOLED;
public static final String EXTRA_THEME_NAME = "ETN"; public static final String EXTRA_THEME_NAME = "ETN";
private static final String CUSTOM_THEME_SETTINGS_ITEMS_STATE = "CTSIS";
@BindView(R.id.appbar_layout_customize_theme_activity) @BindView(R.id.appbar_layout_customize_theme_activity)
AppBarLayout appBarLayout; AppBarLayout appBarLayout;
@ -53,6 +55,15 @@ public class CustomizeThemeActivity extends BaseActivity {
@Named("default") @Named("default")
SharedPreferences sharedPreferences; SharedPreferences sharedPreferences;
@Inject @Inject
@Named("light_theme")
SharedPreferences lightThemeSharedPreferences;
@Inject
@Named("dark_theme")
SharedPreferences darkThemeSharedPreferences;
@Inject
@Named("amoled_theme")
SharedPreferences amoledThemeSharedPreferences;
@Inject
RedditDataRoomDatabase redditDataRoomDatabase; RedditDataRoomDatabase redditDataRoomDatabase;
@Inject @Inject
CustomThemeWrapper customThemeWrapper; CustomThemeWrapper customThemeWrapper;
@ -82,68 +93,78 @@ public class CustomizeThemeActivity extends BaseActivity {
recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter); recyclerView.setAdapter(adapter);
customThemeSettingsItems = new ArrayList<>(); if (savedInstanceState != null) {
customThemeSettingsItems = savedInstanceState.getParcelableArrayList(CUSTOM_THEME_SETTINGS_ITEMS_STATE);
}
int androidVersion = Build.VERSION.SDK_INT; 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;
themeType = getIntent().getIntExtra(EXTRA_THEME_TYPE, EXTRA_LIGHT_THEME);
switch (themeType) {
case EXTRA_DARK_THEME:
setTitle(getString(R.string.customize_dark_theme_fragment_title));
customThemeLiveData = customThemeViewModel.getDarkCustomTheme();
break;
case EXTRA_AMOLED_THEME:
setTitle(getString(R.string.customize_amoled_theme_fragment_title));
customThemeLiveData = customThemeViewModel.getAmoledCustomTheme();
break;
default:
setTitle(getString(R.string.customize_light_theme_fragment_title));
customThemeLiveData = customThemeViewModel.getLightCustomTheme();
break;
}
customThemeLiveData.observe(this, customTheme -> { if (customThemeSettingsItems == null) {
if (customTheme == null) { if (getIntent().hasExtra(EXTRA_THEME_TYPE)) {
switch (themeType) { themeType = getIntent().getIntExtra(EXTRA_THEME_TYPE, EXTRA_LIGHT_THEME);
case EXTRA_DARK_THEME:
customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem( new GetCustomThemeAsyncTask(redditDataRoomDatabase, themeType, customTheme -> {
CustomizeThemeActivity.this, if (customTheme == null) {
CustomThemeWrapper.getIndigoDark(CustomizeThemeActivity.this)); switch (themeType) {
break; case EXTRA_DARK_THEME:
case EXTRA_AMOLED_THEME: customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem(
customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem( CustomizeThemeActivity.this,
CustomizeThemeActivity.this, CustomThemeWrapper.getIndigoDark(CustomizeThemeActivity.this));
CustomThemeWrapper.getIndigoAmoled(CustomizeThemeActivity.this)); break;
break; case EXTRA_AMOLED_THEME:
default: customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem(
customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem( CustomizeThemeActivity.this,
CustomizeThemeActivity.this, CustomThemeWrapper.getIndigoAmoled(CustomizeThemeActivity.this));
CustomThemeWrapper.getIndigo(CustomizeThemeActivity.this)); break;
default:
customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem(
CustomizeThemeActivity.this,
CustomThemeWrapper.getIndigo(CustomizeThemeActivity.this));
}
} else {
customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem(CustomizeThemeActivity.this, customTheme);
} }
} else {
customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem(CustomizeThemeActivity.this, customTheme);
}
if (androidVersion < Build.VERSION_CODES.O) { if (androidVersion < Build.VERSION_CODES.O) {
customThemeSettingsItems.get(customThemeSettingsItems.size() - 2).itemDetails = getString(R.string.theme_item_available_on_android_8); customThemeSettingsItems.get(customThemeSettingsItems.size() - 2).itemDetails = getString(R.string.theme_item_available_on_android_8);
} }
if (androidVersion < Build.VERSION_CODES.M) { if (androidVersion < Build.VERSION_CODES.M) {
customThemeSettingsItems.get(customThemeSettingsItems.size() - 3).itemDetails = getString(R.string.theme_item_available_on_android_6); customThemeSettingsItems.get(customThemeSettingsItems.size() - 3).itemDetails = getString(R.string.theme_item_available_on_android_6);
} }
adapter.setCustomThemeSettingsItem(customThemeSettingsItems); adapter.setCustomThemeSettingsItem(customThemeSettingsItems);
}); }).execute();
switch (themeType) {
case EXTRA_DARK_THEME:
setTitle(getString(R.string.customize_dark_theme_fragment_title));
break;
case EXTRA_AMOLED_THEME:
setTitle(getString(R.string.customize_amoled_theme_fragment_title));
break;
default:
setTitle(getString(R.string.customize_light_theme_fragment_title));
break;
}
} else {
themeName = getIntent().getStringExtra(EXTRA_THEME_NAME);
setTitle(themeName);
new GetCustomThemeAsyncTask(redditDataRoomDatabase, themeName,
customTheme -> {
customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem(CustomizeThemeActivity.this, customTheme);
if (androidVersion < Build.VERSION_CODES.O) {
customThemeSettingsItems.get(customThemeSettingsItems.size() - 2).itemDetails = getString(R.string.theme_item_available_on_android_8);
}
if (androidVersion < Build.VERSION_CODES.M) {
customThemeSettingsItems.get(customThemeSettingsItems.size() - 3).itemDetails = getString(R.string.theme_item_available_on_android_6);
}
adapter.setCustomThemeSettingsItem(customThemeSettingsItems);
}).execute();
}
} else { } else {
themeName = getIntent().getStringExtra(EXTRA_THEME_NAME); adapter.setCustomThemeSettingsItem(customThemeSettingsItems);
setTitle(themeName);
new GetCustomThemeAsyncTask(redditDataRoomDatabase, themeName,
customTheme -> {
customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem(CustomizeThemeActivity.this, customTheme);
adapter.setCustomThemeSettingsItem(customThemeSettingsItems);
}).execute();
} }
} }
@ -181,29 +202,45 @@ public class CustomizeThemeActivity extends BaseActivity {
customTheme.isLightTheme = false; customTheme.isLightTheme = false;
customTheme.isDarkTheme = true; customTheme.isDarkTheme = true;
customTheme.isAmoledTheme = false; customTheme.isAmoledTheme = false;
new InsertCustomThemeAsyncTask(redditDataRoomDatabase, darkThemeSharedPreferences, customTheme, () -> {
Toast.makeText(CustomizeThemeActivity.this, R.string.saved, Toast.LENGTH_SHORT).show();
EventBus.getDefault().post(new RecreateActivityEvent());
finish();
}).execute();
break; break;
case CustomThemeSharedPreferencesUtils.AMOLED: case CustomThemeSharedPreferencesUtils.AMOLED:
customTheme.isLightTheme = false; customTheme.isLightTheme = false;
customTheme.isDarkTheme = false; customTheme.isDarkTheme = false;
customTheme.isAmoledTheme = true; customTheme.isAmoledTheme = true;
new InsertCustomThemeAsyncTask(redditDataRoomDatabase, amoledThemeSharedPreferences, customTheme, () -> {
Toast.makeText(CustomizeThemeActivity.this, R.string.saved, Toast.LENGTH_SHORT).show();
EventBus.getDefault().post(new RecreateActivityEvent());
finish();
}).execute();
break; break;
default: default:
customTheme.isLightTheme = true; customTheme.isLightTheme = true;
customTheme.isDarkTheme = false; customTheme.isDarkTheme = false;
customTheme.isAmoledTheme = false; customTheme.isAmoledTheme = false;
new InsertCustomThemeAsyncTask(redditDataRoomDatabase, lightThemeSharedPreferences, customTheme, () -> {
Toast.makeText(CustomizeThemeActivity.this, R.string.saved, Toast.LENGTH_SHORT).show();
EventBus.getDefault().post(new RecreateActivityEvent());
finish();
}).execute();
} }
new InsertCustomThemeAsyncTask(redditDataRoomDatabase, customTheme, () -> {
Toast.makeText(CustomizeThemeActivity.this, R.string.saved, Toast.LENGTH_SHORT).show();
finish();
}).execute();
return true; return true;
} }
return false; return false;
} }
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelableArrayList(CUSTOM_THEME_SETTINGS_ITEMS_STATE, customThemeSettingsItems);
}
@Override @Override
protected SharedPreferences getSharedPreferences() { protected SharedPreferences getSharedPreferences() {
return sharedPreferences; return sharedPreferences;

View File

@ -13,12 +13,16 @@ import androidx.preference.PreferenceFragmentCompat;
import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.AppBarLayout;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.Event.RecreateActivityEvent;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.Settings.AboutPreferenceFragment; import ml.docilealligator.infinityforreddit.Settings.AboutPreferenceFragment;
@ -53,6 +57,8 @@ public class SettingsActivity extends BaseActivity implements
ButterKnife.bind(this); ButterKnife.bind(this);
EventBus.getDefault().register(this);
applyCustomTheme(); applyCustomTheme();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isChangeStatusBarIconColor()) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isChangeStatusBarIconColor()) {
@ -136,4 +142,15 @@ public class SettingsActivity extends BaseActivity implements
setTitle(pref.getTitle()); setTitle(pref.getTitle());
return true; return true;
} }
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Subscribe
public void onRecreateActivityEvent(RecreateActivityEvent recreateActivityEvent) {
recreate();
}
} }

View File

@ -4,10 +4,12 @@ import android.os.AsyncTask;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomTheme; import ml.docilealligator.infinityforreddit.CustomTheme.CustomTheme;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.Utils.CustomThemeSharedPreferencesUtils;
public class GetCustomThemeAsyncTask extends AsyncTask<Void, Void, Void> { public class GetCustomThemeAsyncTask extends AsyncTask<Void, Void, Void> {
private RedditDataRoomDatabase redditDataRoomDatabase; private RedditDataRoomDatabase redditDataRoomDatabase;
private String customThemeName; private String customThemeName;
private int themeType;
private GetCustomThemeAsyncTaskListener getCustomThemeAsyncTaskListener; private GetCustomThemeAsyncTaskListener getCustomThemeAsyncTaskListener;
private CustomTheme customTheme; private CustomTheme customTheme;
@ -23,9 +25,30 @@ public class GetCustomThemeAsyncTask extends AsyncTask<Void, Void, Void> {
this.getCustomThemeAsyncTaskListener = getCustomThemeAsyncTaskListener; this.getCustomThemeAsyncTaskListener = getCustomThemeAsyncTaskListener;
} }
public GetCustomThemeAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase,
int themeType,
GetCustomThemeAsyncTaskListener getCustomThemeAsyncTaskListener) {
this.redditDataRoomDatabase = redditDataRoomDatabase;
this.themeType = themeType;
this.getCustomThemeAsyncTaskListener = getCustomThemeAsyncTaskListener;
}
@Override @Override
protected Void doInBackground(Void... voids) { protected Void doInBackground(Void... voids) {
customTheme = redditDataRoomDatabase.customThemeDao().getCustomTheme(customThemeName); if (customThemeName != null) {
customTheme = redditDataRoomDatabase.customThemeDao().getCustomTheme(customThemeName);
} else {
switch (themeType) {
case CustomThemeSharedPreferencesUtils.DARK:
customTheme = redditDataRoomDatabase.customThemeDao().getDarkCustomTheme();
break;
case CustomThemeSharedPreferencesUtils.AMOLED:
customTheme = redditDataRoomDatabase.customThemeDao().getAmoledCustomTheme();
break;
default:
customTheme = redditDataRoomDatabase.customThemeDao().getLightCustomTheme();
}
}
return null; return null;
} }

View File

@ -1,22 +1,27 @@
package ml.docilealligator.infinityforreddit.AsyncTask; package ml.docilealligator.infinityforreddit.AsyncTask;
import android.content.SharedPreferences;
import android.os.AsyncTask; import android.os.AsyncTask;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomTheme; import ml.docilealligator.infinityforreddit.CustomTheme.CustomTheme;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.Utils.CustomThemeSharedPreferencesUtils;
public class InsertCustomThemeAsyncTask extends AsyncTask<Void, Void, Void> { public class InsertCustomThemeAsyncTask extends AsyncTask<Void, Void, Void> {
private RedditDataRoomDatabase redditDataRoomDatabase; private RedditDataRoomDatabase redditDataRoomDatabase;
private InsertCustomThemeAsyncTaskListener insertCustomThemeAsyncTaskListener; private SharedPreferences themeSharedPreferences;
private CustomTheme customTheme; private CustomTheme customTheme;
private InsertCustomThemeAsyncTaskListener insertCustomThemeAsyncTaskListener;
public interface InsertCustomThemeAsyncTaskListener { public interface InsertCustomThemeAsyncTaskListener {
void success(); void success();
} }
public InsertCustomThemeAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, CustomTheme customTheme, public InsertCustomThemeAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase,
InsertCustomThemeAsyncTaskListener insertCustomThemeAsyncTaskListener) { SharedPreferences themeSharedPreferences, CustomTheme customTheme,
InsertCustomThemeAsyncTaskListener insertCustomThemeAsyncTaskListener) {
this.redditDataRoomDatabase = redditDataRoomDatabase; this.redditDataRoomDatabase = redditDataRoomDatabase;
this.themeSharedPreferences = themeSharedPreferences;
this.customTheme = customTheme; this.customTheme = customTheme;
this.insertCustomThemeAsyncTaskListener = insertCustomThemeAsyncTaskListener; this.insertCustomThemeAsyncTaskListener = insertCustomThemeAsyncTaskListener;
} }
@ -24,6 +29,7 @@ public class InsertCustomThemeAsyncTask extends AsyncTask<Void, Void, Void> {
@Override @Override
protected Void doInBackground(Void... voids) { protected Void doInBackground(Void... voids) {
redditDataRoomDatabase.customThemeDao().insert(customTheme); redditDataRoomDatabase.customThemeDao().insert(customTheme);
CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(customTheme, themeSharedPreferences);
return null; return null;
} }

View File

@ -17,13 +17,13 @@ public interface CustomThemeDao {
LiveData<List<CustomTheme>> getAllCustomThemes(); LiveData<List<CustomTheme>> getAllCustomThemes();
@Query("SELECT * FROM custom_themes WHERE is_light_theme = 1 LIMIT 1") @Query("SELECT * FROM custom_themes WHERE is_light_theme = 1 LIMIT 1")
LiveData<CustomTheme> getLightCustomTheme(); CustomTheme getLightCustomTheme();
@Query("SELECT * FROM custom_themes WHERE is_dark_theme = 1 LIMIT 1") @Query("SELECT * FROM custom_themes WHERE is_dark_theme = 1 LIMIT 1")
LiveData<CustomTheme> getDarkCustomTheme(); CustomTheme getDarkCustomTheme();
@Query("SELECT * FROM custom_themes WHERE is_amoled_theme = 1 LIMIT 1") @Query("SELECT * FROM custom_themes WHERE is_amoled_theme = 1 LIMIT 1")
LiveData<CustomTheme> getAmoledCustomTheme(); CustomTheme getAmoledCustomTheme();
@Query("SELECT * FROM custom_themes WHERE name = :name COLLATE NOCASE LIMIT 1") @Query("SELECT * FROM custom_themes WHERE name = :name COLLATE NOCASE LIMIT 1")
CustomTheme getCustomTheme(String name); CustomTheme getCustomTheme(String name);

View File

@ -8,30 +8,12 @@ import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class CustomThemeRepository { public class CustomThemeRepository {
private LiveData<List<CustomTheme>> mAllCustomThemes; private LiveData<List<CustomTheme>> mAllCustomThemes;
private LiveData<CustomTheme> mLightCustomTheme;
private LiveData<CustomTheme> mDarkCustomTheme;
private LiveData<CustomTheme> mAmoledCustomTheme;
CustomThemeRepository(RedditDataRoomDatabase redditDataRoomDatabase) { CustomThemeRepository(RedditDataRoomDatabase redditDataRoomDatabase) {
mAllCustomThemes = redditDataRoomDatabase.customThemeDao().getAllCustomThemes(); mAllCustomThemes = redditDataRoomDatabase.customThemeDao().getAllCustomThemes();
mLightCustomTheme = redditDataRoomDatabase.customThemeDao().getLightCustomTheme();
mDarkCustomTheme = redditDataRoomDatabase.customThemeDao().getDarkCustomTheme();
mAmoledCustomTheme = redditDataRoomDatabase.customThemeDao().getAmoledCustomTheme();
} }
LiveData<List<CustomTheme>> getAllCustomThemes() { LiveData<List<CustomTheme>> getAllCustomThemes() {
return mAllCustomThemes; return mAllCustomThemes;
} }
public LiveData<CustomTheme> getLightCustomTheme() {
return mLightCustomTheme;
}
public LiveData<CustomTheme> getDarkCustomTheme() {
return mDarkCustomTheme;
}
public LiveData<CustomTheme> getAmoledCustomTheme() {
return mAmoledCustomTheme;
}
} }

View File

@ -1,12 +1,14 @@
package ml.docilealligator.infinityforreddit.CustomTheme; package ml.docilealligator.infinityforreddit.CustomTheme;
import android.content.Context; import android.content.Context;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.ArrayList; import java.util.ArrayList;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
public class CustomThemeSettingsItem { public class CustomThemeSettingsItem implements Parcelable {
public String itemName; public String itemName;
public String itemDetails; public String itemDetails;
public int colorValue; public int colorValue;
@ -23,6 +25,25 @@ public class CustomThemeSettingsItem {
this.isEnabled = isEnabled; this.isEnabled = isEnabled;
} }
protected CustomThemeSettingsItem(Parcel in) {
itemName = in.readString();
itemDetails = in.readString();
colorValue = in.readInt();
isEnabled = in.readByte() != 0;
}
public static final Creator<CustomThemeSettingsItem> CREATOR = new Creator<CustomThemeSettingsItem>() {
@Override
public CustomThemeSettingsItem createFromParcel(Parcel in) {
return new CustomThemeSettingsItem(in);
}
@Override
public CustomThemeSettingsItem[] newArray(int size) {
return new CustomThemeSettingsItem[size];
}
};
public static ArrayList<CustomThemeSettingsItem> convertCustomThemeToSettingsItem(Context context, CustomTheme customTheme) { public static ArrayList<CustomThemeSettingsItem> convertCustomThemeToSettingsItem(Context context, CustomTheme customTheme) {
ArrayList<CustomThemeSettingsItem> customThemeSettingsItems = new ArrayList<>(); ArrayList<CustomThemeSettingsItem> customThemeSettingsItems = new ArrayList<>();
@ -289,4 +310,17 @@ public class CustomThemeSettingsItem {
customTheme.isChangeStatusBarIconColorAfterToolbarCollapsedInImmersiveInterface)); customTheme.isChangeStatusBarIconColorAfterToolbarCollapsedInImmersiveInterface));
return customThemeSettingsItems; return customThemeSettingsItems;
} }
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(itemName);
parcel.writeString(itemDetails);
parcel.writeInt(colorValue);
parcel.writeByte((byte) (isEnabled ? 1 : 0));
}
} }

View File

@ -11,34 +11,16 @@ import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class CustomThemeViewModel extends ViewModel { public class CustomThemeViewModel extends ViewModel {
private LiveData<List<CustomTheme>> mAllCustomThemes; private LiveData<List<CustomTheme>> mAllCustomThemes;
private LiveData<CustomTheme> mLightCustomTheme;
private LiveData<CustomTheme> mDarkCustomTheme;
private LiveData<CustomTheme> mAmoledCustomTheme;
public CustomThemeViewModel(RedditDataRoomDatabase redditDataRoomDatabase) { public CustomThemeViewModel(RedditDataRoomDatabase redditDataRoomDatabase) {
CustomThemeRepository customThemeRepository = new CustomThemeRepository(redditDataRoomDatabase); CustomThemeRepository customThemeRepository = new CustomThemeRepository(redditDataRoomDatabase);
mAllCustomThemes = customThemeRepository.getAllCustomThemes(); mAllCustomThemes = customThemeRepository.getAllCustomThemes();
mLightCustomTheme = customThemeRepository.getLightCustomTheme();
mDarkCustomTheme = customThemeRepository.getDarkCustomTheme();
mAmoledCustomTheme = customThemeRepository.getAmoledCustomTheme();
} }
public LiveData<List<CustomTheme>> getAllCustomThemes() { public LiveData<List<CustomTheme>> getAllCustomThemes() {
return mAllCustomThemes; return mAllCustomThemes;
} }
public LiveData<CustomTheme> getLightCustomTheme() {
return mLightCustomTheme;
}
public LiveData<CustomTheme> getDarkCustomTheme() {
return mDarkCustomTheme;
}
public LiveData<CustomTheme> getAmoledCustomTheme() {
return mAmoledCustomTheme;
}
public static class Factory extends ViewModelProvider.NewInstanceFactory { public static class Factory extends ViewModelProvider.NewInstanceFactory {
private RedditDataRoomDatabase mRedditDataRoomDatabase; private RedditDataRoomDatabase mRedditDataRoomDatabase;

View File

@ -288,7 +288,7 @@ public class CustomThemeWrapper {
} }
public int getSingleCommentThreadBackgroundColor() { public int getSingleCommentThreadBackgroundColor() {
return getThemeSharedPreferences().getInt(CustomThemeSharedPreferencesUtils.SINGLE_COMMENT_THREAD_BACKGROUND, return getThemeSharedPreferences().getInt(CustomThemeSharedPreferencesUtils.SINGLE_COMMENT_THREAD_BACKGROUND_COLOR,
getDefaultColor("#B3E5F9", "#123E77", "#123E77")); getDefaultColor("#B3E5F9", "#123E77", "#123E77"));
} }

View File

@ -1,5 +1,9 @@
package ml.docilealligator.infinityforreddit.Utils; package ml.docilealligator.infinityforreddit.Utils;
import android.content.SharedPreferences;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomTheme;
public class CustomThemeSharedPreferencesUtils { public class CustomThemeSharedPreferencesUtils {
public static final int LIGHT = 0; public static final int LIGHT = 0;
public static final int DARK = 1; public static final int DARK = 1;
@ -58,7 +62,7 @@ public class CustomThemeSharedPreferencesUtils {
public static final String AUTHOR_FLAIR_TEXT_COLOR = "authorFlairTextColor"; public static final String AUTHOR_FLAIR_TEXT_COLOR = "authorFlairTextColor";
public static final String SUBMITTER = "submitter"; public static final String SUBMITTER = "submitter";
public static final String MODERATOR = "moderator"; public static final String MODERATOR = "moderator";
public static final String SINGLE_COMMENT_THREAD_BACKGROUND = "singleCommentThreadBackgroundColor"; public static final String SINGLE_COMMENT_THREAD_BACKGROUND_COLOR = "singleCommentThreadBackgroundColor";
public static final String UNREAD_MESSAGE_BACKGROUND_COLOR = "unreadMessageBackgroundColor"; public static final String UNREAD_MESSAGE_BACKGROUND_COLOR = "unreadMessageBackgroundColor";
public static final String DIVIDER_COLOR = "dividerColor"; public static final String DIVIDER_COLOR = "dividerColor";
public static final String NO_PREVIEW_LINK_BACKGROUND_COLOR = "noPreviewLinkBackgroundColor"; public static final String NO_PREVIEW_LINK_BACKGROUND_COLOR = "noPreviewLinkBackgroundColor";
@ -72,4 +76,74 @@ public class CustomThemeSharedPreferencesUtils {
public static final String COMMENT_VERTICAL_BAR_COLOR_7 = "commentVerticalBarColor7"; public static final String COMMENT_VERTICAL_BAR_COLOR_7 = "commentVerticalBarColor7";
public static final String FAB_ICON_COLOR = "fabIconColor"; public static final String FAB_ICON_COLOR = "fabIconColor";
public static final String CHIP_TEXT_COLOR = "chipTextColor"; public static final String CHIP_TEXT_COLOR = "chipTextColor";
public static void insertThemeToSharedPreferences(CustomTheme customTheme, SharedPreferences themeSharedPreferences) {
SharedPreferences.Editor editor = themeSharedPreferences.edit();
editor.putInt(COLOR_PRIMARY, customTheme.colorPrimary);
editor.putInt(COLOR_PRIMARY_DARK, customTheme.colorPrimaryDark);
editor.putInt(COLOR_ACCENT, customTheme.colorAccent);
editor.putInt(COLOR_PRIMARY_LIGHT_THEME, customTheme.colorPrimaryLightTheme);
editor.putInt(PRIMARY_TEXT_COLOR, customTheme.primaryTextColor);
editor.putInt(SECONDARY_TEXT_COLOR, customTheme.secondaryTextColor);
editor.putInt(POST_TITLE_COLOR, customTheme.postTitleColor);
editor.putInt(POST_CONTENT_COLOR, customTheme.postContentColor);
editor.putInt(COMMENT_COLOR, customTheme.commentColor);
editor.putInt(BUTTON_TEXT_COLOR, customTheme.buttonTextColor);
editor.putInt(BACKGROUND_COLOR, customTheme.backgroundColor);
editor.putInt(CARD_VIEW_BACKGROUND_COLOR, customTheme.cardViewBackgroundColor);
editor.putInt(COMMENT_BACKGROUND_COLOR, customTheme.commentBackgroundColor);
editor.putInt(BOTTOM_APP_BAR_BACKGROUND_COLOR, customTheme.bottomAppBarBackgroundColor);
editor.putInt(PRIMARY_ICON_COLOR, customTheme.primaryIconColor);
editor.putInt(POST_ICON_AND_INFO_COLOR, customTheme.postIconAndInfoColor);
editor.putInt(COMMENT_ICON_AND_INFO_COLOR, customTheme.commentIconAndInfoColor);
editor.putInt(TOOLBAR_PRIMARY_TEXT_AND_ICON_COLOR, customTheme.toolbarPrimaryTextAndIconColor);
editor.putInt(TOOLBAR_SECONDARY_TEXT_COLOR, customTheme.toolbarSecondaryTextColor);
editor.putInt(CIRCULAR_PROGRESS_BAR_BACKGROUND, customTheme.circularProgressBarBackground);
editor.putInt(TAB_LAYOUT_WITH_EXPANDED_COLLAPSING_TOOLBAR_TAB_BACKGROUND, customTheme.tabLayoutWithExpandedCollapsingToolbarTabBackground);
editor.putInt(TAB_LAYOUT_WITH_EXPANDED_COLLAPSING_TOOLBAR_TEXT_COLOR, customTheme.tabLayoutWithExpandedCollapsingToolbarTextColor);
editor.putInt(TAB_LAYOUT_WITH_EXPANDED_COLLAPSING_TOOLBAR_TAB_INDICATOR, customTheme.tabLayoutWithExpandedCollapsingToolbarTabIndicator);
editor.putInt(TAB_LAYOUT_WITH_COLLAPSED_COLLAPSING_TOOLBAR_TAB_BACKGROUND, customTheme.tabLayoutWithCollapsedCollapsingToolbarTabBackground);
editor.putInt(TAB_LAYOUT_WITH_COLLAPSED_COLLAPSING_TOOLBAR_TEXT_COLOR, customTheme.tabLayoutWithCollapsedCollapsingToolbarTextColor);
editor.putInt(TAB_LAYOUT_WITH_COLLAPSED_COLLAPSING_TOOLBAR_TAB_INDICATOR, customTheme.tabLayoutWithCollapsedCollapsingToolbarTabIndicator);
editor.putInt(NAV_BAR_COLOR, customTheme.navBarColor);
editor.putInt(UPVOTED, customTheme.upvoted);
editor.putInt(DOWNVOTED, customTheme.downvoted);
editor.putInt(POST_TYPE_BACKGROUND_COLOR, customTheme.postTypeBackgroundColor);
editor.putInt(POST_TYPE_TEXT_COLOR, customTheme.postTypeTextColor);
editor.putInt(SPOILER_BACKGROUND_COLOR, customTheme.spoilerBackgroundColor);
editor.putInt(SPOILER_TEXT_COLOR, customTheme.spoilerTextColor);
editor.putInt(NSFW_BACKGROUND_COLOR, customTheme.nsfwBackgroundColor);
editor.putInt(NSFW_TEXT_COLOR, customTheme.nsfwTextColor);
editor.putInt(FLAIR_BACKGROUND_COLOR, customTheme.flairBackgroundColor);
editor.putInt(FLAIR_TEXT_COLOR, customTheme.flairTextColor);
editor.putInt(ARCHIVED_ICON_TINT, customTheme.archivedTint);
editor.putInt(LOCKED_ICON_TINT, customTheme.lockedIconTint);
editor.putInt(CROSSPOST_ICON_TINT, customTheme.crosspostIconTint);
editor.putInt(STICKIED_POST_ICON_TINT, customTheme.stickiedPostIconTint);
editor.putInt(SUBSCRIBED, customTheme.subscribed);
editor.putInt(UNSUBSCRIBED, customTheme.unsubscribed);
editor.putInt(USERNAME, customTheme.username);
editor.putInt(SUBREDDIT, customTheme.subreddit);
editor.putInt(AUTHOR_FLAIR_TEXT_COLOR, customTheme.authorFlairTextColor);
editor.putInt(SUBMITTER, customTheme.submitter);
editor.putInt(MODERATOR, customTheme.moderator);
editor.putInt(SINGLE_COMMENT_THREAD_BACKGROUND_COLOR, customTheme.singleCommentThreadBackgroundColor);
editor.putInt(UNREAD_MESSAGE_BACKGROUND_COLOR, customTheme.unreadMessageBackgroundColor);
editor.putInt(DIVIDER_COLOR, customTheme.dividerColor);
editor.putInt(NO_PREVIEW_LINK_BACKGROUND_COLOR, customTheme.noPreviewLinkBackgroundColor);
editor.putInt(VOTE_AND_REPLY_UNAVAILABLE_BUTTON_COLOR, customTheme.voteAndReplyUnavailableButtonColor);
editor.putInt(COMMENT_VERTICAL_BAR_COLOR_1, customTheme.commentVerticalBarColor1);
editor.putInt(COMMENT_VERTICAL_BAR_COLOR_2, customTheme.commentVerticalBarColor2);
editor.putInt(COMMENT_VERTICAL_BAR_COLOR_3, customTheme.commentVerticalBarColor3);
editor.putInt(COMMENT_VERTICAL_BAR_COLOR_4, customTheme.commentVerticalBarColor4);
editor.putInt(COMMENT_VERTICAL_BAR_COLOR_5, customTheme.commentVerticalBarColor5);
editor.putInt(COMMENT_VERTICAL_BAR_COLOR_6, customTheme.commentVerticalBarColor6);
editor.putInt(COMMENT_VERTICAL_BAR_COLOR_7, customTheme.commentVerticalBarColor7);
editor.putInt(FAB_ICON_COLOR, customTheme.fabIconColor);
editor.putInt(CHIP_TEXT_COLOR, customTheme.chipTextColor);
editor.putBoolean(LIGHT_STATUS_BAR, customTheme.isLightStatusBar);
editor.putBoolean(LIGHT_NAV_BAR, customTheme.isLightNavBar);
editor.putBoolean(CHANGE_STATUS_BAR_ICON_COLOR_AFTER_TOOLBAR_COLLAPSED_IN_IMMERSIVE_INTERFACE, customTheme.isChangeStatusBarIconColorAfterToolbarCollapsedInImmersiveInterface);
editor.apply();
}
} }