mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-12-29 04:17:12 +01:00
feat: "real" Material You implementation
This commit is contained in:
parent
efd5f61889
commit
7fcc1890fe
@ -1,7 +1,7 @@
|
|||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 30
|
compileSdkVersion 31
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "ml.docilealligator.infinityforreddit"
|
applicationId "ml.docilealligator.infinityforreddit"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
|
@ -15,6 +15,7 @@ import org.greenrobot.eventbus.EventBus;
|
|||||||
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
|
import ml.docilealligator.infinityforreddit.R;
|
||||||
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
|
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
|
||||||
import ml.docilealligator.infinityforreddit.customtheme.CustomTheme;
|
import ml.docilealligator.infinityforreddit.customtheme.CustomTheme;
|
||||||
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
||||||
@ -23,6 +24,7 @@ import ml.docilealligator.infinityforreddit.events.RecreateActivityEvent;
|
|||||||
public class MaterialYouUtils {
|
public class MaterialYouUtils {
|
||||||
public interface CheckThemeNameListener {
|
public interface CheckThemeNameListener {
|
||||||
void themeNotExists();
|
void themeNotExists();
|
||||||
|
|
||||||
void themeExists();
|
void themeExists();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,83 +50,92 @@ public class MaterialYouUtils {
|
|||||||
SharedPreferences amoledThemeSharedPreferences,
|
SharedPreferences amoledThemeSharedPreferences,
|
||||||
@Nullable MaterialYouListener materialYouListener) {
|
@Nullable MaterialYouListener materialYouListener) {
|
||||||
executor.execute(() -> {
|
executor.execute(() -> {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);
|
CustomTheme lightTheme = CustomThemeWrapper.getIndigo(context);
|
||||||
WallpaperColors wallpaperColors = wallpaperManager.getWallpaperColors(WallpaperManager.FLAG_SYSTEM);
|
CustomTheme darkTheme = CustomThemeWrapper.getIndigoDark(context);
|
||||||
|
CustomTheme amoledTheme = CustomThemeWrapper.getIndigoAmoled(context);
|
||||||
|
|
||||||
if (wallpaperColors != null) {
|
|
||||||
int colorPrimaryInt = lightenColor(wallpaperColors.getPrimaryColor().toArgb(), 0.4);
|
|
||||||
int colorPrimaryDarkInt = darkenColor(colorPrimaryInt, 0.3);
|
|
||||||
int backgroundColor = lightenColor(colorPrimaryInt, 0.2);
|
|
||||||
int cardViewBackgroundColor = lightenColor(colorPrimaryInt, 0.6);
|
|
||||||
Color colorAccent = wallpaperColors.getSecondaryColor();
|
|
||||||
int colorAccentInt = lightenColor(colorAccent == null ? customThemeWrapper.getColorAccent() : colorAccent.toArgb(), 0.4);
|
|
||||||
|
|
||||||
int colorPrimaryAppropriateTextColor = getAppropriateTextColor(colorPrimaryInt);
|
lightTheme.colorPrimary = context.getColor(android.R.color.system_accent1_300);
|
||||||
int backgroundColorAppropriateTextColor = getAppropriateTextColor(backgroundColor);
|
lightTheme.colorPrimaryDark = context.getColor(android.R.color.system_accent1_500);
|
||||||
|
lightTheme.colorAccent = context.getColor(android.R.color.system_accent3_300);
|
||||||
|
lightTheme.colorPrimaryLightTheme = context.getColor(android.R.color.system_accent1_200);
|
||||||
|
lightTheme.backgroundColor = context.getColor(android.R.color.system_neutral1_10);
|
||||||
|
lightTheme.cardViewBackgroundColor = context.getColor(android.R.color.system_neutral2_50);
|
||||||
|
lightTheme.commentBackgroundColor = context.getColor(android.R.color.system_neutral2_50);
|
||||||
|
lightTheme.awardedCommentBackgroundColor = context.getColor(android.R.color.system_neutral2_100);
|
||||||
|
lightTheme.bottomAppBarBackgroundColor = context.getColor(android.R.color.system_accent2_100);
|
||||||
|
lightTheme.navBarColor = context.getColor(android.R.color.system_neutral2_100);
|
||||||
|
lightTheme.primaryTextColor = context.getColor(android.R.color.system_neutral1_900);
|
||||||
|
lightTheme.secondaryTextColor = context.getColor(android.R.color.system_neutral1_900);
|
||||||
|
lightTheme.bottomAppBarIconColor = context.getColor(android.R.color.system_accent1_400);;
|
||||||
|
lightTheme.primaryIconColor = context.getColor(android.R.color.system_accent1_400);
|
||||||
|
lightTheme.fabIconColor = context.getColor(android.R.color.system_neutral1_10);
|
||||||
|
lightTheme.toolbarPrimaryTextAndIconColor = context.getColor(android.R.color.system_accent1_50);
|
||||||
|
lightTheme.toolbarSecondaryTextColor = context.getColor(android.R.color.system_accent3_50);
|
||||||
|
lightTheme.tabLayoutWithCollapsedCollapsingToolbarTabIndicator = context.getColor(android.R.color.system_accent1_50);
|
||||||
|
lightTheme.tabLayoutWithCollapsedCollapsingToolbarTextColor = context.getColor(android.R.color.system_accent1_50);
|
||||||
|
lightTheme.tabLayoutWithCollapsedCollapsingToolbarTabBackground = context.getColor(android.R.color.system_accent1_50);
|
||||||
|
lightTheme.tabLayoutWithExpandedCollapsingToolbarTabBackground = context.getColor(android.R.color.system_accent1_50);
|
||||||
|
lightTheme.tabLayoutWithExpandedCollapsingToolbarTabIndicator = context.getColor(android.R.color.system_accent1_50);
|
||||||
|
lightTheme.tabLayoutWithExpandedCollapsingToolbarTextColor = context.getColor(android.R.color.system_accent1_50);
|
||||||
|
lightTheme.circularProgressBarBackground = context.getColor(android.R.color.system_accent1_10);
|
||||||
|
lightTheme.dividerColor = context.getColor(android.R.color.system_neutral1_100);
|
||||||
|
lightTheme.isLightStatusBar = false;
|
||||||
|
lightTheme.isChangeStatusBarIconColorAfterToolbarCollapsedInImmersiveInterface = false;
|
||||||
|
lightTheme.name = "Material You";
|
||||||
|
|
||||||
CustomTheme lightTheme = CustomThemeWrapper.getIndigo(context);
|
darkTheme.colorPrimary = context.getColor(android.R.color.system_accent1_100);
|
||||||
CustomTheme darkTheme = CustomThemeWrapper.getIndigoDark(context);
|
darkTheme.colorPrimaryDark = context.getColor(android.R.color.system_accent1_300);
|
||||||
CustomTheme amoledTheme = CustomThemeWrapper.getIndigoAmoled(context);
|
darkTheme.colorAccent = context.getColor(android.R.color.system_accent3_100);
|
||||||
|
darkTheme.colorPrimaryLightTheme = context.getColor(android.R.color.system_accent1_100);
|
||||||
|
darkTheme.backgroundColor = context.getColor(android.R.color.system_neutral1_900);
|
||||||
|
darkTheme.cardViewBackgroundColor = context.getColor(android.R.color.system_neutral2_800);
|
||||||
|
darkTheme.commentBackgroundColor = context.getColor(android.R.color.system_neutral2_800);
|
||||||
|
darkTheme.awardedCommentBackgroundColor = context.getColor(android.R.color.system_neutral2_800);
|
||||||
|
darkTheme.bottomAppBarBackgroundColor = context.getColor(android.R.color.system_accent2_800);
|
||||||
|
darkTheme.navBarColor = context.getColor(android.R.color.system_neutral2_800);
|
||||||
|
darkTheme.primaryTextColor = context.getColor(android.R.color.system_neutral1_10);
|
||||||
|
darkTheme.secondaryTextColor = context.getColor(android.R.color.system_neutral1_10);
|
||||||
|
darkTheme.bottomAppBarIconColor = context.getColor(android.R.color.system_accent1_100);;
|
||||||
|
darkTheme.primaryIconColor = context.getColor(android.R.color.system_accent1_100);
|
||||||
|
darkTheme.fabIconColor = context.getColor(android.R.color.system_neutral1_900);
|
||||||
|
darkTheme.toolbarPrimaryTextAndIconColor = context.getColor(android.R.color.system_accent1_900);
|
||||||
|
darkTheme.toolbarSecondaryTextColor = context.getColor(android.R.color.system_accent3_900);
|
||||||
|
darkTheme.tabLayoutWithCollapsedCollapsingToolbarTabIndicator = context.getColor(android.R.color.system_accent1_800);
|
||||||
|
darkTheme.tabLayoutWithCollapsedCollapsingToolbarTextColor = context.getColor(android.R.color.system_accent1_800);
|
||||||
|
darkTheme.tabLayoutWithCollapsedCollapsingToolbarTabBackground = context.getColor(android.R.color.system_accent1_800);
|
||||||
|
darkTheme.tabLayoutWithExpandedCollapsingToolbarTabBackground = context.getColor(android.R.color.system_accent1_800);
|
||||||
|
darkTheme.tabLayoutWithExpandedCollapsingToolbarTabIndicator = context.getColor(android.R.color.system_accent1_800);
|
||||||
|
darkTheme.tabLayoutWithExpandedCollapsingToolbarTextColor = context.getColor(android.R.color.system_accent1_800);
|
||||||
|
darkTheme.circularProgressBarBackground = context.getColor(android.R.color.system_accent1_900);
|
||||||
|
darkTheme.dividerColor = context.getColor(android.R.color.system_neutral1_600);
|
||||||
|
darkTheme.isLightStatusBar = true;
|
||||||
|
darkTheme.isChangeStatusBarIconColorAfterToolbarCollapsedInImmersiveInterface = true;
|
||||||
|
darkTheme.name = "Material You Dark";
|
||||||
|
|
||||||
lightTheme.colorPrimary = colorPrimaryInt;
|
amoledTheme.colorAccent = context.getColor(android.R.color.system_accent1_100);
|
||||||
lightTheme.colorPrimaryDark = colorPrimaryDarkInt;
|
amoledTheme.colorPrimaryLightTheme = context.getColor(android.R.color.system_accent3_100);
|
||||||
lightTheme.colorAccent = colorAccentInt;
|
amoledTheme.name = "Material You Amoled";
|
||||||
lightTheme.colorPrimaryLightTheme = colorPrimaryInt;
|
|
||||||
lightTheme.backgroundColor = backgroundColor;
|
|
||||||
lightTheme.cardViewBackgroundColor = cardViewBackgroundColor;
|
|
||||||
lightTheme.commentBackgroundColor = cardViewBackgroundColor;
|
|
||||||
lightTheme.awardedCommentBackgroundColor = cardViewBackgroundColor;
|
|
||||||
lightTheme.bottomAppBarBackgroundColor = colorPrimaryInt;
|
|
||||||
lightTheme.navBarColor = colorPrimaryInt;
|
|
||||||
lightTheme.primaryTextColor = backgroundColorAppropriateTextColor;
|
|
||||||
lightTheme.secondaryTextColor = backgroundColorAppropriateTextColor == Color.BLACK ? Color.parseColor("#8A000000") : Color.parseColor("#B3FFFFFF");
|
|
||||||
lightTheme.bottomAppBarIconColor = colorPrimaryAppropriateTextColor;
|
|
||||||
lightTheme.primaryIconColor = backgroundColorAppropriateTextColor;
|
|
||||||
lightTheme.fabIconColor = colorPrimaryAppropriateTextColor;
|
|
||||||
lightTheme.toolbarPrimaryTextAndIconColor = colorPrimaryAppropriateTextColor;
|
|
||||||
lightTheme.toolbarSecondaryTextColor = colorPrimaryAppropriateTextColor;
|
|
||||||
lightTheme.tabLayoutWithCollapsedCollapsingToolbarTabIndicator = colorPrimaryAppropriateTextColor;
|
|
||||||
lightTheme.tabLayoutWithCollapsedCollapsingToolbarTextColor = colorPrimaryAppropriateTextColor;
|
|
||||||
lightTheme.tabLayoutWithCollapsedCollapsingToolbarTabBackground = colorPrimaryInt;
|
|
||||||
lightTheme.tabLayoutWithExpandedCollapsingToolbarTabBackground = colorPrimaryInt;
|
|
||||||
lightTheme.tabLayoutWithExpandedCollapsingToolbarTabIndicator = colorPrimaryAppropriateTextColor;
|
|
||||||
lightTheme.tabLayoutWithExpandedCollapsingToolbarTextColor = colorPrimaryAppropriateTextColor;
|
|
||||||
lightTheme.circularProgressBarBackground = colorPrimaryInt;
|
|
||||||
lightTheme.dividerColor = backgroundColorAppropriateTextColor == Color.BLACK ? Color.parseColor("#E0E0E0") : Color.parseColor("69666C");
|
|
||||||
lightTheme.isLightStatusBar = colorPrimaryAppropriateTextColor == Color.BLACK;
|
|
||||||
lightTheme.isChangeStatusBarIconColorAfterToolbarCollapsedInImmersiveInterface =
|
|
||||||
(lightTheme.isLightStatusBar && getAppropriateTextColor(cardViewBackgroundColor) == Color.WHITE)
|
|
||||||
|| (!lightTheme.isLightStatusBar && getAppropriateTextColor(cardViewBackgroundColor) == Color.BLACK);
|
|
||||||
lightTheme.name = "Material You";
|
|
||||||
|
|
||||||
darkTheme.colorAccent = colorPrimaryInt;
|
redditDataRoomDatabase.customThemeDao().unsetLightTheme();
|
||||||
darkTheme.colorPrimaryLightTheme = colorPrimaryInt;
|
redditDataRoomDatabase.customThemeDao().unsetDarkTheme();
|
||||||
darkTheme.name = "Material You Dark";
|
redditDataRoomDatabase.customThemeDao().unsetAmoledTheme();
|
||||||
|
|
||||||
amoledTheme.colorAccent = colorPrimaryInt;
|
redditDataRoomDatabase.customThemeDao().insert(lightTheme);
|
||||||
amoledTheme.colorPrimaryLightTheme = colorPrimaryInt;
|
redditDataRoomDatabase.customThemeDao().insert(darkTheme);
|
||||||
amoledTheme.name = "Material You Amoled";
|
redditDataRoomDatabase.customThemeDao().insert(amoledTheme);
|
||||||
|
|
||||||
redditDataRoomDatabase.customThemeDao().unsetLightTheme();
|
CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(lightTheme, lightThemeSharedPreferences);
|
||||||
redditDataRoomDatabase.customThemeDao().unsetDarkTheme();
|
CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(darkTheme, darkThemeSharedPreferences);
|
||||||
redditDataRoomDatabase.customThemeDao().unsetAmoledTheme();
|
CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(amoledTheme, amoledThemeSharedPreferences);
|
||||||
|
|
||||||
redditDataRoomDatabase.customThemeDao().insert(lightTheme);
|
|
||||||
redditDataRoomDatabase.customThemeDao().insert(darkTheme);
|
|
||||||
redditDataRoomDatabase.customThemeDao().insert(amoledTheme);
|
|
||||||
|
|
||||||
CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(lightTheme, lightThemeSharedPreferences);
|
handler.post(() -> {
|
||||||
CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(darkTheme, darkThemeSharedPreferences);
|
if (materialYouListener != null) {
|
||||||
CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(amoledTheme, amoledThemeSharedPreferences);
|
materialYouListener.applied();
|
||||||
|
}
|
||||||
handler.post(() -> {
|
EventBus.getDefault().post(new RecreateActivityEvent());
|
||||||
if (materialYouListener != null) {
|
});
|
||||||
materialYouListener.applied();
|
|
||||||
}
|
|
||||||
EventBus.getDefault().post(new RecreateActivityEvent());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user