diff options
author | Michael Chan <mchan@android.com> | 2009-12-10 17:41:23 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2009-12-10 17:41:23 -0800 |
commit | 20b0ae927ef82f8dd31a1c7a1b3784caaf88bfa0 (patch) | |
tree | f6fbda82c0f19249d11fc8ee24ded2f3ca206445 /src/com/android/settings/bluetooth | |
parent | 1c96b2cd6da03f978686be572c63a6a6fd4be1ef (diff) | |
parent | 488a80a7b111f5906bf51101785a95a6c640d265 (diff) | |
download | packages_apps_settings-20b0ae927ef82f8dd31a1c7a1b3784caaf88bfa0.zip packages_apps_settings-20b0ae927ef82f8dd31a1c7a1b3784caaf88bfa0.tar.gz packages_apps_settings-20b0ae927ef82f8dd31a1c7a1b3784caaf88bfa0.tar.bz2 |
am 488a80a7: Merge change Id587a517 into eclair
Merge commit '488a80a7b111f5906bf51101785a95a6c640d265' into eclair-mr2
* commit '488a80a7b111f5906bf51101785a95a6c640d265':
b/2314560 Prevent PIN dialog from showing up on undocked docks
Diffstat (limited to 'src/com/android/settings/bluetooth')
3 files changed, 76 insertions, 30 deletions
diff --git a/src/com/android/settings/bluetooth/BluetoothEventRedirector.java b/src/com/android/settings/bluetooth/BluetoothEventRedirector.java index 6c40834..f283a67 100644 --- a/src/com/android/settings/bluetooth/BluetoothEventRedirector.java +++ b/src/com/android/settings/bluetooth/BluetoothEventRedirector.java @@ -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; + } } diff --git a/src/com/android/settings/bluetooth/DockService.java b/src/com/android/settings/bluetooth/DockService.java index 87a82b4..6da8fd9 100644 --- a/src/com/android/settings/bluetooth/DockService.java +++ b/src/com/android/settings/bluetooth/DockService.java @@ -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); diff --git a/src/com/android/settings/bluetooth/LocalBluetoothManager.java b/src/com/android/settings/bluetooth/LocalBluetoothManager.java index 6295e90..43d4343 100644 --- a/src/com/android/settings/bluetooth/LocalBluetoothManager.java +++ b/src/com/android/settings/bluetooth/LocalBluetoothManager.java @@ -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(); + } } |