Fix Wi-Fi "Network usage" and "Privacy" drop down
Currently, these are implemented with DropDownPreference, which keeps disappearing after opening. This is because this page is special, many other preferences on this page auto refreshed every some seconds, causing the container RecyclerView to re-render (and a scrollbar is displayed when re-render happens). This re-renders cause the drop downs to auto dismiss. Use ListPreference instead can solve this issue, because DropDownPreference is extended from ListPreference, this is simple change. Fix: 209799515 Test: manual Change-Id: Ib098922c39d9d6c56d645f12f5884489ea6688be
This commit is contained in:
@@ -21,7 +21,7 @@ import android.content.Context;
|
||||
import android.net.wifi.WifiConfiguration;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.DropDownPreference;
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
@@ -30,13 +30,13 @@ import com.android.settings.wifi.WifiDialog2;
|
||||
import com.android.wifitrackerlib.WifiEntry;
|
||||
|
||||
/**
|
||||
* {@link AbstractPreferenceController} that controls whether the wifi network is metered or not
|
||||
* A controller that controls whether the Wi-Fi network is metered or not.
|
||||
*/
|
||||
public class WifiMeteredPreferenceController2 extends BasePreferenceController implements
|
||||
Preference.OnPreferenceChangeListener, WifiDialog2.WifiDialog2Listener {
|
||||
|
||||
private static final String KEY_WIFI_METERED = "metered";
|
||||
private WifiEntry mWifiEntry;
|
||||
private final WifiEntry mWifiEntry;
|
||||
private Preference mPreference;
|
||||
|
||||
public WifiMeteredPreferenceController2(Context context, WifiEntry wifiEntry) {
|
||||
@@ -46,11 +46,11 @@ public class WifiMeteredPreferenceController2 extends BasePreferenceController i
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
final DropDownPreference dropDownPreference = (DropDownPreference) preference;
|
||||
final ListPreference listPreference = (ListPreference) preference;
|
||||
final int meteredOverride = getMeteredOverride();
|
||||
preference.setSelectable(mWifiEntry.canSetMeteredChoice());
|
||||
dropDownPreference.setValue(Integer.toString(meteredOverride));
|
||||
updateSummary(dropDownPreference, meteredOverride);
|
||||
listPreference.setValue(Integer.toString(meteredOverride));
|
||||
updateSummary(listPreference, meteredOverride);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -66,7 +66,7 @@ public class WifiMeteredPreferenceController2 extends BasePreferenceController i
|
||||
|
||||
// Stage the backup of the SettingsProvider package which backs this up
|
||||
BackupManager.dataChanged("com.android.providers.settings");
|
||||
updateSummary((DropDownPreference) preference, getMeteredOverride());
|
||||
updateSummary((ListPreference) preference, getMeteredOverride());
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ public class WifiMeteredPreferenceController2 extends BasePreferenceController i
|
||||
return WifiEntry.METERED_CHOICE_AUTO;
|
||||
}
|
||||
|
||||
private void updateSummary(DropDownPreference preference, int meteredOverride) {
|
||||
private void updateSummary(ListPreference preference, int meteredOverride) {
|
||||
preference.setSummary(preference.getEntries()[meteredOverride]);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user