diff --git a/README.md b/README.md
index e1c5be5c3c5..ccc679ee0e5 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,6 @@
软件遵循GPL V3协议,是完全开源免费的,但开发者写代码、维护需要投入大量时间精力。
大家的支持是项目得以延续的动力。
支持码农哥加的功能,请点击以下链接(Sponsor)或者扫码。
-
https://afdian.com/a/manong
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index da29c11f5e5..3725ad678a5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,9 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt
index 1a244ae5ed1..1a5734cb2a5 100644
--- a/buildSrc/src/main/kotlin/Versions.kt
+++ b/buildSrc/src/main/kotlin/Versions.kt
@@ -8,8 +8,8 @@ object Versions {
const val versionCode = 1500
const val compileSdk = 36
- const val minSdk = 31
- const val targetSdk = 32
+ const val minSdk = 30
+ const val targetSdk = 30
const val wearMinSdk = 30
const val wearTargetSdk = 30
diff --git a/plugins/configuration/src/main/kotlin/app/aaps/plugins/configuration/AndroidPermissionImpl.kt b/plugins/configuration/src/main/kotlin/app/aaps/plugins/configuration/AndroidPermissionImpl.kt
index 5764cca0f1e..bfac4ea9905 100644
--- a/plugins/configuration/src/main/kotlin/app/aaps/plugins/configuration/AndroidPermissionImpl.kt
+++ b/plugins/configuration/src/main/kotlin/app/aaps/plugins/configuration/AndroidPermissionImpl.kt
@@ -7,6 +7,7 @@ import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
+import android.os.Build
import android.os.PowerManager
import android.provider.Settings
import androidx.core.content.ContextCompat
@@ -84,6 +85,20 @@ class AndroidPermissionImpl @Inject constructor(
return !selfCheck
}
+ /**
+ * 新增方法:统一判断蓝牙权限,兼容 Android 11 / 12+
+ */
+ private fun hasBluetoothPermission(context: Context): Boolean {
+ return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ !permissionNotGranted(context, Manifest.permission.BLUETOOTH_CONNECT) &&
+ !permissionNotGranted(context, Manifest.permission.BLUETOOTH_SCAN)
+ } else {
+ !permissionNotGranted(context, Manifest.permission.BLUETOOTH) &&
+ !permissionNotGranted(context, Manifest.permission.BLUETOOTH_ADMIN) &&
+ !permissionNotGranted(context, Manifest.permission.ACCESS_FINE_LOCATION)
+ }
+ }
+
@Synchronized
override fun notifyForSMSPermissions(activity: FragmentActivity) {
if (permissionNotGranted(activity, Manifest.permission.RECEIVE_SMS))
@@ -106,21 +121,31 @@ class AndroidPermissionImpl @Inject constructor(
@SuppressLint("MissingPermission")
@Synchronized
override fun notifyForBtConnectPermission(activity: FragmentActivity) {
- if (activePlugin.activePump !is VirtualPump)
- // Manifest.permission.BLUETOOTH_CONNECT
- if (permissionNotGranted(activity, Manifest.permission.BLUETOOTH_CONNECT) || permissionNotGranted(activity, Manifest.permission.BLUETOOTH_SCAN))
+ if (activePlugin.activePump !is VirtualPump) {
+ if (!hasBluetoothPermission(activity)) {
uiInteraction.addNotification(
id = Notification.PERMISSION_BT,
text = rh.gs(app.aaps.core.ui.R.string.need_connect_permission),
level = Notification.URGENT,
actionButtonId = R.string.request,
- action = { askForPermission(activity, arrayOf(Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT)) },
- validityCheck = { permissionNotGranted(activity, Manifest.permission.BLUETOOTH_CONNECT) || permissionNotGranted(activity, Manifest.permission.BLUETOOTH_SCAN) }
+ action = {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ askForPermission(activity, arrayOf(Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT))
+ } else {
+ askForPermission(activity, arrayOf(
+ Manifest.permission.BLUETOOTH,
+ Manifest.permission.BLUETOOTH_ADMIN,
+ Manifest.permission.ACCESS_FINE_LOCATION
+ ))
+ }
+ },
+ validityCheck = { !hasBluetoothPermission(activity) }
)
- else {
+ } else {
activity.startActivity(Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE))
uiInteraction.dismissNotification(Notification.PERMISSION_BT)
}
+ }
}
@Synchronized
@@ -137,7 +162,8 @@ class AndroidPermissionImpl @Inject constructor(
else uiInteraction.dismissNotification(Notification.PERMISSION_BATTERY)
}
- @Synchronized override fun notifyForStoragePermission(activity: FragmentActivity) {
+ @Synchronized
+ override fun notifyForStoragePermission(activity: FragmentActivity) {
if (permissionNotGranted(activity, Manifest.permission.READ_EXTERNAL_STORAGE))
uiInteraction.addNotification(
id = Notification.PERMISSION_STORAGE,
@@ -150,7 +176,8 @@ class AndroidPermissionImpl @Inject constructor(
else uiInteraction.dismissNotification(Notification.PERMISSION_STORAGE)
}
- @Synchronized override fun notifyForLocationPermissions(activity: FragmentActivity) {
+ @Synchronized
+ override fun notifyForLocationPermissions(activity: FragmentActivity) {
if (permissionNotGranted(activity, Manifest.permission.ACCESS_FINE_LOCATION) ||
permissionNotGranted(activity, Manifest.permission.ACCESS_COARSE_LOCATION)
) {
@@ -174,8 +201,8 @@ class AndroidPermissionImpl @Inject constructor(
} else uiInteraction.dismissNotification(Notification.PERMISSION_LOCATION)
}
- @Synchronized override fun notifyForSystemWindowPermissions(activity: FragmentActivity) {
- // Check if Android Q or higher
+ @Synchronized
+ override fun notifyForSystemWindowPermissions(activity: FragmentActivity) {
if (!Settings.canDrawOverlays(activity))
uiInteraction.addNotification(
id = Notification.PERMISSION_SYSTEM_WINDOW,
@@ -183,8 +210,6 @@ class AndroidPermissionImpl @Inject constructor(
level = Notification.URGENT,
actionButtonId = R.string.request,
action = {
- // Show alert dialog to the user saying a separate permission is needed
- // Launch the settings activity if the user prefers
val intent = Intent(
Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
("package:" + activity.packageName).toUri()
@@ -195,4 +220,4 @@ class AndroidPermissionImpl @Inject constructor(
)
else uiInteraction.dismissNotification(Notification.PERMISSION_SYSTEM_WINDOW)
}
-}
\ No newline at end of file
+}