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