From 6f521d5ac1ecb7f54dc72b90e3e8c1625acf0369 Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Thu, 10 Apr 2025 10:19:19 -0400 Subject: [PATCH] Support hiding app icon (#492) --- app/src/main/AndroidManifest.xml | 25 ++++++++++++++++--- .../github/kr328/clash/AppSettingsActivity.kt | 15 +++++++++++ .../com/github/kr328/clash/DialerReceiver.kt | 13 ++++++++++ .../com/github/kr328/clash/MainActivity.kt | 4 ++- .../kr328/clash/design/AppSettingsDesign.kt | 12 +++++++++ .../kr328/clash/design/store/UiStore.kt | 5 ++++ .../main/res/drawable/ic_baseline_hide.xml | 12 +++++++++ design/src/main/res/values-zh/strings.xml | 2 ++ design/src/main/res/values/strings.xml | 3 +++ 9 files changed, 86 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/com/github/kr328/clash/DialerReceiver.kt create mode 100644 design/src/main/res/drawable/ic_baseline_hide.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cd595f0b..f2d40f15 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,15 +45,23 @@ android:launchMode="singleTop"> - - - - + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/github/kr328/clash/AppSettingsActivity.kt b/app/src/main/java/com/github/kr328/clash/AppSettingsActivity.kt index c600c4eb..24bbe52f 100644 --- a/app/src/main/java/com/github/kr328/clash/AppSettingsActivity.kt +++ b/app/src/main/java/com/github/kr328/clash/AppSettingsActivity.kt @@ -1,5 +1,6 @@ package com.github.kr328.clash +import android.content.ComponentName import android.content.pm.PackageManager import com.github.kr328.clash.common.util.componentName import com.github.kr328.clash.design.AppSettingsDesign @@ -17,6 +18,7 @@ class AppSettingsActivity : BaseActivity(), Behavior { ServiceStore(this), this, clashRunning, + ::onHideIconChange, ) setContentDesign(design) @@ -59,4 +61,17 @@ class AppSettingsActivity : BaseActivity(), Behavior { PackageManager.DONT_KILL_APP, ) } + + private fun onHideIconChange(hide: Boolean) { + val newState = if (hide) { + PackageManager.COMPONENT_ENABLED_STATE_DISABLED + } else { + PackageManager.COMPONENT_ENABLED_STATE_ENABLED + } + packageManager.setComponentEnabledSetting( + ComponentName(this, mainActivityAlias), + newState, + PackageManager.DONT_KILL_APP + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/github/kr328/clash/DialerReceiver.kt b/app/src/main/java/com/github/kr328/clash/DialerReceiver.kt new file mode 100644 index 00000000..258d580b --- /dev/null +++ b/app/src/main/java/com/github/kr328/clash/DialerReceiver.kt @@ -0,0 +1,13 @@ +package com.github.kr328.clash + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent + +class DialerReceiver : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + val intent = Intent(context, MainActivity::class.java) + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + context.startActivity(intent) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/github/kr328/clash/MainActivity.kt b/app/src/main/java/com/github/kr328/clash/MainActivity.kt index a7ee7cd4..c4237906 100644 --- a/app/src/main/java/com/github/kr328/clash/MainActivity.kt +++ b/app/src/main/java/com/github/kr328/clash/MainActivity.kt @@ -158,4 +158,6 @@ class MainActivity : BaseActivity() { } } } -} \ No newline at end of file +} + +val mainActivityAlias = "${MainActivity::class.java.name}Alias" \ No newline at end of file diff --git a/design/src/main/java/com/github/kr328/clash/design/AppSettingsDesign.kt b/design/src/main/java/com/github/kr328/clash/design/AppSettingsDesign.kt index ad296de5..fdef937d 100644 --- a/design/src/main/java/com/github/kr328/clash/design/AppSettingsDesign.kt +++ b/design/src/main/java/com/github/kr328/clash/design/AppSettingsDesign.kt @@ -19,6 +19,7 @@ class AppSettingsDesign( srvStore: ServiceStore, behavior: Behavior, running: Boolean, + onHideIconChange: (hide: Boolean) -> Unit, ) : Design(context) { enum class Request { ReCreateAllActivities @@ -65,6 +66,17 @@ class AppSettingsDesign( } } + switch( + value = uiStore::hideAppIcon, + icon = R.drawable.ic_baseline_hide, + title = R.string.hide_app_icon_title, + summary = R.string.hide_app_icon_desc, + ) { + listener = OnChangedListener { + onHideIconChange(uiStore::hideAppIcon.get()) + } + } + category(R.string.service) switch( diff --git a/design/src/main/java/com/github/kr328/clash/design/store/UiStore.kt b/design/src/main/java/com/github/kr328/clash/design/store/UiStore.kt index f0202a64..d6c037b4 100644 --- a/design/src/main/java/com/github/kr328/clash/design/store/UiStore.kt +++ b/design/src/main/java/com/github/kr328/clash/design/store/UiStore.kt @@ -25,6 +25,11 @@ class UiStore(context: Context) { values = DarkMode.values() ) + var hideAppIcon: Boolean by store.boolean( + key = "hide_app_icon", + defaultValue = false + ) + var proxyExcludeNotSelectable by store.boolean( key = "proxy_exclude_not_selectable", defaultValue = false, diff --git a/design/src/main/res/drawable/ic_baseline_hide.xml b/design/src/main/res/drawable/ic_baseline_hide.xml new file mode 100644 index 00000000..4e0b4d70 --- /dev/null +++ b/design/src/main/res/drawable/ic_baseline_hide.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/design/src/main/res/values-zh/strings.xml b/design/src/main/res/values-zh/strings.xml index 64e8dea0..d1eb2b75 100644 --- a/design/src/main/res/values-zh/strings.xml +++ b/design/src/main/res/values-zh/strings.xml @@ -37,6 +37,8 @@ %s 已激活 %s 已转发 全局模式 + 隐藏应用图标 + 可以在拨号盘输入 *#*#252746382#*#* 打开应用 历史 从文件导入 从 URL 导入 diff --git a/design/src/main/res/values/strings.xml b/design/src/main/res/values/strings.xml index 2840f209..9681f9f7 100644 --- a/design/src/main/res/values/strings.xml +++ b/design/src/main/res/values/strings.xml @@ -341,4 +341,7 @@ External Control Clash.Meta service started Clash.Meta service stopped + + Hide App Icon + You can dial *#*#252746382#*#* to open this App