Merge "Fix admin enable/disable of Bluetooth file sharing" into tm-dev am: c001bc5f22
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/19219300
Change-Id: Ic0beb31a5db2deaab49826a0bb4a93fdc6baba0d
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/service/java/com/android/server/bluetooth/BluetoothManagerService.java b/service/java/com/android/server/bluetooth/BluetoothManagerService.java
index b32176d..2d00f88 100644
--- a/service/java/com/android/server/bluetooth/BluetoothManagerService.java
+++ b/service/java/com/android/server/bluetooth/BluetoothManagerService.java
@@ -56,6 +56,7 @@
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.database.ContentObserver;
@@ -2922,24 +2923,56 @@
*/
private void updateOppLauncherComponentState(UserHandle userHandle,
boolean bluetoothSharingDisallowed) {
- final ComponentName oppLauncherComponent = new ComponentName(
- mContext.getPackageManager().getPackagesForUid(Process.BLUETOOTH_UID)[0],
- "com.android.bluetooth.opp.BluetoothOppLauncherActivity");
- int newState;
- if (bluetoothSharingDisallowed) {
- newState = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
- } else if (BluetoothProperties.isProfileOppEnabled().orElse(false)) {
- newState = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
- } else {
- newState = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
- }
try {
- mContext.createContextAsUser(userHandle, 0)
- .getPackageManager()
- .setComponentEnabledSetting(oppLauncherComponent, newState,
- PackageManager.DONT_KILL_APP);
+ int newState;
+ if (bluetoothSharingDisallowed) {
+ newState = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
+ } else if (BluetoothProperties.isProfileOppEnabled().orElse(false)) {
+ newState = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
+ } else {
+ newState = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+ }
+
+ String launcherActivity = "com.android.bluetooth.opp.BluetoothOppLauncherActivity";
+
+ PackageManager packageManager = mContext.createContextAsUser(userHandle, 0)
+ .getPackageManager();
+ var allPackages = packageManager.getPackagesForUid(Process.BLUETOOTH_UID);
+ for (String candidatePackage : allPackages) {
+ PackageInfo packageInfo;
+ try {
+ // note: we need the package manager for the SYSTEM user, not our userHandle
+ packageInfo = mContext.getPackageManager().getPackageInfo(
+ candidatePackage,
+ PackageManager.PackageInfoFlags.of(PackageManager.GET_ACTIVITIES));
+ } catch (PackageManager.NameNotFoundException e) {
+ // ignore, try next package
+ Log.e(TAG, "Could not find package " + candidatePackage);
+ continue;
+ } catch (Exception e) {
+ Log.e(TAG, "Error while loading package" + e);
+ continue;
+ }
+ if (packageInfo.activities == null) {
+ continue;
+ }
+ for (var activity : packageInfo.activities) {
+ if (launcherActivity.equals(activity.name)) {
+ final ComponentName oppLauncherComponent = new ComponentName(
+ candidatePackage, launcherActivity
+ );
+ packageManager.setComponentEnabledSetting(
+ oppLauncherComponent, newState, PackageManager.DONT_KILL_APP
+ );
+ return;
+ }
+ }
+ }
+
+ Log.e(TAG,
+ "Cannot toggle BluetoothOppLauncherActivity, could not find it in any package");
} catch (Exception e) {
- // The component was not found, do nothing.
+ Log.e(TAG, "updateOppLauncherComponentState failed: " + e);
}
}