Always show pairing dialog for device-specific keyboard.

Bug: 22876536
Change-Id: Ief9f6343d435747050bb7910f934e4777f5116de
This commit is contained in:
Michael Wright
2015-09-10 16:08:49 +01:00
parent 48422b52f3
commit dab743b95c
3 changed files with 26 additions and 10 deletions

View File

@@ -65,8 +65,10 @@ public final class BluetoothPairingRequest extends BroadcastReceiver {
PowerManager powerManager = PowerManager powerManager =
(PowerManager)context.getSystemService(Context.POWER_SERVICE); (PowerManager)context.getSystemService(Context.POWER_SERVICE);
String deviceAddress = device != null ? device.getAddress() : null; String deviceAddress = device != null ? device.getAddress() : null;
if (powerManager.isScreenOn() && String deviceName = device != null ? device.getName() : null;
LocalBluetoothPreferences.shouldShowDialogInForeground(context, deviceAddress)) { boolean shouldShowDialog= LocalBluetoothPreferences.shouldShowDialogInForeground(
context, deviceAddress, deviceName);
if (powerManager.isInteractive() && shouldShowDialog) {
// Since the screen is on and the BT-related activity is in the foreground, // Since the screen is on and the BT-related activity is in the foreground,
// just open the dialog // just open the dialog
context.startActivity(pairingIntent); context.startActivity(pairingIntent);

View File

@@ -107,6 +107,7 @@ public final class BluetoothPermissionRequest extends BroadcastReceiver {
connectionAccessIntent.putExtra(BluetoothDevice.EXTRA_CLASS_NAME, mReturnClass); connectionAccessIntent.putExtra(BluetoothDevice.EXTRA_CLASS_NAME, mReturnClass);
String deviceAddress = mDevice != null ? mDevice.getAddress() : null; 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 =
@@ -114,7 +115,7 @@ public final class BluetoothPermissionRequest extends BroadcastReceiver {
if (powerManager.isScreenOn() if (powerManager.isScreenOn()
&& LocalBluetoothPreferences.shouldShowDialogInForeground( && LocalBluetoothPreferences.shouldShowDialogInForeground(
context, deviceAddress)) { context, deviceAddress, deviceName)) {
context.startActivity(connectionAccessIntent); context.startActivity(connectionAccessIntent);
} else { } else {
// Acquire wakelock so that LCD comes up since screen is off // Acquire wakelock so that LCD comes up since screen is off
@@ -134,27 +135,27 @@ public final class BluetoothPermissionRequest extends BroadcastReceiver {
deleteIntent.putExtra(BluetoothDevice.EXTRA_CONNECTION_ACCESS_RESULT, deleteIntent.putExtra(BluetoothDevice.EXTRA_CONNECTION_ACCESS_RESULT,
BluetoothDevice.CONNECTION_ACCESS_NO); BluetoothDevice.CONNECTION_ACCESS_NO);
deleteIntent.putExtra(BluetoothDevice.EXTRA_ACCESS_REQUEST_TYPE, mRequestType); deleteIntent.putExtra(BluetoothDevice.EXTRA_ACCESS_REQUEST_TYPE, mRequestType);
String deviceName = mDevice != null ? mDevice.getAliasName() : null; String deviceAlias = mDevice != null ? mDevice.getAliasName() : null;
switch (mRequestType) { switch (mRequestType) {
case BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS: case BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS:
title = context.getString(R.string.bluetooth_phonebook_request); title = context.getString(R.string.bluetooth_phonebook_request);
message = context.getString(R.string.bluetooth_pb_acceptance_dialog_text, message = context.getString(R.string.bluetooth_pb_acceptance_dialog_text,
deviceName, deviceName); deviceAlias, deviceAlias);
break; break;
case BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS: case BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS:
title = context.getString(R.string.bluetooth_map_request); title = context.getString(R.string.bluetooth_map_request);
message = context.getString(R.string.bluetooth_map_acceptance_dialog_text, message = context.getString(R.string.bluetooth_map_acceptance_dialog_text,
deviceName, deviceName); deviceAlias, deviceAlias);
break; break;
case BluetoothDevice.REQUEST_TYPE_SIM_ACCESS: case BluetoothDevice.REQUEST_TYPE_SIM_ACCESS:
title = context.getString(R.string.bluetooth_sap_request); title = context.getString(R.string.bluetooth_sap_request);
message = context.getString(R.string.bluetooth_sap_acceptance_dialog_text, message = context.getString(R.string.bluetooth_sap_acceptance_dialog_text,
deviceName, deviceName); deviceAlias, deviceAlias);
break; break;
default: default:
title = context.getString(R.string.bluetooth_connection_permission_request); title = context.getString(R.string.bluetooth_connection_permission_request);
message = context.getString(R.string.bluetooth_connection_dialog_text, message = context.getString(R.string.bluetooth_connection_dialog_text,
deviceName, deviceName); deviceAlias, deviceAlias);
break; break;
} }
Notification notification = new Notification.Builder(context) Notification notification = new Notification.Builder(context)

View File

@@ -20,6 +20,7 @@ import android.app.QueuedWork;
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;
import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import com.android.settingslib.bluetooth.LocalBluetoothAdapter; import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
@@ -62,10 +63,10 @@ final class LocalBluetoothPreferences {
} }
static boolean shouldShowDialogInForeground(Context context, static boolean shouldShowDialogInForeground(Context context,
String deviceAddress) { String deviceAddress, String deviceName) {
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.");
return false; return false;
} }
@@ -115,6 +116,18 @@ final class LocalBluetoothPreferences {
} }
} }
} }
if (!TextUtils.isEmpty(deviceName)) {
// If the device is a custom BT keyboard specifically for this device
String packagedKeyboardName = context.getString(
com.android.internal.R.string.config_packagedKeyboardName);
if (deviceName.equals(packagedKeyboardName)) {
if (DEBUG) Log.v(TAG, "showing dialog for packaged keyboard");
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;
} }