From 03f6ecac0e4459187b293179b0b9339952f33270 Mon Sep 17 00:00:00 2001 From: NekoInverter <42698724+NekoInverter@users.noreply.github.com> Date: Tue, 4 Feb 2020 14:39:28 +0800 Subject: [PATCH] \ Rikka / --- app/build.gradle | 4 +- .../DownloadDetailsSettingsFragment.java | 11 +- .../edxposed/manager/ModulesActivity.java | 20 +-- .../edxposed/manager/SettingsActivity.java | 62 ++++----- .../edxposed/manager/adapters/AppAdapter.java | 15 +-- .../util/PrefixedSharedPreferences.java | 4 +- .../manager/widget/IntegerListPreference.java | 4 +- app/src/main/res/layout/item_module.xml | 123 ++++++------------ app/src/main/res/values-zh-rCN/strings.xml | 5 +- app/src/main/res/values/strings.xml | 3 +- app/src/main/res/values/styles.xml | 1 + build.gradle | 3 + 12 files changed, 94 insertions(+), 161 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 810b90c6..4d754614 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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 'com.takisoft.preferencex:preferencex:1.1.0' - implementation 'com.takisoft.preferencex:preferencex-simplemenu:1.1.0' + implementation 'moe.shizuku.preference:preference-appcompat:4.1.0-alpha02' + implementation 'moe.shizuku.preference:preference-simplemenu-appcompat:4.1.0-alpha02' 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 bb06d323..aadede2f 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/DownloadDetailsSettingsFragment.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/DownloadDetailsSettingsFragment.java @@ -4,21 +4,20 @@ 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; -public class DownloadDetailsSettingsFragment extends PreferenceFragmentCompat { +import moe.shizuku.preference.PreferenceFragment; +import moe.shizuku.preference.PreferenceManager; + +public class DownloadDetailsSettingsFragment extends PreferenceFragment { @Override - public void onCreatePreferencesFix(Bundle savedInstanceState, String rootKey) { + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { DownloadDetailsActivity mActivity = (DownloadDetailsActivity) getActivity(); if (mActivity == null) { return; diff --git a/app/src/main/java/org/meowcat/edxposed/manager/ModulesActivity.java b/app/src/main/java/org/meowcat/edxposed/manager/ModulesActivity.java index 768e63c3..a8acab40 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/ModulesActivity.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/ModulesActivity.java @@ -60,12 +60,10 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; -import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.Set; @@ -80,7 +78,7 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi private SearchView mSearchView; private SearchView.OnQueryTextListener mSearchListener; private PackageManager mPm; - private DateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); + private DateFormat dateformat = DateFormat.getDateInstance(DateFormat.SHORT); private ModuleUtil mModuleUtil; private ModuleAdapter mAdapter = null; private MenuItem mClickedMenuItem = null; @@ -533,13 +531,9 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi packageTv.setText(item.packageName); packageTv.setSelected(true); - TextView installTimeTv = holder.appInstallTime; - installTimeTv.setText(dateformat.format(new Date(item.installTime))); - installTimeTv.setSelected(true); - - TextView updateTv = holder.appUpdateTime; - updateTv.setText(dateformat.format(new Date(item.updateTime))); - updateTv.setSelected(true); + String creationDate = dateformat.format(new Date(item.installTime)); + String updateDate = dateformat.format(new Date(item.updateTime)); + holder.timestamps.setText(getString(R.string.install_timestamps, creationDate, updateDate)); holder.appIcon.setImageDrawable(item.getIcon()); @@ -620,8 +614,7 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi TextView appPackage; TextView appDescription; TextView appVersion; - TextView appInstallTime; - TextView appUpdateTime; + TextView timestamps; TextView warningText; Switch mSwitch; @@ -632,8 +625,7 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi appDescription = itemView.findViewById(R.id.description); appPackage = itemView.findViewById(R.id.package_name); appVersion = itemView.findViewById(R.id.version_name); - appInstallTime = itemView.findViewById(R.id.tvInstallTime); - appUpdateTime = itemView.findViewById(R.id.tvUpdateTime); + timestamps = itemView.findViewById(R.id.timestamps); warningText = itemView.findViewById(R.id.warning); mSwitch = itemView.findViewById(R.id.checkbox); } 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 ea6fd67e..3d5ed91d 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/SettingsActivity.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/SettingsActivity.java @@ -8,7 +8,6 @@ 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; @@ -16,11 +15,8 @@ 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; @@ -31,6 +27,10 @@ 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, SettingsFragment.newInstance(findViewById(R.id.snackbar))).commit(); + .add(R.id.container, new SettingsFragment()).commit(); } } @SuppressWarnings({"ResultOfMethodCallIgnored", "deprecation"}) - public static class SettingsFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceClickListener, SharedPreferences.OnSharedPreferenceChangeListener { + public static class SettingsFragment extends PreferenceFragment 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"); @@ -67,14 +67,6 @@ public class SettingsActivity extends BaseActivity { private Preference stopVerboseLog; private Preference stopLog; - private View rootView; - - 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) { @@ -89,25 +81,20 @@ public class SettingsActivity extends BaseActivity { FileUtils.setPermissions(name, perms, -1, -1); } - void setRootView(View rootView) { - this.rootView = rootView; - } - @SuppressLint({"ObsoleteSdkInt", "WorldReadableFiles"}) @Override - public void onCreatePreferencesFix(Bundle savedInstanceState, String rootKey) { + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.prefs); stopVerboseLog = findPreference("stop_verbose_log"); stopLog = findPreference("stop_log"); - //noinspection ConstantConditions findPreference("release_type_global").setOnPreferenceChangeListener((preference, newValue) -> { RepoLoader.getInstance().setReleaseTypeGlobal((String) newValue); return true; }); - SwitchPreference prefWhiteListMode = findPreference("white_list_switch"); + SwitchPreference prefWhiteListMode = (SwitchPreference) findPreference("white_list_switch"); Objects.requireNonNull(prefWhiteListMode).setChecked(mWhiteListModeFlag.exists()); prefWhiteListMode.setOnPreferenceChangeListener((preference, newValue) -> { boolean enabled = (Boolean) newValue; @@ -138,7 +125,7 @@ public class SettingsActivity extends BaseActivity { return (enabled == mWhiteListModeFlag.exists()); }); - SwitchPreference prefVerboseLogs = findPreference("disable_verbose_log"); + SwitchPreference prefVerboseLogs = (SwitchPreference) findPreference("disable_verbose_log"); Objects.requireNonNull(prefVerboseLogs).setChecked(mDisableVerboseLogsFlag.exists()); prefVerboseLogs.setOnPreferenceChangeListener((preference, newValue) -> { boolean enabled = (Boolean) newValue; @@ -169,7 +156,7 @@ public class SettingsActivity extends BaseActivity { return (enabled == mDisableVerboseLogsFlag.exists()); }); - SwitchPreference prefModulesLogs = findPreference("disable_modules_log"); + SwitchPreference prefModulesLogs = (SwitchPreference) findPreference("disable_modules_log"); Objects.requireNonNull(prefModulesLogs).setChecked(mDisableModulesLogsFlag.exists()); prefModulesLogs.setOnPreferenceChangeListener((preference, newValue) -> { boolean enabled = (Boolean) newValue; @@ -200,7 +187,7 @@ public class SettingsActivity extends BaseActivity { return (enabled == mDisableModulesLogsFlag.exists()); }); - SwitchPreference prefBlackWhiteListMode = findPreference("black_white_list_switch"); + SwitchPreference prefBlackWhiteListMode = (SwitchPreference) findPreference("black_white_list_switch"); Objects.requireNonNull(prefBlackWhiteListMode).setChecked(mBlackWhiteListModeFlag.exists()); prefBlackWhiteListMode.setOnPreferenceChangeListener((preference, newValue) -> { boolean enabled = (Boolean) newValue; @@ -231,7 +218,7 @@ public class SettingsActivity extends BaseActivity { return (enabled == mBlackWhiteListModeFlag.exists()); }); - SwitchPreference prefEnableDeopt = findPreference("enable_boot_image_deopt"); + SwitchPreference prefEnableDeopt = (SwitchPreference) findPreference("enable_boot_image_deopt"); Objects.requireNonNull(prefEnableDeopt).setChecked(mDeoptBootFlag.exists()); prefEnableDeopt.setOnPreferenceChangeListener((preference, newValue) -> { boolean enabled = (Boolean) newValue; @@ -262,7 +249,7 @@ public class SettingsActivity extends BaseActivity { return (enabled == mDeoptBootFlag.exists()); }); - SwitchPreference prefDynamicResources = findPreference("is_dynamic_modules"); + SwitchPreference prefDynamicResources = (SwitchPreference) findPreference("is_dynamic_modules"); Objects.requireNonNull(prefDynamicResources).setChecked(mDynamicModulesFlag.exists()); prefDynamicResources.setOnPreferenceChangeListener((preference, newValue) -> { boolean enabled = (Boolean) newValue; @@ -293,7 +280,7 @@ public class SettingsActivity extends BaseActivity { return (enabled == mDynamicModulesFlag.exists()); }); - SwitchPreference prefDisableResources = findPreference("disable_resources"); + SwitchPreference prefDisableResources = (SwitchPreference) findPreference("disable_resources"); Objects.requireNonNull(prefDisableResources).setChecked(mDisableResourcesFlag.exists()); prefDisableResources.setOnPreferenceChangeListener((preference, newValue) -> { boolean enabled = (Boolean) newValue; @@ -350,6 +337,12 @@ 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")) { @@ -368,11 +361,7 @@ public class SettingsActivity extends BaseActivity { new Runnable() { @Override public void run() { - areYouSure(R.string.stop_verbose_log_summary, (dialog, which) -> { - - Shell.su("kill $(cat " + mVerboseLogProcessID.getAbsolutePath() + ")").exec(); - - }); + areYouSure(R.string.stop_verbose_log_summary, (dialog, which) -> Shell.su("kill $(cat " + mVerboseLogProcessID.getAbsolutePath() + ")").exec()); } }; } else if (preference.getKey().equals(stopLog.getKey())) { @@ -397,13 +386,8 @@ public class SettingsActivity extends BaseActivity { @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - if (rootView == null) { - return; - } - ((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); + ((FrameLayout) view).setClipChildren(false); + ((FrameLayout) view).setClipToPadding(false); } } } diff --git a/app/src/main/java/org/meowcat/edxposed/manager/adapters/AppAdapter.java b/app/src/main/java/org/meowcat/edxposed/manager/adapters/AppAdapter.java index af4b02ad..4a6c4b1f 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/adapters/AppAdapter.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/adapters/AppAdapter.java @@ -22,13 +22,11 @@ import org.meowcat.edxposed.manager.XposedApp; import org.meowcat.edxposed.manager.util.InstallApkUtil; import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; -import java.util.Locale; public class AppAdapter extends RecyclerView.Adapter { @@ -36,7 +34,7 @@ public class AppAdapter extends RecyclerView.Adapter { private final ApplicationInfo.DisplayNameComparator displayNameComparator; private Callback callback; private List fullList, showList; - private DateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); + private DateFormat dateformat = DateFormat.getDateInstance(DateFormat.SHORT); private List checkedList; private PackageManager pm; private ApplicationFilter filter; @@ -174,8 +172,9 @@ public class AppAdapter extends RecyclerView.Adapter { holder.appName.setText(InstallApkUtil.getAppLabel(info, pm)); try { holder.appVersion.setText(pm.getPackageInfo(info.packageName, 0).versionName); - holder.appInstallTime.setText(dateformat.format(new Date(pm.getPackageInfo(info.packageName, 0).firstInstallTime))); - holder.appUpdateTime.setText(dateformat.format(new Date(pm.getPackageInfo(info.packageName, 0).lastUpdateTime))); + String creationDate = dateformat.format(new Date(pm.getPackageInfo(info.packageName, 0).firstInstallTime)); + String updateDate = dateformat.format(new Date(pm.getPackageInfo(info.packageName, 0).lastUpdateTime)); + holder.timestamps.setText(holder.itemView.getContext().getString(R.string.install_timestamps, creationDate, updateDate)); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } @@ -222,8 +221,7 @@ public class AppAdapter extends RecyclerView.Adapter { TextView appName; TextView appPackage; TextView appVersion; - TextView appInstallTime; - TextView appUpdateTime; + TextView timestamps; Switch mSwitch; ViewHolder(View itemView) { @@ -232,8 +230,7 @@ public class AppAdapter extends RecyclerView.Adapter { appName = itemView.findViewById(R.id.app_name); appPackage = itemView.findViewById(R.id.package_name); appVersion = itemView.findViewById(R.id.version_name); - appInstallTime = itemView.findViewById(R.id.tvInstallTime); - appUpdateTime = itemView.findViewById(R.id.tvUpdateTime); + timestamps = itemView.findViewById(R.id.timestamps); mSwitch = itemView.findViewById(R.id.checkbox); } } 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 a8f6631b..9f0341e3 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 ac5c98b8..db71a862 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,9 @@ import android.content.Context; import android.content.SharedPreferences; import android.util.AttributeSet; -public class IntegerListPreference extends com.takisoft.preferencex.SimpleMenuPreference { +import moe.shizuku.preference.SimpleMenuPreference; + +public class IntegerListPreference extends SimpleMenuPreference { public IntegerListPreference(Context context) { super(context); } diff --git a/app/src/main/res/layout/item_module.xml b/app/src/main/res/layout/item_module.xml index c64c489e..c24805ae 100644 --- a/app/src/main/res/layout/item_module.xml +++ b/app/src/main/res/layout/item_module.xml @@ -1,5 +1,4 @@ - - - + android:padding="8dp" + android:paddingStart="18dp" + android:paddingEnd="12dp"> - + android:layout_height="48dp"> + + @@ -53,10 +49,10 @@ android:id="@+id/version_name" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_alignBaseline="@id/app_name" android:layout_marginStart="4dip" + android:layout_toEndOf="@id/app_name" android:ellipsize="marquee" - android:gravity="end" - android:marqueeRepeatLimit="marquee_forever" android:maxWidth="100dp" android:singleLine="true" android:textAppearance="?android:attr/textAppearanceSmall" @@ -64,62 +60,26 @@ android:textIsSelectable="false" tools:ignore="RtlHardcoded" /> - + + - - - - - - - - - - - - - - - - + android:layout_gravity="center_vertical" + android:textAppearance="?android:attr/textAppearanceSmall" /> + android:focusable="false" /> - + \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 9ecd7f24..b2de203f 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -275,8 +275,6 @@ 停止 更新日志 你必须先卸载 EdXposed Installer 才能继续使用 EdXposed Manager - 安装日期: - 更新日期: 显示模块和管理器 在应用列表内显示模块和管理器\n此选项并不会移除已勾选的应用标识 优化失败或返回值为空 @@ -296,5 +294,6 @@ 禁用模块日志 模块抛出的的异常堆栈仍将正常抓取 跟随系统 - 使用纯黑深色主题 + 使用纯黑深色主题> + 安装于 %1$s \u00b7 更新于 %2$s diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4655775f..38e4755d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -88,6 +88,7 @@ Installed (version %s) Update available (version %1$s \u2192 %2$s) Added on %1$s \u00b7 Updated on %2$s + Installed on %1$s \nUpdated on %2$s Sorting order Sort by status Sort by last update @@ -311,8 +312,6 @@ Stop it Update Changelog You must to uninstall EdXposed Installer to use EdXposed Manager - Install time: - Update time: Show modules and manager Show modules and manager in application list\nThis option does not remove checked application flag Optimization failed or return value is empty diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 0d9c37bc..2dd205cb 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -13,6 +13,7 @@ @bool/lightSystemUI @color/navigationBarColor + @style/PreferenceThemeOverlay