Refactor VPN settings refresh to reuse preferences

The old way was garbage-heavy. To add to that some changes to the way
PreferenceScreens are redrawn was leading to some artifacts with items
fading in/out every tick.

Bug: 25588385
Change-Id: Idabf7546ab519bf196ad3b8582caa2ec6bf9e084
This commit is contained in:
Robin Lee
2015-11-16 15:24:36 +00:00
parent fb2ca7c2e5
commit 7bf8654a5c
3 changed files with 187 additions and 85 deletions

View File

@@ -39,18 +39,13 @@ public class AppPreference extends ManageablePreference {
private int mState = STATE_DISCONNECTED;
private String mPackageName;
private String mName;
private int mUid;
private int mUserId = UserHandle.USER_NULL;
public AppPreference(Context context, OnClickListener onManage, final String packageName,
int uid) {
public AppPreference(Context context, OnClickListener onManage) {
super(context, null /* attrs */, onManage);
mPackageName = packageName;
mUid = uid;
update();
}
public PackageInfo getPackageInfo() {
UserHandle user = new UserHandle(UserHandle.getUserId(mUid));
try {
PackageManager pm = getUserContext().getPackageManager();
return pm.getPackageInfo(mPackageName, 0 /* flags */);
@@ -67,8 +62,18 @@ public class AppPreference extends ManageablePreference {
return mPackageName;
}
public int getUid() {
return mUid;
public void setPackageName(String name) {
mPackageName = name;
update();
}
public int getUserId() {
return mUserId;
}
public void setUserId(int userId) {
mUserId = userId;
update();
}
public int getState() {
@@ -81,6 +86,10 @@ public class AppPreference extends ManageablePreference {
}
private void update() {
if (mPackageName == null || mUserId == UserHandle.USER_NULL) {
return;
}
final String[] states = getContext().getResources().getStringArray(R.array.vpn_states);
setSummary(mState != STATE_DISCONNECTED ? states[mState] : "");
@@ -116,7 +125,7 @@ public class AppPreference extends ManageablePreference {
}
private Context getUserContext() throws PackageManager.NameNotFoundException {
UserHandle user = new UserHandle(UserHandle.getUserId(mUid));
UserHandle user = UserHandle.of(mUserId);
return getContext().createPackageContextAsUser(
getContext().getPackageName(), 0 /* flags */, user);
}
@@ -128,7 +137,7 @@ public class AppPreference extends ManageablePreference {
if ((result = another.mState - mState) == 0 &&
(result = mName.compareToIgnoreCase(another.mName)) == 0 &&
(result = mPackageName.compareTo(another.mPackageName)) == 0) {
result = mUid - another.mUid;
result = mUserId - another.mUserId;
}
return result;
} else if (preference instanceof ConfigPreference) {