Fix some bugs in CustomizeThemeActivity.

This commit is contained in:
Alex Ning 2020-03-25 18:06:43 +08:00
parent f5fc385039
commit 0694c471c4
16 changed files with 321 additions and 183 deletions

View File

@ -56,14 +56,14 @@ public class CustomThemeListingActivity extends BaseActivity {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
CustomThemeListingRecyclerViewAdapter adapter = new CustomThemeListingRecyclerViewAdapter(this,
CustomThemeWrapper.getPredifinedThemes(this));
CustomThemeWrapper.getPredefinedThemes(this));
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
customThemeViewModel = new ViewModelProvider(this,
new CustomThemeViewModel.Factory(redditDataRoomDatabase))
.get(CustomThemeViewModel.class);
customThemeViewModel.getAllCustomThemes().observe(this, customThemes -> adapter.setUserThemes(customThemes));
customThemeViewModel.getAllCustomThemes().observe(this, adapter::setUserThemes);
}
@Override

View File

@ -28,7 +28,6 @@ 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;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.Event.RecreateActivityEvent;
import ml.docilealligator.infinityforreddit.Infinity;
@ -43,7 +42,9 @@ public class CustomizeThemeActivity extends BaseActivity {
public static final int EXTRA_DARK_THEME = CustomThemeSharedPreferencesUtils.DARK;
public static final int EXTRA_AMOLED_THEME = CustomThemeSharedPreferencesUtils.AMOLED;
public static final String EXTRA_THEME_NAME = "ETN";
public static final String EXTRA_IS_PREDEFIINED_THEME = "EIPT";
private static final String CUSTOM_THEME_SETTINGS_ITEMS_STATE = "CTSIS";
private static final String THEME_NAME_STATE = "TNS";
@BindView(R.id.appbar_layout_customize_theme_activity)
AppBarLayout appBarLayout;
@ -68,10 +69,8 @@ public class CustomizeThemeActivity extends BaseActivity {
@Inject
CustomThemeWrapper customThemeWrapper;
public CustomThemeViewModel customThemeViewModel;
private int themeType;
private String themeName;
private boolean isPredefinedTheme;
private ArrayList<CustomThemeSettingsItem> customThemeSettingsItems;
private CustomizeThemeRecyclerViewAdapter adapter;
@ -89,81 +88,84 @@ public class CustomizeThemeActivity extends BaseActivity {
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
adapter = new CustomizeThemeRecyclerViewAdapter(this);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
if (savedInstanceState != null) {
customThemeSettingsItems = savedInstanceState.getParcelableArrayList(CUSTOM_THEME_SETTINGS_ITEMS_STATE);
themeName = savedInstanceState.getString(THEME_NAME_STATE);
}
int androidVersion = Build.VERSION.SDK_INT;
if (customThemeSettingsItems == null) {
if (getIntent().hasExtra(EXTRA_THEME_TYPE)) {
themeType = getIntent().getIntExtra(EXTRA_THEME_TYPE, EXTRA_LIGHT_THEME);
int themeType = getIntent().getIntExtra(EXTRA_THEME_TYPE, EXTRA_LIGHT_THEME);
new GetCustomThemeAsyncTask(redditDataRoomDatabase, themeType, customTheme -> {
if (customTheme == null) {
isPredefinedTheme = true;
switch (themeType) {
case EXTRA_DARK_THEME:
customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem(
CustomizeThemeActivity.this,
CustomThemeWrapper.getIndigoDark(CustomizeThemeActivity.this));
CustomThemeWrapper.getIndigoDark(CustomizeThemeActivity.this),
androidVersion);
themeName = getString(R.string.theme_name_indigo_dark);
break;
case EXTRA_AMOLED_THEME:
customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem(
CustomizeThemeActivity.this,
CustomThemeWrapper.getIndigoAmoled(CustomizeThemeActivity.this));
CustomThemeWrapper.getIndigoAmoled(CustomizeThemeActivity.this),
androidVersion);
themeName = getString(R.string.theme_name_indigo_amoled);
break;
default:
customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem(
CustomizeThemeActivity.this,
CustomThemeWrapper.getIndigo(CustomizeThemeActivity.this));
CustomThemeWrapper.getIndigo(CustomizeThemeActivity.this),
androidVersion);
themeName = getString(R.string.theme_name_indigo);
}
} else {
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);
customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem(
CustomizeThemeActivity.this, customTheme, androidVersion);
themeName = customTheme.name;
}
setTitle(themeName);
adapter = new CustomizeThemeRecyclerViewAdapter(this, themeName, isPredefinedTheme);
recyclerView.setAdapter(adapter);
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 {
isPredefinedTheme = getIntent().getBooleanExtra(EXTRA_IS_PREDEFIINED_THEME, false);
themeName = getIntent().getStringExtra(EXTRA_THEME_NAME);
adapter = new CustomizeThemeRecyclerViewAdapter(this, themeName, isPredefinedTheme);
recyclerView.setAdapter(adapter);
setTitle(themeName);
new GetCustomThemeAsyncTask(redditDataRoomDatabase, themeName,
customTheme -> {
customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem(CustomizeThemeActivity.this, customTheme);
if (isPredefinedTheme) {
customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem(
CustomizeThemeActivity.this,
CustomThemeWrapper.getPredefinedCustomTheme(this, themeName),
androidVersion);
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);
}
setTitle(themeName);
adapter = new CustomizeThemeRecyclerViewAdapter(this, themeName, isPredefinedTheme);
recyclerView.setAdapter(adapter);
adapter.setCustomThemeSettingsItem(customThemeSettingsItems);
} else {
new GetCustomThemeAsyncTask(redditDataRoomDatabase, themeName,
customTheme -> {
customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem(
CustomizeThemeActivity.this, customTheme, androidVersion);
adapter.setCustomThemeSettingsItem(customThemeSettingsItems);
}).execute();
adapter.setCustomThemeSettingsItem(customThemeSettingsItems);
}).execute();
}
}
} else {
adapter = new CustomizeThemeRecyclerViewAdapter(this, themeName, isPredefinedTheme);
recyclerView.setAdapter(adapter);
adapter.setCustomThemeSettingsItem(customThemeSettingsItems);
}
}
@ -182,52 +184,13 @@ public class CustomizeThemeActivity extends BaseActivity {
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;
new InsertCustomThemeAsyncTask(redditDataRoomDatabase, darkThemeSharedPreferences, customTheme, () -> {
Toast.makeText(CustomizeThemeActivity.this, R.string.saved, Toast.LENGTH_SHORT).show();
EventBus.getDefault().post(new RecreateActivityEvent());
finish();
}).execute();
break;
case CustomThemeSharedPreferencesUtils.AMOLED:
customTheme.isLightTheme = false;
customTheme.isDarkTheme = false;
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;
default:
customTheme.isLightTheme = true;
customTheme.isDarkTheme = 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, lightThemeSharedPreferences,
darkThemeSharedPreferences, amoledThemeSharedPreferences, customTheme, () -> {
Toast.makeText(CustomizeThemeActivity.this, R.string.saved, Toast.LENGTH_SHORT).show();
EventBus.getDefault().post(new RecreateActivityEvent());
finish();
}).execute();
return true;
}
@ -239,6 +202,7 @@ public class CustomizeThemeActivity extends BaseActivity {
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelableArrayList(CUSTOM_THEME_SETTINGS_ITEMS_STATE, customThemeSettingsItems);
outState.putString(THEME_NAME_STATE, themeName);
}
@Override

