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]);
|
||||
}
|
||||
|
||||
|
@@ -21,7 +21,7 @@ import android.net.wifi.WifiConfiguration;
|
||||
import android.net.wifi.WifiManager;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.DropDownPreference;
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
@@ -31,14 +31,13 @@ import com.android.settings.wifi.WifiDialog2;
|
||||
import com.android.wifitrackerlib.WifiEntry;
|
||||
|
||||
/**
|
||||
* {@link AbstractPreferenceController} that controls whether the wifi network is mac randomized
|
||||
* or not
|
||||
* A controller that controls whether the Wi-Fi network is mac randomized or not.
|
||||
*/
|
||||
public class WifiPrivacyPreferenceController2 extends BasePreferenceController implements
|
||||
Preference.OnPreferenceChangeListener, WifiDialog2.WifiDialog2Listener {
|
||||
|
||||
private static final String KEY_WIFI_PRIVACY = "privacy";
|
||||
private WifiManager mWifiManager;
|
||||
private final WifiManager mWifiManager;
|
||||
private WifiEntry mWifiEntry;
|
||||
private Preference mPreference;
|
||||
|
||||
@@ -66,16 +65,16 @@ public class WifiPrivacyPreferenceController2 extends BasePreferenceController i
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
final DropDownPreference dropDownPreference = (DropDownPreference) preference;
|
||||
final ListPreference listPreference = (ListPreference) preference;
|
||||
final int randomizationLevel = getRandomizationValue();
|
||||
final boolean isSelectable = mWifiEntry.canSetPrivacy();
|
||||
preference.setSelectable(isSelectable);
|
||||
dropDownPreference.setValue(Integer.toString(randomizationLevel));
|
||||
updateSummary(dropDownPreference, randomizationLevel);
|
||||
listPreference.setValue(Integer.toString(randomizationLevel));
|
||||
updateSummary(listPreference, randomizationLevel);
|
||||
|
||||
// If the preference cannot be selectable, display a temporary network in the summary.
|
||||
if (!isSelectable) {
|
||||
dropDownPreference.setSummary(R.string.wifi_privacy_settings_ephemeral_summary);
|
||||
listPreference.setSummary(R.string.wifi_privacy_settings_ephemeral_summary);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,7 +89,7 @@ public class WifiPrivacyPreferenceController2 extends BasePreferenceController i
|
||||
mWifiEntry.disconnect(null /* callback */);
|
||||
mWifiEntry.connect(null /* callback */);
|
||||
}
|
||||
updateSummary((DropDownPreference) preference, privacy);
|
||||
updateSummary((ListPreference) preference, privacy);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -124,7 +123,7 @@ public class WifiPrivacyPreferenceController2 extends BasePreferenceController i
|
||||
? WifiEntry.PRIVACY_RANDOMIZED_MAC : WifiEntry.PRIVACY_DEVICE_MAC;
|
||||
}
|
||||
|
||||
private void updateSummary(DropDownPreference preference, int macRandomized) {
|
||||
private void updateSummary(ListPreference preference, int macRandomized) {
|
||||
// Translates value here to set RANDOMIZATION_PERSISTENT as first item in UI for better UX.
|
||||
final int prefMacRandomized = translateMacRandomizedValueToPrefValue(macRandomized);
|
||||
preference.setSummary(preference.getEntries()[prefMacRandomized]);
|
||||
|
Reference in New Issue
Block a user