diff options
Diffstat (limited to 'android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/MainActivity.java')
-rwxr-xr-x | android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/MainActivity.java | 74 |
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; |