Merge commit '0443bc05b860f80925ebe6d46ba9a080313ec3ab' * commit '0443bc05b860f80925ebe6d46ba9a080313ec3ab': b/2314560 Prevent PIN dialog from showing up on undocked docks
This commit is contained in:
@@ -75,10 +75,23 @@ public class BluetoothEventRedirector {
|
||||
} else if (action.equals(BluetoothDevice.ACTION_BOND_STATE_CHANGED)) {
|
||||
int bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE,
|
||||
BluetoothDevice.ERROR);
|
||||
mManager.getCachedDeviceManager().onBondingStateChanged(device, bondState);
|
||||
CachedBluetoothDeviceManager cachedDeviceMgr = mManager.getCachedDeviceManager();
|
||||
cachedDeviceMgr.onBondingStateChanged(device, bondState);
|
||||
if (bondState == BluetoothDevice.BOND_NONE) {
|
||||
int reason = intent.getIntExtra(BluetoothDevice.EXTRA_REASON, BluetoothDevice.ERROR);
|
||||
mManager.getCachedDeviceManager().showUnbondMessage(device, reason);
|
||||
if (device.isBluetoothDock()) {
|
||||
// After a dock is unpaired, we will forget the
|
||||
// setttings
|
||||
mManager.removeDockAutoConnectSetting(device.getAddress());
|
||||
|
||||
// if the device is undocked, remove it from the list as
|
||||
// well
|
||||
if (!device.getAddress().equals(getDockedDeviceAddress(context))) {
|
||||
cachedDeviceMgr.onDeviceDisappeared(device);
|
||||
}
|
||||
}
|
||||
int reason = intent.getIntExtra(BluetoothDevice.EXTRA_REASON,
|
||||
BluetoothDevice.ERROR);
|
||||
cachedDeviceMgr.showUnbondMessage(device, reason);
|
||||
}
|
||||
|
||||
} else if (action.equals(BluetoothHeadset.ACTION_STATE_CHANGED)) {
|
||||
@@ -112,6 +125,16 @@ public class BluetoothEventRedirector {
|
||||
} else if (action.equals(BluetoothDevice.ACTION_PAIRING_CANCEL)) {
|
||||
int errorMsg = R.string.bluetooth_pairing_error_message;
|
||||
mManager.showError(device, R.string.bluetooth_error_title, errorMsg);
|
||||
|
||||
} else if (action.equals(Intent.ACTION_DOCK_EVENT)) {
|
||||
// Remove if unpair device upon undocking
|
||||
int anythingButUnDocked = Intent.EXTRA_DOCK_STATE_UNDOCKED + 1;
|
||||
int state = intent.getIntExtra(Intent.EXTRA_DOCK_STATE, anythingButUnDocked);
|
||||
if (state == Intent.EXTRA_DOCK_STATE_UNDOCKED) {
|
||||
if (device.getBondState() == BluetoothDevice.BOND_NONE) {
|
||||
mManager.getCachedDeviceManager().onDeviceDisappeared(device);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -143,10 +166,29 @@ public class BluetoothEventRedirector {
|
||||
filter.addAction(BluetoothDevice.ACTION_CLASS_CHANGED);
|
||||
filter.addAction(BluetoothDevice.ACTION_UUID);
|
||||
|
||||
// Dock event broadcasts
|
||||
filter.addAction(Intent.ACTION_DOCK_EVENT);
|
||||
|
||||
mManager.getContext().registerReceiver(mBroadcastReceiver, filter);
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
mManager.getContext().unregisterReceiver(mBroadcastReceiver);
|
||||
}
|
||||
|
||||
// This can't be called from a broadcast receiver where the filter is set in the Manifest.
|
||||
private String getDockedDeviceAddress(Context context) {
|
||||
// This works only because these broadcast intents are "sticky"
|
||||
Intent i = context.registerReceiver(null, new IntentFilter(Intent.ACTION_DOCK_EVENT));
|
||||
if (i != null) {
|
||||
int state = i.getIntExtra(Intent.EXTRA_DOCK_STATE, Intent.EXTRA_DOCK_STATE_UNDOCKED);
|
||||
if (state != Intent.EXTRA_DOCK_STATE_UNDOCKED) {
|
||||
BluetoothDevice device = i.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
|
||||
if (device != null) {
|
||||
return device.getAddress();
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@@ -30,7 +30,6 @@ import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Handler;
|
||||
import android.os.HandlerThread;
|
||||
import android.os.IBinder;
|
||||
@@ -58,8 +57,6 @@ public class DockService extends Service implements AlertDialog.OnMultiChoiceCli
|
||||
// TODO clean up logs. Disable DEBUG flag for this file and receiver's too
|
||||
private static final boolean DEBUG = true;
|
||||
|
||||
private static final String SHARED_PREFERENCE_KEY_AUTO_CONNECT_TO_DOCK = "auto_connect_to_dock";
|
||||
|
||||
// Time allowed for the device to be undocked and redocked without severing
|
||||
// the bluetooth connection
|
||||
private static final long UNDOCKED_GRACE_PERIOD = 1000;
|
||||
@@ -214,7 +211,7 @@ public class DockService extends Service implements AlertDialog.OnMultiChoiceCli
|
||||
}
|
||||
|
||||
mDevice = device;
|
||||
if (getAutoConnectSetting(mBtManager, device.getAddress())) {
|
||||
if (mBtManager.getDockAutoConnectSetting(device.getAddress())) {
|
||||
// Setting == auto connect
|
||||
initBtSettings(mContext, device, state, false);
|
||||
applyBtSettings(mDevice, startId);
|
||||
@@ -291,7 +288,7 @@ public class DockService extends Service implements AlertDialog.OnMultiChoiceCli
|
||||
startForeground(0, new Notification());
|
||||
|
||||
// Device in a new dock.
|
||||
boolean firstTime = !hasAutoConnectSetting(mBtManager, device.getAddress());
|
||||
boolean firstTime = !mBtManager.hasDockAutoConnectSetting(device.getAddress());
|
||||
|
||||
CharSequence[] items = initBtSettings(service, device, state, firstTime);
|
||||
|
||||
@@ -309,14 +306,15 @@ public class DockService extends Service implements AlertDialog.OnMultiChoiceCli
|
||||
CheckBox rememberCheckbox = (CheckBox) view.findViewById(R.id.remember);
|
||||
|
||||
// check "Remember setting" by default if no value was saved
|
||||
boolean checked = firstTime || getAutoConnectSetting(mBtManager, device.getAddress());
|
||||
boolean checked = firstTime || mBtManager.getDockAutoConnectSetting(device.getAddress());
|
||||
rememberCheckbox.setChecked(checked);
|
||||
rememberCheckbox.setOnCheckedChangeListener(this);
|
||||
int viewSpacingLeft = (int) (14 * pixelScaleFactor);
|
||||
int viewSpacingRight = (int) (14 * pixelScaleFactor);
|
||||
ab.setView(view, viewSpacingLeft, 0 /* top */, viewSpacingRight, 0 /* bottom */);
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "Auto connect = " + getAutoConnectSetting(mBtManager, device.getAddress()));
|
||||
Log.d(TAG, "Auto connect = "
|
||||
+ mBtManager.getDockAutoConnectSetting(device.getAddress()));
|
||||
}
|
||||
|
||||
// Ok Button
|
||||
@@ -339,7 +337,7 @@ public class DockService extends Service implements AlertDialog.OnMultiChoiceCli
|
||||
// Called when the "Remember" Checkbox is clicked
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
if (DEBUG) Log.d(TAG, "onCheckedChanged: Remember Settings = " + isChecked);
|
||||
saveAutoConnectSetting(mBtManager, mDevice.getAddress(), isChecked);
|
||||
mBtManager.saveDockAutoConnectSetting(mDevice.getAddress(), isChecked);
|
||||
}
|
||||
|
||||
// Called when the dialog is dismissed
|
||||
@@ -355,8 +353,8 @@ public class DockService extends Service implements AlertDialog.OnMultiChoiceCli
|
||||
// Called when clicked on the OK button
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
if (which == DialogInterface.BUTTON_POSITIVE) {
|
||||
if (!hasAutoConnectSetting(mBtManager, mDevice.getAddress())) {
|
||||
saveAutoConnectSetting(mBtManager, mDevice.getAddress(), true);
|
||||
if (!mBtManager.hasDockAutoConnectSetting(mDevice.getAddress())) {
|
||||
mBtManager.saveDockAutoConnectSetting(mDevice.getAddress(), true);
|
||||
}
|
||||
|
||||
applyBtSettings(mDevice, mStartIdAssociatedWithDialog);
|
||||
@@ -514,23 +512,6 @@ public class DockService extends Service implements AlertDialog.OnMultiChoiceCli
|
||||
return cachedBluetoothDevice;
|
||||
}
|
||||
|
||||
public static boolean hasAutoConnectSetting(LocalBluetoothManager localManager, String addr) {
|
||||
return localManager.getSharedPreferences().contains(
|
||||
SHARED_PREFERENCE_KEY_AUTO_CONNECT_TO_DOCK + addr);
|
||||
}
|
||||
|
||||
public static boolean getAutoConnectSetting(LocalBluetoothManager localManager, String addr) {
|
||||
return localManager.getSharedPreferences().getBoolean(
|
||||
SHARED_PREFERENCE_KEY_AUTO_CONNECT_TO_DOCK + addr, false);
|
||||
}
|
||||
|
||||
public static void saveAutoConnectSetting(LocalBluetoothManager localManager, String addr,
|
||||
boolean autoConnect) {
|
||||
SharedPreferences.Editor editor = localManager.getSharedPreferences().edit();
|
||||
editor.putBoolean(SHARED_PREFERENCE_KEY_AUTO_CONNECT_TO_DOCK + addr, autoConnect);
|
||||
editor.commit();
|
||||
}
|
||||
|
||||
// TODO Delete this method if not needed.
|
||||
private Notification getNotification(Service service) {
|
||||
CharSequence title = service.getString(R.string.dock_settings_title);
|
||||
|
@@ -78,6 +78,8 @@ public class LocalBluetoothManager {
|
||||
private static final String SHARED_PREFERENCES_KEY_LAST_SELECTED_DEVICE_TIME =
|
||||
"last_selected_device_time";
|
||||
|
||||
private static final String SHARED_PREFERENCES_KEY_DOCK_AUTO_CONNECT = "auto_connect_to_dock";
|
||||
|
||||
private long mLastScan;
|
||||
|
||||
public static LocalBluetoothManager getInstance(Context context) {
|
||||
@@ -345,4 +347,25 @@ public class LocalBluetoothManager {
|
||||
System.currentTimeMillis());
|
||||
editor.commit();
|
||||
}
|
||||
|
||||
public boolean hasDockAutoConnectSetting(String addr) {
|
||||
return getSharedPreferences().contains(SHARED_PREFERENCES_KEY_DOCK_AUTO_CONNECT + addr);
|
||||
}
|
||||
|
||||
public boolean getDockAutoConnectSetting(String addr) {
|
||||
return getSharedPreferences().getBoolean(SHARED_PREFERENCES_KEY_DOCK_AUTO_CONNECT + addr,
|
||||
false);
|
||||
}
|
||||
|
||||
public void saveDockAutoConnectSetting(String addr, boolean autoConnect) {
|
||||
SharedPreferences.Editor editor = getSharedPreferences().edit();
|
||||
editor.putBoolean(SHARED_PREFERENCES_KEY_DOCK_AUTO_CONNECT + addr, autoConnect);
|
||||
editor.commit();
|
||||
}
|
||||
|
||||
public void removeDockAutoConnectSetting(String addr) {
|
||||
SharedPreferences.Editor editor = getSharedPreferences().edit();
|
||||
editor.remove(SHARED_PREFERENCES_KEY_DOCK_AUTO_CONNECT + addr);
|
||||
editor.commit();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user