diff --git a/app/src/main/java/io/nekohasekai/sagernet/bg/BaseService.kt b/app/src/main/java/io/nekohasekai/sagernet/bg/BaseService.kt index 89db97a..0ad3c7e 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/bg/BaseService.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/bg/BaseService.kt @@ -156,7 +156,7 @@ class BaseService { if (success) runOnDefaultDispatcher { data.proxy!!.looper?.selectMain(ent.id) data.binder.broadcast { - it.stateChanged(-1, ent.displayName(), null) + it.stateChanged(-1, ServiceNotification.genTitle(ent), null) } } } @@ -321,7 +321,7 @@ class BaseService { data.changeState(State.Connecting) runOnMainDispatcher { try { - data.notification = createNotification(profile.displayName()) + data.notification = createNotification(ServiceNotification.genTitle(profile)) Executable.killAll() // clean up old processes preInit() diff --git a/app/src/main/java/io/nekohasekai/sagernet/bg/ServiceNotification.kt b/app/src/main/java/io/nekohasekai/sagernet/bg/ServiceNotification.kt index cae6891..09af2b5 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/bg/ServiceNotification.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/bg/ServiceNotification.kt @@ -17,6 +17,8 @@ import io.nekohasekai.sagernet.aidl.ISagerNetServiceCallback import io.nekohasekai.sagernet.aidl.SpeedDisplayData import io.nekohasekai.sagernet.aidl.TrafficData import io.nekohasekai.sagernet.database.DataStore +import io.nekohasekai.sagernet.database.ProxyEntity +import io.nekohasekai.sagernet.database.SagerDatabase import io.nekohasekai.sagernet.ktx.app import io.nekohasekai.sagernet.ktx.getColorAttr import io.nekohasekai.sagernet.ui.SwitchActivity @@ -40,6 +42,12 @@ class ServiceNotification( const val notificationId = 1 val flags = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) PendingIntent.FLAG_IMMUTABLE else 0 + + fun genTitle(ent: ProxyEntity): String { + val gn = if (DataStore.showGroupInNotification) + SagerDatabase.groupDao.getById(ent.groupId)?.displayName() else null + return if (gn == null) ent.displayName() else "[$gn] ${ent.displayName()}" + } } val showDirectSpeed = DataStore.showDirectSpeed diff --git a/app/src/main/java/io/nekohasekai/sagernet/bg/proto/TrafficLooper.kt b/app/src/main/java/io/nekohasekai/sagernet/bg/proto/TrafficLooper.kt index ca59896..9e87988 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/bg/proto/TrafficLooper.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/bg/proto/TrafficLooper.kt @@ -18,7 +18,7 @@ class TrafficLooper ) { private var job: Job? = null - private val items = mutableMapOf() + private val items = mutableMapOf() // associate ent id suspend fun stop() { job?.cancel() @@ -50,7 +50,7 @@ class TrafficLooper job = sc.launch { loop() } } - var selectorNowId = -1L + var selectorNowId = -114514L var selectorNowFakeTag = "" fun selectMain(id: Long) { @@ -111,6 +111,7 @@ class TrafficLooper if (proxy.config.selectorGroupId >= 0L) { itemMain = TrafficUpdater.TrafficLooperData(tag = TAG_PROXY) itemMainBase = TrafficUpdater.TrafficLooperData(tag = TAG_PROXY) + items[-2] = itemMain!! selectMain(proxy.config.mainEntId) } // @@ -136,9 +137,9 @@ class TrafficLooper // traffic val traffic = mutableMapOf() if (DataStore.profileTrafficStatistics) { - proxy.config.trafficMap.forEach { (tag, ents) -> + proxy.config.trafficMap.forEach { (_, ents) -> for (ent in ents) { - val item = items[ent.id] ?: return@forEach + val item = items[ent.id] ?: continue ent.rx = item.rx ent.tx = item.tx // ProfileManager.updateProfile(ent) // update DB diff --git a/app/src/main/java/io/nekohasekai/sagernet/bg/proto/TrafficUpdater.kt b/app/src/main/java/io/nekohasekai/sagernet/bg/proto/TrafficUpdater.kt index 86468cb..ff35c79 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/bg/proto/TrafficUpdater.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/bg/proto/TrafficUpdater.kt @@ -66,5 +66,7 @@ class TrafficUpdater( item.txRate = diff.txRate } } +// Logs.d(JavaUtil.gson.toJson(items)) +// Logs.d(JavaUtil.gson.toJson(updated)) } } diff --git a/app/src/main/java/io/nekohasekai/sagernet/database/DataStore.kt b/app/src/main/java/io/nekohasekai/sagernet/database/DataStore.kt index 2b451a2..985f82d 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/database/DataStore.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/database/DataStore.kt @@ -97,6 +97,7 @@ object DataStore : OnPreferenceDataStoreChangeListener { var allowAccess by configurationStore.boolean(Key.ALLOW_ACCESS) var speedInterval by configurationStore.stringToInt(Key.SPEED_INTERVAL) + var showGroupInNotification by configurationStore.boolean("showGroupInNotification") var remoteDns by configurationStore.string(Key.REMOTE_DNS) { "https://8.8.8.8/dns-query" } var directDns by configurationStore.string(Key.DIRECT_DNS) { "https://223.5.5.5/dns-query" } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 336dc52..12f125c 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -467,4 +467,5 @@ 落地代理 ShadowTLS 版本 分享订阅 + 在通知中显示组名 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a37ae92..2977117 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -508,5 +508,6 @@ Anyone can write advanced plugins, which can control NekoBox. please download an ShadowTLS ShadowTLS Version Share Subscription + Show group name in in notification \ No newline at end of file diff --git a/app/src/main/res/xml/global_preferences.xml b/app/src/main/res/xml/global_preferences.xml index 2a112f3..5ce9c99 100644 --- a/app/src/main/res/xml/global_preferences.xml +++ b/app/src/main/res/xml/global_preferences.xml @@ -41,11 +41,6 @@ app:icon="@drawable/baseline_public_24" app:key="mtu" app:title="@string/mtu" /> - + +