mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2025-02-05 06:14:43 +01:00
Customizing light, dark and amoled themes is now available.
This commit is contained in:
parent
587dfccd32
commit
c827d6f1cd
@ -3,7 +3,9 @@ package ml.docilealligator.infinityforreddit.Activity;
|
|||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
@ -23,6 +25,7 @@ import butterknife.BindView;
|
|||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import ml.docilealligator.infinityforreddit.Adapter.CustomizeThemeRecyclerViewAdapter;
|
import ml.docilealligator.infinityforreddit.Adapter.CustomizeThemeRecyclerViewAdapter;
|
||||||
import ml.docilealligator.infinityforreddit.AsyncTask.GetCustomThemeAsyncTask;
|
import ml.docilealligator.infinityforreddit.AsyncTask.GetCustomThemeAsyncTask;
|
||||||
|
import ml.docilealligator.infinityforreddit.AsyncTask.InsertCustomThemeAsyncTask;
|
||||||
import ml.docilealligator.infinityforreddit.CustomTheme.CustomTheme;
|
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;
|
||||||
@ -30,6 +33,7 @@ import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
|
|||||||
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;
|
||||||
|
import ml.docilealligator.infinityforreddit.Utils.CustomThemeSharedPreferencesUtils;
|
||||||
|
|
||||||
public class CustomizeThemeActivity extends BaseActivity {
|
public class CustomizeThemeActivity extends BaseActivity {
|
||||||
|
|
||||||
@ -54,6 +58,10 @@ public class CustomizeThemeActivity extends BaseActivity {
|
|||||||
CustomThemeWrapper customThemeWrapper;
|
CustomThemeWrapper customThemeWrapper;
|
||||||
|
|
||||||
public CustomThemeViewModel customThemeViewModel;
|
public CustomThemeViewModel customThemeViewModel;
|
||||||
|
|
||||||
|
private int themeType;
|
||||||
|
private String themeName;
|
||||||
|
private ArrayList<CustomThemeSettingsItem> customThemeSettingsItems;
|
||||||
private CustomizeThemeRecyclerViewAdapter adapter;
|
private CustomizeThemeRecyclerViewAdapter adapter;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -67,7 +75,6 @@ public class CustomizeThemeActivity extends BaseActivity {
|
|||||||
|
|
||||||
applyCustomTheme();
|
applyCustomTheme();
|
||||||
|
|
||||||
setTitle(getIntent().getStringExtra(EXTRA_THEME_NAME));
|
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
@ -75,13 +82,14 @@ public class CustomizeThemeActivity extends BaseActivity {
|
|||||||
recyclerView.setLayoutManager(new LinearLayoutManager(this));
|
recyclerView.setLayoutManager(new LinearLayoutManager(this));
|
||||||
recyclerView.setAdapter(adapter);
|
recyclerView.setAdapter(adapter);
|
||||||
|
|
||||||
customThemeViewModel = new ViewModelProvider(this, new CustomThemeViewModel.Factory(redditDataRoomDatabase))
|
customThemeSettingsItems = new ArrayList<>();
|
||||||
.get(CustomThemeViewModel.class);
|
|
||||||
|
|
||||||
int androidVersion = Build.VERSION.SDK_INT;
|
int androidVersion = Build.VERSION.SDK_INT;
|
||||||
if (getIntent().hasExtra(EXTRA_THEME_TYPE)) {
|
if (getIntent().hasExtra(EXTRA_THEME_TYPE)) {
|
||||||
|
customThemeViewModel = new ViewModelProvider(this, new CustomThemeViewModel.Factory(redditDataRoomDatabase))
|
||||||
|
.get(CustomThemeViewModel.class);
|
||||||
LiveData<CustomTheme> customThemeLiveData;
|
LiveData<CustomTheme> customThemeLiveData;
|
||||||
int themeType = getIntent().getIntExtra(EXTRA_THEME_TYPE, EXTRA_LIGHT_THEME);
|
themeType = getIntent().getIntExtra(EXTRA_THEME_TYPE, EXTRA_LIGHT_THEME);
|
||||||
switch (themeType) {
|
switch (themeType) {
|
||||||
case EXTRA_DARK_THEME:
|
case EXTRA_DARK_THEME:
|
||||||
setTitle(getString(R.string.customize_dark_theme_fragment_title));
|
setTitle(getString(R.string.customize_dark_theme_fragment_title));
|
||||||
@ -98,7 +106,6 @@ public class CustomizeThemeActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
customThemeLiveData.observe(this, customTheme -> {
|
customThemeLiveData.observe(this, customTheme -> {
|
||||||
ArrayList<CustomThemeSettingsItem> customThemeSettingsItems;
|
|
||||||
if (customTheme == null) {
|
if (customTheme == null) {
|
||||||
switch (themeType) {
|
switch (themeType) {
|
||||||
case EXTRA_DARK_THEME:
|
case EXTRA_DARK_THEME:
|
||||||
@ -130,17 +137,67 @@ public class CustomizeThemeActivity extends BaseActivity {
|
|||||||
adapter.setCustomThemeSettingsItem(customThemeSettingsItems);
|
adapter.setCustomThemeSettingsItem(customThemeSettingsItems);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
new GetCustomThemeAsyncTask(redditDataRoomDatabase, getIntent().getStringExtra(EXTRA_THEME_NAME),
|
themeName = getIntent().getStringExtra(EXTRA_THEME_NAME);
|
||||||
customTheme -> adapter.setCustomThemeSettingsItem(
|
setTitle(themeName);
|
||||||
CustomThemeSettingsItem.convertCustomThemeToSettingsItem(CustomizeThemeActivity.this, customTheme))).execute();
|
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
|
@Override
|
||||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
finish();
|
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 true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
@ -5,6 +5,8 @@ import androidx.room.ColumnInfo;
|
|||||||
import androidx.room.Entity;
|
import androidx.room.Entity;
|
||||||
import androidx.room.PrimaryKey;
|
import androidx.room.PrimaryKey;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
@Entity(tableName = "custom_themes")
|
@Entity(tableName = "custom_themes")
|
||||||
public class CustomTheme {
|
public class CustomTheme {
|
||||||
@PrimaryKey
|
@PrimaryKey
|
||||||
@ -151,4 +153,80 @@ public class CustomTheme {
|
|||||||
public CustomTheme(@NonNull String name) {
|
public CustomTheme(@NonNull String name) {
|
||||||
this.name = 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
10
app/src/main/res/menu/customize_theme_activity.xml
Normal file
10
app/src/main/res/menu/customize_theme_activity.xml
Normal file
@ -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>
|
Loading…
x
Reference in New Issue
Block a user