Workarounds to avoid removing all prefs
am: 2071eda150
* commit '2071eda150c4ade320fa91ec99678114afbd223e':
Workarounds to avoid removing all prefs
This commit is contained in:
@@ -34,6 +34,7 @@ import android.support.v7.preference.PreferenceViewHolder;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.TextUtils;
|
||||
import android.util.ArrayMap;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
@@ -97,6 +98,7 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF
|
||||
private View mEmptyView;
|
||||
private LinearLayoutManager mLayoutManager;
|
||||
private HighlightablePreferenceGroupAdapter mAdapter;
|
||||
private ArrayMap<String, Preference> mPreferenceCache;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle icicle) {
|
||||
@@ -367,6 +369,28 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF
|
||||
return mAdapter;
|
||||
}
|
||||
|
||||
protected void cacheRemoveAllPrefs(PreferenceGroup group) {
|
||||
mPreferenceCache = new ArrayMap<String, Preference>();
|
||||
final int N = group.getPreferenceCount();
|
||||
for (int i = 0; i < N; i++) {
|
||||
Preference p = group.getPreference(i);
|
||||
if (TextUtils.isEmpty(p.getKey())) {
|
||||
continue;
|
||||
}
|
||||
mPreferenceCache.put(p.getKey(), p);
|
||||
}
|
||||
}
|
||||
|
||||
protected Preference getCachedPreference(String key) {
|
||||
return mPreferenceCache != null ? mPreferenceCache.remove(key) : null;
|
||||
}
|
||||
|
||||
protected void removeCachedPrefs(PreferenceGroup group) {
|
||||
for (Preference p : mPreferenceCache.values()) {
|
||||
group.removePreference(p);
|
||||
}
|
||||
}
|
||||
|
||||
private void highlightPreference(String key) {
|
||||
final int position = canUseListViewForHighLighting(key);
|
||||
if (position >= 0) {
|
||||
|
@@ -84,6 +84,10 @@ public final class BluetoothDevicePreference extends Preference implements
|
||||
onDeviceAttributesChanged();
|
||||
}
|
||||
|
||||
void rebind() {
|
||||
notifyChanged();
|
||||
}
|
||||
|
||||
CachedBluetoothDevice getCachedDevice() {
|
||||
return mCachedDevice;
|
||||
}
|
||||
|
@@ -39,7 +39,6 @@ import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||
import com.android.settings.LinkifyUtils;
|
||||
@@ -77,6 +76,8 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem
|
||||
private static final String BTOPP_ACTION_OPEN_RECEIVED_FILES =
|
||||
"android.btopp.intent.action.OPEN_RECEIVED_FILES";
|
||||
|
||||
private static final String KEY_PAIRED_DEVICES = "paired_devices";
|
||||
|
||||
private static View mSettingsDialogView = null;
|
||||
|
||||
private BluetoothEnabler mBluetoothEnabler;
|
||||
@@ -154,6 +155,21 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem
|
||||
void addPreferencesForActivity() {
|
||||
addPreferencesFromResource(R.xml.bluetooth_settings);
|
||||
|
||||
mPairedDevicesCategory = new PreferenceCategory(getPrefContext());
|
||||
mPairedDevicesCategory.setKey(KEY_PAIRED_DEVICES);
|
||||
mPairedDevicesCategory.setOrder(1);
|
||||
getPreferenceScreen().addPreference(mPairedDevicesCategory);
|
||||
|
||||
mAvailableDevicesCategory = new BluetoothProgressCategory(getActivity());
|
||||
mAvailableDevicesCategory.setSelectable(false);
|
||||
mAvailableDevicesCategory.setOrder(2);
|
||||
getPreferenceScreen().addPreference(mAvailableDevicesCategory);
|
||||
|
||||
mMyDevicePreference = new Preference(getPrefContext());
|
||||
mMyDevicePreference.setSelectable(false);
|
||||
mMyDevicePreference.setOrder(3);
|
||||
getPreferenceScreen().addPreference(mMyDevicePreference);
|
||||
|
||||
setHasOptionsMenu(true);
|
||||
}
|
||||
|
||||
@@ -275,14 +291,15 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem
|
||||
|
||||
private void addDeviceCategory(PreferenceGroup preferenceGroup, int titleId,
|
||||
BluetoothDeviceFilter.Filter filter, boolean addCachedDevices) {
|
||||
cacheRemoveAllPrefs(preferenceGroup);
|
||||
preferenceGroup.setTitle(titleId);
|
||||
getPreferenceScreen().addPreference(preferenceGroup);
|
||||
setFilter(filter);
|
||||
setDeviceListGroup(preferenceGroup);
|
||||
if (addCachedDevices) {
|
||||
addCachedDevices();
|
||||
}
|
||||
preferenceGroup.setEnabled(true);
|
||||
removeCachedPrefs(preferenceGroup);
|
||||
}
|
||||
|
||||
private void updateContent(int bluetoothState) {
|
||||
@@ -291,8 +308,6 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem
|
||||
|
||||
switch (bluetoothState) {
|
||||
case BluetoothAdapter.STATE_ON:
|
||||
preferenceScreen.removeAll();
|
||||
preferenceScreen.setOrderingAsAdded(true);
|
||||
mDevicePreferenceMap.clear();
|
||||
|
||||
if (isUiRestricted()) {
|
||||
@@ -301,44 +316,32 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem
|
||||
}
|
||||
|
||||
// Paired devices category
|
||||
if (mPairedDevicesCategory == null) {
|
||||
mPairedDevicesCategory = new PreferenceCategory(getPrefContext());
|
||||
} else {
|
||||
mPairedDevicesCategory.removeAll();
|
||||
}
|
||||
addDeviceCategory(mPairedDevicesCategory,
|
||||
R.string.bluetooth_preference_paired_devices,
|
||||
BluetoothDeviceFilter.BONDED_DEVICE_FILTER, true);
|
||||
int numberOfPairedDevices = mPairedDevicesCategory.getPreferenceCount();
|
||||
|
||||
if (isUiRestricted() || numberOfPairedDevices <= 0) {
|
||||
preferenceScreen.removePreference(mPairedDevicesCategory);
|
||||
if (preferenceScreen.findPreference(KEY_PAIRED_DEVICES) != null) {
|
||||
preferenceScreen.removePreference(mPairedDevicesCategory);
|
||||
}
|
||||
} else {
|
||||
if (preferenceScreen.findPreference(KEY_PAIRED_DEVICES) == null) {
|
||||
preferenceScreen.addPreference(mPairedDevicesCategory);
|
||||
}
|
||||
}
|
||||
|
||||
// Available devices category
|
||||
if (mAvailableDevicesCategory == null) {
|
||||
mAvailableDevicesCategory = new BluetoothProgressCategory(getActivity());
|
||||
mAvailableDevicesCategory.setSelectable(false);
|
||||
} else {
|
||||
mAvailableDevicesCategory.removeAll();
|
||||
}
|
||||
addDeviceCategory(mAvailableDevicesCategory,
|
||||
R.string.bluetooth_preference_found_devices,
|
||||
BluetoothDeviceFilter.UNBONDED_DEVICE_FILTER, mInitialScanStarted);
|
||||
int numberOfAvailableDevices = mAvailableDevicesCategory.getPreferenceCount();
|
||||
|
||||
if (!mInitialScanStarted) {
|
||||
startScanning();
|
||||
}
|
||||
|
||||
if (mMyDevicePreference == null) {
|
||||
mMyDevicePreference = new Preference(getPrefContext());
|
||||
}
|
||||
|
||||
mMyDevicePreference.setSummary(getResources().getString(
|
||||
R.string.bluetooth_is_visible_message, mLocalAdapter.getName()));
|
||||
mMyDevicePreference.setSelectable(false);
|
||||
preferenceScreen.addPreference(mMyDevicePreference);
|
||||
|
||||
getActivity().invalidateOptionsMenu();
|
||||
|
||||
|
@@ -176,11 +176,19 @@ public abstract class DeviceListPreferenceFragment extends
|
||||
return;
|
||||
}
|
||||
|
||||
BluetoothDevicePreference preference = new BluetoothDevicePreference(
|
||||
getPrefContext(), cachedDevice);
|
||||
String key = cachedDevice.getDevice().getAddress();
|
||||
BluetoothDevicePreference preference = (BluetoothDevicePreference) getCachedPreference(key);
|
||||
|
||||
if (preference == null) {
|
||||
preference = new BluetoothDevicePreference(getPrefContext(), cachedDevice);
|
||||
mDeviceListGroup.addPreference(preference);
|
||||
} else {
|
||||
// Tell the preference it is being re-used in case there is new info in the
|
||||
// cached device.
|
||||
preference.rebind();
|
||||
}
|
||||
|
||||
initDevicePreference(preference);
|
||||
mDeviceListGroup.addPreference(preference);
|
||||
mDevicePreferenceMap.put(cachedDevice, preference);
|
||||
}
|
||||
|
||||
|
@@ -649,19 +649,22 @@ public class WifiSettings extends RestrictedSettingsFragment
|
||||
|
||||
boolean hasAvailableAccessPoints = false;
|
||||
int index = 0;
|
||||
cacheRemoveAllPrefs(getPreferenceScreen());
|
||||
for (AccessPoint accessPoint : accessPoints) {
|
||||
// Ignore access points that are out of range.
|
||||
if (accessPoint.getLevel() != -1) {
|
||||
String key = accessPoint.getBssid();
|
||||
hasAvailableAccessPoints = true;
|
||||
if (accessPoint.getTag() != null) {
|
||||
final Preference pref = (Preference) accessPoint.getTag();
|
||||
LongPressAccessPointPreference pref = (LongPressAccessPointPreference)
|
||||
getCachedPreference(key);
|
||||
if (pref != null) {
|
||||
pref.setOrder(index++);
|
||||
getPreferenceScreen().addPreference(pref);
|
||||
continue;
|
||||
}
|
||||
LongPressAccessPointPreference
|
||||
preference = new LongPressAccessPointPreference(accessPoint,
|
||||
getPrefContext(), mUserBadgeCache, false, this);
|
||||
preference.setKey(key);
|
||||
preference.setOrder(index++);
|
||||
|
||||
if (mOpenSsid != null && mOpenSsid.equals(accessPoint.getSsidStr())
|
||||
@@ -674,6 +677,7 @@ public class WifiSettings extends RestrictedSettingsFragment
|
||||
accessPoint.setListener(this);
|
||||
}
|
||||
}
|
||||
removeCachedPrefs(getPreferenceScreen());
|
||||
if (!hasAvailableAccessPoints) {
|
||||
setProgressBarVisible(true);
|
||||
Preference pref = new Preference(getContext()) {
|
||||
|
Reference in New Issue
Block a user