Settings refactoring
Wifi and bluetooth pane refactored, main toggles moved to left pane. Change-Id: I42ea4cf3bdf24158f3c67e0dea311258206cd78a
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright (C) 2011 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.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings.bluetooth;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.SettingsPreferenceFragment;
|
||||
|
||||
public class AdvancedBluetoothSettings extends SettingsPreferenceFragment
|
||||
implements Preference.OnPreferenceChangeListener {
|
||||
|
||||
private static final String KEY_BT_DISCOVERABLE = "bt_discoverable";
|
||||
private static final String KEY_BT_DISCOVERABLE_TIMEOUT = "bt_discoverable_timeout";
|
||||
private static final String KEY_BT_NAME = "bt_name";
|
||||
private static final String KEY_BT_SHOW_RECEIVED = "bt_show_received_files";
|
||||
|
||||
/* Private intent to show the list of received files */
|
||||
private static final String BTOPP_ACTION_OPEN_RECEIVED_FILES =
|
||||
"android.btopp.intent.action.OPEN_RECEIVED_FILES";
|
||||
|
||||
private BluetoothDiscoverableEnabler mDiscoverableEnabler;
|
||||
private BluetoothNamePreference mNamePreference;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
addPreferencesFromResource(R.xml.bluetooth_advanced_settings);
|
||||
|
||||
LocalBluetoothManager localManager = LocalBluetoothManager.getInstance(getActivity());
|
||||
if (localManager != null) {
|
||||
LocalBluetoothAdapter localAdapter = localManager.getBluetoothAdapter();
|
||||
mDiscoverableEnabler = new BluetoothDiscoverableEnabler(getActivity(),
|
||||
localAdapter,
|
||||
(CheckBoxPreference) findPreference(KEY_BT_DISCOVERABLE),
|
||||
(ListPreference) findPreference(KEY_BT_DISCOVERABLE_TIMEOUT));
|
||||
}
|
||||
|
||||
mNamePreference = (BluetoothNamePreference) findPreference(KEY_BT_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
mDiscoverableEnabler.resume();
|
||||
mNamePreference.resume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
|
||||
mNamePreference.pause();
|
||||
mDiscoverableEnabler.pause();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
|
||||
if (KEY_BT_SHOW_RECEIVED.equals(preference.getKey())) {
|
||||
Intent intent = new Intent(BTOPP_ACTION_OPEN_RECEIVED_FILES);
|
||||
getActivity().sendBroadcast(intent);
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onPreferenceTreeClick(preferenceScreen, preference);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
return true;
|
||||
}
|
||||
}
|
@@ -16,28 +16,27 @@
|
||||
|
||||
package com.android.settings.bluetooth;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.WirelessSettings;
|
||||
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.preference.Preference;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.provider.Settings;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.Switch;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.WirelessSettings;
|
||||
|
||||
/**
|
||||
* BluetoothEnabler is a helper to manage the Bluetooth on/off checkbox
|
||||
* preference. It turns on/off Bluetooth and ensures the summary of the
|
||||
* preference reflects the current state.
|
||||
*/
|
||||
public final class BluetoothEnabler implements Preference.OnPreferenceChangeListener {
|
||||
public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeListener {
|
||||
private final Context mContext;
|
||||
private final CheckBoxPreference mCheckBox;
|
||||
private final CharSequence mOriginalSummary;
|
||||
private Switch mSwitch;
|
||||
|
||||
private final LocalBluetoothAdapter mLocalAdapter;
|
||||
private final IntentFilter mIntentFilter;
|
||||
@@ -50,17 +49,15 @@ public final class BluetoothEnabler implements Preference.OnPreferenceChangeList
|
||||
}
|
||||
};
|
||||
|
||||
public BluetoothEnabler(Context context, CheckBoxPreference checkBox) {
|
||||
public BluetoothEnabler(Context context, Switch switch_) {
|
||||
mContext = context;
|
||||
mCheckBox = checkBox;
|
||||
mOriginalSummary = checkBox.getSummary();
|
||||
checkBox.setPersistent(false);
|
||||
mSwitch = switch_;
|
||||
|
||||
LocalBluetoothManager manager = LocalBluetoothManager.getInstance(context);
|
||||
if (manager == null) {
|
||||
// Bluetooth is not supported
|
||||
mLocalAdapter = null;
|
||||
checkBox.setEnabled(false);
|
||||
mSwitch.setEnabled(false);
|
||||
} else {
|
||||
mLocalAdapter = manager.getBluetoothAdapter();
|
||||
}
|
||||
@@ -76,7 +73,7 @@ public final class BluetoothEnabler implements Preference.OnPreferenceChangeList
|
||||
handleStateChanged(mLocalAdapter.getBluetoothState());
|
||||
|
||||
mContext.registerReceiver(mReceiver, mIntentFilter);
|
||||
mCheckBox.setOnPreferenceChangeListener(this);
|
||||
mSwitch.setOnCheckedChangeListener(this);
|
||||
}
|
||||
|
||||
public void pause() {
|
||||
@@ -85,51 +82,54 @@ public final class BluetoothEnabler implements Preference.OnPreferenceChangeList
|
||||
}
|
||||
|
||||
mContext.unregisterReceiver(mReceiver);
|
||||
mCheckBox.setOnPreferenceChangeListener(null);
|
||||
mSwitch.setOnCheckedChangeListener(null);
|
||||
}
|
||||
|
||||
public boolean onPreferenceChange(Preference preference, Object value) {
|
||||
boolean enable = (Boolean) value;
|
||||
public void setSwitch(Switch switch_) {
|
||||
if (mSwitch == switch_) return;
|
||||
mSwitch.setOnCheckedChangeListener(null);
|
||||
mSwitch = switch_;
|
||||
mSwitch.setOnCheckedChangeListener(this);
|
||||
|
||||
final int bluetoothState = mLocalAdapter.getBluetoothState();
|
||||
boolean isEnabled = bluetoothState == BluetoothAdapter.STATE_ON;
|
||||
boolean isDisabled = bluetoothState == BluetoothAdapter.STATE_OFF;
|
||||
mSwitch.setChecked(isEnabled);
|
||||
mSwitch.setEnabled(isEnabled || isDisabled);
|
||||
}
|
||||
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
// 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;
|
||||
if (isChecked &&
|
||||
!WirelessSettings.isRadioAllowed(mContext, Settings.System.RADIO_BLUETOOTH)) {
|
||||
Toast.makeText(mContext, R.string.wifi_in_airplane_mode, Toast.LENGTH_SHORT).show();
|
||||
// Reset switch to off
|
||||
buttonView.setChecked(false);
|
||||
}
|
||||
|
||||
mLocalAdapter.setBluetoothEnabled(enable);
|
||||
mCheckBox.setEnabled(false);
|
||||
|
||||
// Don't update UI to opposite state until we're sure
|
||||
return false;
|
||||
mLocalAdapter.setBluetoothEnabled(isChecked);
|
||||
mSwitch.setEnabled(false);
|
||||
}
|
||||
|
||||
void handleStateChanged(int state) {
|
||||
switch (state) {
|
||||
case BluetoothAdapter.STATE_TURNING_ON:
|
||||
mCheckBox.setSummary(R.string.wifi_starting);
|
||||
mCheckBox.setEnabled(false);
|
||||
mSwitch.setEnabled(false);
|
||||
break;
|
||||
case BluetoothAdapter.STATE_ON:
|
||||
mCheckBox.setChecked(true);
|
||||
mCheckBox.setSummary(null);
|
||||
mCheckBox.setEnabled(true);
|
||||
mSwitch.setChecked(true);
|
||||
mSwitch.setEnabled(true);
|
||||
break;
|
||||
case BluetoothAdapter.STATE_TURNING_OFF:
|
||||
mCheckBox.setSummary(R.string.wifi_stopping);
|
||||
mCheckBox.setEnabled(false);
|
||||
mSwitch.setEnabled(false);
|
||||
break;
|
||||
case BluetoothAdapter.STATE_OFF:
|
||||
mCheckBox.setChecked(false);
|
||||
mCheckBox.setSummary(mOriginalSummary);
|
||||
mCheckBox.setEnabled(true);
|
||||
mSwitch.setChecked(false);
|
||||
mSwitch.setEnabled(true);
|
||||
break;
|
||||
default:
|
||||
mCheckBox.setChecked(false);
|
||||
mCheckBox.setSummary(R.string.wifi_error);
|
||||
mCheckBox.setEnabled(true);
|
||||
mSwitch.setChecked(false);
|
||||
mSwitch.setEnabled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -16,15 +16,20 @@
|
||||
|
||||
package com.android.settings.bluetooth;
|
||||
|
||||
import android.app.ActionBar;
|
||||
import android.app.Activity;
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.bluetooth.BluetoothDevice;
|
||||
import android.content.Intent;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.preference.PreferenceScreen;
|
||||
import android.util.Log;
|
||||
import android.view.Gravity;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.Switch;
|
||||
|
||||
import com.android.settings.R;
|
||||
|
||||
@@ -35,77 +40,120 @@ import com.android.settings.R;
|
||||
public final class BluetoothSettings extends DeviceListPreferenceFragment {
|
||||
private static final String TAG = "BluetoothSettings";
|
||||
|
||||
private static final String KEY_BT_CHECKBOX = "bt_checkbox";
|
||||
private static final String KEY_BT_DISCOVERABLE = "bt_discoverable";
|
||||
private static final String KEY_BT_DISCOVERABLE_TIMEOUT = "bt_discoverable_timeout";
|
||||
private static final String KEY_BT_NAME = "bt_name";
|
||||
private static final String KEY_BT_SHOW_RECEIVED = "bt_show_received_files";
|
||||
private static final int MENU_ID_MAKE_DISCOVERABLE = Menu.FIRST;
|
||||
private static final int MENU_ID_SCAN = Menu.FIRST + 1;
|
||||
private static final int MENU_ID_ADVANCED = Menu.FIRST + 2;
|
||||
|
||||
private BluetoothEnabler mEnabler;
|
||||
private BluetoothDiscoverableEnabler mDiscoverableEnabler;
|
||||
private BluetoothNamePreference mNamePreference;
|
||||
|
||||
/* Private intent to show the list of received files */
|
||||
private static final String BTOPP_ACTION_OPEN_RECEIVED_FILES =
|
||||
"android.btopp.intent.action.OPEN_RECEIVED_FILES";
|
||||
private BluetoothEnabler mBluetoothEnabler;
|
||||
|
||||
/** Initialize the filter to show bonded devices only. */
|
||||
public BluetoothSettings() {
|
||||
super(BluetoothDeviceFilter.BONDED_DEVICE_FILTER);
|
||||
}
|
||||
//public BluetoothSettings() {
|
||||
// super(BluetoothDeviceFilter.BONDED_DEVICE_FILTER);
|
||||
//}
|
||||
|
||||
@Override
|
||||
void addPreferencesForActivity() {
|
||||
addPreferencesFromResource(R.xml.bluetooth_settings);
|
||||
|
||||
mEnabler = new BluetoothEnabler(getActivity(),
|
||||
(CheckBoxPreference) findPreference(KEY_BT_CHECKBOX));
|
||||
Activity activity = getActivity();
|
||||
|
||||
mDiscoverableEnabler = new BluetoothDiscoverableEnabler(getActivity(),
|
||||
mLocalAdapter,
|
||||
(CheckBoxPreference) findPreference(KEY_BT_DISCOVERABLE),
|
||||
(ListPreference) findPreference(KEY_BT_DISCOVERABLE_TIMEOUT));
|
||||
Switch actionBarSwitch = new Switch(activity);
|
||||
|
||||
mNamePreference = (BluetoothNamePreference) findPreference(KEY_BT_NAME);
|
||||
if (activity instanceof PreferenceActivity) {
|
||||
PreferenceActivity preferenceActivity = (PreferenceActivity) activity;
|
||||
if (preferenceActivity.onIsHidingHeaders() || !preferenceActivity.onIsMultiPane()) {
|
||||
final int padding = activity.getResources().getDimensionPixelSize(
|
||||
R.dimen.action_bar_switch_padding);
|
||||
actionBarSwitch.setPadding(0, 0, padding, 0);
|
||||
activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
|
||||
ActionBar.DISPLAY_SHOW_CUSTOM);
|
||||
activity.getActionBar().setCustomView(actionBarSwitch, new ActionBar.LayoutParams(
|
||||
ActionBar.LayoutParams.WRAP_CONTENT,
|
||||
ActionBar.LayoutParams.WRAP_CONTENT,
|
||||
Gravity.CENTER_VERTICAL | Gravity.RIGHT));
|
||||
}
|
||||
}
|
||||
|
||||
mBluetoothEnabler = new BluetoothEnabler(activity, actionBarSwitch);
|
||||
|
||||
if (mLocalAdapter != null && mLocalAdapter.isEnabled()) {
|
||||
activity.getActionBar().setSubtitle(mLocalAdapter.getName());
|
||||
}
|
||||
|
||||
// TODO activity.setTheme(android.R.style.Theme_Holo_SplitActionBarWhenNarrow);
|
||||
|
||||
setHasOptionsMenu(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
|
||||
// Repopulate (which isn't too bad since it's cached in the settings
|
||||
// bluetooth manager)
|
||||
addDevices();
|
||||
mBluetoothEnabler.resume();
|
||||
|
||||
mEnabler.resume();
|
||||
mDiscoverableEnabler.resume();
|
||||
mNamePreference.resume();
|
||||
updateContent(mLocalAdapter.getBluetoothState());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
|
||||
mNamePreference.pause();
|
||||
mDiscoverableEnabler.pause();
|
||||
mEnabler.pause();
|
||||
mBluetoothEnabler.pause();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
boolean bluetoothIsEnabled = mLocalAdapter.getBluetoothState() == BluetoothAdapter.STATE_ON;
|
||||
menu.add(Menu.NONE, MENU_ID_MAKE_DISCOVERABLE, 0, R.string.bluetooth_visibility)
|
||||
.setEnabled(bluetoothIsEnabled);
|
||||
menu.add(Menu.NONE, MENU_ID_SCAN, 0, R.string.bluetooth_preference_find_nearby_title)
|
||||
.setIcon(R.drawable.ic_menu_scan_network).setEnabled(bluetoothIsEnabled);
|
||||
menu.add(Menu.NONE, MENU_ID_ADVANCED, 0, R.string.bluetooth_menu_advanced)
|
||||
.setIcon(android.R.drawable.ic_menu_manage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case MENU_ID_MAKE_DISCOVERABLE:
|
||||
// TODO
|
||||
// if (mLocalAdapter.getBluetoothState() == BluetoothAdapter.STATE_ON) {
|
||||
// onAddNetworkPressed();
|
||||
// }
|
||||
return true;
|
||||
case MENU_ID_SCAN:
|
||||
if (mLocalAdapter.getBluetoothState() == BluetoothAdapter.STATE_ON) {
|
||||
mLocalAdapter.startScanning(true);
|
||||
}
|
||||
return true;
|
||||
case MENU_ID_ADVANCED:
|
||||
if (getActivity() instanceof PreferenceActivity) {
|
||||
((PreferenceActivity) getActivity()).startPreferencePanel(
|
||||
AdvancedBluetoothSettings.class.getCanonicalName(),
|
||||
null,
|
||||
R.string.bluetooth_advanced_titlebar, null,
|
||||
this, 0);
|
||||
} else {
|
||||
startFragment(this, AdvancedBluetoothSettings.class.getCanonicalName(), -1, null);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
private final View.OnClickListener mListener = new View.OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
// User clicked on advanced options icon for a device in the list
|
||||
if (v.getTag() instanceof CachedBluetoothDevice) {
|
||||
CachedBluetoothDevice
|
||||
device = (CachedBluetoothDevice) v.getTag();
|
||||
CachedBluetoothDevice device = (CachedBluetoothDevice) v.getTag();
|
||||
|
||||
Preference pref = new Preference(getActivity());
|
||||
pref.setTitle(device.getName());
|
||||
pref.setFragment(DeviceProfilesSettings.class.getName());
|
||||
pref.getExtras().putParcelable(DeviceProfilesSettings.EXTRA_DEVICE,
|
||||
device.getDevice());
|
||||
((PreferenceActivity) getActivity())
|
||||
.onPreferenceStartFragment(BluetoothSettings.this,
|
||||
pref);
|
||||
((PreferenceActivity) getActivity()).onPreferenceStartFragment(
|
||||
BluetoothSettings.this, pref);
|
||||
} else {
|
||||
Log.w(TAG, "onClick() called for other View: " + v);
|
||||
}
|
||||
@@ -113,19 +161,54 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
|
||||
};
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
|
||||
Preference preference) {
|
||||
if (KEY_BT_SHOW_RECEIVED.equals(preference.getKey())) {
|
||||
Intent intent = new Intent(BTOPP_ACTION_OPEN_RECEIVED_FILES);
|
||||
getActivity().sendBroadcast(intent);
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onPreferenceTreeClick(preferenceScreen, preference);
|
||||
void onDevicePreferenceClick(BluetoothDevicePreference btPreference) {
|
||||
mLocalAdapter.stopScanning();
|
||||
super.onDevicePreferenceClick(btPreference);
|
||||
}
|
||||
|
||||
public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice,
|
||||
int bondState) {
|
||||
@Override
|
||||
public void onBluetoothStateChanged(int bluetoothState) {
|
||||
super.onBluetoothStateChanged(bluetoothState);
|
||||
updateContent(bluetoothState);
|
||||
}
|
||||
|
||||
private void updateContent(int bluetoothState) {
|
||||
final PreferenceScreen preferenceScreen = getPreferenceScreen();
|
||||
getActivity().invalidateOptionsMenu();
|
||||
int messageId = 0;
|
||||
|
||||
switch (bluetoothState) {
|
||||
case BluetoothAdapter.STATE_ON:
|
||||
preferenceScreen.removeAll();
|
||||
// Repopulate (which isn't too bad since it's cached in the settings bluetooth manager)
|
||||
addDevices();
|
||||
mLocalAdapter.startScanning(false);
|
||||
return;
|
||||
|
||||
case BluetoothAdapter.STATE_TURNING_OFF:
|
||||
int preferenceCount = preferenceScreen.getPreferenceCount();
|
||||
for (int i = 0; i < preferenceCount; i++) {
|
||||
preferenceScreen.getPreference(i).setEnabled(false);
|
||||
}
|
||||
return;
|
||||
|
||||
case BluetoothAdapter.STATE_OFF:
|
||||
messageId = R.string.bluetooth_empty_list_bluetooth_off;
|
||||
break;
|
||||
|
||||
case BluetoothAdapter.STATE_TURNING_ON:
|
||||
messageId = R.string.bluetooth_turning_on;
|
||||
break;
|
||||
}
|
||||
|
||||
removeAllDevices();
|
||||
// TODO: from xml, add top padding. Same as in wifi
|
||||
Preference emptyListPreference = new Preference(getActivity());
|
||||
emptyListPreference.setTitle(messageId);
|
||||
preferenceScreen.addPreference(emptyListPreference);
|
||||
}
|
||||
|
||||
public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState) {
|
||||
if (bondState == BluetoothDevice.BOND_BONDED) {
|
||||
// add to "Paired devices" list after remote-initiated pairing
|
||||
if (mDevicePreferenceMap.get(cachedDevice) == null) {
|
||||
|
@@ -21,6 +21,7 @@ import android.bluetooth.BluetoothDevice;
|
||||
import android.os.Bundle;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceCategory;
|
||||
import android.preference.PreferenceGroup;
|
||||
import android.preference.PreferenceScreen;
|
||||
import android.util.Log;
|
||||
|
||||
@@ -36,7 +37,6 @@ import java.util.WeakHashMap;
|
||||
*
|
||||
* @see BluetoothSettings
|
||||
* @see DevicePickerFragment
|
||||
* @see BluetoothFindNearby
|
||||
*/
|
||||
public abstract class DeviceListPreferenceFragment extends
|
||||
SettingsPreferenceFragment implements BluetoothCallback {
|
||||
@@ -53,7 +53,7 @@ public abstract class DeviceListPreferenceFragment extends
|
||||
LocalBluetoothAdapter mLocalAdapter;
|
||||
LocalBluetoothManager mLocalManager;
|
||||
|
||||
private PreferenceCategory mDeviceList;
|
||||
private PreferenceGroup mDeviceListGroup;
|
||||
|
||||
final WeakHashMap<CachedBluetoothDevice, BluetoothDevicePreference> mDevicePreferenceMap =
|
||||
new WeakHashMap<CachedBluetoothDevice, BluetoothDevicePreference>();
|
||||
@@ -83,8 +83,13 @@ public abstract class DeviceListPreferenceFragment extends
|
||||
|
||||
addPreferencesForActivity();
|
||||
|
||||
mDeviceList = (PreferenceCategory) findPreference(KEY_BT_DEVICE_LIST);
|
||||
if (mDeviceList == null) {
|
||||
mDeviceListGroup = (PreferenceCategory) findPreference(KEY_BT_DEVICE_LIST);
|
||||
if (mDeviceListGroup == null) {
|
||||
// If null, device preferences are added directly to the root of the preference screen
|
||||
mDeviceListGroup = getPreferenceScreen();
|
||||
mDeviceListGroup.setOrderingAsAdded(false);
|
||||
}
|
||||
if (mDeviceListGroup == null) {
|
||||
Log.e(TAG, "Could not find device list preference object!");
|
||||
}
|
||||
}
|
||||
@@ -105,13 +110,15 @@ public abstract class DeviceListPreferenceFragment extends
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
|
||||
mLocalAdapter.stopScanning();
|
||||
removeAllDevices();
|
||||
mLocalManager.setForegroundActivity(null);
|
||||
mLocalManager.getEventManager().unregisterCallback(this);
|
||||
}
|
||||
|
||||
void removeAllDevices() {
|
||||
mLocalAdapter.stopScanning();
|
||||
mDevicePreferenceMap.clear();
|
||||
mDeviceList.removeAll();
|
||||
mDeviceListGroup.removeAll();
|
||||
}
|
||||
|
||||
void addDevices() {
|
||||
@@ -132,7 +139,7 @@ public abstract class DeviceListPreferenceFragment extends
|
||||
}
|
||||
|
||||
if (preference instanceof BluetoothDevicePreference) {
|
||||
BluetoothDevicePreference btPreference = (BluetoothDevicePreference)preference;
|
||||
BluetoothDevicePreference btPreference = (BluetoothDevicePreference) preference;
|
||||
CachedBluetoothDevice device = btPreference.getCachedDevice();
|
||||
mSelectedDevice = device.getDevice();
|
||||
onDevicePreferenceClick(btPreference);
|
||||
@@ -152,6 +159,9 @@ public abstract class DeviceListPreferenceFragment extends
|
||||
return;
|
||||
}
|
||||
|
||||
// No update while list shows state message
|
||||
if (mLocalAdapter.getBluetoothState() != BluetoothAdapter.STATE_ON) return;
|
||||
|
||||
if (mFilter.matches(cachedDevice.getDevice())) {
|
||||
createDevicePreference(cachedDevice);
|
||||
}
|
||||
@@ -162,7 +172,7 @@ public abstract class DeviceListPreferenceFragment extends
|
||||
getActivity(), cachedDevice);
|
||||
|
||||
initDevicePreference(preference);
|
||||
mDeviceList.addPreference(preference);
|
||||
mDeviceListGroup.addPreference(preference);
|
||||
mDevicePreferenceMap.put(cachedDevice, preference);
|
||||
}
|
||||
|
||||
@@ -170,13 +180,14 @@ public abstract class DeviceListPreferenceFragment extends
|
||||
* Overridden in {@link BluetoothSettings} to add a listener.
|
||||
* @param preference the newly added preference
|
||||
*/
|
||||
void initDevicePreference(BluetoothDevicePreference preference) { }
|
||||
void initDevicePreference(BluetoothDevicePreference preference) {
|
||||
// Does nothing by default
|
||||
}
|
||||
|
||||
public void onDeviceDeleted(CachedBluetoothDevice cachedDevice) {
|
||||
BluetoothDevicePreference preference = mDevicePreferenceMap.remove(
|
||||
cachedDevice);
|
||||
BluetoothDevicePreference preference = mDevicePreferenceMap.remove(cachedDevice);
|
||||
if (preference != null) {
|
||||
mDeviceList.removePreference(preference);
|
||||
mDeviceListGroup.removePreference(preference);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -185,9 +196,10 @@ public abstract class DeviceListPreferenceFragment extends
|
||||
}
|
||||
|
||||
private void updateProgressUi(boolean start) {
|
||||
if (mDeviceList instanceof ProgressCategory) {
|
||||
((ProgressCategory) mDeviceList).setProgress(start);
|
||||
if (mDeviceListGroup instanceof ProgressCategory) {
|
||||
((ProgressCategory) mDeviceListGroup).setProgress(start);
|
||||
}
|
||||
// else TODO Add a spinner at the end of the list to show in progress state
|
||||
}
|
||||
|
||||
public void onBluetoothStateChanged(int bluetoothState) {
|
||||
|
@@ -89,7 +89,7 @@ public final class DevicePickerFragment extends DeviceListPreferenceFragment {
|
||||
super.onBluetoothStateChanged(bluetoothState);
|
||||
|
||||
if (bluetoothState == BluetoothAdapter.STATE_ON) {
|
||||
mLocalAdapter.startScanning(false);
|
||||
mLocalAdapter.startScanning(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -50,7 +50,7 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
|
||||
private static final String KEY_RENAME_DEVICE = "rename_device";
|
||||
private static final String KEY_PROFILE_CONTAINER = "profile_container";
|
||||
private static final String KEY_UNPAIR = "unpair";
|
||||
private static final String KEY_ALLOW_INCOMING = "allow_incoming";
|
||||
//private static final String KEY_ALLOW_INCOMING = "allow_incoming";
|
||||
|
||||
public static final String EXTRA_DEVICE = "device";
|
||||
|
||||
@@ -355,6 +355,7 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
|
||||
mCachedDevice.unpair();
|
||||
}
|
||||
|
||||
/*
|
||||
private void setIncomingFileTransfersAllowed(boolean allow) {
|
||||
// TODO: make an IPC call into BluetoothOpp to update
|
||||
Log.d(TAG, "Set allow incoming = " + allow);
|
||||
@@ -364,6 +365,7 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
|
||||
// TODO: get this value from BluetoothOpp ???
|
||||
return true;
|
||||
}
|
||||
*/
|
||||
|
||||
private boolean getAutoConnect(LocalBluetoothProfile prof) {
|
||||
return prof.isPreferred(mCachedDevice.getDevice());
|
||||
|
Reference in New Issue
Block a user