Don't allow RRO uninstall if overlay is enabled
System RROs can never be uninstalled. Also, enabled RRO, i.e. RRO applied to their target packages, must not be uninstalled by end-user because that may be dangerous to the configuration of its target package. Disabled RROs, i.e. RRO not applied to their target packages, are free to be uninstalled to reclaim space. Bug: 124556507 Test: manual + `make RunSettingsRoboTests ROBOTEST_FILTER=AppButtonsPreferenceControllerTest` Change-Id: Ib6bd2765c8cb88a5887de817a08a1541eaee0cab
This commit is contained in:
committed by
Todd Kennedy
parent
44b84de84c
commit
c6d79cd0da
@@ -25,6 +25,8 @@ import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.om.OverlayManager;
|
||||
import android.content.om.OverlayInfo;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
@@ -103,6 +105,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp
|
||||
private final int mRequestRemoveDeviceAdmin;
|
||||
private final DevicePolicyManager mDpm;
|
||||
private final UserManager mUserManager;
|
||||
private final OverlayManager mOverlayManager;
|
||||
private final PackageManager mPm;
|
||||
private final SettingsActivity mActivity;
|
||||
private final InstrumentedPreferenceFragment mFragment;
|
||||
@@ -136,6 +139,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp
|
||||
mDpm = (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE);
|
||||
mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE);
|
||||
mPm = activity.getPackageManager();
|
||||
mOverlayManager = activity.getSystemService(OverlayManager.class);
|
||||
mPackageName = packageName;
|
||||
mActivity = activity;
|
||||
mFragment = fragment;
|
||||
@@ -435,6 +439,28 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp
|
||||
enabled = false;
|
||||
}
|
||||
|
||||
// Resource overlays can be uninstalled iff they are public
|
||||
// (installed on /data) and disabled. ("Enabled" means they
|
||||
// are in use by resource management.) If they are
|
||||
// system/vendor, they can never be uninstalled. :-(
|
||||
if (mAppEntry.info.isResourceOverlay()) {
|
||||
if (isBundled) {
|
||||
enabled = false;
|
||||
} else {
|
||||
String pkgName = mAppEntry.info.packageName;
|
||||
UserHandle user = UserHandle.getUserHandleForUid(mAppEntry.info.uid);
|
||||
OverlayInfo overlayInfo = mOverlayManager.getOverlayInfo(pkgName, user);
|
||||
if (overlayInfo != null && overlayInfo.isEnabled()) {
|
||||
ApplicationsState.AppEntry targetEntry =
|
||||
mState.getEntry(overlayInfo.targetPackageName,
|
||||
UserHandle.getUserId(mAppEntry.info.uid));
|
||||
if (targetEntry != null) {
|
||||
enabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mButtonsPref.setButton2Enabled(enabled);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user