View File

@ -6,6 +6,7 @@ import android.content.res.ColorStateList;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
@ -56,11 +57,11 @@ public class CustomThemeListingRecyclerViewAdapter extends RecyclerView.Adapter<
case VIEW_TYPE_PREDEFINED_THEME_DIVIDER:
return new PreDefinedThemeDividerViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_theme_type_divider, parent, false));
case VIEW_TYPE_PREDEFINED_THEME:
return new PredefinedCustomThemeViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_custom_theme, parent, false));
return new PredefinedCustomThemeViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_predefined_custom_theme, parent, false));
case VIEW_TYPE_USER_THEME_DIVIDER:
return new UserThemeDividerViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_theme_type_divider, parent, false));
default:
return new UserCustomThemeViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_custom_theme, parent, false));
return new UserCustomThemeViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_user_custom_theme, parent, false));
}
}
@ -73,12 +74,19 @@ public class CustomThemeListingRecyclerViewAdapter extends RecyclerView.Adapter<
((PredefinedCustomThemeViewHolder) holder).itemView.setOnClickListener(view -> {
Intent intent = new Intent(context, CustomizeThemeActivity.class);
intent.putExtra(CustomizeThemeActivity.EXTRA_THEME_NAME, customTheme.name);
intent.putExtra(CustomizeThemeActivity.EXTRA_IS_PREDEFIINED_THEME, true);
context.startActivity(intent);
});
} else if (holder instanceof UserCustomThemeViewHolder) {
CustomTheme customTheme = userCustomThemes.get(position - predefinedCustomThemes.size() - 2);
((UserCustomThemeViewHolder) holder).colorPrimaryView.setBackgroundTintList(ColorStateList.valueOf(customTheme.colorPrimary));
((UserCustomThemeViewHolder) holder).nameTextView.setText(customTheme.name);
((UserCustomThemeViewHolder) holder).deleteImageView.setOnClickListener(view -> {
});
((UserCustomThemeViewHolder) holder).shareImageView.setOnClickListener(view -> {
});
((UserCustomThemeViewHolder) holder).itemView.setOnClickListener(view -> {
Intent intent = new Intent(context, CustomizeThemeActivity.class);
intent.putExtra(CustomizeThemeActivity.EXTRA_THEME_NAME, customTheme.name);
@ -103,9 +111,9 @@ public class CustomThemeListingRecyclerViewAdapter extends RecyclerView.Adapter<
class PredefinedCustomThemeViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.color_primary_item_custom_theme)
@BindView(R.id.color_primary_item_predefined_custom_theme)
View colorPrimaryView;
@BindView(R.id.name_text_view_item_custom_theme)
@BindView(R.id.name_text_view_item_predefined_custom_theme)
TextView nameTextView;
public PredefinedCustomThemeViewHolder(@NonNull View itemView) {
@ -116,10 +124,14 @@ public class CustomThemeListingRecyclerViewAdapter extends RecyclerView.Adapter<
class UserCustomThemeViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.color_primary_item_custom_theme)
@BindView(R.id.color_primary_item_user_custom_theme)
View colorPrimaryView;
@BindView(R.id.name_text_view_item_custom_theme)
@BindView(R.id.name_text_view_item_user_custom_theme)
TextView nameTextView;
@BindView(R.id.delete_image_view_item_user_custom_theme)
ImageView deleteImageView;
@BindView(R.id.share_image_view_item_user_custom_theme)
ImageView shareImageView;
public UserCustomThemeViewHolder(@NonNull View itemView) {
super(itemView);

View File

@ -22,17 +22,25 @@ import ml.docilealligator.infinityforreddit.R;
public class CustomizeThemeRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int VIEW_TYPE_COLOR = 1;
private static final int VIEW_TYPE_SWITCH = 2;
private static final int VIEW_TYPE_THEME_NAME = 3;
private AppCompatActivity activity;
private ArrayList<CustomThemeSettingsItem> customThemeSettingsItems;
private String themeName;
private boolean isPredefinedTheme;
public CustomizeThemeRecyclerViewAdapter(AppCompatActivity activity) {
public CustomizeThemeRecyclerViewAdapter(AppCompatActivity activity, String themeName,
boolean isPredefinedTheme) {
this.activity = activity;
customThemeSettingsItems = new ArrayList<>();
this.themeName = themeName;
this.isPredefinedTheme = isPredefinedTheme;
}
@Override
public int getItemViewType(int position) {
if (position < customThemeSettingsItems.size() - 3) {
if (position == 0) {
return VIEW_TYPE_THEME_NAME;
} else if (position > 3 && position < customThemeSettingsItems.size() - 3) {
return VIEW_TYPE_COLOR;
}
@ -44,6 +52,8 @@ public class CustomizeThemeRecyclerViewAdapter extends RecyclerView.Adapter<Recy
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == VIEW_TYPE_SWITCH) {
return new ThemeSwitchItemViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_custom_theme_switch_item, parent, false));
} else if (viewType == VIEW_TYPE_THEME_NAME) {
return new ThemeNameItemViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_theme_name, parent, false));
}
return new ThemeColorItemViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_custom_theme_color_item, parent, false));
@ -52,7 +62,7 @@ public class CustomizeThemeRecyclerViewAdapter extends RecyclerView.Adapter<Recy
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ThemeColorItemViewHolder) {
CustomThemeSettingsItem customThemeSettingsItem = customThemeSettingsItems.get(position);
CustomThemeSettingsItem customThemeSettingsItem = customThemeSettingsItems.get(position - 1);
((ThemeColorItemViewHolder) holder).themeItemNameTextView.setText(customThemeSettingsItem.itemName);
((ThemeColorItemViewHolder) holder).themeItemInfoTextView.setText(customThemeSettingsItem.itemDetails);
((ThemeColorItemViewHolder) holder).colorImageView.setBackgroundTintList(ColorStateList.valueOf(customThemeSettingsItem.colorValue));
@ -63,18 +73,23 @@ public class CustomizeThemeRecyclerViewAdapter extends RecyclerView.Adapter<Recy
}).show();
});
} else if (holder instanceof ThemeSwitchItemViewHolder) {
CustomThemeSettingsItem customThemeSettingsItem = customThemeSettingsItems.get(position);
CustomThemeSettingsItem customThemeSettingsItem = customThemeSettingsItems.get(position - 1);
((ThemeSwitchItemViewHolder) holder).themeItemNameTextView.setText(customThemeSettingsItem.itemName);
((ThemeSwitchItemViewHolder) holder).themeItemInfoTextView.setText(customThemeSettingsItem.itemName);
((ThemeSwitchItemViewHolder) holder).themeItemSwitch.setChecked(customThemeSettingsItem.isEnabled);
((ThemeSwitchItemViewHolder) holder).themeItemSwitch.setOnClickListener(view -> customThemeSettingsItem.isEnabled = ((ThemeSwitchItemViewHolder) holder).themeItemSwitch.isChecked());
holder.itemView.setOnClickListener(view -> ((ThemeSwitchItemViewHolder) holder).themeItemSwitch.performClick());
} else if (holder instanceof ThemeNameItemViewHolder) {
((ThemeNameItemViewHolder) holder).themeNameTextView.setText(themeName);
holder.itemView.setOnClickListener(view -> {
});
}
}
@Override
public int getItemCount() {
return customThemeSettingsItems.size();
return customThemeSettingsItems.size() + 1;
}
public void setCustomThemeSettingsItem(ArrayList<CustomThemeSettingsItem> customThemeSettingsItems) {
@ -111,4 +126,19 @@ public class CustomizeThemeRecyclerViewAdapter extends RecyclerView.Adapter<Recy
ButterKnife.bind(this, itemView);
}
}
class ThemeNameItemViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.theme_name_text_view_item_theme_name)
TextView themeNameTextView;
@BindView(R.id.description_text_view_item_theme_name)
TextView descriptionTextView;
public ThemeNameItemViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
if (isPredefinedTheme) {
descriptionTextView.setText(activity.getString(R.string.theme_name_forbid_change_description));
itemView.setOnClickListener(view ->{});
}
}
}
}

