Merge "Fetch currently loaded bluetooth name" into tm-qpr-dev am: a364c8bacb am: dabdd6faa9

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/20378665

Change-Id: Ib66d0ba56cf9e4d12745673536208eb7cfef931a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
William Escande
2022-11-04 05:26:50 +00:00
committed by Automerger Merge Worker
4 changed files with 78 additions and 22 deletions

View File

@@ -24,6 +24,7 @@ import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.PowerManager;
import android.os.UserManager;
import android.util.Log;
@@ -125,8 +126,15 @@ public final class BluetoothPermissionRequest extends BroadcastReceiver {
// Create an intent triggered by clicking on the
// "Clear All Notifications" button
String bluetoothName;
try {
bluetoothName = Utils.findBluetoothPackageName(context);
} catch (NameNotFoundException e) {
e.printStackTrace();
return;
}
Intent deleteIntent = new Intent(BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY);
deleteIntent.setPackage("com.android.bluetooth");
deleteIntent.setPackage(bluetoothName);
deleteIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, mDevice);
deleteIntent.putExtra(BluetoothDevice.EXTRA_CONNECTION_ACCESS_RESULT,
BluetoothDevice.CONNECTION_ACCESS_NO);

51
src/com/android/settings/bluetooth/Utils.java Executable file → Normal file
View File

@@ -16,11 +16,18 @@
package com.android.settings.bluetooth;
import static android.os.Process.BLUETOOTH_UID;
import android.app.settings.SettingsEnums;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.UserHandle;
import android.provider.DeviceConfig;
import android.provider.Settings;
import android.text.TextUtils;
@@ -189,4 +196,48 @@ public final class Utils {
}
return false;
}
/**
* Returns the Bluetooth Package name
*/
public static String findBluetoothPackageName(Context context)
throws NameNotFoundException {
// this activity will always be in the package where the rest of Bluetooth lives
String sentinelActivity = "com.android.bluetooth.opp.BluetoothOppLauncherActivity";
PackageManager packageManager = context.createContextAsUser(UserHandle.SYSTEM, 0)
.getPackageManager();
String[] allPackages = packageManager.getPackagesForUid(BLUETOOTH_UID);
String matchedPackage = null;
for (String candidatePackage : allPackages) {
PackageInfo packageInfo;
try {
packageInfo =
packageManager.getPackageInfo(
candidatePackage,
PackageManager.GET_ACTIVITIES
| PackageManager.MATCH_ANY_USER
| PackageManager.MATCH_UNINSTALLED_PACKAGES
| PackageManager.MATCH_DISABLED_COMPONENTS);
} catch (NameNotFoundException e) {
// rethrow
throw e;
}
if (packageInfo.activities == null) {
continue;
}
for (ActivityInfo activity : packageInfo.activities) {
if (sentinelActivity.equals(activity.name)) {
if (matchedPackage == null) {
matchedPackage = candidatePackage;
} else {
throw new NameNotFoundException("multiple main bluetooth packages found");
}
}
}
}
if (matchedPackage != null) {
return matchedPackage;
}
throw new NameNotFoundException("Could not find main bluetooth package");
}
}