Merge "[Settings] Code refactor for performance"

This commit is contained in:
Bonian Chen
2022-01-11 02:01:23 +00:00
committed by Android (Google) Code Review

View File

@@ -50,7 +50,9 @@ import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume; import com.android.settingslib.core.lifecycle.events.OnResume;
import com.android.settingslib.utils.ThreadUtils; import com.android.settingslib.utils.ThreadUtils;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.function.Function;
public class VpnPreferenceController extends AbstractPreferenceController public class VpnPreferenceController extends AbstractPreferenceController
implements PreferenceControllerMixin, LifecycleObserver, OnResume, OnPause { implements PreferenceControllerMixin, LifecycleObserver, OnResume, OnPause {
@@ -63,32 +65,36 @@ public class VpnPreferenceController extends AbstractPreferenceController
.build(); .build();
private static final String TAG = "VpnPreferenceController"; private static final String TAG = "VpnPreferenceController";
private final String mToggleable;
private final UserManager mUserManager; private final UserManager mUserManager;
private final ConnectivityManager mConnectivityManager; private ConnectivityManager mConnectivityManager;
private final VpnManager mVpnManager; private final VpnManager mVpnManager;
private Preference mPreference; private Preference mPreference;
public VpnPreferenceController(Context context) { public VpnPreferenceController(Context context) {
super(context); super(context);
mToggleable = Settings.Global.getString(context.getContentResolver(),
Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
mConnectivityManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
mVpnManager = context.getSystemService(VpnManager.class); mVpnManager = context.getSystemService(VpnManager.class);
} }
@Override @Override
public void displayPreference(PreferenceScreen screen) { public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen); super.displayPreference(screen);
mPreference = screen.findPreference(KEY_VPN_SETTINGS); mPreference = getEffectivePreference(screen);
}
@VisibleForTesting
protected Preference getEffectivePreference(PreferenceScreen screen) {
Preference preference = screen.findPreference(KEY_VPN_SETTINGS);
if (preference == null) {
return null;
}
String toggleable = Settings.Global.getString(mContext.getContentResolver(),
Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
// Manually set dependencies for Wifi when not toggleable. // Manually set dependencies for Wifi when not toggleable.
if (mToggleable == null || !mToggleable.contains(Settings.Global.RADIO_WIFI)) { if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_WIFI)) {
if (mPreference != null) { preference.setDependency(SettingsSlicesContract.KEY_AIRPLANE_MODE);
mPreference.setDependency(SettingsSlicesContract.KEY_AIRPLANE_MODE);
}
} }
return preference;
} }
@Override @Override
@@ -104,15 +110,19 @@ public class VpnPreferenceController extends AbstractPreferenceController
@Override @Override
public void onPause() { public void onPause() {
if (isAvailable()) { if (mConnectivityManager != null) {
mConnectivityManager.unregisterNetworkCallback(mNetworkCallback); mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
mConnectivityManager = null;
} }
} }
@Override @Override
public void onResume() { public void onResume() {
if (isAvailable()) { if (isAvailable()) {
mConnectivityManager = mContext.getSystemService(ConnectivityManager.class);
mConnectivityManager.registerNetworkCallback(REQUEST, mNetworkCallback); mConnectivityManager.registerNetworkCallback(REQUEST, mNetworkCallback);
} else {
mConnectivityManager = null;
} }
} }
@@ -203,17 +213,13 @@ public class VpnPreferenceController extends AbstractPreferenceController
@VisibleForTesting @VisibleForTesting
protected int getInsecureVpnCount() { protected int getInsecureVpnCount() {
int count = 0; final Function<String, VpnProfile> keyToProfile = key ->
for (String key : LegacyVpnProfileStore.list(Credentials.VPN)) { VpnProfile.decode(key, LegacyVpnProfileStore.get(Credentials.VPN + key));
final VpnProfile profile = VpnProfile.decode(key, return (int) Arrays.stream(LegacyVpnProfileStore.list(Credentials.VPN))
LegacyVpnProfileStore.get(Credentials.VPN + key)); .map(keyToProfile)
// Return whether any profile is an insecure type. // Return whether any profile is an insecure type.
if (VpnProfile.isLegacyType(profile.type)) { .filter(profile -> VpnProfile.isLegacyType(profile.type))
count++; .count();
}
}
// We did not find any insecure VPNs.
return count;
} }
// Copied from SystemUI::SecurityControllerImpl // Copied from SystemUI::SecurityControllerImpl