View File

@ -9,7 +9,9 @@ import ml.docilealligator.infinityforreddit.Utils.CustomThemeSharedPreferencesUt
public class InsertCustomThemeAsyncTask extends AsyncTask<Void, Void, Void> {
private RedditDataRoomDatabase redditDataRoomDatabase;
private SharedPreferences themeSharedPreferences;
private SharedPreferences lightThemeSharedPreferences;
private SharedPreferences darkThemeSharedPreferences;
private SharedPreferences amoledThemeSharedPreferences;
private CustomTheme customTheme;
private InsertCustomThemeAsyncTaskListener insertCustomThemeAsyncTaskListener;
@ -18,18 +20,33 @@ public class InsertCustomThemeAsyncTask extends AsyncTask<Void, Void, Void> {
}
public InsertCustomThemeAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase,
SharedPreferences themeSharedPreferences, CustomTheme customTheme,
SharedPreferences lightThemeSharedPreferences,
SharedPreferences darkThemeSharedPreferences,
SharedPreferences amoledThemeSharedPreferences, CustomTheme customTheme,
InsertCustomThemeAsyncTaskListener insertCustomThemeAsyncTaskListener) {
this.redditDataRoomDatabase = redditDataRoomDatabase;
this.themeSharedPreferences = themeSharedPreferences;
this.lightThemeSharedPreferences = lightThemeSharedPreferences;
this.darkThemeSharedPreferences = darkThemeSharedPreferences;
this.amoledThemeSharedPreferences = amoledThemeSharedPreferences;
this.customTheme = customTheme;
this.insertCustomThemeAsyncTaskListener = insertCustomThemeAsyncTaskListener;
}
@Override
protected Void doInBackground(Void... voids) {
if (customTheme.isLightTheme) {
redditDataRoomDatabase.customThemeDao().unsetLightTheme();
CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(customTheme, lightThemeSharedPreferences);
}
if (customTheme.isDarkTheme) {
redditDataRoomDatabase.customThemeDao().unsetDarkTheme();
CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(customTheme, darkThemeSharedPreferences);
}
if (customTheme.isAmoledTheme) {
redditDataRoomDatabase.customThemeDao().unsetAmoledTheme();
CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(customTheme, amoledThemeSharedPreferences);
}
redditDataRoomDatabase.customThemeDao().insert(customTheme);
CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(customTheme, themeSharedPreferences);
return null;
}

