Skip to content
Closed

1 #84

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
软件遵循GPL V3协议,是完全开源免费的,但开发者写代码、维护需要投入大量时间精力。
大家的支持是项目得以延续的动力。
支持码农哥加的功能,请点击以下链接(Sponsor)或者扫码。

https://afdian.com/a/manong

<a href="/Documentation/donation.jpg"><img src="/Documentation/donation.jpg?raw=true" alt="Donation" width="300"></a>
Expand Down
20 changes: 18 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,9 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">


<!-- ===== Android 11 及以下 蓝牙权限 ===== -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

<!-- Android 11 扫描蓝牙必须的定位权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<!-- ===== Android 12+ 蓝牙权限 ===== -->
<uses-permission
android:name="android.permission.BLUETOOTH_CONNECT"
android:usesPermissionFlags="neverForLocation" />

<uses-permission
android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
Expand Down
4 changes: 2 additions & 2 deletions buildSrc/src/main/kotlin/Versions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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))
Expand All @@ -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
Expand All @@ -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,
Expand All @@ -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)
) {
Expand All @@ -174,17 +201,15 @@ 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,
text = rh.gs(R.string.need_location_permission),
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()
Expand All @@ -195,4 +220,4 @@ class AndroidPermissionImpl @Inject constructor(
)
else uiInteraction.dismissNotification(Notification.PERMISSION_SYSTEM_WINDOW)
}
}
}
Loading