[Settings] Code refactor for performance

Move some logic out of constructor to reduce the loading when launch UI.

Bug: 213836977
Test: Junit VpnPreferenceControllerTest
Change-Id: I90c7770f529b4710196697886e566dfe1be629e4
This commit is contained in:
Bonian Chen
2022-01-10 17:09:32 +08:00
parent 6649b9b0eb
commit c2e72bc8ad

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