diff options
Diffstat (limited to 'android/hello_sdl_android')
4 files changed, 76 insertions, 19 deletions
diff --git a/android/hello_sdl_android/build.gradle b/android/hello_sdl_android/build.gradle index 5feeba93f..fa8a08a93 100755 --- a/android/hello_sdl_android/build.gradle +++ b/android/hello_sdl_android/build.gradle @@ -1,13 +1,15 @@ 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" + buildConfigField 'String', 'APP_TYPE', '"DEFAULT"' + buildConfigField 'String', 'REQUIRE_AUDIO_OUTPUT', '"FALSE"' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' } buildTypes { @@ -42,6 +44,13 @@ android { buildConfigField 'String', 'TRANSPORT', '"TCP"' buildConfigField 'String', 'SECURITY', '"OFF"' } + requiresAudioOutput { + buildConfigField 'String', 'TRANSPORT', '"MULTI"' + buildConfigField 'String', 'SECURITY', '"OFF"' + buildConfigField 'String', 'APP_TYPE', '"MEDIA"' + buildConfigField 'String', 'REQUIRE_AUDIO_OUTPUT', '"TRUE"' + + } } lintOptions { disable 'GoogleAppIndexingWarning' 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/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java b/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java index 59daf2050..be147af0b 100755 --- a/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java +++ b/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java @@ -162,6 +162,9 @@ public class SdlService extends Service { securityLevel = MultiplexTransportConfig.FLAG_MULTI_SECURITY_OFF; } transport = new MultiplexTransportConfig(this, APP_ID, securityLevel); + if (BuildConfig.REQUIRE_AUDIO_OUTPUT.equals("TRUE") ) { + ((MultiplexTransportConfig)transport).setRequiresAudioSupport(true); + } } else if (BuildConfig.TRANSPORT.equals("TCP")) { transport = new TCPTransportConfig(TCP_PORT, DEV_MACHINE_IP_ADDRESS, true); } else if (BuildConfig.TRANSPORT.equals("MULTI_HB")) { @@ -172,7 +175,8 @@ public class SdlService extends Service { // The app type to be used Vector<AppHMIType> appType = new Vector<>(); - appType.add(AppHMIType.DEFAULT); + appType.add(AppHMIType.valueForString(BuildConfig.APP_TYPE)); + // The manager listener helps you know when certain events that pertain to the SDL Manager happen // Here we will listen for ON_HMI_STATUS and ON_COMMAND notifications |