@@ -2,14 +2,20 @@ package com.github.kr328.clash
22
33import android.app.Application
44import android.content.Context
5+ import android.content.Intent
6+ import androidx.core.content.pm.ShortcutInfoCompat
7+ import androidx.core.content.pm.ShortcutManagerCompat
8+ import androidx.core.graphics.drawable.IconCompat
59import com.github.kr328.clash.common.Global
610import com.github.kr328.clash.common.compat.currentProcessName
11+ import com.github.kr328.clash.common.constants.Intents
712import com.github.kr328.clash.common.log.Log
813import com.github.kr328.clash.remote.Remote
914import com.github.kr328.clash.service.util.sendServiceRecreated
1015import com.github.kr328.clash.util.clashDir
1116import java.io.File
1217import java.io.FileOutputStream
18+ import com.github.kr328.clash.design.R as DesignR
1319
1420
1521@Suppress(" unused" )
@@ -30,11 +36,49 @@ class MainApplication : Application() {
3036
3137 if (processName == packageName) {
3238 Remote .launch()
39+ setupShortcuts()
3340 } else {
3441 sendServiceRecreated()
3542 }
3643 }
3744
45+ private fun setupShortcuts () {
46+ val toggle = ShortcutInfoCompat .Builder (this , " toggle_clash" )
47+ .setShortLabel(getString(DesignR .string.shortcut_toggle_short))
48+ .setLongLabel(getString(DesignR .string.shortcut_toggle_long))
49+ .setIcon(IconCompat .createWithResource(this , DesignR .drawable.ic_baseline_swap_vertical_circle))
50+ .setIntent(
51+ Intent (Intents .ACTION_TOGGLE_CLASH )
52+ .setClassName(this , ExternalControlActivity ::class .java.name)
53+ )
54+ .setRank(0 )
55+ .build()
56+
57+ val start = ShortcutInfoCompat .Builder (this , " start_clash" )
58+ .setShortLabel(getString(DesignR .string.shortcut_start_short))
59+ .setLongLabel(getString(DesignR .string.shortcut_start_long))
60+ .setIcon(IconCompat .createWithResource(this , DesignR .drawable.ic_baseline_flash_on))
61+ .setIntent(
62+ Intent (Intents .ACTION_START_CLASH )
63+ .setClassName(this , ExternalControlActivity ::class .java.name)
64+ )
65+ .setRank(1 )
66+ .build()
67+
68+ val stop = ShortcutInfoCompat .Builder (this , " stop_clash" )
69+ .setShortLabel(getString(DesignR .string.shortcut_stop_short))
70+ .setLongLabel(getString(DesignR .string.shortcut_stop_long))
71+ .setIcon(IconCompat .createWithResource(this , DesignR .drawable.ic_baseline_stop))
72+ .setIntent(
73+ Intent (Intents .ACTION_STOP_CLASH )
74+ .setClassName(this , ExternalControlActivity ::class .java.name)
75+ )
76+ .setRank(2 )
77+ .build()
78+
79+ ShortcutManagerCompat .setDynamicShortcuts(this , listOf (toggle, start, stop))
80+ }
81+
3882 private fun extractGeoFiles () {
3983 clashDir.mkdirs()
4084
0 commit comments