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