diff options
Diffstat (limited to 'android/sdl_android/src/main/java/com/smartdevicelink/util/AndroidTools.java')
-rw-r--r-- | android/sdl_android/src/main/java/com/smartdevicelink/util/AndroidTools.java | 78 |
1 files changed, 20 insertions, 58 deletions
diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/util/AndroidTools.java b/android/sdl_android/src/main/java/com/smartdevicelink/util/AndroidTools.java index 4240e9e30..c20fe71ac 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/util/AndroidTools.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/util/AndroidTools.java @@ -32,7 +32,6 @@ package com.smartdevicelink.util; -import android.bluetooth.BluetoothDevice; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -52,7 +51,6 @@ import android.os.BatteryManager; import android.os.Build; import android.os.Bundle; import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; import com.smartdevicelink.marshal.JsonRPCMarshaller; import com.smartdevicelink.proxy.rpc.VehicleType; @@ -80,7 +78,6 @@ public class AndroidTools { private static final String TAG = "AndroidTools"; private static final String SDL_DEVICE_VEHICLES_PREFS = "sdl.device.vehicles"; - private static final String SDL_ROUTER_SERVICE_PROCESS_NAME = "com.smartdevicelink.router"; private static final Object VEHICLE_PREF_LOCK = new Object(); /** @@ -101,25 +98,6 @@ public class AndroidTools { } /** - * Check to see if a component is enabled - * - * @param context object used to retrieve the package manager - * @param name of the component in question - * @return true if this component is tagged as enabled - */ - public static boolean isServiceEnabled(Context context, ComponentName name) { - try { - ServiceInfo serviceInfo = context.getPackageManager().getServiceInfo(name, PackageManager.GET_META_DATA); - return serviceInfo.isEnabled(); - } catch (NameNotFoundException e) { - e.printStackTrace(); - } - return false; - } - - - - /** * Get all SDL enabled apps. If the package name is null, it will return all apps. However, if the package name is included, the * resulting hash map will not include the app with that package name. * @@ -196,12 +174,12 @@ public class AndroidTools { for (ResolveInfo info : resolveInfoList) { PackageInfo packageInfo; try { - packageInfo = packageManager.getPackageInfo(info.serviceInfo.packageName, 0); - SdlAppInfo appInformation = new SdlAppInfo(info, packageInfo, context); - if (info.serviceInfo.enabled) { + packageInfo = packageManager.getPackageInfo(info.serviceInfo.packageName, PackageManager.GET_PERMISSIONS); + boolean btPermissionsAllowed = areBtPermissionsGranted(context, info.serviceInfo.packageName); + if (btPermissionsAllowed) { + SdlAppInfo appInformation = new SdlAppInfo(info, packageInfo, context); sdlAppInfoList.add(appInformation); } - } catch (NameNotFoundException e) { //Package was not found, likely a sign the resolve info can't be trusted. } @@ -227,41 +205,25 @@ public class AndroidTools { return sdlAppInfoList; } - public static void updateRouterServiceEnabled(Context context, String transport) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - PackageManager pm = context.getPackageManager(); - try { - PackageInfo info = pm.getPackageInfo(context.getPackageName(),PackageManager.GET_SERVICES); - ServiceInfo[] services = info.services; - if (services != null) { - for (ServiceInfo service : services) { - //If this service is this apps router service - if (service.processName != null && service.processName.equalsIgnoreCase(SDL_ROUTER_SERVICE_PROCESS_NAME)) { - if (transport.equalsIgnoreCase(BluetoothDevice.ACTION_ACL_CONNECTED)) { - //Set service enabled based on if BT permissions were enabled - int btConnectPermission = ContextCompat.checkSelfPermission(context, BLUETOOTH_CONNECT); - int btScanPermission = ContextCompat.checkSelfPermission(context, BLUETOOTH_SCAN); - service.enabled = btConnectPermission == PackageManager.PERMISSION_GRANTED && btScanPermission == PackageManager.PERMISSION_GRANTED; - if (!service.enabled) { - Intent intent = new Intent(); - ComponentName cName = new ComponentName(service.packageName, service.name); - intent.setComponent(cName); - context.stopService(intent); - } - } else { - //Set service to enabled so USB Router Service can connect even if BT permissions were denied; - service.enabled = true; - } - } - } - } - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - } + public static boolean areBtPermissionsGranted(Context context, String servicePackageName) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { + //Permissions are only for SDK 31 and above + return true; + } + PackageManager packageManager = context.getPackageManager(); + PackageInfo packageInfo; + try { + packageInfo = packageManager.getPackageInfo(servicePackageName, PackageManager.GET_PERMISSIONS); + int btConnectPermission = packageManager.checkPermission(BLUETOOTH_CONNECT, packageInfo.packageName); + int btScanPermission = packageManager.checkPermission(BLUETOOTH_SCAN, packageInfo.packageName); + return btConnectPermission == PackageManager.PERMISSION_GRANTED && btScanPermission == PackageManager.PERMISSION_GRANTED; + } catch (NameNotFoundException e) { + e.printStackTrace(); + DebugTool.logError(TAG, "servicePackageName not found while checking BT permissions"); + return false; } } - /** * Sends the provided intent to the specified destinations making it an explicit intent, rather * than an implicit intent. A direct replacement of sendBroadcast(Intent). As of Android 8.0 |