summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/bluetooth
diff options
context:
space:
mode:
authorChia-chi Yeh <chiachi@android.com>2010-01-13 06:11:29 +0800
committerChia-chi Yeh <chiachi@android.com>2010-01-15 06:12:29 +0800
commitb90452f3d26201ea6a231f2150204241e66cd3fb (patch)
treefe7cd1cdc92cf211428c979874ea58d70db7324f /src/com/android/settings/bluetooth
parente751e555f7f8b131aa51e5a31255610e26b8665b (diff)
downloadpackages_apps_settings-b90452f3d26201ea6a231f2150204241e66cd3fb.zip
packages_apps_settings-b90452f3d26201ea6a231f2150204241e66cd3fb.tar.gz
packages_apps_settings-b90452f3d26201ea6a231f2150204241e66cd3fb.tar.bz2
Settings: revise WifiEnabler and BluetoothEnabler.
This mainly changes the way both enablers react to the airplane mode. Now enablers show a toast message instead of disabling the check box directly. This avoids the inconsistent state introduced by WirelessSettings which controls the check box using layout dependency. Related bug: 2053751
Diffstat (limited to 'src/com/android/settings/bluetooth')
-rw-r--r--src/com/android/settings/bluetooth/BluetoothEnabler.java134
1 files changed, 52 insertions, 82 deletions
diff --git a/src/com/android/settings/bluetooth/BluetoothEnabler.java b/src/com/android/settings/bluetooth/BluetoothEnabler.java
index 46793ce..426a4d3 100644
--- a/src/com/android/settings/bluetooth/BluetoothEnabler.java
+++ b/src/com/android/settings/bluetooth/BluetoothEnabler.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 The Android Open Source Project
+ * Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,8 +16,8 @@
package com.android.settings.bluetooth;
-import com.android.settings.AirplaneModeEnabler;
import com.android.settings.R;
+import com.android.settings.WirelessSettings;
import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver;
@@ -28,7 +28,7 @@ import android.preference.Preference;
import android.preference.CheckBoxPreference;
import android.provider.Settings;
import android.text.TextUtils;
-import android.util.Config;
+import android.widget.Toast;
/**
* BluetoothEnabler is a helper to manage the Bluetooth on/off checkbox
@@ -36,16 +36,12 @@ import android.util.Config;
* preference reflects the current state.
*/
public class BluetoothEnabler implements Preference.OnPreferenceChangeListener {
-
- private static final boolean LOCAL_LOGD = Config.LOGD || false;
- private static final String TAG = "BluetoothEnabler";
-
private final Context mContext;
- private final CheckBoxPreference mCheckBoxPreference;
+ private final CheckBoxPreference mCheckBox;
private final CharSequence mOriginalSummary;
private final LocalBluetoothManager mLocalManager;
-
+ private final IntentFilter mIntentFilter;
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -54,18 +50,18 @@ public class BluetoothEnabler implements Preference.OnPreferenceChangeListener {
}
};
- public BluetoothEnabler(Context context, CheckBoxPreference checkBoxPreference) {
+ public BluetoothEnabler(Context context, CheckBoxPreference checkBox) {
mContext = context;
- mCheckBoxPreference = checkBoxPreference;
-
- mOriginalSummary = checkBoxPreference.getSummary();
- checkBoxPreference.setPersistent(false);
+ mCheckBox = checkBox;
+ mOriginalSummary = checkBox.getSummary();
+ checkBox.setPersistent(false);
mLocalManager = LocalBluetoothManager.getInstance(context);
if (mLocalManager == null) {
- // Bluetooth not supported
- checkBoxPreference.setEnabled(false);
+ // Bluetooth is not supported
+ checkBox.setEnabled(false);
}
+ mIntentFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
}
public void resume() {
@@ -73,16 +69,11 @@ public class BluetoothEnabler implements Preference.OnPreferenceChangeListener {
return;
}
- int state = mLocalManager.getBluetoothState();
- // This is the widget enabled state, not the preference toggled state
- mCheckBoxPreference.setEnabled(state == BluetoothAdapter.STATE_ON ||
- state == BluetoothAdapter.STATE_OFF);
- // BT state is not a sticky broadcast, so set it manually
- handleStateChanged(state);
+ // Bluetooth state is not sticky, so set it manually
+ handleStateChanged(mLocalManager.getBluetoothState());
- mContext.registerReceiver(mReceiver,
- new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
- mCheckBoxPreference.setOnPreferenceChangeListener(this);
+ mContext.registerReceiver(mReceiver, mIntentFilter);
+ mCheckBox.setOnPreferenceChangeListener(this);
}
public void pause() {
@@ -91,72 +82,51 @@ public class BluetoothEnabler implements Preference.OnPreferenceChangeListener {
}
mContext.unregisterReceiver(mReceiver);
- mCheckBoxPreference.setOnPreferenceChangeListener(null);
+ mCheckBox.setOnPreferenceChangeListener(null);
}
public boolean onPreferenceChange(Preference preference, Object value) {
- // Turn on/off BT
- setEnabled((Boolean) value);
+ boolean enable = (Boolean) value;
+
+ // Show toast message if Bluetooth is not allowed in airplane mode
+ if (enable && !WirelessSettings
+ .isRadioAllowed(mContext, Settings.System.RADIO_BLUETOOTH)) {
+ Toast.makeText(mContext, R.string.wifi_in_airplane_mode,
+ Toast.LENGTH_SHORT).show();
+ return false;
+ }
+
+ mLocalManager.setBluetoothEnabled(enable);
+ mCheckBox.setEnabled(false);
// Don't update UI to opposite state until we're sure
return false;
}
- private void setEnabled(final boolean enable) {
- // Disable preference
- mCheckBoxPreference.setEnabled(false);
-
- mLocalManager.setBluetoothEnabled(enable);
- }
-
private void handleStateChanged(int state) {
-
- if (state == BluetoothAdapter.STATE_OFF ||
- state == BluetoothAdapter.STATE_ON) {
- mCheckBoxPreference.setChecked(state == BluetoothAdapter.STATE_ON);
- mCheckBoxPreference.setSummary(state == BluetoothAdapter.STATE_OFF ?
- mOriginalSummary :
- null);
-
- final boolean hasDependency = !TextUtils.isEmpty(mCheckBoxPreference.getDependency());
- final boolean bluetoothAllowed = isBluetoothAllowed(mContext);
-
- // Avoid disabling when dependencies have been manually set,
- // workaround for framework bug http://b/2053751
- if (bluetoothAllowed) {
- mCheckBoxPreference.setEnabled(true);
- } else if (!hasDependency) {
- mCheckBoxPreference.setEnabled(false);
- }
-
- } else if (state == BluetoothAdapter.STATE_TURNING_ON ||
- state == BluetoothAdapter.STATE_TURNING_OFF) {
- mCheckBoxPreference.setSummary(state == BluetoothAdapter.STATE_TURNING_ON
- ? R.string.wifi_starting
- : R.string.wifi_stopping);
-
- } else {
- mCheckBoxPreference.setChecked(false);
- mCheckBoxPreference.setSummary(R.string.wifi_error);
- mCheckBoxPreference.setEnabled(true);
- }
- }
-
- private static boolean isBluetoothAllowed(Context context) {
- // allowed if we are not in airplane mode
- if (!AirplaneModeEnabler.isAirplaneModeOn(context)) {
- return true;
+ switch (state) {
+ case BluetoothAdapter.STATE_TURNING_ON:
+ mCheckBox.setSummary(R.string.wifi_starting);
+ mCheckBox.setEnabled(false);
+ break;
+ case BluetoothAdapter.STATE_ON:
+ mCheckBox.setChecked(true);
+ mCheckBox.setSummary(null);
+ mCheckBox.setEnabled(true);
+ break;
+ case BluetoothAdapter.STATE_TURNING_OFF:
+ mCheckBox.setSummary(R.string.wifi_stopping);
+ mCheckBox.setEnabled(false);
+ break;
+ case BluetoothAdapter.STATE_OFF:
+ mCheckBox.setChecked(false);
+ mCheckBox.setSummary(mOriginalSummary);
+ mCheckBox.setEnabled(true);
+ break;
+ default:
+ mCheckBox.setChecked(false);
+ mCheckBox.setSummary(R.string.wifi_error);
+ mCheckBox.setEnabled(true);
}
- // allowed if bluetooth is not in AIRPLANE_MODE_RADIOS
- String radios = Settings.System.getString(context.getContentResolver(),
- Settings.System.AIRPLANE_MODE_RADIOS);
- if (radios == null || !radios.contains(Settings.System.RADIO_BLUETOOTH)) {
- return true;
- }
- // allowed if bluetooth is in AIRPLANE_MODE_TOGGLEABLE_RADIOS
- radios = Settings.System.getString(context.getContentResolver(),
- Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
- return (radios != null && radios.contains(Settings.System.RADIO_BLUETOOTH));
}
-
}