mirror of
https://github.com/Docile-Alligator/Infinity-For-Reddit.git
synced 2026-02-05 20:45:26 +00:00
Check and update Material You themes on app start.
This commit is contained in:
@ -2,6 +2,8 @@ package ml.docilealligator.infinityforreddit;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Application;
|
||||
import android.app.WallpaperColors;
|
||||
import android.app.WallpaperManager;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.SharedPreferences;
|
||||
@ -9,6 +11,8 @@ import android.graphics.Typeface;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.Toast;
|
||||
|
||||
@ -26,18 +30,22 @@ import com.livefront.bridge.SavedStateHandler;
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import ml.docilealligator.infinityforreddit.activities.LockScreenActivity;
|
||||
import ml.docilealligator.infinityforreddit.broadcastreceivers.NetworkWifiStatusReceiver;
|
||||
import ml.docilealligator.infinityforreddit.broadcastreceivers.WallpaperChangeReceiver;
|
||||
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
||||
import ml.docilealligator.infinityforreddit.events.ChangeAppLockEvent;
|
||||
import ml.docilealligator.infinityforreddit.events.ChangeNetworkStatusEvent;
|
||||
import ml.docilealligator.infinityforreddit.events.ToggleSecureModeEvent;
|
||||
import ml.docilealligator.infinityforreddit.font.ContentFontFamily;
|
||||
import ml.docilealligator.infinityforreddit.font.FontFamily;
|
||||
import ml.docilealligator.infinityforreddit.font.TitleFontFamily;
|
||||
import ml.docilealligator.infinityforreddit.utils.MaterialYouUtils;
|
||||
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
||||
import ml.docilealligator.infinityforreddit.utils.Utils;
|
||||
|
||||
@ -57,6 +65,24 @@ public class Infinity extends Application implements LifecycleObserver {
|
||||
@Inject
|
||||
@Named("security")
|
||||
SharedPreferences mSecuritySharedPreferences;
|
||||
@Inject
|
||||
@Named("internal")
|
||||
SharedPreferences mInternalSharedPreferences;
|
||||
@Inject
|
||||
@Named("light_theme")
|
||||
SharedPreferences lightThemeSharedPreferences;
|
||||
@Inject
|
||||
@Named("dark_theme")
|
||||
SharedPreferences darkThemeSharedPreferences;
|
||||
@Inject
|
||||
@Named("amoled_theme")
|
||||
SharedPreferences amoledThemeSharedPreferences;
|
||||
@Inject
|
||||
RedditDataRoomDatabase redditDataRoomDatabase;
|
||||
@Inject
|
||||
CustomThemeWrapper customThemeWrapper;
|
||||
@Inject
|
||||
Executor executor;
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
@ -165,6 +191,33 @@ public class Infinity extends Application implements LifecycleObserver {
|
||||
registerReceiver(mNetworkWifiStatusReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
|
||||
registerReceiver(new WallpaperChangeReceiver(mSharedPreferences), new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED));
|
||||
}
|
||||
|
||||
if (mSharedPreferences.getBoolean(SharedPreferencesUtils.ENABLE_MATERIAL_YOU, false)) {
|
||||
int sentryColor = mInternalSharedPreferences.getInt(SharedPreferencesUtils.MATERIAL_YOU_SENTRY_COLOR, 0);
|
||||
boolean sentryColorHasChanged = false;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||
if (sentryColor != getColor(android.R.color.system_accent1_100)) {
|
||||
sentryColorHasChanged = true;
|
||||
}
|
||||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
|
||||
WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
|
||||
WallpaperColors wallpaperColors = wallpaperManager.getWallpaperColors(WallpaperManager.FLAG_SYSTEM);
|
||||
|
||||
if (wallpaperColors != null) {
|
||||
int colorPrimaryInt = wallpaperColors.getPrimaryColor().toArgb();
|
||||
if (sentryColor != colorPrimaryInt) {
|
||||
sentryColorHasChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sentryColorHasChanged) {
|
||||
MaterialYouUtils.changeThemeASync(this, executor, new Handler(Looper.getMainLooper()),
|
||||
redditDataRoomDatabase, customThemeWrapper,
|
||||
lightThemeSharedPreferences, darkThemeSharedPreferences,
|
||||
amoledThemeSharedPreferences, mInternalSharedPreferences, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OnLifecycleEvent(Lifecycle.Event.ON_START)
|
||||
|
||||
@ -11,6 +11,7 @@ import android.content.res.Configuration;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
|
||||
import androidx.appcompat.app.AppCompatDelegate;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
@ -60,6 +61,9 @@ public class ThemePreferenceFragment extends CustomFontPreferenceFragmentCompat
|
||||
@Inject
|
||||
RedditDataRoomDatabase redditDataRoomDatabase;
|
||||
@Inject
|
||||
@Named("internal")
|
||||
SharedPreferences mInternalSharedPreferences;
|
||||
@Inject
|
||||
CustomThemeWrapper customThemeWrapper;
|
||||
@Inject
|
||||
Executor executor;
|
||||
@ -175,10 +179,10 @@ public class ThemePreferenceFragment extends CustomFontPreferenceFragmentCompat
|
||||
|
||||
enableMaterialYouSwitchPreference.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
if ((Boolean) newValue) {
|
||||
MaterialYouUtils.changeThemeASync(activity, executor, new Handler(),
|
||||
MaterialYouUtils.changeThemeASync(activity, executor, new Handler(Looper.getMainLooper()),
|
||||
redditDataRoomDatabase, customThemeWrapper,
|
||||
lightThemeSharedPreferences, darkThemeSharedPreferences,
|
||||
amoledThemeSharedPreferences, null);
|
||||
amoledThemeSharedPreferences, mInternalSharedPreferences, null);
|
||||
applyMaterialYouPreference.setVisible(true);
|
||||
} else {
|
||||
applyMaterialYouPreference.setVisible(false);
|
||||
@ -187,10 +191,10 @@ public class ThemePreferenceFragment extends CustomFontPreferenceFragmentCompat
|
||||
});
|
||||
|
||||
applyMaterialYouPreference.setOnPreferenceClickListener(preference -> {
|
||||
MaterialYouUtils.changeThemeASync(activity, executor, new Handler(),
|
||||
MaterialYouUtils.changeThemeASync(activity, executor, new Handler(Looper.getMainLooper()),
|
||||
redditDataRoomDatabase, customThemeWrapper,
|
||||
lightThemeSharedPreferences, darkThemeSharedPreferences,
|
||||
amoledThemeSharedPreferences, null);
|
||||
amoledThemeSharedPreferences, mInternalSharedPreferences, null);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
@ -41,15 +41,17 @@ public class MaterialYouUtils {
|
||||
}
|
||||
|
||||
public static void changeThemeSync(Context context,
|
||||
RedditDataRoomDatabase redditDataRoomDatabase,
|
||||
CustomThemeWrapper customThemeWrapper,
|
||||
SharedPreferences lightThemeSharedPreferences,
|
||||
SharedPreferences darkThemeSharedPreferences,
|
||||
SharedPreferences amoledThemeSharedPreferences) {
|
||||
RedditDataRoomDatabase redditDataRoomDatabase,
|
||||
CustomThemeWrapper customThemeWrapper,
|
||||
SharedPreferences lightThemeSharedPreferences,
|
||||
SharedPreferences darkThemeSharedPreferences,
|
||||
SharedPreferences amoledThemeSharedPreferences,
|
||||
SharedPreferences internalSharedPreferences) {
|
||||
try {
|
||||
Thread.sleep(2000);
|
||||
} catch (InterruptedException ignored) { }
|
||||
if (changeTheme(context, redditDataRoomDatabase, customThemeWrapper, lightThemeSharedPreferences, darkThemeSharedPreferences, amoledThemeSharedPreferences)) {
|
||||
} catch (InterruptedException ignored) {
|
||||
}
|
||||
if (changeTheme(context, redditDataRoomDatabase, customThemeWrapper, lightThemeSharedPreferences, darkThemeSharedPreferences, amoledThemeSharedPreferences, internalSharedPreferences)) {
|
||||
EventBus.getDefault().post(new RecreateActivityEvent());
|
||||
}
|
||||
}
|
||||
@ -60,12 +62,13 @@ public class MaterialYouUtils {
|
||||
SharedPreferences lightThemeSharedPreferences,
|
||||
SharedPreferences darkThemeSharedPreferences,
|
||||
SharedPreferences amoledThemeSharedPreferences,
|
||||
SharedPreferences internalSharedPreferences,
|
||||
@Nullable MaterialYouListener materialYouListener) {
|
||||
executor.execute(() -> {
|
||||
try {
|
||||
Thread.sleep(2000);
|
||||
} catch (InterruptedException ignored) { }
|
||||
if (changeTheme(context, redditDataRoomDatabase, customThemeWrapper, lightThemeSharedPreferences, darkThemeSharedPreferences, amoledThemeSharedPreferences)) {
|
||||
if (changeTheme(context, redditDataRoomDatabase, customThemeWrapper, lightThemeSharedPreferences, darkThemeSharedPreferences, amoledThemeSharedPreferences, internalSharedPreferences)) {
|
||||
handler.post(() -> {
|
||||
if (materialYouListener != null) {
|
||||
materialYouListener.applied();
|
||||
@ -77,11 +80,12 @@ public class MaterialYouUtils {
|
||||
}
|
||||
|
||||
private static boolean changeTheme(Context context,
|
||||
RedditDataRoomDatabase redditDataRoomDatabase,
|
||||
CustomThemeWrapper customThemeWrapper,
|
||||
SharedPreferences lightThemeSharedPreferences,
|
||||
SharedPreferences darkThemeSharedPreferences,
|
||||
SharedPreferences amoledThemeSharedPreferences) {
|
||||
RedditDataRoomDatabase redditDataRoomDatabase,
|
||||
CustomThemeWrapper customThemeWrapper,
|
||||
SharedPreferences lightThemeSharedPreferences,
|
||||
SharedPreferences darkThemeSharedPreferences,
|
||||
SharedPreferences amoledThemeSharedPreferences,
|
||||
SharedPreferences internalSharedPreferences) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||
CustomTheme lightTheme = CustomThemeWrapper.getIndigo(context);
|
||||
CustomTheme darkTheme = CustomThemeWrapper.getIndigoDark(context);
|
||||
@ -165,6 +169,8 @@ public class MaterialYouUtils {
|
||||
CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(darkTheme, darkThemeSharedPreferences);
|
||||
CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(amoledTheme, amoledThemeSharedPreferences);
|
||||
|
||||
internalSharedPreferences.edit().putInt(SharedPreferencesUtils.MATERIAL_YOU_SENTRY_COLOR, context.getColor(android.R.color.system_accent1_100)).apply();
|
||||
|
||||
return true;
|
||||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
|
||||
WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);
|
||||
@ -237,6 +243,8 @@ public class MaterialYouUtils {
|
||||
CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(darkTheme, darkThemeSharedPreferences);
|
||||
CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(amoledTheme, amoledThemeSharedPreferences);
|
||||
|
||||
internalSharedPreferences.edit().putInt(SharedPreferencesUtils.MATERIAL_YOU_SENTRY_COLOR, wallpaperColors.getPrimaryColor().toArgb()).apply();
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -426,6 +426,7 @@ public class SharedPreferencesUtils {
|
||||
public static final String INTERNAL_SHARED_PREFERENCES_FILE = "ml.docilealligator.infinityforreddit.internal";
|
||||
public static final String HAS_REQUESTED_NOTIFICATION_PERMISSION = "has_requested_notification_permission";
|
||||
public static final String DO_NOT_SHOW_REDDIT_API_INFO_V2_AGAIN = "do_not_show_reddit_api_info_v2_again";
|
||||
public static final String MATERIAL_YOU_SENTRY_COLOR = "material_you_sentry_color";
|
||||
|
||||
public static final String PROXY_SHARED_PREFERENCES_FILE = "ml.docilealligator.infinityforreddit.proxy";
|
||||
public static final String PROXY_ENABLED = "proxy_enabled";
|
||||
|
||||
@ -32,6 +32,9 @@ public class MaterialYouWorker extends Worker {
|
||||
@Named("amoled_theme")
|
||||
SharedPreferences amoledThemeSharedPreferences;
|
||||
@Inject
|
||||
@Named("internal")
|
||||
SharedPreferences mInternalSharedPreferences;
|
||||
@Inject
|
||||
RedditDataRoomDatabase redditDataRoomDatabase;
|
||||
@Inject
|
||||
CustomThemeWrapper customThemeWrapper;
|
||||
@ -49,7 +52,7 @@ public class MaterialYouWorker extends Worker {
|
||||
if (mSharedPreferences.getBoolean(SharedPreferencesUtils.ENABLE_MATERIAL_YOU, false)) {
|
||||
MaterialYouUtils.changeThemeSync(context, redditDataRoomDatabase,
|
||||
customThemeWrapper, lightThemeSharedPreferences, darkThemeSharedPreferences,
|
||||
amoledThemeSharedPreferences);
|
||||
amoledThemeSharedPreferences, mInternalSharedPreferences);
|
||||
}
|
||||
|
||||
return Result.success();
|
||||
|
||||
Reference in New Issue
Block a user