11package com .sdl .hellosdlandroid ;
22
3+ import android .Manifest ;
34import android .content .Intent ;
45import android .content .pm .PackageManager ;
56import android .os .Build ;
67import android .os .Bundle ;
78import android .view .Menu ;
89import android .view .MenuItem ;
9-
1010import androidx .annotation .NonNull ;
1111import androidx .appcompat .app .AppCompatActivity ;
1212import androidx .core .app .ActivityCompat ;
1313import androidx .core .content .ContextCompat ;
14-
15- import static android .Manifest .permission .BLUETOOTH_CONNECT ;
14+ import java .util .ArrayList ;
1615
1716public class MainActivity extends AppCompatActivity {
1817
@@ -23,12 +22,14 @@ protected void onCreate(Bundle savedInstanceState) {
2322 super .onCreate (savedInstanceState );
2423 setContentView (R .layout .activity_main );
2524
26-
2725 if (BuildConfig .TRANSPORT .equals ("MULTI" ) || BuildConfig .TRANSPORT .equals ("MULTI_HB" )) {
28- if (android .os .Build .VERSION .SDK_INT >= Build .VERSION_CODES .S && !checkPermission ()) {
29- requestPermission ();
30- return ;
26+ if (permissionsNeeded ().length >0 ){
27+ requestPermission (permissionsNeeded (),REQUEST_CODE );
28+ if (checkBTPermission ()) {
29+ return ;
30+ }
3131 }
32+
3233 //If we are connected to a module we want to start our SdlService
3334 SdlReceiver .queryForConnectedService (this );
3435 } else if (BuildConfig .TRANSPORT .equals ("TCP" )){
@@ -37,24 +38,50 @@ protected void onCreate(Bundle savedInstanceState) {
3738 }
3839 }
3940
40- private boolean checkPermission () {
41- return PackageManager .PERMISSION_GRANTED == ContextCompat .checkSelfPermission (getApplicationContext (), BLUETOOTH_CONNECT );
41+ private boolean checkBTPermission () {
42+ return Build .VERSION .SDK_INT >= Build .VERSION_CODES .S && !checkPermission (Manifest .permission .BLUETOOTH_CONNECT );
43+ }
44+
45+ private boolean checkPNPermission () {
46+ return Build .VERSION .SDK_INT >= Build .VERSION_CODES .TIRAMISU && !checkPermission (Manifest .permission .POST_NOTIFICATIONS );
47+ }
48+
49+ private boolean checkPermission (String permission ) {
50+ return PackageManager .PERMISSION_GRANTED == ContextCompat .checkSelfPermission (getApplicationContext (), permission );
51+ }
52+
53+ private void requestPermission (String [] permissions , int REQUEST_CODE ) {
54+ ActivityCompat .requestPermissions (this , permissions , REQUEST_CODE );
55+
4256 }
4357
44- private void requestPermission () {
45- ActivityCompat .requestPermissions (this , new String []{BLUETOOTH_CONNECT }, REQUEST_CODE );
58+ private String [] permissionsNeeded () {
59+ ArrayList <String > result = new ArrayList <>();
60+ if (checkBTPermission ()) {
61+ result .add (Manifest .permission .BLUETOOTH_CONNECT );
62+ }
63+ if (checkPNPermission ()) {
64+ result .add (Manifest .permission .POST_NOTIFICATIONS );
65+ }
66+ return (result .toArray (new String [result .size ()]));
4667 }
4768
4869 @ Override
4970 public void onRequestPermissionsResult (int requestCode , @ NonNull String [] permissions , @ NonNull int [] grantResults ) {
5071 switch (requestCode ) {
5172 case REQUEST_CODE :
5273 if (grantResults .length > 0 ) {
53-
54- boolean btConnectGranted = grantResults [0 ] == PackageManager .PERMISSION_GRANTED ;
55-
56- if (btConnectGranted ) {
57- SdlReceiver .queryForConnectedService (this );
74+ for (int i = 0 ; i < grantResults .length ; i ++) {
75+ if (permissions [i ].equals (Manifest .permission .BLUETOOTH_CONNECT )) {
76+ boolean btConnectGranted =
77+ grantResults [i ] == PackageManager .PERMISSION_GRANTED ;
78+ if (btConnectGranted ) {
79+ SdlReceiver .queryForConnectedService (this );
80+ }
81+ } else if (permissions [i ].equals (Manifest .permission .POST_NOTIFICATIONS )) {
82+ boolean postNotificationGranted =
83+ grantResults [i ] == PackageManager .PERMISSION_GRANTED ;
84+ }
5885 }
5986 }
6087 break ;
0 commit comments