View File

@ -161,71 +161,74 @@ public class CustomTheme {
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;
customTheme.isLightTheme = customThemeSettingsItems.get(0).isEnabled;
customTheme.isDarkTheme = customThemeSettingsItems.get(1).isEnabled;
customTheme.isAmoledTheme = customThemeSettingsItems.get(2).isEnabled;
customTheme.colorPrimary = customThemeSettingsItems.get(3).colorValue;
customTheme.colorPrimaryDark = customThemeSettingsItems.get(4).colorValue;
customTheme.colorAccent = customThemeSettingsItems.get(5).colorValue;
customTheme.colorPrimaryLightTheme = customThemeSettingsItems.get(6).colorValue;
customTheme.primaryTextColor = customThemeSettingsItems.get(7).colorValue;
customTheme.secondaryTextColor = customThemeSettingsItems.get(8).colorValue;
customTheme.postTitleColor = customThemeSettingsItems.get(9).colorValue;
customTheme.postContentColor = customThemeSettingsItems.get(10).colorValue;
customTheme.commentColor = customThemeSettingsItems.get(11).colorValue;
customTheme.buttonTextColor = customThemeSettingsItems.get(12).colorValue;
customTheme.chipTextColor = customThemeSettingsItems.get(13).colorValue;
customTheme.backgroundColor = customThemeSettingsItems.get(14).colorValue;
customTheme.cardViewBackgroundColor = customThemeSettingsItems.get(15).colorValue;
customTheme.commentBackgroundColor = customThemeSettingsItems.get(16).colorValue;
customTheme.bottomAppBarBackgroundColor = customThemeSettingsItems.get(17).colorValue;
customTheme.primaryIconColor = customThemeSettingsItems.get(18).colorValue;
customTheme.postIconAndInfoColor = customThemeSettingsItems.get(19).colorValue;
customTheme.commentIconAndInfoColor = customThemeSettingsItems.get(20).colorValue;
customTheme.fabIconColor = customThemeSettingsItems.get(21).colorValue;
customTheme.toolbarPrimaryTextAndIconColor = customThemeSettingsItems.get(22).colorValue;
customTheme.toolbarSecondaryTextColor = customThemeSettingsItems.get(23).colorValue;
customTheme.circularProgressBarBackground = customThemeSettingsItems.get(24).colorValue;
customTheme.tabLayoutWithExpandedCollapsingToolbarTabBackground = customThemeSettingsItems.get(25).colorValue;
customTheme.tabLayoutWithExpandedCollapsingToolbarTextColor = customThemeSettingsItems.get(26).colorValue;
customTheme.tabLayoutWithExpandedCollapsingToolbarTabIndicator = customThemeSettingsItems.get(27).colorValue;
customTheme.tabLayoutWithCollapsedCollapsingToolbarTabBackground = customThemeSettingsItems.get(28).colorValue;
customTheme.tabLayoutWithCollapsedCollapsingToolbarTextColor = customThemeSettingsItems.get(29).colorValue;
customTheme.tabLayoutWithCollapsedCollapsingToolbarTabIndicator = customThemeSettingsItems.get(30).colorValue;
customTheme.upvoted = customThemeSettingsItems.get(31).colorValue;
customTheme.downvoted = customThemeSettingsItems.get(32).colorValue;
customTheme.postTypeBackgroundColor = customThemeSettingsItems.get(33).colorValue;
customTheme.postTypeTextColor = customThemeSettingsItems.get(34).colorValue;
customTheme.spoilerBackgroundColor = customThemeSettingsItems.get(35).colorValue;
customTheme.spoilerTextColor = customThemeSettingsItems.get(36).colorValue;
customTheme.nsfwBackgroundColor = customThemeSettingsItems.get(37).colorValue;
customTheme.nsfwTextColor = customThemeSettingsItems.get(38).colorValue;
customTheme.flairBackgroundColor = customThemeSettingsItems.get(39).colorValue;
customTheme.flairTextColor = customThemeSettingsItems.get(40).colorValue;
customTheme.archivedTint = customThemeSettingsItems.get(41).colorValue;
customTheme.lockedIconTint = customThemeSettingsItems.get(42).colorValue;
customTheme.crosspostIconTint = customThemeSettingsItems.get(43).colorValue;
customTheme.stickiedPostIconTint = customThemeSettingsItems.get(44).colorValue;
customTheme.subscribed = customThemeSettingsItems.get(45).colorValue;
customTheme.unsubscribed = customThemeSettingsItems.get(46).colorValue;
customTheme.username = customThemeSettingsItems.get(47).colorValue;
customTheme.subreddit = customThemeSettingsItems.get(48).colorValue;
customTheme.authorFlairTextColor = customThemeSettingsItems.get(49).colorValue;
customTheme.submitter = customThemeSettingsItems.get(50).colorValue;
customTheme.moderator = customThemeSettingsItems.get(51).colorValue;
customTheme.singleCommentThreadBackgroundColor = customThemeSettingsItems.get(52).colorValue;
customTheme.unreadMessageBackgroundColor = customThemeSettingsItems.get(53).colorValue;
customTheme.dividerColor = customThemeSettingsItems.get(54).colorValue;
customTheme.noPreviewLinkBackgroundColor = customThemeSettingsItems.get(55).colorValue;
customTheme.voteAndReplyUnavailableButtonColor = customThemeSettingsItems.get(56).colorValue;
customTheme.commentVerticalBarColor1 = customThemeSettingsItems.get(57).colorValue;
customTheme.commentVerticalBarColor2 = customThemeSettingsItems.get(58).colorValue;
customTheme.commentVerticalBarColor3 = customThemeSettingsItems.get(59).colorValue;
customTheme.commentVerticalBarColor4 = customThemeSettingsItems.get(60).colorValue;
customTheme.commentVerticalBarColor5 = customThemeSettingsItems.get(61).colorValue;
customTheme.commentVerticalBarColor6 = customThemeSettingsItems.get(62).colorValue;
customTheme.commentVerticalBarColor7 = customThemeSettingsItems.get(63).colorValue;
customTheme.navBarColor = customThemeSettingsItems.get(64).colorValue;
customTheme.isLightStatusBar = customThemeSettingsItems.get(65).isEnabled;
customTheme.isLightNavBar = customThemeSettingsItems.get(66).isEnabled;
customTheme.isChangeStatusBarIconColorAfterToolbarCollapsedInImmersiveInterface = customThemeSettingsItems.get(67).isEnabled;
return customTheme;
}

