summaryrefslogtreecommitdiff
path: root/android/hello_sdl_android
diff options
context:
space:
mode:
Diffstat (limited to 'android/hello_sdl_android')
-rwxr-xr-xandroid/hello_sdl_android/build.gradle13
-rwxr-xr-xandroid/hello_sdl_android/src/main/AndroidManifest.xml2
-rwxr-xr-xandroid/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/MainActivity.java74
-rwxr-xr-xandroid/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java6
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