From 7139c3f11f66496044845195e757e5af77ce1c03 Mon Sep 17 00:00:00 2001 From: tehcneko <7764726+tehcneko@users.noreply.github.com> Date: Thu, 6 May 2021 20:27:38 +0800 Subject: [PATCH] [app] Added option to disable forced display of the application launcher icon on Android 10+ (#541) * [core] Grant android.permission.WRITE_SECURE_SETTINGS * Disable jetifier * [app] Added option to disable forced display of the application launcher icon on Android 10+ --- app/src/main/AndroidManifest.xml | 2 ++ .../manager/ui/activity/MainActivity.java | 1 - .../manager/ui/activity/SettingsActivity.java | 14 ++++++++++++ app/src/main/res/values-zh-rCN/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/prefs.xml | 22 ++++++++++++------- core/src/main/cpp/main/src/symbol_cache.h | 1 - .../lsposed/lspd/service/ConfigManager.java | 19 +++++++++++----- gradle.properties | 1 - 9 files changed, 48 insertions(+), 16 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3793c9f9..1c30ab60 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -26,6 +26,8 @@ + diff --git a/app/src/main/java/org/lsposed/manager/ui/activity/MainActivity.java b/app/src/main/java/org/lsposed/manager/ui/activity/MainActivity.java index eaf9a859..26d18e73 100644 --- a/app/src/main/java/org/lsposed/manager/ui/activity/MainActivity.java +++ b/app/src/main/java/org/lsposed/manager/ui/activity/MainActivity.java @@ -21,7 +21,6 @@ package org.lsposed.manager.ui.activity; import android.content.Intent; -import android.content.res.ColorStateList; import android.os.Build; import android.os.Bundle; import android.text.method.LinkMovementMethod; diff --git a/app/src/main/java/org/lsposed/manager/ui/activity/SettingsActivity.java b/app/src/main/java/org/lsposed/manager/ui/activity/SettingsActivity.java index b625fd9a..4c19acf4 100644 --- a/app/src/main/java/org/lsposed/manager/ui/activity/SettingsActivity.java +++ b/app/src/main/java/org/lsposed/manager/ui/activity/SettingsActivity.java @@ -20,11 +20,15 @@ package org.lsposed.manager.ui.activity; +import android.Manifest; import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageManager; import android.os.AsyncTask; +import android.os.Build; import android.os.Bundle; +import android.provider.Settings; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; @@ -281,6 +285,16 @@ public class SettingsActivity extends BaseActivity { return true; }); } + + SwitchPreference prefShowHiddenIcons = findPreference("show_hidden_icon_apps_enabled"); + if (prefShowHiddenIcons != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q + && requireActivity().checkSelfPermission(Manifest.permission.WRITE_SECURE_SETTINGS) == PackageManager.PERMISSION_GRANTED) { + prefShowHiddenIcons.setVisible(true); + prefShowHiddenIcons.setChecked(Settings.Global.getInt( + requireActivity().getContentResolver(), "show_hidden_icon_apps_enabled", 1) != 0); + prefShowHiddenIcons.setOnPreferenceChangeListener((preference, newValue) -> Settings.Global.putInt(requireActivity().getContentResolver(), + "show_hidden_icon_apps_enabled", (boolean) newValue ? 1 : 0)); + } } @Override diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index b8bf5732..ac2b2978 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -152,6 +152,8 @@ 解决某些地区的 DNS 污染问题 主题颜色 应用中最常见的颜色 + Android10+ 系统的强制显示应用桌面图标功能 + 系统 自述文件 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ce799ef9..ff619b5b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -152,6 +152,8 @@ Workaround DNS poisoning in some nations Theme color Color that appears most frequently in the app + Forced display of the application launcher icon on Android 10+ + System Readme diff --git a/app/src/main/res/xml/prefs.xml b/app/src/main/res/xml/prefs.xml index 33af34e8..3aaf5722 100644 --- a/app/src/main/res/xml/prefs.xml +++ b/app/src/main/res/xml/prefs.xml @@ -18,10 +18,9 @@ ~ Copyright (C) 2021 LSPosed Contributors --> - - + + - + @@ -84,4 +80,14 @@ android:key="restore" android:title="@string/settings_restore" /> + + + + diff --git a/core/src/main/cpp/main/src/symbol_cache.h b/core/src/main/cpp/main/src/symbol_cache.h index b1a37d5f..c56fba1f 100644 --- a/core/src/main/cpp/main/src/symbol_cache.h +++ b/core/src/main/cpp/main/src/symbol_cache.h @@ -34,7 +34,6 @@ namespace lspd { extern void *sym_openInMemoryDexFilesNative; extern void *sym_createCookieWithArray; extern void *sym_createCookieWithDirectBuffer; - extern void *sym_openInMemoryDexFilesNative; extern void *sym_openDexFileNative; extern void *sym_setTrusted; diff --git a/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java b/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java index 654068f3..c569bbcd 100644 --- a/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java +++ b/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java @@ -53,6 +53,7 @@ import java.nio.channels.FileChannel; import java.nio.file.Files; import java.nio.file.StandardOpenOption; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; @@ -62,6 +63,11 @@ import java.util.concurrent.ConcurrentHashMap; // This config manager assume uid won't change when our service is off. // Otherwise, user should maintain it manually. public class ConfigManager { + private static final String[] MANAGER_PERMISSIONS_TO_GRANT = new String[]{ + "android.permission.INTERACT_ACROSS_USERS", + "android.permission.WRITE_SECURE_SETTINGS" + }; + static ConfigManager instance = null; private static final File basePath = new File("/data/adb/lspd"); @@ -618,11 +624,14 @@ public class ConfigManager { } public static void grantManagerPermission() { - try { - PackageService.grantRuntimePermission(readText(managerPath, BuildConfig.DEFAULT_MANAGER_PACKAGE_NAME), "android.permission.INTERACT_ACROSS_USERS", 0); - } catch (RemoteException e) { - Log.e(TAG, Log.getStackTraceString(e)); - } + String managerPackageName = readText(managerPath, BuildConfig.DEFAULT_MANAGER_PACKAGE_NAME); + Arrays.stream(MANAGER_PERMISSIONS_TO_GRANT).forEach(permission -> { + try { + PackageService.grantRuntimePermission(managerPackageName, permission, 0); + } catch (RemoteException e) { + Log.e(TAG, Log.getStackTraceString(e)); + } + }); } public boolean isModule(int uid) { diff --git a/gradle.properties b/gradle.properties index 28382bcd..b5b40d0e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,5 +12,4 @@ # org.gradle.parallel=true #Sat Jan 30 19:20:27 CST 202130.0.322.0.7026061 android.useAndroidX=true -android.enableJetifier=true android.enableResourceOptimizations=false