From 517c09724a2773fc1d0dbc2cac1cad9ee4b9fd44 Mon Sep 17 00:00:00 2001 From: Jim Wu Date: Wed, 3 Feb 2021 16:13:11 +0800 Subject: [PATCH] Change hook methods --- app/build.gradle | 4 +- .../android/xposed/installer/XposedApp.java | 58 ------ .../xposed/installer/util/InstallZipUtil.java | 53 ------ .../meowcat/edxposed/manager/Constants.java | 66 +++++++ .../edxposed/manager/LogsFragment.java | 3 +- .../edxposed/manager/ModulesFragment.java | 9 +- .../manager/StatusInstallerFragment.java | 175 +++++------------- .../meowcat/edxposed/manager/XposedApp.java | 19 +- .../edxposed/manager/adapter/AppAdapter.java | 2 - .../edxposed/manager/adapter/AppHelper.java | 4 +- .../edxposed/manager/util/ModuleUtil.java | 19 +- 11 files changed, 139 insertions(+), 273 deletions(-) delete mode 100644 app/src/main/java/de/robv/android/xposed/installer/XposedApp.java delete mode 100644 app/src/main/java/de/robv/android/xposed/installer/util/InstallZipUtil.java create mode 100644 app/src/main/java/org/meowcat/edxposed/manager/Constants.java diff --git a/app/build.gradle b/app/build.gradle index 67f8dd75..abf00b51 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { minSdkVersion 24 //noinspection OldTargetApi targetSdkVersion 27 - versionCode 45761 - versionName "4.6.0-pre" + versionCode 46000 + versionName "4.6.0" } applicationVariants.all { variant -> diff --git a/app/src/main/java/de/robv/android/xposed/installer/XposedApp.java b/app/src/main/java/de/robv/android/xposed/installer/XposedApp.java deleted file mode 100644 index 290f822f..00000000 --- a/app/src/main/java/de/robv/android/xposed/installer/XposedApp.java +++ /dev/null @@ -1,58 +0,0 @@ -package de.robv.android.xposed.installer; - -import android.annotation.SuppressLint; -import android.app.Application; -import android.util.Log; - -import org.meowcat.annotation.NotProguard; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; - -import de.robv.android.xposed.installer.util.InstallZipUtil; - -import static de.robv.android.xposed.installer.util.InstallZipUtil.parseXposedProp; -import static org.meowcat.edxposed.manager.MeowCatApplication.TAG; - -@NotProguard -@SuppressLint("Registered") -public class XposedApp extends Application { - private static final File EDXPOSED_PROP_FILE = new File("/system/framework/edconfig.jar"); - private static XposedApp mInstance = null; - public InstallZipUtil.XposedProp mXposedProp; - - public static XposedApp getInstance() { - return mInstance; - } - - // This method is hooked by XposedBridge to return the current version - public static Integer getActiveXposedVersion() { - return -1; - } - - public void onCreate() { - super.onCreate(); - mInstance = this; - } - - public void reloadXposedProp() { - InstallZipUtil.XposedProp prop = null; - File file = null; - - if (EDXPOSED_PROP_FILE.canRead()) { - file = EDXPOSED_PROP_FILE; - } - - if (file != null) { - try (FileInputStream is = new FileInputStream(file)) { - prop = parseXposedProp(is); - } catch (IOException e) { - Log.e(TAG, "Could not read " + file.getPath(), e); - } - } - synchronized (this) { - mXposedProp = prop; - } - } -} diff --git a/app/src/main/java/de/robv/android/xposed/installer/util/InstallZipUtil.java b/app/src/main/java/de/robv/android/xposed/installer/util/InstallZipUtil.java deleted file mode 100644 index b2c58044..00000000 --- a/app/src/main/java/de/robv/android/xposed/installer/util/InstallZipUtil.java +++ /dev/null @@ -1,53 +0,0 @@ -package de.robv.android.xposed.installer.util; - -import org.meowcat.annotation.NotProguard; -import org.meowcat.edxposed.manager.util.ModuleUtil; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; - -@NotProguard -public final class InstallZipUtil { - - public static XposedProp parseXposedProp(InputStream is) throws IOException { - XposedProp prop = new XposedProp(); - BufferedReader reader = new BufferedReader(new InputStreamReader(is)); - String line; - while ((line = reader.readLine()) != null) { - String[] parts = line.split("=", 2); - if (parts.length != 2) { - continue; - } - - String key = parts[0].trim(); - if (key.charAt(0) == '#') { - continue; - } - - String value = parts[1].trim(); - - if ("version".equals(key)) { - prop.mVersion = value; - prop.mVersionInt = ModuleUtil.extractIntPart(value); - } - } - reader.close(); - return prop.isComplete() ? prop : null; - } - - public static class XposedProp { - private String mVersion = null; - private int mVersionInt = 0; - - private boolean isComplete() { - return mVersion != null - && mVersionInt > 0; - } - - public String getVersion() { - return mVersion; - } - } -} diff --git a/app/src/main/java/org/meowcat/edxposed/manager/Constants.java b/app/src/main/java/org/meowcat/edxposed/manager/Constants.java new file mode 100644 index 00000000..658d24a8 --- /dev/null +++ b/app/src/main/java/org/meowcat/edxposed/manager/Constants.java @@ -0,0 +1,66 @@ +package org.meowcat.edxposed.manager; + +import android.util.Log; + +import org.meowcat.annotation.NotProguard; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +import static org.meowcat.edxposed.manager.MeowCatApplication.TAG; + +@NotProguard +public class Constants { + + public static int getActiveXposedVersion() { + Log.d(TAG, "Not Active"); + return -1; + } + + public static String getInstalledXposedVersion() { + return null; + } + + public static String getBaseDir() { + return XposedApp.getInstance().getApplicationInfo().deviceProtectedDataDir + "/"; + } + + public static String getEnabledModulesListFile() { + return getBaseDir() + "conf/enabled_modules.list"; + } + + public static String getModulesListFile() { + return getBaseDir() + "conf/modules.list"; + } + + public static boolean isSELinuxEnforced() { + boolean result = false; + final File SELINUX_STATUS_FILE = new File("/sys/fs/selinux/enforce"); + if (SELINUX_STATUS_FILE.exists()) { + try { + FileInputStream fis = new FileInputStream(SELINUX_STATUS_FILE); + int status = fis.read(); + switch (status) { + case 49: + result = true; + break; + case 48: + result = false; + break; + default: + Log.e(TAG, "Unexpected byte " + status + " in /sys/fs/selinux/enforce"); + } + fis.close(); + } catch (IOException e) { + if (e.getMessage().contains("Permission denied")) { + result = true; + } else { + Log.e(TAG, "Failed to read SELinux status: " + e.getMessage()); + result = false; + } + } + } + return result; + } +} diff --git a/app/src/main/java/org/meowcat/edxposed/manager/LogsFragment.java b/app/src/main/java/org/meowcat/edxposed/manager/LogsFragment.java index c2e931c8..2b462c41 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/LogsFragment.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/LogsFragment.java @@ -37,6 +37,7 @@ import java.util.Objects; import static android.app.Activity.RESULT_OK; +import static org.meowcat.edxposed.manager.Constants.getBaseDir; import static org.meowcat.edxposed.manager.MeowCatApplication.TAG; import static org.meowcat.edxposed.manager.adapter.LogsHelper.isMainUser; @@ -59,7 +60,7 @@ public class LogsFragment extends Fragment { private final String LOG_SUFFIX = ".log"; @SuppressWarnings("FieldCanBeLocal") private final String LOG_OLD_SUFFIX = ".log.old"; - private final String LOG_PATH = XposedApp.BASE_DIR + "log/"; + private final String LOG_PATH = getBaseDir() + "log/"; private RecyclerView mRecyclerView; private TabLayout mTabLayout; private LogsAdapter adapter; diff --git a/app/src/main/java/org/meowcat/edxposed/manager/ModulesFragment.java b/app/src/main/java/org/meowcat/edxposed/manager/ModulesFragment.java index f6d9a959..3990f7bf 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/ModulesFragment.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/ModulesFragment.java @@ -82,7 +82,8 @@ import static android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS; import static androidx.constraintlayout.widget.Constraints.TAG; -import static de.robv.android.xposed.installer.XposedApp.getActiveXposedVersion; +import static org.meowcat.edxposed.manager.Constants.getActiveXposedVersion; +import static org.meowcat.edxposed.manager.Constants.getEnabledModulesListFile; import static org.meowcat.edxposed.manager.XposedApp.WRITE_EXTERNAL_PERMISSION; import static org.meowcat.edxposed.manager.XposedApp.createFolder; @@ -220,7 +221,7 @@ private void filter(String constraint) { @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - installedXposedVersion = XposedApp.getActiveXposedVersion(); + installedXposedVersion = getActiveXposedVersion(); if (installedXposedVersion <= 0) { addHeader(); } @@ -339,7 +340,7 @@ public boolean onOptionsItemSelected(@NonNull MenuItem item) { boolean refresh = false; File enabledModulesPath = new File(createFolder(), "enabled_modules.list"); File installedModulesPath = new File(createFolder(), "installed_modules.list"); - File listModules = new File(XposedApp.ENABLED_MODULES_LIST_FILE); + File listModules = new File(getEnabledModulesListFile()); mClickedMenuItem = item; @@ -584,7 +585,7 @@ private void showMenu(@NonNull Context context, appMenu.getMenu().removeItem(R.id.menu_support); } if (getActiveXposedVersion() < 92 || installedModule.packageName.equals(BuildConfig.APPLICATION_ID)) { -// appMenu.getMenu().removeItem(R.id.menu_activation_scope); + appMenu.getMenu().removeItem(R.id.menu_activation_scope); } if (getSettingsIntent(installedModule.packageName) == null) { appMenu.getMenu().removeItem(R.id.menu_launch); diff --git a/app/src/main/java/org/meowcat/edxposed/manager/StatusInstallerFragment.java b/app/src/main/java/org/meowcat/edxposed/manager/StatusInstallerFragment.java index 1566ea02..2ee3f13d 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/StatusInstallerFragment.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/StatusInstallerFragment.java @@ -4,7 +4,6 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; -import android.content.pm.ApplicationInfo; import android.net.Uri; import android.os.Build; import android.os.Bundle; @@ -25,18 +24,18 @@ import com.afollestad.materialdialogs.MaterialDialog; import com.google.android.material.snackbar.Snackbar; -import org.meowcat.annotation.NotProguard; -import org.meowcat.edxposed.manager.util.NavUtil; - import java.io.BufferedReader; import java.io.File; -import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import static android.os.SELinux.isSELinuxEnabled; +import static org.meowcat.edxposed.manager.Constants.getActiveXposedVersion; +import static org.meowcat.edxposed.manager.Constants.getBaseDir; +import static org.meowcat.edxposed.manager.Constants.getInstalledXposedVersion; +import static org.meowcat.edxposed.manager.Constants.isSELinuxEnforced; import static org.meowcat.edxposed.manager.MeowCatApplication.TAG; import static org.meowcat.edxposed.manager.XposedApp.CPU_ABI; import static org.meowcat.edxposed.manager.XposedApp.getArch; @@ -44,7 +43,7 @@ @SuppressLint("StaticFieldLeak") public class StatusInstallerFragment extends Fragment { - public static final File DISABLE_FILE = new File(XposedApp.BASE_DIR + "conf/disabled"); + public static final File DISABLE_FILE = new File(getBaseDir() + "conf/disabled"); //static String ARCH = getArch(); private static Activity sActivity; private static String mUpdateLink; @@ -153,12 +152,7 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, }); } - String installedXposedVersion; - try { - installedXposedVersion = XposedApp.getXposedProp().getVersion(); - } catch (NullPointerException e) { - installedXposedVersion = null; - } + String installedXposedVersion = getInstalledXposedVersion(); View disableView = v.findViewById(R.id.disableView); final SwitchCompat xposedDisable = v.findViewById(R.id.disableSwitch); @@ -180,27 +174,18 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, manager.setText(mAppVer); if (installedXposedVersion != null) { - int installedXposedVersionInt = extractIntPart(installedXposedVersion); - String installedXposedVersionStr = installedXposedVersionInt + ".0"; - api.setText(installedXposedVersionStr); - framework.setText(installedXposedVersion.replace(installedXposedVersionStr + "-", "")); - if (installedXposedVersionInt == XposedApp.getActiveXposedVersion()) { - txtInstallError.setText(R.string.installed_lollipop); - if (XposedApp.getPreferences().getBoolean("old_success_color", false)) { - txtInstallError.setTextColor(sActivity.getResources().getColor(R.color.download_status_update_available, null)); - txtInstallContainer.setBackgroundColor(sActivity.getResources().getColor(R.color.download_status_update_available, null)); - } else { - txtInstallError.setTextColor(sActivity.getResources().getColor(R.color.status_success, null)); - txtInstallContainer.setBackgroundColor(sActivity.getResources().getColor(R.color.status_success, null)); - } - txtInstallIcon.setImageDrawable(sActivity.getResources().getDrawable(R.drawable.ic_check_circle, null)); - isXposedInstalled = true; + api.setText(String.format("v%s.0", getActiveXposedVersion())); + framework.setText(installedXposedVersion); + txtInstallError.setText(R.string.installed_lollipop); + if (XposedApp.getPreferences().getBoolean("old_success_color", false)) { + txtInstallError.setTextColor(sActivity.getResources().getColor(R.color.download_status_update_available, null)); + txtInstallContainer.setBackgroundColor(sActivity.getResources().getColor(R.color.download_status_update_available, null)); } else { - txtInstallError.setText(R.string.installed_lollipop_inactive); - txtInstallError.setTextColor(sActivity.getResources().getColor(R.color.amber_500, null)); - txtInstallContainer.setBackgroundColor(sActivity.getResources().getColor(R.color.amber_500, null)); - txtInstallIcon.setImageDrawable(sActivity.getResources().getDrawable(R.drawable.ic_warning, null)); + txtInstallError.setTextColor(sActivity.getResources().getColor(R.color.status_success, null)); + txtInstallContainer.setBackgroundColor(sActivity.getResources().getColor(R.color.status_success, null)); } + txtInstallIcon.setImageDrawable(sActivity.getResources().getDrawable(R.drawable.ic_check_circle, null)); + isXposedInstalled = true; } else { txtInstallError.setText(R.string.not_installed_no_lollipop); txtInstallError.setTextColor(sActivity.getResources().getColor(R.color.warning, null)); @@ -250,7 +235,7 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, determineVerifiedBootState(v); - refreshKnownIssue(); +// refreshKnownIssue(); return v; } @@ -280,36 +265,6 @@ private void determineVerifiedBootState(View v) { } } - private boolean isSELinuxEnforced() { - boolean result = false; - final File SELINUX_STATUS_FILE = new File("/sys/fs/selinux/enforce"); - if (SELINUX_STATUS_FILE.exists()) { - try { - FileInputStream fis = new FileInputStream(SELINUX_STATUS_FILE); - int status = fis.read(); - switch (status) { - case 49: - result = true; - break; - case 48: - result = false; - break; - default: - Log.e(TAG, "Unexpected byte " + status + " in /sys/fs/selinux/enforce"); - } - fis.close(); - } catch (IOException e) { - if (e.getMessage().contains("Permission denied")) { - result = true; - } else { - Log.e(TAG, "Failed to read SELinux status: " + e.getMessage()); - result = false; - } - } - } - return result; - } - private String getSELinuxStatus() { String result; if (isSELinuxEnabled()) { @@ -324,42 +279,34 @@ private String getSELinuxStatus() { return result; } - private void refreshKnownIssue() { - String issueName = null; - String issueLink = null; - final ApplicationInfo appInfo = requireActivity().getApplicationInfo(); - final File baseDir = new File(XposedApp.BASE_DIR); - final File baseDirCanonical = getCanonicalFile(baseDir); - final File baseDirActual = new File(appInfo.deviceProtectedDataDir); - final File baseDirActualCanonical = getCanonicalFile(baseDirActual); - - if (!baseDirCanonical.equals(baseDirActualCanonical)) { - Log.e(TAG, "Base directory: " + getPathWithCanonicalPath(baseDir, baseDirCanonical)); - Log.e(TAG, "Expected: " + getPathWithCanonicalPath(baseDirActual, baseDirActualCanonical)); - issueName = getString(R.string.known_issue_wrong_base_directory, getPathWithCanonicalPath(baseDirActual, baseDirActualCanonical)); - } else if (!baseDir.exists()) { - issueName = getString(R.string.known_issue_missing_base_directory); - issueLink = "https://github.com/rovo89/XposedInstaller/issues/393"; - } else if (XposedApp.checkAppInstalled(getContext(), "com.solohsu.android.edxp.manager")) { - issueName = getString(R.string.edxp_installer_installed); - issueLink = getString(R.string.about_support); - } - - if (issueName != null) { - final String issueLinkFinal = issueLink; - txtKnownIssue.setText(getString(R.string.install_known_issue, issueName)); - txtKnownIssue.setVisibility(View.VISIBLE); - if (issueLinkFinal != null) { - btnKnownIssue.setOnClickListener(v -> NavUtil.startURL(getActivity(), issueLinkFinal)); - btnKnownIssue.setVisibility(View.VISIBLE); - } else { - btnKnownIssue.setVisibility(View.GONE); - } - } else { - txtKnownIssue.setVisibility(View.GONE); - btnKnownIssue.setVisibility(View.GONE); - } - } +// private void refreshKnownIssue() { +// String issueName = null; +// String issueLink = null; +// final File baseDir = new File(getBaseDir()); +// +// if (!baseDir.exists()) { +// issueName = getString(R.string.known_issue_missing_base_directory); +// issueLink = "https://github.com/rovo89/XposedInstaller/issues/393"; +// } else if (XposedApp.checkAppInstalled(getContext(), "com.solohsu.android.edxp.manager")) { +// issueName = getString(R.string.edxp_installer_installed); +// issueLink = getString(R.string.about_support); +// } +// +// if (issueName != null) { +// final String issueLinkFinal = issueLink; +// txtKnownIssue.setText(getString(R.string.install_known_issue, issueName)); +// txtKnownIssue.setVisibility(View.VISIBLE); +// if (issueLinkFinal != null) { +// btnKnownIssue.setOnClickListener(v -> NavUtil.startURL(getActivity(), issueLinkFinal)); +// btnKnownIssue.setVisibility(View.VISIBLE); +// } else { +// btnKnownIssue.setVisibility(View.GONE); +// } +// } else { +// txtKnownIssue.setVisibility(View.GONE); +// btnKnownIssue.setVisibility(View.GONE); +// } +// } private String getAndroidVersion() { switch (Build.VERSION.SDK_INT) { @@ -372,7 +319,7 @@ private String getAndroidVersion() { case 28: return "Pie"; case 29: - return "Queen Cake"; + return "Quince Tart"; case 30: return "Red Velvet Cake"; } @@ -408,34 +355,4 @@ private String getUIFramework() { } return manufacturer; } - - @NotProguard - private File getCanonicalFile(File file) { - try { - return file.getCanonicalFile(); - } catch (IOException e) { - Log.e(TAG, "Failed to get canonical file for " + file.getAbsolutePath(), e); - return file; - } - } - - private String getPathWithCanonicalPath(File file, File canonical) { - if (file.equals(canonical)) { - return file.getAbsolutePath(); - } else { - return file.getAbsolutePath() + " \u2192 " + canonical.getAbsolutePath(); - } - } - - private int extractIntPart(String str) { - int result = 0, length = str.length(); - for (int offset = 0; offset < length; offset++) { - char c = str.charAt(offset); - if ('0' <= c && c <= '9') - result = result * 10 + (c - '0'); - else - break; - } - return result; - } } diff --git a/app/src/main/java/org/meowcat/edxposed/manager/XposedApp.java b/app/src/main/java/org/meowcat/edxposed/manager/XposedApp.java index 9bc42326..98bf1bd1 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/XposedApp.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/XposedApp.java @@ -3,6 +3,7 @@ import android.annotation.SuppressLint; import android.app.Activity; import android.app.ActivityManager; +import android.app.Application; import android.app.Application.ActivityLifecycleCallbacks; import android.app.PendingIntent; import android.content.Context; @@ -46,17 +47,16 @@ import java.util.Objects; import dalvik.system.VMRuntime; -import de.robv.android.xposed.installer.util.InstallZipUtil; import static android.os.Build.SUPPORTED_32_BIT_ABIS; import static android.os.Build.SUPPORTED_64_BIT_ABIS; +import static org.meowcat.edxposed.manager.Constants.getBaseDir; import static org.meowcat.edxposed.manager.MeowCatApplication.TAG; import static org.meowcat.edxposed.manager.adapter.AppHelper.FORCE_WHITE_LIST_MODULE; @SuppressLint("Registered") -public class XposedApp extends de.robv.android.xposed.installer.XposedApp implements ActivityLifecycleCallbacks { - public static String BASE_DIR = null; - public static String ENABLED_MODULES_LIST_FILE = null; +public class XposedApp extends Application implements ActivityLifecycleCallbacks { + public static int WRITE_EXTERNAL_PERMISSION = 69; public static int[] iconsValues = new int[]{R.mipmap.ic_launcher, R.mipmap.ic_launcher_dvdandroid, R.mipmap.ic_launcher_hjmodi, R.mipmap.ic_launcher_rovo, R.mipmap.ic_launcher_cornie, R.mipmap.ic_launcher_rovo_old, R.mipmap.ic_launcher_staol}; @SuppressLint("StaticFieldLeak") @@ -91,10 +91,6 @@ public static XposedApp getInstance() { return mInstance; } - public static InstallZipUtil.XposedProp getXposedProp() { - return de.robv.android.xposed.installer.XposedApp.getInstance().mXposedProp; - } - public static void runOnUiThread(Runnable action) { if (Thread.currentThread() != mUiThread) { mMainHandler.post(action); @@ -185,7 +181,7 @@ public static String getDownloadPath() { @SuppressWarnings("ResultOfMethodCallIgnored") public static void mkdir(String dir) { - dir = BASE_DIR + dir; + dir = getBaseDir() + dir; new File(dir).mkdir(); } @@ -223,8 +219,6 @@ public void onCreate() { } final ApplicationInfo appInfo = getApplicationInfo(); - BASE_DIR = appInfo.deviceProtectedDataDir + "/"; - ENABLED_MODULES_LIST_FILE = BASE_DIR + "conf/enabled_modules.list"; mInstance = this; mUiThread = Thread.currentThread(); @@ -232,7 +226,6 @@ public void onCreate() { mPref = PreferenceManager.getDefaultSharedPreferences(this); - de.robv.android.xposed.installer.XposedApp.getInstance().reloadXposedProp(); createDirectories(); delete(new File(Environment.getExternalStorageDirectory() + "/Download/EdXposedManager/.temp")); NotificationUtil.init(); @@ -288,7 +281,7 @@ private void delete(File file) { private void createDirectories() { mkdir("conf"); mkdir("log"); - final File mBlackWhiteListModeFlag = new File(XposedApp.BASE_DIR + "conf/blackwhitelist"); + final File mBlackWhiteListModeFlag = new File(getBaseDir() + "conf/blackwhitelist"); if (!mBlackWhiteListModeFlag.exists()) { try { mBlackWhiteListModeFlag.createNewFile(); diff --git a/app/src/main/java/org/meowcat/edxposed/manager/adapter/AppAdapter.java b/app/src/main/java/org/meowcat/edxposed/manager/adapter/AppAdapter.java index cc6cee45..bbf072aa 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/adapter/AppAdapter.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/adapter/AppAdapter.java @@ -436,10 +436,8 @@ public void onBindViewHolder(@NonNull ViewHolder holder, int position) { callback.onItemClick(v, info); } }); - Log.d(TAG, "Scope: load for app: " + info.packageName); if (this instanceof ActivationScopeAdapter) { if (getRecommendedScopeList().contains(info.packageName)) { - Log.d(TAG, "Scope: contains"); holder.appScopeTip.setVisibility(View.VISIBLE); } } diff --git a/app/src/main/java/org/meowcat/edxposed/manager/adapter/AppHelper.java b/app/src/main/java/org/meowcat/edxposed/manager/adapter/AppHelper.java index da5f1c66..d5896185 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/adapter/AppHelper.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/adapter/AppHelper.java @@ -33,15 +33,15 @@ import java.util.Objects; import static android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS; +import static org.meowcat.edxposed.manager.Constants.getBaseDir; public class AppHelper { - static final String BASE_PATH = XposedApp.BASE_DIR; + static final String BASE_PATH = getBaseDir(); private static final String WHITE_LIST_PATH = "conf/whitelist/"; private static final String BLACK_LIST_PATH = "conf/blacklist/"; private static final String COMPAT_LIST_PATH = "conf/compatlist/"; private static final String WHITE_LIST_MODE = "conf/usewhitelist"; - private static final String BLACK_LIST_MODE = "conf/blackwhitelist"; private static final List FORCE_WHITE_LIST = new ArrayList<>(StatusInstallerFragment.isEnhancementEnabled() ? Arrays.asList(BuildConfig.APPLICATION_ID, "android") : Collections.singletonList(BuildConfig.APPLICATION_ID)); private static final List SAFETYNET_BLACK_LIST = new ArrayList<>(Arrays.asList("com.google.android.gms", "com.google.android.gsf")); diff --git a/app/src/main/java/org/meowcat/edxposed/manager/util/ModuleUtil.java b/app/src/main/java/org/meowcat/edxposed/manager/util/ModuleUtil.java index edec3ba6..99e585fa 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/util/ModuleUtil.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/util/ModuleUtil.java @@ -37,11 +37,13 @@ import java.util.Map; import java.util.concurrent.CopyOnWriteArrayList; +import static org.meowcat.edxposed.manager.Constants.getActiveXposedVersion; +import static org.meowcat.edxposed.manager.Constants.getEnabledModulesListFile; +import static org.meowcat.edxposed.manager.Constants.getModulesListFile; import static org.meowcat.edxposed.manager.MeowCatApplication.TAG; public final class ModuleUtil { // xposedminversion below this - private static final String MODULES_LIST_FILE = XposedApp.BASE_DIR + "conf/modules.list"; private static final String PLAY_STORE_PACKAGE = "com.android.vending"; public static int MIN_MODULE_VERSION = 2; // reject modules with private static ModuleUtil mInstance = null; @@ -204,18 +206,17 @@ public List getEnabledModules() { public synchronized void updateModulesList(boolean showToast, View view) { try { Log.i(TAG, "ModuleUtil -> updating modules.list"); - int installedXposedVersion = XposedApp.getActiveXposedVersion(); boolean disabled = StatusInstallerFragment.DISABLE_FILE.exists(); - if (!XposedApp.getPreferences().getBoolean("skip_xposedminversion_check", false) && !disabled && installedXposedVersion <= 0 && showToast) { + if (!XposedApp.getPreferences().getBoolean("skip_xposedminversion_check", false) && !disabled && getActiveXposedVersion() <= 0 && showToast) { Snackbar.make(view, R.string.notinstalled, Snackbar.LENGTH_SHORT).show(); return; } - PrintWriter modulesList = new PrintWriter(MODULES_LIST_FILE); - PrintWriter enabledModulesList = new PrintWriter(XposedApp.ENABLED_MODULES_LIST_FILE); + PrintWriter modulesList = new PrintWriter(getModulesListFile()); + PrintWriter enabledModulesList = new PrintWriter(getEnabledModulesListFile()); List enabledModules = getEnabledModules(); for (InstalledModule module : enabledModules) { - if (!XposedApp.getPreferences().getBoolean("skip_xposedminversion_check", false) && (!disabled && (module.minVersion > installedXposedVersion || module.minVersion < MIN_MODULE_VERSION)) && showToast) { + if (!XposedApp.getPreferences().getBoolean("skip_xposedminversion_check", false) && (!disabled && (module.minVersion > getActiveXposedVersion() || module.minVersion < MIN_MODULE_VERSION)) && showToast) { Snackbar.make(view, R.string.notinstalled, Snackbar.LENGTH_SHORT).show(); continue; } @@ -236,8 +237,8 @@ public synchronized void updateModulesList(boolean showToast, View view) { Snackbar.make(view, R.string.xposed_module_list_updated, Snackbar.LENGTH_SHORT).show(); } } catch (IOException e) { - Log.e(TAG, "ModuleUtil -> cannot write " + MODULES_LIST_FILE, e); - Toast.makeText(mApp, "cannot write " + MODULES_LIST_FILE + e, Toast.LENGTH_SHORT).show(); + Log.e(TAG, "ModuleUtil -> cannot write " + getModulesListFile(), e); + Toast.makeText(mApp, "cannot write " + getModulesListFile() + e, Toast.LENGTH_SHORT).show(); } } @@ -296,7 +297,7 @@ private InstalledModule(PackageInfo pkg, boolean isFramework) { this.minVersion = 0; this.description = ""; } else { - int version = XposedApp.getActiveXposedVersion(); + int version = getActiveXposedVersion(); if (version > 0 && XposedApp.getPreferences().getBoolean("skip_xposedminversion_check", false)) { this.minVersion = version; } else {