summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/bluetooth
diff options
context:
space:
mode:
authorMichael Chan <mchan@android.com>2009-12-10 17:41:23 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2009-12-10 17:41:23 -0800
commit20b0ae927ef82f8dd31a1c7a1b3784caaf88bfa0 (patch)
treef6fbda82c0f19249d11fc8ee24ded2f3ca206445 /src/com/android/settings/bluetooth
parent1c96b2cd6da03f978686be572c63a6a6fd4be1ef (diff)
parent488a80a7b111f5906bf51101785a95a6c640d265 (diff)
downloadpackages_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')
-rw-r--r--src/com/android/settings/bluetooth/BluetoothEventRedirector.java48
-rw-r--r--src/com/android/settings/bluetooth/DockService.java35
-rw-r--r--src/com/android/settings/bluetooth/LocalBluetoothManager.java23
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();
+ }
}