[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+
This commit is contained in:
tehcneko 2021-05-06 20:27:38 +08:00 committed by GitHub
parent 0e66782101
commit 7139c3f11f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 48 additions and 16 deletions

View File

@ -26,6 +26,8 @@
<uses-permission
android:name="android.permission.INTERACT_ACROSS_USERS"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"
tools:ignore="ProtectedPermissions" />
<queries>
<intent>

View File

@ -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;

View File

@ -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

View File

@ -152,6 +152,8 @@
<string name="dns_over_http_summary">解决某些地区的 DNS 污染问题</string>
<string name="theme_color">主题颜色</string>
<string name="theme_color_summary">应用中最常见的颜色</string>
<string name="settings_show_hidden_icon_apps_enabled">Android10+ 系统的强制显示应用桌面图标功能</string>
<string name="settings_group_system">系统</string>
<!-- Module Repo -->
<string name="module_readme">自述文件</string>

View File

@ -152,6 +152,8 @@
<string name="dns_over_http_summary">Workaround DNS poisoning in some nations</string>
<string name="theme_color">Theme color</string>
<string name="theme_color_summary">Color that appears most frequently in the app</string>
<string name="settings_show_hidden_icon_apps_enabled">Forced display of the application launcher icon on Android 10+</string>
<string name="settings_group_system">System</string>
<!-- Module Repo -->
<string name="module_readme">Readme</string>

View File

@ -18,10 +18,9 @@
~ Copyright (C) 2021 LSPosed Contributors
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<com.takisoft.preferencex.PreferenceCategory
android:key="group_network"
android:title="@string/group_network">
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<com.takisoft.preferencex.PreferenceCategory android:title="@string/group_network">
<SwitchPreference
android:defaultValue="false"
@ -53,9 +52,7 @@
android:summary="@string/pure_black_dark_theme_summary" />
</com.takisoft.preferencex.PreferenceCategory>
<com.takisoft.preferencex.PreferenceCategory
android:key="group_framework"
android:title="@string/settings_group_framework">
<com.takisoft.preferencex.PreferenceCategory android:title="@string/settings_group_framework">
<SwitchPreference
android:defaultValue="false"
@ -73,7 +70,6 @@
</com.takisoft.preferencex.PreferenceCategory>
<com.takisoft.preferencex.PreferenceCategory
android:key="group_backup"
android:title="@string/settings_backup_and_restore"
android:summary="@string/settings_backup_and_restore_summery"
android:icon="@drawable/ic_baseline_settings_backup_restore_24">
@ -84,4 +80,14 @@
android:key="restore"
android:title="@string/settings_restore" />
</com.takisoft.preferencex.PreferenceCategory>
<com.takisoft.preferencex.PreferenceCategory
android:title="@string/settings_group_system">
<SwitchPreference
android:defaultValue="true"
android:key="show_hidden_icon_apps_enabled"
android:title="@string/settings_show_hidden_icon_apps_enabled"
android:persistent="false"
android:visible="false" />
</com.takisoft.preferencex.PreferenceCategory>
</PreferenceScreen>

View File

@ -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;

View File

@ -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) {

View File

@ -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