This commit is contained in:
arm64v8a 2023-03-31 16:51:38 +09:00
parent dfb81814d1
commit 24ecd8c1a9
11 changed files with 46 additions and 29 deletions

View File

@ -180,5 +180,6 @@ object Action {
const val SERVICE = "io.nekohasekai.sagernet.SERVICE"
const val CLOSE = "io.nekohasekai.sagernet.CLOSE"
const val RELOAD = "io.nekohasekai.sagernet.RELOAD"
const val SWITCH_WAKE_LOCK = "io.nekohasekai.sagernet.SWITCH_WAKELOCK"
// const val SWITCH_WAKE_LOCK = "io.nekohasekai.sagernet.SWITCH_WAKELOCK"
const val RESET_UPSTREAM_CONNECTIONS = "moe.nb4a.RESET_UPSTREAM_CONNECTIONS"
}

View File

@ -44,11 +44,18 @@ class BaseService {
var proxy: ProxyInstance? = null
var notification: ServiceNotification? = null
val receiver = broadcastReceiver { _, intent ->
val receiver = broadcastReceiver { ctx, intent ->
when (intent.action) {
Intent.ACTION_SHUTDOWN -> service.persistStats()
Action.RELOAD -> service.reload()
Action.SWITCH_WAKE_LOCK -> runOnDefaultDispatcher { service.switchWakeLock() }
// Action.SWITCH_WAKE_LOCK -> runOnDefaultDispatcher { service.switchWakeLock() }
Action.RESET_UPSTREAM_CONNECTIONS -> runOnDefaultDispatcher {
Libcore.resetAllConnections(true)
runOnMainDispatcher {
Toast.makeText(ctx, "Reset upstream connections done", Toast.LENGTH_SHORT)
.show()
}
}
else -> service.stopRunner()
}
}
@ -311,7 +318,8 @@ class BaseService {
addAction(Action.RELOAD)
addAction(Intent.ACTION_SHUTDOWN)
addAction(Action.CLOSE)
addAction(Action.SWITCH_WAKE_LOCK)
// addAction(Action.SWITCH_WAKE_LOCK)
addAction(Action.RESET_UPSTREAM_CONNECTIONS)
}, "$packageName.SERVICE", null)
data.closeReceiverRegistered = true
}

View File

