[Settings] Adjust code for performance

Reorder code flow to reduce redundent work.

Bug: 213836977
Change-Id: Ifd57d1f6a007d6a1c9bcae597e6e9674ce54d8bc
Test: Junit VpnPreferenceControllerTest
This commit is contained in:
Bonian Chen
2022-01-14 08:09:16 +00:00
parent f280687ac7
commit 3fe40484ba

View File

@@ -65,15 +65,11 @@ public class VpnPreferenceController extends AbstractPreferenceController
.build(); .build();
private static final String TAG = "VpnPreferenceController"; private static final String TAG = "VpnPreferenceController";
private final UserManager mUserManager;
private ConnectivityManager mConnectivityManager; private ConnectivityManager mConnectivityManager;
private final VpnManager mVpnManager;
private Preference mPreference; private Preference mPreference;
public VpnPreferenceController(Context context) { public VpnPreferenceController(Context context) {
super(context); super(context);
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
mVpnManager = context.getSystemService(VpnManager.class);
} }
@Override @Override
@@ -131,18 +127,20 @@ public class VpnPreferenceController extends AbstractPreferenceController
if (mPreference == null) { if (mPreference == null) {
return; return;
} }
UserManager userManager = mContext.getSystemService(UserManager.class);
VpnManager vpnManager = mContext.getSystemService(VpnManager.class);
// Copied from SystemUI::SecurityControllerImpl // Copied from SystemUI::SecurityControllerImpl
SparseArray<VpnConfig> vpns = new SparseArray<>(); SparseArray<VpnConfig> vpns = new SparseArray<>();
final List<UserInfo> users = mUserManager.getUsers(); final List<UserInfo> users = userManager.getUsers();
int connectedLegacyVpnCount = 0; int connectedLegacyVpnCount = 0;
for (UserInfo user : users) { for (UserInfo user : users) {
VpnConfig cfg = mVpnManager.getVpnConfig(user.id); VpnConfig cfg = vpnManager.getVpnConfig(user.id);
if (cfg == null) { if (cfg == null) {
continue; continue;
} else if (cfg.legacy) { } else if (cfg.legacy) {
// Legacy VPNs should do nothing if the network is disconnected. Third-party // Legacy VPNs should do nothing if the network is disconnected. Third-party
// VPN warnings need to continue as traffic can still go to the app. // VPN warnings need to continue as traffic can still go to the app.
final LegacyVpnInfo legacyVpn = mVpnManager.getLegacyVpnInfo(user.id); final LegacyVpnInfo legacyVpn = vpnManager.getLegacyVpnInfo(user.id);
if (legacyVpn == null || legacyVpn.state != LegacyVpnInfo.STATE_CONNECTED) { if (legacyVpn == null || legacyVpn.state != LegacyVpnInfo.STATE_CONNECTED) {
continue; continue;
} else { } else {
@@ -152,7 +150,9 @@ public class VpnPreferenceController extends AbstractPreferenceController
vpns.put(user.id, cfg); vpns.put(user.id, cfg);
} }
int numberOfNonLegacyVpn = vpns.size() - connectedLegacyVpnCount; int numberOfNonLegacyVpn = vpns.size() - connectedLegacyVpnCount;
final UserInfo userInfo = mUserManager.getUserInfo(UserHandle.myUserId()); String summary = getInsecureVpnSummaryOverride(numberOfNonLegacyVpn);
if (summary == null) {
final UserInfo userInfo = userManager.getUserInfo(UserHandle.myUserId());
final int uid; final int uid;
if (userInfo.isRestricted()) { if (userInfo.isRestricted()) {
uid = userInfo.restrictedProfileParentId; uid = userInfo.restrictedProfileParentId;
@@ -160,14 +160,13 @@ public class VpnPreferenceController extends AbstractPreferenceController
uid = userInfo.id; uid = userInfo.id;
} }
VpnConfig vpn = vpns.get(uid); VpnConfig vpn = vpns.get(uid);
String summary;
if (vpn == null) { if (vpn == null) {
summary = mContext.getString(R.string.vpn_disconnected_summary); summary = mContext.getString(R.string.vpn_disconnected_summary);
} else { } else {
summary = getNameForVpnConfig(vpn, UserHandle.of(uid)); summary = getNameForVpnConfig(vpn, UserHandle.of(uid));
} }
String summaryOverride = getInsecureVpnSummaryOverride(numberOfNonLegacyVpn); }
final String finalSummary = (summaryOverride != null) ? summaryOverride : summary; final String finalSummary = summary;
ThreadUtils.postOnMainThread(() -> mPreference.setSummary(finalSummary)); ThreadUtils.postOnMainThread(() -> mPreference.setSummary(finalSummary));
} }