Add ignore battery optimizations card

This commit is contained in:
世界
2023-07-16 13:29:55 +08:00
parent f9fef233ca
commit 948312e9e4
6 changed files with 269 additions and 169 deletions

View File

@@ -4,6 +4,7 @@ import android.app.Application
import android.app.NotificationManager
import android.content.Context
import android.net.ConnectivityManager
import android.os.PowerManager
import androidx.core.content.getSystemService
import go.Seq
import io.nekohasekai.sfa.bg.UpdateProfileWork
@@ -35,6 +36,7 @@ class Application : Application() {
val notification by lazy { application.getSystemService<NotificationManager>()!! }
val connectivity by lazy { application.getSystemService<ConnectivityManager>()!! }
val packageManager by lazy { application.packageManager }
val powerManager by lazy { application.getSystemService<PowerManager>()!! }
}
}

View File

@@ -268,7 +268,8 @@ class DashboardFragment : Fragment(), CommandClientHandler {
return
}
runCatching {
Libbox.newStandaloneCommandClient(mainActivity.filesDir.absolutePath).serviceReload()
Libbox.newStandaloneCommandClient(mainActivity.filesDir.absolutePath)
.serviceReload()
}.onFailure {
withContext(Dispatchers.Main) {
mainActivity.errorDialogBuilder(it).show()

View File

@@ -1,14 +1,19 @@
package io.nekohasekai.sfa.ui.main
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.view.isGone
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import com.microsoft.appcenter.AppCenter
import com.microsoft.appcenter.distribute.Distribute
import io.nekohasekai.libbox.Libbox
import io.nekohasekai.sfa.Application
import io.nekohasekai.sfa.R
import io.nekohasekai.sfa.constant.EnabledType
import io.nekohasekai.sfa.database.Settings
@@ -35,6 +40,14 @@ class SettingsFragment : Fragment() {
return binding.root
}
private val requestIgnoreBatteryOptimizations = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { _ ->
lifecycleScope.launch(Dispatchers.IO) {
reloadSettings()
}
}
private fun onCreate() {
val activity = activity as MainActivity? ?: return
binding.versionText.text = Libbox.version()
@@ -80,6 +93,17 @@ class SettingsFragment : Fragment() {
Settings.disableMemoryLimit = !newValue
}
}
binding.dontKillMyAppButton.setOnClickListener {
it.context.launchCustomTab("https://dontkillmyapp.com/")
}
binding.requestIgnoreBatteryOptimizationsButton.setOnClickListener {
requestIgnoreBatteryOptimizations.launch(
Intent(
android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
Uri.parse("package:${Application.application.packageName}")
)
)
}
binding.communityButton.setOnClickListener {
it.context.launchCustomTab("https://community.sagernet.org/")
}
@@ -96,6 +120,8 @@ class SettingsFragment : Fragment() {
)
val appCenterEnabled = Settings.analyticsAllowed == Settings.ANALYSIS_ALLOWED
val checkUpdateEnabled = Settings.checkUpdateEnabled
val removeBackgroudPermissionPage =
Application.powerManager.isIgnoringBatteryOptimizations(Application.application.packageName)
withContext(Dispatchers.Main) {
binding.dataSizeText.text = dataSize
binding.appCenterEnabled.text = EnabledType.from(appCenterEnabled).name
@@ -105,6 +131,7 @@ class SettingsFragment : Fragment() {
binding.checkUpdateEnabled.setSimpleItems(R.array.enabled)
binding.disableMemoryLimit.text = EnabledType.from(!Settings.disableMemoryLimit).name
binding.disableMemoryLimit.setSimpleItems(R.array.enabled)
binding.backgroundPermissionCard.isGone = removeBackgroudPermissionPage
}
}