diff --git a/app/build.gradle b/app/build.gradle index 4d754614..ef25367b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,7 +7,7 @@ android { applicationId "org.meowcat.edxposed.manager" minSdkVersion 21 targetSdkVersion 27 - versionCode 45402 + versionCode 45403 versionName "4.5.4" } buildTypes { @@ -32,8 +32,8 @@ dependencies { implementation "com.github.topjohnwu.libsu:core:2.5.0" implementation 'androidx.browser:browser:1.2.0' implementation 'com.timehop.stickyheadersrecyclerview:library:0.4.3@aar' - implementation 'moe.shizuku.preference:preference-appcompat:4.1.0-alpha02' - implementation 'moe.shizuku.preference:preference-simplemenu-appcompat:4.1.0-alpha02' + implementation 'com.takisoft.preferencex:preferencex:1.1.0' + implementation 'com.takisoft.preferencex:preferencex-simplemenu:1.1.0' implementation "androidx.recyclerview:recyclerview:1.2.0-alpha01" implementation 'com.annimon:stream:1.2.0' implementation 'com.google.code.gson:gson:2.8.6' diff --git a/app/src/main/java/org/meowcat/edxposed/manager/DownloadDetailsSettingsFragment.java b/app/src/main/java/org/meowcat/edxposed/manager/DownloadDetailsSettingsFragment.java index aadede2f..bb06d323 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/DownloadDetailsSettingsFragment.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/DownloadDetailsSettingsFragment.java @@ -4,20 +4,21 @@ import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; +import androidx.preference.PreferenceManager; + +import com.takisoft.preferencex.PreferenceFragmentCompat; + import org.meowcat.edxposed.manager.repo.Module; import org.meowcat.edxposed.manager.util.PrefixedSharedPreferences; import org.meowcat.edxposed.manager.util.RepoLoader; import java.util.Map; -import moe.shizuku.preference.PreferenceFragment; -import moe.shizuku.preference.PreferenceManager; - -public class DownloadDetailsSettingsFragment extends PreferenceFragment { +public class DownloadDetailsSettingsFragment extends PreferenceFragmentCompat { @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + public void onCreatePreferencesFix(Bundle savedInstanceState, String rootKey) { DownloadDetailsActivity mActivity = (DownloadDetailsActivity) getActivity(); if (mActivity == null) { return; diff --git a/app/src/main/java/org/meowcat/edxposed/manager/SettingsActivity.java b/app/src/main/java/org/meowcat/edxposed/manager/SettingsActivity.java index 3d5ed91d..08f24114 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/SettingsActivity.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/SettingsActivity.java @@ -8,6 +8,7 @@ import android.os.Bundle; import android.os.FileUtils; import android.view.View; import android.widget.FrameLayout; +import android.widget.LinearLayout; import android.widget.Toast; import androidx.annotation.NonNull; @@ -15,8 +16,11 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatDelegate; import androidx.appcompat.widget.Toolbar; +import androidx.preference.Preference; +import androidx.preference.SwitchPreference; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import com.takisoft.preferencex.PreferenceFragmentCompat; import com.topjohnwu.superuser.Shell; import org.meowcat.edxposed.manager.util.RepoLoader; @@ -27,10 +31,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.util.Objects; -import moe.shizuku.preference.Preference; -import moe.shizuku.preference.PreferenceFragment; -import moe.shizuku.preference.SwitchPreference; - public class SettingsActivity extends BaseActivity { @Override @@ -47,13 +47,13 @@ public class SettingsActivity extends BaseActivity { setupWindowInsets(); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() - .add(R.id.container, new SettingsFragment()).commit(); + .add(R.id.container, SettingsFragment.newInstance(findViewById(R.id.snackbar))).commit(); } } @SuppressWarnings({"ResultOfMethodCallIgnored", "deprecation"}) - public static class SettingsFragment extends PreferenceFragment implements Preference.OnPreferenceClickListener, SharedPreferences.OnSharedPreferenceChangeListener { + public static class SettingsFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceClickListener, SharedPreferences.OnSharedPreferenceChangeListener { static final File mDisableResourcesFlag = new File(XposedApp.BASE_DIR + "conf/disable_resources"); static final File mDynamicModulesFlag = new File(XposedApp.BASE_DIR + "conf/dynamicmodules"); static final File mDeoptBootFlag = new File(XposedApp.BASE_DIR + "conf/deoptbootimage"); @@ -63,10 +63,16 @@ public class SettingsActivity extends BaseActivity { static final File mDisableModulesLogsFlag = new File(XposedApp.BASE_DIR + "conf/disable_modules_log"); static final File mVerboseLogProcessID = new File(XposedApp.BASE_DIR + "log/all.pid"); static final File mModulesLogProcessID = new File(XposedApp.BASE_DIR + "log/error.pid"); - + View rootView; private Preference stopVerboseLog; private Preference stopLog; + static SettingsFragment newInstance(View rootView) { + SettingsFragment fragment = new SettingsFragment(); + fragment.setRootView(rootView); + return fragment; + } + @SuppressWarnings("SameParameterValue") @SuppressLint({"WorldReadableFiles", "WorldWriteableFiles"}) static void setFilePermissionsFromMode(String name, int mode) { @@ -81,9 +87,13 @@ public class SettingsActivity extends BaseActivity { FileUtils.setPermissions(name, perms, -1, -1); } + void setRootView(View rootView) { + this.rootView = rootView; + } + @SuppressLint({"ObsoleteSdkInt", "WorldReadableFiles"}) @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + public void onCreatePreferencesFix(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.prefs); stopVerboseLog = findPreference("stop_verbose_log"); @@ -94,7 +104,7 @@ public class SettingsActivity extends BaseActivity { return true; }); - SwitchPreference prefWhiteListMode = (SwitchPreference) findPreference("white_list_switch"); + SwitchPreference prefWhiteListMode = findPreference("white_list_switch"); Objects.requireNonNull(prefWhiteListMode).setChecked(mWhiteListModeFlag.exists()); prefWhiteListMode.setOnPreferenceChangeListener((preference, newValue) -> { boolean enabled = (Boolean) newValue; @@ -125,7 +135,7 @@ public class SettingsActivity extends BaseActivity { return (enabled == mWhiteListModeFlag.exists()); }); - SwitchPreference prefVerboseLogs = (SwitchPreference) findPreference("disable_verbose_log"); + SwitchPreference prefVerboseLogs = findPreference("disable_verbose_log"); Objects.requireNonNull(prefVerboseLogs).setChecked(mDisableVerboseLogsFlag.exists()); prefVerboseLogs.setOnPreferenceChangeListener((preference, newValue) -> { boolean enabled = (Boolean) newValue; @@ -156,7 +166,7 @@ public class SettingsActivity extends BaseActivity { return (enabled == mDisableVerboseLogsFlag.exists()); }); - SwitchPreference prefModulesLogs = (SwitchPreference) findPreference("disable_modules_log"); + SwitchPreference prefModulesLogs = findPreference("disable_modules_log"); Objects.requireNonNull(prefModulesLogs).setChecked(mDisableModulesLogsFlag.exists()); prefModulesLogs.setOnPreferenceChangeListener((preference, newValue) -> { boolean enabled = (Boolean) newValue; @@ -187,7 +197,7 @@ public class SettingsActivity extends BaseActivity { return (enabled == mDisableModulesLogsFlag.exists()); }); - SwitchPreference prefBlackWhiteListMode = (SwitchPreference) findPreference("black_white_list_switch"); + SwitchPreference prefBlackWhiteListMode = findPreference("black_white_list_switch"); Objects.requireNonNull(prefBlackWhiteListMode).setChecked(mBlackWhiteListModeFlag.exists()); prefBlackWhiteListMode.setOnPreferenceChangeListener((preference, newValue) -> { boolean enabled = (Boolean) newValue; @@ -218,7 +228,7 @@ public class SettingsActivity extends BaseActivity { return (enabled == mBlackWhiteListModeFlag.exists()); }); - SwitchPreference prefEnableDeopt = (SwitchPreference) findPreference("enable_boot_image_deopt"); + SwitchPreference prefEnableDeopt = findPreference("enable_boot_image_deopt"); Objects.requireNonNull(prefEnableDeopt).setChecked(mDeoptBootFlag.exists()); prefEnableDeopt.setOnPreferenceChangeListener((preference, newValue) -> { boolean enabled = (Boolean) newValue; @@ -249,7 +259,7 @@ public class SettingsActivity extends BaseActivity { return (enabled == mDeoptBootFlag.exists()); }); - SwitchPreference prefDynamicResources = (SwitchPreference) findPreference("is_dynamic_modules"); + SwitchPreference prefDynamicResources = findPreference("is_dynamic_modules"); Objects.requireNonNull(prefDynamicResources).setChecked(mDynamicModulesFlag.exists()); prefDynamicResources.setOnPreferenceChangeListener((preference, newValue) -> { boolean enabled = (Boolean) newValue; @@ -280,7 +290,7 @@ public class SettingsActivity extends BaseActivity { return (enabled == mDynamicModulesFlag.exists()); }); - SwitchPreference prefDisableResources = (SwitchPreference) findPreference("disable_resources"); + SwitchPreference prefDisableResources = findPreference("disable_resources"); Objects.requireNonNull(prefDisableResources).setChecked(mDisableResourcesFlag.exists()); prefDisableResources.setOnPreferenceChangeListener((preference, newValue) -> { boolean enabled = (Boolean) newValue; @@ -337,12 +347,6 @@ public class SettingsActivity extends BaseActivity { getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); } - @Override - public DividerDecoration onCreateItemDecoration() { - return new CategoryDivideDividerDecoration(); - //return new DefaultDividerDecoration(); - } - @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.contains("theme") || key.equals("ignore_chinese")) { @@ -386,8 +390,14 @@ public class SettingsActivity extends BaseActivity { @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - ((FrameLayout) view).setClipChildren(false); - ((FrameLayout) view).setClipToPadding(false); + if (rootView == null) { + return; + } + //ActionBarShadowController.attachToRecyclerView((AppCompatActivity) getActivity(), getListView()); + ((LinearLayout) ((FrameLayout) rootView.findViewById(R.id.container)).getChildAt(0)).setClipToPadding(false); + ((LinearLayout) ((FrameLayout) rootView.findViewById(R.id.container)).getChildAt(0)).setClipChildren(false); + ((FrameLayout) ((LinearLayout) view).getChildAt(0)).setClipChildren(false); + ((FrameLayout) ((LinearLayout) view).getChildAt(0)).setClipToPadding(false); } } } diff --git a/app/src/main/java/org/meowcat/edxposed/manager/util/PrefixedSharedPreferences.java b/app/src/main/java/org/meowcat/edxposed/manager/util/PrefixedSharedPreferences.java index 9f0341e3..a8f6631b 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/util/PrefixedSharedPreferences.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/util/PrefixedSharedPreferences.java @@ -3,14 +3,14 @@ package org.meowcat.edxposed.manager.util; import android.annotation.SuppressLint; import android.content.SharedPreferences; +import androidx.preference.PreferenceManager; + import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import moe.shizuku.preference.PreferenceManager; - public class PrefixedSharedPreferences implements SharedPreferences { private final SharedPreferences mBase; private final String mPrefix; diff --git a/app/src/main/java/org/meowcat/edxposed/manager/widget/IntegerListPreference.java b/app/src/main/java/org/meowcat/edxposed/manager/widget/IntegerListPreference.java index db71a862..19f70165 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/widget/IntegerListPreference.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/widget/IntegerListPreference.java @@ -4,7 +4,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.util.AttributeSet; -import moe.shizuku.preference.SimpleMenuPreference; +import com.takisoft.preferencex.SimpleMenuPreference; public class IntegerListPreference extends SimpleMenuPreference { public IntegerListPreference(Context context) {