kopia lustrzana https://github.com/meshtastic/Meshtastic-Android
chore: update `targetSdk` to API 34
rodzic
de180f2d35
commit
e31b7d4911
|
@ -114,7 +114,7 @@ jobs:
|
||||||
timeout-minutes: 30
|
timeout-minutes: 30
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
api-level: [26, 33]
|
api-level: [26, 34]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
|
@ -37,7 +37,7 @@ android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "com.geeksville.mesh"
|
applicationId "com.geeksville.mesh"
|
||||||
minSdkVersion 21 // The oldest emulator image I have tried is 22 (though 21 probably works)
|
minSdkVersion 21 // The oldest emulator image I have tried is 22 (though 21 probably works)
|
||||||
targetSdk 33
|
targetSdk 34
|
||||||
versionCode 30315 // format is Mmmss (where M is 1+the numeric major number
|
versionCode 30315 // format is Mmmss (where M is 1+the numeric major number
|
||||||
versionName "2.3.15"
|
versionName "2.3.15"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
|
@ -47,6 +47,7 @@
|
||||||
|
|
||||||
<!-- We run our mesh code as a foreground service - FIXME, find a way to stop doing this -->
|
<!-- We run our mesh code as a foreground service - FIXME, find a way to stop doing this -->
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE" />
|
||||||
|
|
||||||
<!-- Needed to open our bluetooth connection to our paired device (after reboot) -->
|
<!-- Needed to open our bluetooth connection to our paired device (after reboot) -->
|
||||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||||
|
@ -101,11 +102,13 @@
|
||||||
android:value="false" />
|
android:value="false" />
|
||||||
|
|
||||||
<!-- we need bind job service for oreo -->
|
<!-- we need bind job service for oreo -->
|
||||||
|
<!--
|
||||||
<service
|
<service
|
||||||
android:name="com.geeksville.mesh.service.SoftwareUpdateService"
|
android:name="com.geeksville.mesh.service.SoftwareUpdateService"
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
android:permission="android.permission.BIND_JOB_SERVICE" />
|
android:permission="android.permission.BIND_JOB_SERVICE" />
|
||||||
|
-->
|
||||||
|
|
||||||
<!-- This is the public API for doing mesh radio operations from android apps -->
|
<!-- This is the public API for doing mesh radio operations from android apps -->
|
||||||
<service
|
<service
|
||||||
|
|
|
@ -6,6 +6,7 @@ import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.IntentFilter
|
import android.content.IntentFilter
|
||||||
import androidx.annotation.RequiresPermission
|
import androidx.annotation.RequiresPermission
|
||||||
|
import com.geeksville.mesh.util.registerReceiverCompat
|
||||||
import kotlinx.coroutines.channels.awaitClose
|
import kotlinx.coroutines.channels.awaitClose
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.callbackFlow
|
import kotlinx.coroutines.flow.callbackFlow
|
||||||
|
@ -24,7 +25,7 @@ internal fun BluetoothDevice.createBond(context: Context): Flow<Int> = callbackF
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val filter = IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED)
|
val filter = IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED)
|
||||||
context.registerReceiver(receiver, filter)
|
context.registerReceiverCompat(receiver, filter)
|
||||||
createBond()
|
createBond()
|
||||||
|
|
||||||
awaitClose { context.unregisterReceiver(receiver) }
|
awaitClose { context.unregisterReceiver(receiver) }
|
||||||
|
|
|
@ -14,6 +14,7 @@ import androidx.lifecycle.coroutineScope
|
||||||
import com.geeksville.mesh.android.Logging
|
import com.geeksville.mesh.android.Logging
|
||||||
import com.geeksville.mesh.CoroutineDispatchers
|
import com.geeksville.mesh.CoroutineDispatchers
|
||||||
import com.geeksville.mesh.android.hasBluetoothPermission
|
import com.geeksville.mesh.android.hasBluetoothPermission
|
||||||
|
import com.geeksville.mesh.util.registerReceiverCompat
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
@ -46,7 +47,7 @@ class BluetoothRepository @Inject constructor(
|
||||||
processLifecycle.coroutineScope.launch(dispatchers.default) {
|
processLifecycle.coroutineScope.launch(dispatchers.default) {
|
||||||
updateBluetoothState()
|
updateBluetoothState()
|
||||||
bluetoothBroadcastReceiverLazy.get().let { receiver ->
|
bluetoothBroadcastReceiverLazy.get().let { receiver ->
|
||||||
application.registerReceiver(receiver, receiver.intentFilter)
|
application.registerReceiverCompat(receiver, receiver.intentFilter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import android.content.IntentFilter
|
||||||
import android.hardware.usb.UsbDevice
|
import android.hardware.usb.UsbDevice
|
||||||
import android.hardware.usb.UsbManager
|
import android.hardware.usb.UsbManager
|
||||||
import com.geeksville.mesh.util.PendingIntentCompat
|
import com.geeksville.mesh.util.PendingIntentCompat
|
||||||
|
import com.geeksville.mesh.util.registerReceiverCompat
|
||||||
import kotlinx.coroutines.channels.awaitClose
|
import kotlinx.coroutines.channels.awaitClose
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.callbackFlow
|
import kotlinx.coroutines.flow.callbackFlow
|
||||||
|
@ -32,7 +33,7 @@ internal fun UsbManager.requestPermission(
|
||||||
PendingIntentCompat.FLAG_MUTABLE
|
PendingIntentCompat.FLAG_MUTABLE
|
||||||
)
|
)
|
||||||
val filter = IntentFilter(ACTION_USB_PERMISSION)
|
val filter = IntentFilter(ACTION_USB_PERMISSION)
|
||||||
context.registerReceiver(receiver, filter)
|
context.registerReceiverCompat(receiver, filter)
|
||||||
requestPermission(device, permissionIntent)
|
requestPermission(device, permissionIntent)
|
||||||
|
|
||||||
awaitClose { context.unregisterReceiver(receiver) }
|
awaitClose { context.unregisterReceiver(receiver) }
|
||||||
|
|
|
@ -7,6 +7,7 @@ import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.coroutineScope
|
import androidx.lifecycle.coroutineScope
|
||||||
import com.geeksville.mesh.android.Logging
|
import com.geeksville.mesh.android.Logging
|
||||||
import com.geeksville.mesh.CoroutineDispatchers
|
import com.geeksville.mesh.CoroutineDispatchers
|
||||||
|
import com.geeksville.mesh.util.registerReceiverCompat
|
||||||
import com.hoho.android.usbserial.driver.UsbSerialDriver
|
import com.hoho.android.usbserial.driver.UsbSerialDriver
|
||||||
import com.hoho.android.usbserial.driver.UsbSerialProber
|
import com.hoho.android.usbserial.driver.UsbSerialProber
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
|
@ -62,7 +63,7 @@ class UsbRepository @Inject constructor(
|
||||||
processLifecycle.coroutineScope.launch(dispatchers.default) {
|
processLifecycle.coroutineScope.launch(dispatchers.default) {
|
||||||
refreshStateInternal()
|
refreshStateInternal()
|
||||||
usbBroadcastReceiverLazy.get().let { receiver ->
|
usbBroadcastReceiverLazy.get().let { receiver ->
|
||||||
application.registerReceiver(receiver, receiver.intentFilter)
|
application.registerReceiverCompat(receiver, receiver.intentFilter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,11 +5,15 @@ import android.bluetooth.BluetoothDevice
|
||||||
import android.bluetooth.le.ScanResult
|
import android.bluetooth.le.ScanResult
|
||||||
import android.companion.AssociationInfo
|
import android.companion.AssociationInfo
|
||||||
import android.companion.CompanionDeviceManager
|
import android.companion.CompanionDeviceManager
|
||||||
|
import android.content.BroadcastReceiver
|
||||||
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.content.IntentFilter
|
||||||
import android.content.pm.PackageInfo
|
import android.content.pm.PackageInfo
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.os.Parcel
|
import android.os.Parcel
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.content.IntentCompat
|
import androidx.core.content.IntentCompat
|
||||||
import androidx.core.os.ParcelCompat
|
import androidx.core.os.ParcelCompat
|
||||||
|
|
||||||
|
@ -40,6 +44,14 @@ fun PackageManager.getPackageInfoCompat(packageName: String, flags: Int = 0): Pa
|
||||||
@Suppress("DEPRECATION") getPackageInfo(packageName, flags)
|
@Suppress("DEPRECATION") getPackageInfo(packageName, flags)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Context.registerReceiverCompat(
|
||||||
|
receiver: BroadcastReceiver,
|
||||||
|
filter: IntentFilter,
|
||||||
|
flag: Int = ContextCompat.RECEIVER_NOT_EXPORTED,
|
||||||
|
) {
|
||||||
|
ContextCompat.registerReceiver(this, receiver, filter, flag)
|
||||||
|
}
|
||||||
|
|
||||||
fun Intent.getAssociationResult(): String? = when {
|
fun Intent.getAssociationResult(): String? = when {
|
||||||
android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU ->
|
android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU ->
|
||||||
getParcelableExtraCompat<AssociationInfo>(CompanionDeviceManager.EXTRA_ASSOCIATION)
|
getParcelableExtraCompat<AssociationInfo>(CompanionDeviceManager.EXTRA_ASSOCIATION)
|
||||||
|
|
Ładowanie…
Reference in New Issue