From: Keith Packard Date: Fri, 28 Apr 2023 05:11:30 +0000 (-0700) Subject: altosdroid: Deal with Google requiring API version 31 X-Git-Tag: 1.9.16~1^2~1 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=5214a559acc582d639e2489c82594e5fb3a4c540 altosdroid: Deal with Google requiring API version 31 Need to add some magic constants to the build. Need to support BLUETOOTH_SCAN permission. Signed-off-by: Keith Packard --- diff --git a/altosdroid/app/build.gradle.in b/altosdroid/app/build.gradle.in index dd1a7d97..e386ad8c 100644 --- a/altosdroid/app/build.gradle.in +++ b/altosdroid/app/build.gradle.in @@ -18,7 +18,7 @@ android { defaultConfig { applicationId "org.altusmetrum.AltosDroid" minSdkVersion 21 - targetSdkVersion 30 + targetSdkVersion 31 versionCode @ANDROID_VERSION@ versionName "@VERSION@" } diff --git a/altosdroid/app/src/main/AndroidManifest.xml.in b/altosdroid/app/src/main/AndroidManifest.xml.in index ec84b457..d7234327 100644 --- a/altosdroid/app/src/main/AndroidManifest.xml.in +++ b/altosdroid/app/src/main/AndroidManifest.xml.in @@ -29,6 +29,7 @@ + @@ -52,7 +53,8 @@ + android:launchMode="singleTop" + android:exported="true"> diff --git a/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosDroid.java index cf54aad0..6d708721 100644 --- a/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosDroid.java +++ b/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosDroid.java @@ -674,7 +674,13 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, if (device != null) { Intent i = new Intent(this, AltosDroid.class); - PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent("hello world", null, this, AltosDroid.class), 0); + int flag; + + if (android.os.Build.VERSION.SDK_INT >= 31) // android.os.Build.VERSION_CODES.S + flag = 33554432; // PendingIntent.FLAG_MUTABLE + else + flag = 0; + PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent("hello world", null, this, AltosDroid.class), flag); if (AltosUsb.request_permission(this, device, pi)) { connectUsb(device); @@ -795,9 +801,11 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, public boolean have_storage_permission = false; public boolean have_bluetooth_permission = false; public boolean have_bluetooth_connect_permission = false; + public boolean have_bluetooth_scan_permission = false; public boolean asked_permission = false; static final String BLUETOOTH_CONNECT = "android.permission.BLUETOOTH_CONNECT"; + static final String BLUETOOTH_SCAN = "android.permission.BLUETOOTH_SCAN"; AltosMapOnline map_online; @@ -827,6 +835,9 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, if (permissions[i].equals(BLUETOOTH_CONNECT)) { have_bluetooth_connect_permission = true; } + if (permissions[i].equals(BLUETOOTH_SCAN)) { + have_bluetooth_scan_permission = true; + } } } } @@ -864,6 +875,12 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, { have_bluetooth_connect_permission = true; } + if (ActivityCompat.checkSelfPermission(this, + BLUETOOTH_SCAN) + == PackageManager.PERMISSION_GRANTED) + { + have_bluetooth_scan_permission = true; + } int count = 0; if (!have_location_permission) count += 1; @@ -873,6 +890,8 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, count += 1; if (!have_bluetooth_connect_permission) count += 1; + if (!have_bluetooth_scan_permission) + count += 1; if (count > 0) { String[] permissions = new String[count]; @@ -885,6 +904,8 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, permissions[i++] = Manifest.permission.BLUETOOTH; if (!have_bluetooth_connect_permission) permissions[i++] = BLUETOOTH_CONNECT; + if (!have_bluetooth_scan_permission) + permissions[i++] = BLUETOOTH_SCAN; ActivityCompat.requestPermissions(this, permissions, MY_PERMISSION_REQUEST); } } diff --git a/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/TelemetryService.java b/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/TelemetryService.java index b0b82ab9..e58906ea 100644 --- a/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/TelemetryService.java +++ b/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/TelemetryService.java @@ -31,6 +31,7 @@ import android.hardware.usb.*; import android.content.Intent; import android.content.Context; import android.os.*; +import android.os.Build.*; import android.widget.Toast; import androidx.core.app.NotificationCompat; @@ -662,10 +663,16 @@ public class TelemetryService extends Service implements AltosIdleMonitorListene @Override public int onStartCommand(Intent intent, int flags, int startId) { AltosDebug.debug("Received start id %d: %s", startId, intent); + int flag; + + if (android.os.Build.VERSION.SDK_INT >= 31) // android.os.Build.VERSION_CODES.S + flag = 33554432; // PendingIntent.FLAG_MUTABLE + else + flag = 0; // The PendingIntent to launch our activity if the user selects this notification PendingIntent contentIntent = PendingIntent.getActivity(this, 0, - new Intent(this, AltosDroid.class), 0); + new Intent(this, AltosDroid.class), flag); String channelId = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)