Change android notification permission

This commit is contained in:
problematicconsumer
2023-09-10 20:19:54 +03:30
parent 778db2dd83
commit 62281b31ce

View File

@@ -1,8 +1,14 @@
package com.hiddify.hiddify package com.hiddify.hiddify
import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.Manifest
import android.content.pm.PackageManager
import android.net.VpnService import android.net.VpnService
import android.os.Build
import android.util.Log import android.util.Log
import androidx.core.app.ActivityCompat
import androidx.core.app.NotificationManagerCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
@@ -18,6 +24,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.util.LinkedList import java.util.LinkedList
class MainActivity : FlutterFragmentActivity(), ServiceConnection.Callback { class MainActivity : FlutterFragmentActivity(), ServiceConnection.Callback {
companion object { companion object {
private const val TAG = "ANDROID/MyActivity" private const val TAG = "ANDROID/MyActivity"
@@ -52,7 +59,8 @@ class MainActivity : FlutterFragmentActivity(), ServiceConnection.Callback {
fun startService() { fun startService() {
if (!ServiceNotification.checkPermission()) { if (!ServiceNotification.checkPermission()) {
Log.d(TAG, "missing notification permission") // Log.d(TAG, "missing notification permission")
grantNotificationPermission()
return return
} }
lifecycleScope.launch(Dispatchers.IO) { lifecycleScope.launch(Dispatchers.IO) {
@@ -123,6 +131,29 @@ class MainActivity : FlutterFragmentActivity(), ServiceConnection.Callback {
super.onDestroy() super.onDestroy()
} }
@SuppressLint("NewApi")
private fun grantNotificationPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.POST_NOTIFICATIONS),
NOTIFICATION_PERMISSION_REQUEST_CODE
)
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
if (requestCode == NOTIFICATION_PERMISSION_REQUEST_CODE) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
startService()
} else onServiceAlert(Alert.RequestNotificationPermission, null)
}
}
private suspend fun prepare() = withContext(Dispatchers.Main) { private suspend fun prepare() = withContext(Dispatchers.Main) {
try { try {
val intent = VpnService.prepare(this@MainActivity) val intent = VpnService.prepare(this@MainActivity)