@ -93,7 +93,7 @@ class ServiceNotification(
}
fun postNotificationWakeLockStatus(acquired: Boolean) {
updateActions(acquired)
updateActions()
builder.priority =
if (acquired) NotificationCompat.PRIORITY_HIGH else NotificationCompat.PRIORITY_LOW
update()
@ -113,7 +113,7 @@ class ServiceNotification(
init {
service as Context
updateActions(false)
updateActions()
Theme.apply(app)
Theme.apply(service)
@ -127,41 +127,43 @@ class ServiceNotification(
show()
}
private fun updateActions(wakeLockAcquired: Boolean) {
private fun updateActions() {
service as Context
builder.clearActions()
val closeAction = NotificationCompat.Action.Builder(
0, service.getText(R.string.stop), PendingIntent.getBroadcast(
service, 0, Intent(Action.CLOSE).setPackage(service.packageName), flags
)
).apply {
setShowsUserInterface(false)
}.build()
).setShowsUserInterface(false).build()
builder.addAction(closeAction)
val switchAction = NotificationCompat.Action.Builder(
0, service.getString(R.string.action_switch), PendingIntent.getActivity(
service, 0, Intent(service, SwitchActivity::class.java), flags
)
).apply {
setShowsUserInterface(false)
}.build()
).setShowsUserInterface(false).build()
builder.addAction(switchAction)
val wakeLockAction = NotificationCompat.Action.Builder(
0,
service.getText(if (!wakeLockAcquired) R.string.acquire_wake_lock else R.string.release_wake_lock),
val resetUpstreamAction = NotificationCompat.Action.Builder(
0, service.getString(R.string.reset_connections),
PendingIntent.getBroadcast(
service,
0,
Intent(Action.SWITCH_WAKE_LOCK).setPackage(service.packageName),
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) PendingIntent.FLAG_IMMUTABLE else 0
service, 0, Intent(Action.RESET_UPSTREAM_CONNECTIONS), flags
)
).apply {
setShowsUserInterface(false)
}.build()
builder.addAction(wakeLockAction)
).setShowsUserInterface(false).build()
builder.addAction(resetUpstreamAction)
// val wakeLockAction = NotificationCompat.Action.Builder(
// 0,
// service.getText(if (!wakeLockAcquired) R.string.acquire_wake_lock else R.string.release_wake_lock),
// PendingIntent.getBroadcast(
// service,
// 0,
// Intent(Action.SWITCH_WAKE_LOCK).setPackage(service.packageName),
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) PendingIntent.FLAG_IMMUTABLE else 0
// )
// ).setShowsUserInterface(false).build()
// builder.addAction(wakeLockAction)
}
override fun onReceive(context: Context, intent: Intent) {

View File

@ -24,7 +24,7 @@ abstract class SagerDatabase : RoomDatabase() {
companion object {
@OptIn(DelicateCoroutinesApi::class)
@Suppress("EXPERIMENTAL_API_USAGE")
private val instance by lazy {
val instance by lazy {
SagerNet.application.getDatabasePath(Key.DB_PROFILE).parentFile?.mkdirs()
Room.databaseBuilder(SagerNet.application, SagerDatabase::class.java, Key.DB_PROFILE)
.addMigrations(*SagerDatabase_Migrations.build())

View File

@ -13,7 +13,7 @@ import kotlinx.coroutines.launch
@GenerateRoomMigrations
abstract class PublicDatabase : RoomDatabase() {
companion object {
private val instance by lazy {
val instance by lazy {
SagerNet.application.getDatabasePath(Key.DB_PROFILE).parentFile?.mkdirs()
Room.databaseBuilder(SagerNet.application, PublicDatabase::class.java, Key.DB_PUBLIC)
.allowMainThreadQueries()

View File

@ -400,7 +400,7 @@ object RawUpdater : GroupUpdater() {
// wireguard
try {
proxies.addAll(parseWireGuard(text).map {
if (fileName.isNotBlank()) it.name = fileName
if (fileName.isNotBlank()) it.name = fileName.removeSuffix(".conf")
it
})
return proxies

View File

@ -29,6 +29,8 @@ import io.nekohasekai.sagernet.R
import io.nekohasekai.sagernet.SagerNet
import io.nekohasekai.sagernet.bg.Executable
import io.nekohasekai.sagernet.database.DataStore
import io.nekohasekai.sagernet.database.SagerDatabase
import io.nekohasekai.sagernet.database.preference.PublicDatabase
import io.nekohasekai.sagernet.ui.MainActivity
import io.nekohasekai.sagernet.ui.ThemedActivity
import kotlinx.coroutines.*
@ -242,6 +244,8 @@ fun Fragment.needRestart() {
val ctx = requireContext()
runOnDefaultDispatcher {
delay(500)
SagerDatabase.instance.close()
PublicDatabase.instance.close()
Executable.killAll(true)
ProcessPhoenix.triggerRebirth(ctx, Intent(ctx, MainActivity::class.java))
}

View File

@ -16,7 +16,6 @@ abstract class TempDatabase : RoomDatabase() {
private val instance by lazy {
Room.inMemoryDatabaseBuilder(SagerNet.application, TempDatabase::class.java)
.allowMainThreadQueries()
.enableMultiInstanceInvalidation()
.fallbackToDestructiveMigration()
.setQueryExecutor { GlobalScope.launch { it.run() } }
.build()

View File

@ -468,4 +468,5 @@
<string name="shadowtls_version">ShadowTLS 版本</string>
<string name="share_subscription">分享订阅</string>
<string name="show_group_in_notification">在通知中显示组名</string>
<string name="reset_connections">重置连接</string>
</resources>

View File

@ -509,5 +509,6 @@ Anyone can write advanced plugins, which can control NekoBox. please download an
<string name="shadowtls_version">ShadowTLS Version</string>
<string name="share_subscription">Share Subscription</string>
<string name="show_group_in_notification">Show group name in in notification</string>
<string name="reset_connections">Reset Connections</string>
</resources>

View File

@ -66,6 +66,7 @@ func VersionBox() string {
func ResetAllConnections(system bool) {
if system {
conntrack.Close()
log.Println("Reset system connections done")
}
}