diff options
author | Joey Grover <joeygrover@gmail.com> | 2022-09-06 16:33:18 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-06 16:33:18 -0400 |
commit | 77db6569f76535f3546da92e2b2d71a42be20d5f (patch) | |
tree | 0e43e46fb6af8593472c414e3b5d664a8b5c5ee9 | |
parent | 3fd2499167106b2a5925efc249e563e8793eb302 (diff) | |
parent | 881bbc24064004ae9972ad5799799ea7d0a2059f (diff) | |
download | sdl_android-77db6569f76535f3546da92e2b2d71a42be20d5f.tar.gz |
Merge pull request #1826 from smartdevicelink/bugfix/issue_1812_Android_13
Bugfix/issue 1812 Android 13 Support
4 files changed, 64 insertions, 20 deletions
diff --git a/android/hello_sdl_android/build.gradle b/android/hello_sdl_android/build.gradle index 5feeba93f..e647f52a6 100755 --- a/android/hello_sdl_android/build.gradle +++ b/android/hello_sdl_android/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { applicationId "com.sdl.hellosdlandroid" minSdkVersion 16 - targetSdkVersion 31 + targetSdkVersion 33 versionCode 1 versionName "1.0" testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' diff --git a/android/hello_sdl_android/src/main/AndroidManifest.xml b/android/hello_sdl_android/src/main/AndroidManifest.xml index 415aa66c2..6b577c5a2 100755 --- a/android/hello_sdl_android/src/main/AndroidManifest.xml +++ b/android/hello_sdl_android/src/main/AndroidManifest.xml @@ -6,6 +6,8 @@ <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" tools:targetApi="31"/> + <uses-permission android:name="android.permission.POST_NOTIFICATIONS" + tools:targetApi="33"/> <uses-permission android:name="android.permission.INTERNET" /> <!-- Required to check if WiFi is enabled --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> diff --git a/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/MainActivity.java b/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/MainActivity.java index 8497e3b73..44999945f 100755 --- a/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/MainActivity.java +++ b/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/MainActivity.java @@ -1,18 +1,17 @@ package com.sdl.hellosdlandroid; +import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; - import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; - -import static android.Manifest.permission.BLUETOOTH_CONNECT; +import java.util.ArrayList; public class MainActivity extends AppCompatActivity { @@ -23,12 +22,18 @@ public class MainActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - if (BuildConfig.TRANSPORT.equals("MULTI") || BuildConfig.TRANSPORT.equals("MULTI_HB")) { - if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && !checkPermission()) { - requestPermission(); - return; + String[] permissionsNeeded = permissionsNeeded(); + if (permissionsNeeded.length > 0) { + requestPermission(permissionsNeeded, REQUEST_CODE); + for (String permission : permissionsNeeded) { + if (Manifest.permission.BLUETOOTH_CONNECT.equals(permission)) { + // We need to request BLUETOOTH_CONNECT permission to connect to SDL via Bluetooth + return; + } + } } + //If we are connected to a module we want to start our SdlService SdlReceiver.queryForConnectedService(this); } else if (BuildConfig.TRANSPORT.equals("TCP")){ @@ -37,12 +42,39 @@ public class MainActivity extends AppCompatActivity { } } - private boolean checkPermission() { - return PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(getApplicationContext(), BLUETOOTH_CONNECT); + /** + * Boolean method that checks API level and check to see if we need to request BLUETOOTH_CONNECT permission + * @return false if we need to request BLUETOOTH_CONNECT permission + */ + private boolean hasBTPermission() { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.S ? checkPermission(Manifest.permission.BLUETOOTH_CONNECT) : true; + } + + /** + * Boolean method that checks API level and check to see if we need to request POST_NOTIFICATIONS permission + * @return false if we need to request POST_NOTIFICATIONS permission + */ + private boolean hasPNPermission() { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU ? checkPermission(Manifest.permission.POST_NOTIFICATIONS) : true; } - private void requestPermission() { - ActivityCompat.requestPermissions(this, new String[]{BLUETOOTH_CONNECT}, REQUEST_CODE); + private boolean checkPermission(String permission) { + return PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(getApplicationContext(), permission); + } + + private void requestPermission(String[] permissions, int REQUEST_CODE) { + ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE); + } + + private @NonNull String[] permissionsNeeded() { + ArrayList<String> result = new ArrayList<>(); + if (!hasBTPermission()) { + result.add(Manifest.permission.BLUETOOTH_CONNECT); + } + if (!hasPNPermission()) { + result.add(Manifest.permission.POST_NOTIFICATIONS); + } + return (result.toArray(new String[result.size()])); } @Override @@ -50,11 +82,21 @@ public class MainActivity extends AppCompatActivity { switch (requestCode) { case REQUEST_CODE: if (grantResults.length > 0) { - - boolean btConnectGranted = grantResults[0] == PackageManager.PERMISSION_GRANTED; - - if (btConnectGranted) { - SdlReceiver.queryForConnectedService(this); + for (int i = 0; i < grantResults.length; i++) { + if (permissions[i].equals(Manifest.permission.BLUETOOTH_CONNECT)) { + boolean btConnectGranted = + grantResults[i] == PackageManager.PERMISSION_GRANTED; + if (btConnectGranted) { + SdlReceiver.queryForConnectedService(this); + } + } else if (permissions[i].equals(Manifest.permission.POST_NOTIFICATIONS)) { + boolean postNotificationGranted = + grantResults[i] == PackageManager.PERMISSION_GRANTED; + if (!postNotificationGranted) { + // User denied permission, Notifications for SDL will not appear + // on Android 13 devices. + } + } } } break; diff --git a/android/sdl_android/build.gradle b/android/sdl_android/build.gradle index b0072a6fd..e4d246c5c 100644 --- a/android/sdl_android/build.gradle +++ b/android/sdl_android/build.gradle @@ -1,10 +1,10 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { minSdkVersion 16 - targetSdkVersion 31 + targetSdkVersion 33 versionCode 23 versionName new File(projectDir.path, ('/../../VERSION')).text.trim() buildConfigField "String", "VERSION_NAME", '\"' + versionName + '\"' |