summaryrefslogtreecommitdiff
path: root/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/MainActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/MainActivity.java')
-rwxr-xr-xandroid/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/MainActivity.java74
1 files changed, 58 insertions, 16 deletions
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;