Show Bluetooth dialog in a specific case

If the application that initiate the bonding with
BluetoothDevice#createBond is in foreground, then should dialog only
instead of showing the notification & dialog

Bug: 175931562
Tag: #refactor
Test: manual
Change-Id: I3673a0b58cbf9caabf62c951b84b49e17cfb13b8
This commit is contained in:
My Name
2023-02-07 01:58:16 +00:00
committed by Hieu Dang
parent b0ddc1833d
commit 2e552331e9
3 changed files with 22 additions and 8 deletions

View File

@@ -50,10 +50,8 @@ public final class BluetoothPairingRequest extends BroadcastReceiver {
PowerManager powerManager = context.getSystemService(PowerManager.class); PowerManager powerManager = context.getSystemService(PowerManager.class);
int pairingVariant = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, int pairingVariant = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
BluetoothDevice.ERROR); BluetoothDevice.ERROR);
String deviceAddress = device != null ? device.getAddress() : null;
String deviceName = device != null ? device.getName() : null;
boolean shouldShowDialog = LocalBluetoothPreferences.shouldShowDialogInForeground( boolean shouldShowDialog = LocalBluetoothPreferences.shouldShowDialogInForeground(
context, deviceAddress, deviceName); context, device);
// Skips consent pairing dialog if the device was recently associated with CDM // Skips consent pairing dialog if the device was recently associated with CDM
if (pairingVariant == BluetoothDevice.PAIRING_VARIANT_CONSENT if (pairingVariant == BluetoothDevice.PAIRING_VARIANT_CONSENT

View File

@@ -108,8 +108,6 @@ public final class BluetoothPermissionRequest extends BroadcastReceiver {
mRequestType); mRequestType);
connectionAccessIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, mDevice); connectionAccessIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, mDevice);
String deviceAddress = mDevice != null ? mDevice.getAddress() : null;
String deviceName = mDevice != null ? mDevice.getName() : null;
String title = null; String title = null;
String message = null; String message = null;
PowerManager powerManager = PowerManager powerManager =
@@ -117,7 +115,7 @@ public final class BluetoothPermissionRequest extends BroadcastReceiver {
if (powerManager.isScreenOn() if (powerManager.isScreenOn()
&& LocalBluetoothPreferences.shouldShowDialogInForeground( && LocalBluetoothPreferences.shouldShowDialogInForeground(
context, deviceAddress, deviceName)) { context, mDevice)) {
context.startActivity(connectionAccessIntent); context.startActivity(connectionAccessIntent);
} else { } else {
// Put up a notification that leads to the dialog // Put up a notification that leads to the dialog

View File

@@ -16,7 +16,10 @@
package com.android.settings.bluetooth; package com.android.settings.bluetooth;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Configuration; import android.content.res.Configuration;
@@ -57,8 +60,9 @@ final class LocalBluetoothPreferences {
KEY_DISCOVERABLE_END_TIMESTAMP, 0); KEY_DISCOVERABLE_END_TIMESTAMP, 0);
} }
static boolean shouldShowDialogInForeground(Context context, static boolean shouldShowDialogInForeground(Context context, @Nullable BluetoothDevice device) {
String deviceAddress, String deviceName) { String deviceAddress = device != null ? device.getAddress() : null;
String deviceName = device != null ? device.getName() : null;
LocalBluetoothManager manager = Utils.getLocalBtManager(context); LocalBluetoothManager manager = Utils.getLocalBtManager(context);
if (manager == null) { if (manager == null) {
if (DEBUG) Log.v(TAG, "manager == null - do not show dialog."); if (DEBUG) Log.v(TAG, "manager == null - do not show dialog.");
@@ -126,6 +130,20 @@ final class LocalBluetoothPreferences {
} }
} }
if (device != null) {
ActivityManager activityManager = context.getSystemService(ActivityManager.class);
String packageName = device.getCreateBondCaller();
if (packageName != null && activityManager.getPackageImportance(packageName)
== ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
if (DEBUG) {
Log.v(TAG, "showing dialog because the initiating application "
+ "is in foreground");
}
return true;
}
}
if (DEBUG) Log.v(TAG, "Found no reason to show the dialog - do not show dialog."); if (DEBUG) Log.v(TAG, "Found no reason to show the dialog - do not show dialog.");
return false; return false;
} }