Changed a Bluetooth device's settings from an activity to a dialog.
+ Replace the “Paired bluetooth device” screen with a “Pair device” dialog + Add device name text field at the top + Replace “Unpair” list item with a “Forget" button at bottom of dialog + Change “Profiles” section header to “Use for” + Remove status under profile titles + Move checkboxes to left side of labels Bug: 15719219 Change-Id: I3b0e8c82c761fae98f16508b9fd9c58aff651f80
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
package com.android.settings.bluetooth;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Fragment;
|
||||
import android.bluetooth.BluetoothDevice;
|
||||
import android.bluetooth.BluetoothProfile;
|
||||
import android.content.Context;
|
||||
@@ -36,6 +37,7 @@ import android.text.TextWatcher;
|
||||
import android.app.Dialog;
|
||||
import android.widget.Button;
|
||||
import android.text.Editable;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.SettingsPreferenceFragment;
|
||||
import com.android.settings.search.Index;
|
||||
@@ -52,15 +54,14 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
|
||||
implements CachedBluetoothDevice.Callback, Preference.OnPreferenceChangeListener {
|
||||
private static final String TAG = "DeviceProfilesSettings";
|
||||
|
||||
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_PBAP_SERVER = "PBAP Server";
|
||||
|
||||
public static final String EXTRA_DEVICE = "device";
|
||||
private RenameEditTextPreference mRenameDeviceNamePref;
|
||||
private LocalBluetoothManager mManager;
|
||||
|
||||
private CachedBluetoothDevice mCachedDevice;
|
||||
private LocalBluetoothManager mManager;
|
||||
private LocalBluetoothProfileManager mProfileManager;
|
||||
|
||||
private PreferenceGroup mProfileContainer;
|
||||
@@ -72,66 +73,18 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
|
||||
private AlertDialog mDisconnectDialog;
|
||||
private boolean mProfileGroupIsRemoved;
|
||||
|
||||
private class RenameEditTextPreference implements TextWatcher{
|
||||
public void afterTextChanged(Editable s) {
|
||||
Dialog d = mDeviceNamePref.getDialog();
|
||||
if (d instanceof AlertDialog) {
|
||||
((AlertDialog) d).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(s.length() > 0);
|
||||
}
|
||||
}
|
||||
|
||||
// TextWatcher interface
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
// not used
|
||||
}
|
||||
|
||||
// TextWatcher interface
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
// not used
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
BluetoothDevice device;
|
||||
if (savedInstanceState != null) {
|
||||
device = savedInstanceState.getParcelable(EXTRA_DEVICE);
|
||||
} else {
|
||||
Bundle args = getArguments();
|
||||
device = args.getParcelable(EXTRA_DEVICE);
|
||||
}
|
||||
|
||||
addPreferencesFromResource(R.xml.bluetooth_device_advanced);
|
||||
getPreferenceScreen().setOrderingAsAdded(false);
|
||||
mProfileContainer = (PreferenceGroup) findPreference(KEY_PROFILE_CONTAINER);
|
||||
mDeviceNamePref = (EditTextPreference) findPreference(KEY_RENAME_DEVICE);
|
||||
|
||||
if (device == null) {
|
||||
Log.w(TAG, "Activity started without a remote Bluetooth device");
|
||||
finish();
|
||||
return; // TODO: test this failure path
|
||||
}
|
||||
mRenameDeviceNamePref = new RenameEditTextPreference();
|
||||
mManager = LocalBluetoothManager.getInstance(getActivity());
|
||||
CachedBluetoothDeviceManager deviceManager =
|
||||
mManager.getCachedDeviceManager();
|
||||
mProfileManager = mManager.getProfileManager();
|
||||
mCachedDevice = deviceManager.findDevice(device);
|
||||
if (mCachedDevice == null) {
|
||||
Log.w(TAG, "Device not found, cannot connect to it");
|
||||
finish();
|
||||
return; // TODO: test this failure path
|
||||
}
|
||||
|
||||
String deviceName = mCachedDevice.getName();
|
||||
mDeviceNamePref.setSummary(deviceName);
|
||||
mDeviceNamePref.setText(deviceName);
|
||||
mDeviceNamePref.setOnPreferenceChangeListener(this);
|
||||
|
||||
// Add a preference for each profile
|
||||
addPreferencesForProfiles();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -141,6 +94,9 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
|
||||
mDisconnectDialog.dismiss();
|
||||
mDisconnectDialog = null;
|
||||
}
|
||||
if (mCachedDevice != null) {
|
||||
mCachedDevice.unregisterCallback(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -154,18 +110,13 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
|
||||
super.onResume();
|
||||
|
||||
mManager.setForegroundActivity(getActivity());
|
||||
mCachedDevice.registerCallback(this);
|
||||
if(mCachedDevice.getBondState() == BluetoothDevice.BOND_NONE)
|
||||
finish();
|
||||
refresh();
|
||||
EditText et = mDeviceNamePref.getEditText();
|
||||
if (et != null) {
|
||||
et.addTextChangedListener(mRenameDeviceNamePref);
|
||||
Dialog d = mDeviceNamePref.getDialog();
|
||||
if (d instanceof AlertDialog) {
|
||||
Button b = ((AlertDialog) d).getButton(AlertDialog.BUTTON_POSITIVE);
|
||||
b.setEnabled(et.getText().length() > 0);
|
||||
if (mCachedDevice != null) {
|
||||
mCachedDevice.registerCallback(this);
|
||||
if (mCachedDevice.getBondState() == BluetoothDevice.BOND_NONE) {
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
refresh();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -173,11 +124,23 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
|
||||
mCachedDevice.unregisterCallback(this);
|
||||
if (mCachedDevice != null) {
|
||||
mCachedDevice.unregisterCallback(this);
|
||||
}
|
||||
|
||||
mManager.setForegroundActivity(null);
|
||||
}
|
||||
|
||||
public void setDevice(CachedBluetoothDevice cachedDevice) {
|
||||
mCachedDevice = cachedDevice;
|
||||
|
||||
mCachedDevice.registerCallback(this);
|
||||
addPreferencesForProfiles();
|
||||
refresh();
|
||||
}
|
||||
|
||||
private void addPreferencesForProfiles() {
|
||||
mProfileContainer.removeAll();
|
||||
for (LocalBluetoothProfile profile : mCachedDevice.getConnectableProfiles()) {
|
||||
Preference pref = createProfilePreference(profile);
|
||||
mProfileContainer.addPreference(pref);
|
||||
@@ -238,28 +201,6 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
|
||||
return pref;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceTreeClick(PreferenceScreen screen, Preference preference) {
|
||||
String key = preference.getKey();
|
||||
if (key.equals(KEY_UNPAIR)) {
|
||||
unpairDevice();
|
||||
finish();
|
||||
final Context context = preference.getContext();
|
||||
|
||||
SearchIndexableRaw data = new SearchIndexableRaw(context);
|
||||
data.className = BluetoothSettings.class.getName();
|
||||
data.title = mCachedDevice.getName();
|
||||
data.screenTitle = context.getResources().getString(R.string.bluetooth_settings);
|
||||
data.iconResId = R.drawable.ic_settings_bluetooth2;
|
||||
data.enabled = false;
|
||||
|
||||
Index.getInstance(context).updateFromSearchIndexableData(data);
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onPreferenceTreeClick(screen, preference);
|
||||
}
|
||||
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
if (preference == mDeviceNamePref) {
|
||||
mCachedDevice.setName((String) newValue);
|
||||
@@ -331,14 +272,16 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
|
||||
mDisconnectDialog, disconnectListener, title, Html.fromHtml(message));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceAttributesChanged() {
|
||||
refresh();
|
||||
}
|
||||
|
||||
private void refresh() {
|
||||
String deviceName = mCachedDevice.getName();
|
||||
mDeviceNamePref.setSummary(deviceName);
|
||||
mDeviceNamePref.setText(deviceName);
|
||||
final EditText deviceNameField = (EditText) getView().findViewById(R.id.name);
|
||||
if (deviceNameField != null) {
|
||||
deviceNameField.setText(mCachedDevice.getName());
|
||||
}
|
||||
|
||||
refreshProfiles();
|
||||
}
|
||||
@@ -391,8 +334,4 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
|
||||
private int getProfilePreferenceIndex(int profIndex) {
|
||||
return mProfileContainer.getOrder() + profIndex * 10;
|
||||
}
|
||||
|
||||
private void unpairDevice() {
|
||||
mCachedDevice.unpair();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user