View File

@ -28,6 +28,15 @@ public interface CustomThemeDao {
@Query("SELECT * FROM custom_themes WHERE name = :name COLLATE NOCASE LIMIT 1")
CustomTheme getCustomTheme(String name);
@Query("UPDATE custom_themes SET is_light_theme = 0 WHERE is_light_theme = 1")
void unsetLightTheme();
@Query("UPDATE custom_themes SET is_dark_theme = 0 WHERE is_dark_theme = 1")
void unsetDarkTheme();
@Query("UPDATE custom_themes SET is_amoled_theme = 0 WHERE is_amoled_theme = 1")
void unsetAmoledTheme();
@Query("DELETE FROM custom_themes WHERE name = :name")
void deleteCustomTheme(String name);
}

View File

@ -1,6 +1,7 @@
package ml.docilealligator.infinityforreddit.CustomTheme;
import android.content.Context;
import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
@ -44,13 +45,27 @@ public class CustomThemeSettingsItem implements Parcelable {
}
};
public static ArrayList<CustomThemeSettingsItem> convertCustomThemeToSettingsItem(Context context, CustomTheme customTheme) {
public static ArrayList<CustomThemeSettingsItem> convertCustomThemeToSettingsItem(Context context,
CustomTheme customTheme,
int androidVersion) {
ArrayList<CustomThemeSettingsItem> customThemeSettingsItems = new ArrayList<>();
if (customTheme == null) {
return customThemeSettingsItems;
}
customThemeSettingsItems.add(new CustomThemeSettingsItem(
context.getString(R.string.theme_item_is_light_theme),
customTheme.isLightTheme
));
customThemeSettingsItems.add(new CustomThemeSettingsItem(
context.getString(R.string.theme_item_is_dark_theme),
customTheme.isDarkTheme
));
customThemeSettingsItems.add(new CustomThemeSettingsItem(
context.getString(R.string.theme_item_is_amoled_theme),
customTheme.isAmoledTheme
));
customThemeSettingsItems.add(new CustomThemeSettingsItem(
context.getString(R.string.theme_item_color_primary),
context.getString(R.string.theme_item_color_primary_detail),
@ -308,6 +323,12 @@ public class CustomThemeSettingsItem implements Parcelable {
customThemeSettingsItems.add(new CustomThemeSettingsItem(
context.getString(R.string.theme_item_change_status_bar_icon_color_after_toolbar_collapsed_in_immersive_interface),
customTheme.isChangeStatusBarIconColorAfterToolbarCollapsedInImmersiveInterface));
if (androidVersion < Build.VERSION_CODES.O) {
customThemeSettingsItems.get(customThemeSettingsItems.size() - 2).itemDetails = context.getString(R.string.theme_item_available_on_android_8);
}
if (androidVersion < Build.VERSION_CODES.M) {
customThemeSettingsItems.get(customThemeSettingsItems.size() - 3).itemDetails = context.getString(R.string.theme_item_available_on_android_6);
}
return customThemeSettingsItems;
}

View File

@ -377,7 +377,17 @@ public class CustomThemeWrapper {
themeType == CustomThemeSharedPreferencesUtils.LIGHT);
}
public static ArrayList<CustomTheme> getPredifinedThemes(Context context) {
public static CustomTheme getPredefinedCustomTheme(Context context, String name) {
if (name.equals(context.getString(R.string.theme_name_indigo_dark))) {
return getIndigoDark(context);
} else if (name.equals(context.getString(R.string.theme_name_indigo_amoled))) {
return getIndigoAmoled(context);
} else {
return getIndigo(context);
}
}
public static ArrayList<CustomTheme> getPredefinedThemes(Context context) {
ArrayList<CustomTheme> customThemes = new ArrayList<>();
customThemes.add(getIndigo(context));
customThemes.add(getIndigoDark(context));
@ -534,7 +544,7 @@ public class CustomThemeWrapper {
}
public static CustomTheme getIndigoAmoled(Context context) {
CustomTheme customTheme = new CustomTheme(context.getString(R.string.theme_name_indigo_dark));
CustomTheme customTheme = new CustomTheme(context.getString(R.string.theme_name_indigo_amoled));
customTheme.isLightTheme = false;
customTheme.isDarkTheme = true;
customTheme.isAmoledTheme = false;

View File

@ -53,7 +53,7 @@ public class ThemePreferenceFragment extends PreferenceFragmentCompat {
Preference customizeLightThemePreference = findPreference(SharedPreferencesUtils.CUSTOMIZE_LIGHT_THEME);
Preference customizeDarkThemePreference = findPreference(SharedPreferencesUtils.CUSTOMIZE_DARK_THEME);
Preference customizeAmoledThemePreference = findPreference(SharedPreferencesUtils.CUSTOMIZE_AMOLED_THEME);
Preference selectAndCustomizeThemePreference = findPreference(SharedPreferencesUtils.SELECT_AND_CUSTOMIZE_THEME);
Preference selectAndCustomizeThemePreference = findPreference(SharedPreferencesUtils.MANAGE_THEMES);
boolean systemDefault = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q;
if (themePreference != null && amoledDarkSwitch != null) {

View File

@ -80,5 +80,5 @@ public class SharedPreferencesUtils {
public static final String CUSTOMIZE_LIGHT_THEME = "customize_light_theme";
public static final String CUSTOMIZE_DARK_THEME = "customize_dark_theme";
public static final String CUSTOMIZE_AMOLED_THEME = "customize_amoled_theme";
public static final String SELECT_AND_CUSTOMIZE_THEME = "select_and_customize_theme";
public static final String MANAGE_THEMES = "manage_themes";
}

View File

@ -8,15 +8,18 @@
android:background="?attr/selectableItemBackground">
<View
android:id="@+id/color_primary_item_custom_theme"
android:id="@+id/color_primary_item_predefined_custom_theme"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_vertical"
android:background="@drawable/circular_background" />
<TextView
android:id="@+id/name_text_view_item_custom_theme"
android:id="@+id/name_text_view_item_predefined_custom_theme"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp" />
android:layout_marginStart="32dp"
android:layout_gravity="center_vertical"
android:textColor="?attr/primaryTextColor" />
</LinearLayout>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackground">
<TextView
android:id="@+id/theme_name_text_view_item_theme_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?attr/primaryTextColor" />
<TextView
android:id="@+id/description_text_view_item_theme_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="@string/theme_name_description"
android:textColor="?attr/secondaryTextColor" />
</LinearLayout>

View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackground">
<View
android:id="@+id/color_primary_item_user_custom_theme"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_vertical"
android:background="@drawable/circular_background" />
<TextView
android:id="@+id/name_text_view_item_user_custom_theme"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="32dp"
android:layout_gravity="center_vertical"
android:textColor="?attr/primaryTextColor" />
<ImageView
android:id="@+id/delete_image_view_item_user_custom_theme"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_vertical"
android:layout_marginStart="32dp"
android:src="@drawable/ic_delete_24dp"
android:background="?attr/selectableItemBackgroundBorderless" />
<ImageView
android:id="@+id/share_image_view_item_user_custom_theme"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_vertical"
android:layout_marginStart="16dp"
android:src="@drawable/ic_share_24dp"
android:background="?attr/selectableItemBackgroundBorderless" />
</LinearLayout>

View File

@ -362,7 +362,7 @@
<string name="settings_customize_light_theme_title">Light Theme</string>
<string name="settings_customize_dark_theme_title">Dark Theme</string>
<string name="settings_customize_amoled_theme_title">Amoled Theme</string>
<string name="settings_select_and_customize_theme_title">Select and Customize Themes</string>
<string name="settings_manage_themes_title">Manage Themes</string>
<string name="settings_custom_theme_cannot_apply_to_settings_page_title">Custom themes cannot be applied to settings page.</string>
<string name="no_link_available">Cannot get the link</string>
@ -467,10 +467,11 @@
<string name="save_image_before_sharing">Saving the image. Please wait.</string>
<string name="save_gif_before_sharing">Saving the gif. Please wait.</string>
<string name="customize_light_theme_fragment_title">Customize Light Theme</string>
<string name="customize_dark_theme_fragment_title">Customize Dark Theme</string>
<string name="customize_amoled_theme_fragment_title">Customize Amoled Theme</string>
<string name="theme_name_description">Tap to change the name of this theme.</string>
<string name="theme_name_forbid_change_description">You cannot change the name of this predefined theme.</string>
<string name="theme_item_is_light_theme">Set as Light Theme</string>
<string name="theme_item_is_dark_theme">Set as Dark Theme</string>
<string name="theme_item_is_amoled_theme">Set as Amoled Theme</string>
<string name="theme_item_color_primary">Color Primary</string>
<string name="theme_item_color_primary_detail">Applied to: Toolbar</string>
<string name="theme_item_color_primary_dark">Color Primary Dark</string>

View File

@ -34,9 +34,9 @@
app:title="@string/settings_customize_amoled_theme_title" />
<Preference
app:key="select_and_customize_theme"
app:key="manage_themes"
app:icon="@drawable/ic_edit_24dp"
app:title="@string/settings_select_and_customize_theme_title" />
app:title="@string/settings_manage_themes_title" />
<Preference
app:summary="@string/settings_custom_theme_cannot_apply_to_settings_page_title"