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