From c6d2a61652902363845f00f8f617cb1e2547db9e Mon Sep 17 00:00:00 2001 From: tarsin Date: Sat, 25 Jun 2022 18:32:48 +0800 Subject: [PATCH] Should not use rikka's appcompat * We need latest appcompat for materialSwitch --- app/build.gradle | 13 +--- .../com/hippo/ehviewer/EhApplication.java | 9 +-- .../com/hippo/ehviewer/ui/EhActivity.java | 77 +++++++++++-------- .../hippo/ehviewer/ui/GalleryActivity.java | 11 +-- .../ui/fragment/AdvancedFragment.java | 8 +- .../ehviewer/ui/fragment/EhFragment.java | 5 +- app/src/main/res/values/themes.xml | 1 - 7 files changed, 63 insertions(+), 61 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 81e1e6201..cf4a88394 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -93,9 +93,9 @@ tasks.withType(JavaCompile) { dependencies { implementation 'androidx.activity:activity:1.4.0' + implementation 'androidx.appcompat:appcompat:1.6.0-alpha05' implementation 'androidx.biometric:biometric-ktx:1.2.0-alpha04' implementation 'androidx.browser:browser:1.4.0' - implementation 'androidx.core:core:1.8.0' implementation 'androidx.fragment:fragment:1.4.1' implementation 'androidx.preference:preference:1.2.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' @@ -107,17 +107,12 @@ dependencies { implementation 'com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:1.0.0' implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.9' implementation 'com.takisoft.preferencex:preferencex:1.1.0' - implementation 'dev.rikka.rikkax.appcompat:appcompat:1.4.1' - implementation 'dev.rikka.rikkax.material:material:2.5.0' + implementation 'dev.rikka.rikkax.core:core-ktx:1.4.0' + implementation 'dev.rikka.rikkax.insets:insets:1.3.0' + implementation 'dev.rikka.rikkax.layoutinflater:layoutinflater:1.2.0' implementation 'dev.rikka.rikkax.preference:simplemenu-preference:1.0.3' implementation 'org.ccil.cowan.tagsoup:tagsoup:1.2.1' implementation 'org.greenrobot:greendao:3.3.0' implementation 'org.jsoup:jsoup:1.15.1' implementation projects.native } - -configurations.all { - resolutionStrategy { - exclude group: 'androidx.appcompat', module: 'appcompat' - } -} diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.java b/app/src/main/java/com/hippo/ehviewer/EhApplication.java index 8373ca656..144168a99 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.java +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.java @@ -35,7 +35,9 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatDelegate; import androidx.collection.LruCache; +import androidx.core.os.LocaleListCompat; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.hippo.Native; @@ -91,8 +93,6 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; -import rikka.material.app.DayNightDelegate; -import rikka.material.app.LocaleDelegate; public class EhApplication extends SceneApplication { @@ -336,9 +336,8 @@ public class EhApplication extends SceneApplication { EhDB.mergeOldDB(this); } - LocaleDelegate.setDefaultLocale(Settings.getLocale()); - DayNightDelegate.setApplicationContext(this); - DayNightDelegate.setDefaultNightMode(Settings.getTheme()); + AppCompatDelegate.setApplicationLocales(LocaleListCompat.create(Settings.getLocale())); + AppCompatDelegate.setDefaultNightMode(Settings.getTheme()); // Do io tasks in new thread //noinspection deprecation diff --git a/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java index aa3d8d880..b3be59b58 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java @@ -20,23 +20,25 @@ import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Color; +import android.os.Build; import android.os.Bundle; import android.view.Window; import android.view.WindowInsets; import android.view.WindowManager; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StyleRes; +import androidx.appcompat.app.AppCompatActivity; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; import rikka.core.res.ResourcesKt; -import rikka.material.app.MaterialActivity; +import rikka.insets.WindowInsetsHelper; +import rikka.layoutinflater.view.LayoutInflaterFactory; -public abstract class EhActivity extends MaterialActivity { +public abstract class EhActivity extends AppCompatActivity { private static final String THEME_DEFAULT = "DEFAULT"; private static final String THEME_BLACK = "BLACK"; @@ -55,16 +57,6 @@ public abstract class EhActivity extends MaterialActivity { return (configuration.uiMode & Configuration.UI_MODE_NIGHT_YES) > 0; } - @Override - public void onApplyUserThemeResource(@NonNull Resources.Theme theme, boolean isDecorView) { - theme.applyStyle(getThemeStyleRes(this), true); - } - - @Override - public String computeUserThemeKey() { - return getTheme(this); - } - @StyleRes public int getThemeStyleRes(Context context) { if (THEME_BLACK.equals(getTheme(context))) { @@ -73,9 +65,50 @@ public abstract class EhActivity extends MaterialActivity { return R.style.ThemeOverlay; } + @Override + protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) { + if (getParent() == null) { + theme.applyStyle(resid, true); + } else { + try { + theme.setTo(getParent().getTheme()); + } catch (Exception ignored) { + } + theme.applyStyle(resid, false); + } + theme.applyStyle(getThemeStyleRes(this), true); + super.onApplyThemeResource(theme, R.style.ThemeOverlay, first); + } + + @Override + protected void onNightModeChanged(int mode) { + getTheme().applyStyle(getThemeStyleRes(this), true); + } + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + getLayoutInflater().setFactory2((new LayoutInflaterFactory(getDelegate())).addOnViewCreatedListener(WindowInsetsHelper.getLISTENER())); super.onCreate(savedInstanceState); + + + Window window = getWindow(); + window.setStatusBarColor(Color.TRANSPARENT); + + window.getDecorView().post(() -> { + WindowInsets rootWindowInsets = window.getDecorView().getRootWindowInsets(); + if (rootWindowInsets != null && rootWindowInsets.getSystemWindowInsetBottom() >= Resources.getSystem().getDisplayMetrics().density * 40) { + window.setNavigationBarColor(ResourcesKt.resolveColor(getTheme(), android.R.attr.navigationBarColor) & 0x00ffffff | -0x20000000); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + window.setNavigationBarContrastEnforced(false); + } + } else { + window.setNavigationBarColor(Color.TRANSPARENT); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + window.setNavigationBarContrastEnforced(true); + } + } + }); + ((EhApplication) getApplication()).registerActivity(this); } @@ -95,22 +128,4 @@ public abstract class EhActivity extends MaterialActivity { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); } } - - @Override - public void onApplyTranslucentSystemBars() { - super.onApplyTranslucentSystemBars(); - Window window = getWindow(); - window.setStatusBarColor(Color.TRANSPARENT); - - window.getDecorView().post(() -> { - WindowInsets rootWindowInsets = window.getDecorView().getRootWindowInsets(); - if (rootWindowInsets != null && rootWindowInsets.getSystemWindowInsetBottom() >= Resources.getSystem().getDisplayMetrics().density * 40) { - window.setNavigationBarColor(ResourcesKt.resolveColor(getTheme(), android.R.attr.navigationBarColor) & 0x00ffffff | -0x20000000); - window.setNavigationBarContrastEnforced(false); - } else { - window.setNavigationBarColor(Color.TRANSPARENT); - window.setNavigationBarContrastEnforced(true); - } - }); - } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index 3c71182fb..4ff1aa418 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -57,6 +57,7 @@ import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatDelegate; import androidx.core.content.ContextCompat; import androidx.core.content.FileProvider; import androidx.core.view.ViewCompat; @@ -105,7 +106,6 @@ import java.io.OutputStream; import rikka.core.res.ConfigurationKt; import rikka.core.res.ResourcesKt; -import rikka.material.app.DayNightDelegate; public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChangeListener, GalleryView.Listener { @@ -289,10 +289,10 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan protected void attachBaseContext(@NonNull Context newBase) { switch (Settings.getReadTheme()) { case 1: - getDayNightDelegate().setLocalNightMode(DayNightDelegate.MODE_NIGHT_YES, false); + getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES); break; case 2: - getDayNightDelegate().setLocalNightMode(DayNightDelegate.MODE_NIGHT_NO, false); + getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO); break; } super.attachBaseContext(newBase); @@ -307,11 +307,6 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan mSavingPage = -1; }); - @Override - public boolean respectDefaultNightMode() { - return Settings.getReadTheme() == 0; - } - @Override @SuppressWarnings({"WrongConstant"}) protected void onCreate(@Nullable Bundle savedInstanceState) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java index aa4e41aa2..bde748e57 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java @@ -27,6 +27,8 @@ import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatDelegate; +import androidx.core.os.LocaleListCompat; import androidx.preference.Preference; import com.google.android.material.dialog.MaterialAlertDialogBuilder; @@ -54,8 +56,6 @@ import java.util.Locale; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -import rikka.material.app.LocaleDelegate; - public class AdvancedFragment extends BasePreferenceFragment { private static final String KEY_DUMP_LOGCAT = "dump_logcat"; @@ -291,9 +291,9 @@ public class AdvancedFragment extends BasePreferenceFragment { String key = preference.getKey(); if (KEY_APP_LANGUAGE.equals(key)) { if ("system".equals(newValue)) { - LocaleDelegate.setDefaultLocale(LocaleDelegate.getSystemLocale()); + AppCompatDelegate.setApplicationLocales(LocaleListCompat.getDefault()); } else { - LocaleDelegate.setDefaultLocale(Locale.forLanguageTag((String) newValue)); + AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags((String) newValue)); } requireActivity().recreate(); return true; diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/EhFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/EhFragment.java index 789e720fd..40a8857e8 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/EhFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/EhFragment.java @@ -21,14 +21,13 @@ import android.content.res.Configuration; import android.os.Bundle; import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatDelegate; import androidx.preference.Preference; import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; import com.hippo.ehviewer.client.EhTagDatabase; -import rikka.material.app.DayNightDelegate; - public class EhFragment extends BasePreferenceFragment { @Override @@ -62,7 +61,7 @@ public class EhFragment extends BasePreferenceFragment { public boolean onPreferenceChange(Preference preference, Object newValue) { String key = preference.getKey(); if (Settings.KEY_THEME.equals(key)) { - DayNightDelegate.setDefaultNightMode(Integer.parseInt((String) newValue)); + AppCompatDelegate.setDefaultNightMode(Integer.parseInt((String) newValue)); requireActivity().recreate(); return true; } else if (Settings.KEY_GALLERY_SITE.equals(key)) { diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 1112df9bc..07164bd93 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -40,7 +40,6 @@