Merge "Keep track of who has disabled applications." into jb-mr2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
bf20aa767e
@ -1218,7 +1218,8 @@ public final class Pm {
|
|||||||
ComponentName cn = ComponentName.unflattenFromString(pkg);
|
ComponentName cn = ComponentName.unflattenFromString(pkg);
|
||||||
if (cn == null) {
|
if (cn == null) {
|
||||||
try {
|
try {
|
||||||
mPm.setApplicationEnabledSetting(pkg, state, 0, userId);
|
mPm.setApplicationEnabledSetting(pkg, state, 0, userId,
|
||||||
|
"shell:" + android.os.Process.myUid());
|
||||||
System.err.println("Package " + pkg + " new state: "
|
System.err.println("Package " + pkg + " new state: "
|
||||||
+ enabledSettingToString(
|
+ enabledSettingToString(
|
||||||
mPm.getApplicationEnabledSetting(pkg, userId)));
|
mPm.getApplicationEnabledSetting(pkg, userId)));
|
||||||
|
@ -1279,7 +1279,8 @@ final class ApplicationPackageManager extends PackageManager {
|
|||||||
public void setApplicationEnabledSetting(String packageName,
|
public void setApplicationEnabledSetting(String packageName,
|
||||||
int newState, int flags) {
|
int newState, int flags) {
|
||||||
try {
|
try {
|
||||||
mPM.setApplicationEnabledSetting(packageName, newState, flags, mContext.getUserId());
|
mPM.setApplicationEnabledSetting(packageName, newState, flags,
|
||||||
|
mContext.getUserId(), mContext.getBasePackageName());
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
// Should never happen!
|
// Should never happen!
|
||||||
}
|
}
|
||||||
|
@ -239,7 +239,8 @@ interface IPackageManager {
|
|||||||
/**
|
/**
|
||||||
* As per {@link android.content.pm.PackageManager#setApplicationEnabledSetting}.
|
* As per {@link android.content.pm.PackageManager#setApplicationEnabledSetting}.
|
||||||
*/
|
*/
|
||||||
void setApplicationEnabledSetting(in String packageName, in int newState, int flags, int userId);
|
void setApplicationEnabledSetting(in String packageName, in int newState, int flags,
|
||||||
|
int userId, String callingPackage);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* As per {@link android.content.pm.PackageManager#getApplicationEnabledSetting}.
|
* As per {@link android.content.pm.PackageManager#getApplicationEnabledSetting}.
|
||||||
|
@ -30,6 +30,8 @@ public class PackageUserState {
|
|||||||
public boolean installed;
|
public boolean installed;
|
||||||
public int enabled;
|
public int enabled;
|
||||||
|
|
||||||
|
public String lastDisableAppCaller;
|
||||||
|
|
||||||
public HashSet<String> disabledComponents;
|
public HashSet<String> disabledComponents;
|
||||||
public HashSet<String> enabledComponents;
|
public HashSet<String> enabledComponents;
|
||||||
|
|
||||||
@ -43,6 +45,7 @@ public class PackageUserState {
|
|||||||
stopped = o.stopped;
|
stopped = o.stopped;
|
||||||
notLaunched = o.notLaunched;
|
notLaunched = o.notLaunched;
|
||||||
enabled = o.enabled;
|
enabled = o.enabled;
|
||||||
|
lastDisableAppCaller = o.lastDisableAppCaller;
|
||||||
disabledComponents = o.disabledComponents != null
|
disabledComponents = o.disabledComponents != null
|
||||||
? new HashSet<String>(o.disabledComponents) : null;
|
? new HashSet<String>(o.disabledComponents) : null;
|
||||||
enabledComponents = o.enabledComponents != null
|
enabledComponents = o.enabledComponents != null
|
||||||
|
@ -2443,7 +2443,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
|||||||
== PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) {
|
== PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) {
|
||||||
ipm.setApplicationEnabledSetting(packageName,
|
ipm.setApplicationEnabledSetting(packageName,
|
||||||
PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
|
PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
|
||||||
PackageManager.DONT_KILL_APP, userId);
|
PackageManager.DONT_KILL_APP, userId, "DevicePolicyManager");
|
||||||
}
|
}
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
}
|
}
|
||||||
|
@ -1598,7 +1598,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
|||||||
== PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) {
|
== PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) {
|
||||||
mIPackageManager.setApplicationEnabledSetting(imm.getPackageName(),
|
mIPackageManager.setApplicationEnabledSetting(imm.getPackageName(),
|
||||||
PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
|
PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
|
||||||
PackageManager.DONT_KILL_APP, mSettings.getCurrentUserId());
|
PackageManager.DONT_KILL_APP, mSettings.getCurrentUserId(),
|
||||||
|
mContext.getBasePackageName());
|
||||||
}
|
}
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
}
|
}
|
||||||
|
@ -8733,7 +8733,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
false, //installed
|
false, //installed
|
||||||
true, //stopped
|
true, //stopped
|
||||||
true, //notLaunched
|
true, //notLaunched
|
||||||
null, null);
|
null, null, null);
|
||||||
if (!isSystemApp(ps)) {
|
if (!isSystemApp(ps)) {
|
||||||
if (ps.isAnyInstalled(sUserManager.getUserIds())) {
|
if (ps.isAnyInstalled(sUserManager.getUserIds())) {
|
||||||
// Other user still have this package installed, so all
|
// Other user still have this package installed, so all
|
||||||
@ -9306,9 +9306,12 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setApplicationEnabledSetting(String appPackageName,
|
public void setApplicationEnabledSetting(String appPackageName,
|
||||||
int newState, int flags, int userId) {
|
int newState, int flags, int userId, String callingPackage) {
|
||||||
if (!sUserManager.exists(userId)) return;
|
if (!sUserManager.exists(userId)) return;
|
||||||
setEnabledSetting(appPackageName, null, newState, flags, userId);
|
if (callingPackage == null) {
|
||||||
|
callingPackage = Integer.toString(Binder.getCallingUid());
|
||||||
|
}
|
||||||
|
setEnabledSetting(appPackageName, null, newState, flags, userId, callingPackage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -9316,11 +9319,11 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
int newState, int flags, int userId) {
|
int newState, int flags, int userId) {
|
||||||
if (!sUserManager.exists(userId)) return;
|
if (!sUserManager.exists(userId)) return;
|
||||||
setEnabledSetting(componentName.getPackageName(),
|
setEnabledSetting(componentName.getPackageName(),
|
||||||
componentName.getClassName(), newState, flags, userId);
|
componentName.getClassName(), newState, flags, userId, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setEnabledSetting(
|
private void setEnabledSetting(final String packageName, String className, int newState,
|
||||||
final String packageName, String className, int newState, final int flags, int userId) {
|
final int flags, int userId, String callingPackage) {
|
||||||
if (!(newState == COMPONENT_ENABLED_STATE_DEFAULT
|
if (!(newState == COMPONENT_ENABLED_STATE_DEFAULT
|
||||||
|| newState == COMPONENT_ENABLED_STATE_ENABLED
|
|| newState == COMPONENT_ENABLED_STATE_ENABLED
|
||||||
|| newState == COMPONENT_ENABLED_STATE_DISABLED
|
|| newState == COMPONENT_ENABLED_STATE_DISABLED
|
||||||
@ -9366,7 +9369,12 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
// Nothing to do
|
// Nothing to do
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pkgSetting.setEnabled(newState, userId);
|
if (newState == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
|
||||||
|
|| newState == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
|
||||||
|
// Don't care about who enables an app.
|
||||||
|
callingPackage = null;
|
||||||
|
}
|
||||||
|
pkgSetting.setEnabled(newState, userId, callingPackage);
|
||||||
// pkgSetting.pkg.mSetEnabled = newState;
|
// pkgSetting.pkg.mSetEnabled = newState;
|
||||||
} else {
|
} else {
|
||||||
// We're dealing with a component level state change
|
// We're dealing with a component level state change
|
||||||
|
@ -189,14 +189,20 @@ class PackageSettingBase extends GrantedPermissions {
|
|||||||
return DEFAULT_USER_STATE;
|
return DEFAULT_USER_STATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setEnabled(int state, int userId) {
|
void setEnabled(int state, int userId, String callingPackage) {
|
||||||
modifyUserState(userId).enabled = state;
|
PackageUserState st = modifyUserState(userId);
|
||||||
|
st.enabled = state;
|
||||||
|
st.lastDisableAppCaller = callingPackage;
|
||||||
}
|
}
|
||||||
|
|
||||||
int getEnabled(int userId) {
|
int getEnabled(int userId) {
|
||||||
return readUserState(userId).enabled;
|
return readUserState(userId).enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String getLastDisabledAppCaller(int userId) {
|
||||||
|
return readUserState(userId).lastDisableAppCaller;
|
||||||
|
}
|
||||||
|
|
||||||
void setInstalled(boolean inst, int userId) {
|
void setInstalled(boolean inst, int userId) {
|
||||||
modifyUserState(userId).installed = inst;
|
modifyUserState(userId).installed = inst;
|
||||||
}
|
}
|
||||||
@ -249,13 +255,14 @@ class PackageSettingBase extends GrantedPermissions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void setUserState(int userId, int enabled, boolean installed, boolean stopped,
|
void setUserState(int userId, int enabled, boolean installed, boolean stopped,
|
||||||
boolean notLaunched, HashSet<String> enabledComponents,
|
boolean notLaunched, String lastDisableAppCaller, HashSet<String> enabledComponents,
|
||||||
HashSet<String> disabledComponents) {
|
HashSet<String> disabledComponents) {
|
||||||
PackageUserState state = modifyUserState(userId);
|
PackageUserState state = modifyUserState(userId);
|
||||||
state.enabled = enabled;
|
state.enabled = enabled;
|
||||||
state.installed = installed;
|
state.installed = installed;
|
||||||
state.stopped = stopped;
|
state.stopped = stopped;
|
||||||
state.notLaunched = notLaunched;
|
state.notLaunched = notLaunched;
|
||||||
|
state.lastDisableAppCaller = lastDisableAppCaller;
|
||||||
state.enabledComponents = enabledComponents;
|
state.enabledComponents = enabledComponents;
|
||||||
state.disabledComponents = disabledComponents;
|
state.disabledComponents = disabledComponents;
|
||||||
}
|
}
|
||||||
|
@ -104,6 +104,7 @@ final class Settings {
|
|||||||
private static final String ATTR_CODE = "code";
|
private static final String ATTR_CODE = "code";
|
||||||
private static final String ATTR_NOT_LAUNCHED = "nl";
|
private static final String ATTR_NOT_LAUNCHED = "nl";
|
||||||
private static final String ATTR_ENABLED = "enabled";
|
private static final String ATTR_ENABLED = "enabled";
|
||||||
|
private static final String ATTR_ENABLED_CALLER = "enabledCaller";
|
||||||
private static final String ATTR_STOPPED = "stopped";
|
private static final String ATTR_STOPPED = "stopped";
|
||||||
private static final String ATTR_INSTALLED = "inst";
|
private static final String ATTR_INSTALLED = "inst";
|
||||||
|
|
||||||
@ -453,7 +454,7 @@ final class Settings {
|
|||||||
installed,
|
installed,
|
||||||
true, // stopped,
|
true, // stopped,
|
||||||
true, // notLaunched
|
true, // notLaunched
|
||||||
null, null);
|
null, null, null);
|
||||||
writePackageRestrictionsLPr(user.id);
|
writePackageRestrictionsLPr(user.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -850,7 +851,7 @@ final class Settings {
|
|||||||
true, // installed
|
true, // installed
|
||||||
false, // stopped
|
false, // stopped
|
||||||
false, // notLaunched
|
false, // notLaunched
|
||||||
null, null);
|
null, null, null);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -895,6 +896,8 @@ final class Settings {
|
|||||||
final String enabledStr = parser.getAttributeValue(null, ATTR_ENABLED);
|
final String enabledStr = parser.getAttributeValue(null, ATTR_ENABLED);
|
||||||
final int enabled = enabledStr == null
|
final int enabled = enabledStr == null
|
||||||
? COMPONENT_ENABLED_STATE_DEFAULT : Integer.parseInt(enabledStr);
|
? COMPONENT_ENABLED_STATE_DEFAULT : Integer.parseInt(enabledStr);
|
||||||
|
final String enabledCaller = parser.getAttributeValue(null,
|
||||||
|
ATTR_ENABLED_CALLER);
|
||||||
final String installedStr = parser.getAttributeValue(null, ATTR_INSTALLED);
|
final String installedStr = parser.getAttributeValue(null, ATTR_INSTALLED);
|
||||||
final boolean installed = installedStr == null
|
final boolean installed = installedStr == null
|
||||||
? true : Boolean.parseBoolean(installedStr);
|
? true : Boolean.parseBoolean(installedStr);
|
||||||
@ -925,7 +928,7 @@ final class Settings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ps.setUserState(userId, enabled, installed, stopped, notLaunched,
|
ps.setUserState(userId, enabled, installed, stopped, notLaunched,
|
||||||
enabledComponents, disabledComponents);
|
enabledCaller, enabledComponents, disabledComponents);
|
||||||
} else if (tagName.equals("preferred-activities")) {
|
} else if (tagName.equals("preferred-activities")) {
|
||||||
readPreferredActivitiesLPw(parser, userId);
|
readPreferredActivitiesLPw(parser, userId);
|
||||||
} else {
|
} else {
|
||||||
@ -1052,6 +1055,10 @@ final class Settings {
|
|||||||
if (ustate.enabled != COMPONENT_ENABLED_STATE_DEFAULT) {
|
if (ustate.enabled != COMPONENT_ENABLED_STATE_DEFAULT) {
|
||||||
serializer.attribute(null, ATTR_ENABLED,
|
serializer.attribute(null, ATTR_ENABLED,
|
||||||
Integer.toString(ustate.enabled));
|
Integer.toString(ustate.enabled));
|
||||||
|
if (ustate.lastDisableAppCaller != null) {
|
||||||
|
serializer.attribute(null, ATTR_ENABLED_CALLER,
|
||||||
|
ustate.lastDisableAppCaller);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (ustate.enabledComponents != null
|
if (ustate.enabledComponents != null
|
||||||
&& ustate.enabledComponents.size() > 0) {
|
&& ustate.enabledComponents.size() > 0) {
|
||||||
@ -2239,14 +2246,14 @@ final class Settings {
|
|||||||
final String enabledStr = parser.getAttributeValue(null, ATTR_ENABLED);
|
final String enabledStr = parser.getAttributeValue(null, ATTR_ENABLED);
|
||||||
if (enabledStr != null) {
|
if (enabledStr != null) {
|
||||||
try {
|
try {
|
||||||
packageSetting.setEnabled(Integer.parseInt(enabledStr), 0 /* userId */);
|
packageSetting.setEnabled(Integer.parseInt(enabledStr), 0 /* userId */, null);
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
if (enabledStr.equalsIgnoreCase("true")) {
|
if (enabledStr.equalsIgnoreCase("true")) {
|
||||||
packageSetting.setEnabled(COMPONENT_ENABLED_STATE_ENABLED, 0);
|
packageSetting.setEnabled(COMPONENT_ENABLED_STATE_ENABLED, 0, null);
|
||||||
} else if (enabledStr.equalsIgnoreCase("false")) {
|
} else if (enabledStr.equalsIgnoreCase("false")) {
|
||||||
packageSetting.setEnabled(COMPONENT_ENABLED_STATE_DISABLED, 0);
|
packageSetting.setEnabled(COMPONENT_ENABLED_STATE_DISABLED, 0, null);
|
||||||
} else if (enabledStr.equalsIgnoreCase("default")) {
|
} else if (enabledStr.equalsIgnoreCase("default")) {
|
||||||
packageSetting.setEnabled(COMPONENT_ENABLED_STATE_DEFAULT, 0);
|
packageSetting.setEnabled(COMPONENT_ENABLED_STATE_DEFAULT, 0, null);
|
||||||
} else {
|
} else {
|
||||||
PackageManagerService.reportSettingsProblem(Log.WARN,
|
PackageManagerService.reportSettingsProblem(Log.WARN,
|
||||||
"Error in package manager settings: package " + name
|
"Error in package manager settings: package " + name
|
||||||
@ -2255,7 +2262,7 @@ final class Settings {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
packageSetting.setEnabled(COMPONENT_ENABLED_STATE_DEFAULT, 0);
|
packageSetting.setEnabled(COMPONENT_ENABLED_STATE_DEFAULT, 0, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
final String installStatusStr = parser.getAttributeValue(null, "installStatus");
|
final String installStatusStr = parser.getAttributeValue(null, "installStatus");
|
||||||
@ -2789,6 +2796,11 @@ final class Settings {
|
|||||||
pw.print(ps.getNotLaunched(user.id));
|
pw.print(ps.getNotLaunched(user.id));
|
||||||
pw.print(" enabled=");
|
pw.print(" enabled=");
|
||||||
pw.println(ps.getEnabled(user.id));
|
pw.println(ps.getEnabled(user.id));
|
||||||
|
String lastDisabledAppCaller = ps.getLastDisabledAppCaller(user.id);
|
||||||
|
if (lastDisabledAppCaller != null) {
|
||||||
|
pw.print(prefix); pw.print(" lastDisabledCaller: ");
|
||||||
|
pw.println(lastDisabledAppCaller);
|
||||||
|
}
|
||||||
HashSet<String> cmp = ps.getDisabledComponents(user.id);
|
HashSet<String> cmp = ps.getDisabledComponents(user.id);
|
||||||
if (cmp != null && cmp.size() > 0) {
|
if (cmp != null && cmp.size() > 0) {
|
||||||
pw.print(prefix); pw.println(" disabledComponents:");
|
pw.print(prefix); pw.println(" disabledComponents:");
|
||||||
|
Reference in New Issue
Block a user