summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2011-03-02 08:50:42 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-03-02 08:50:42 -0800
commit3dee21eb0f253a7e78572872b8dfc7b5d990a063 (patch)
tree97486f257e38dcbc1654ade0c2c71838e157e283
parent79cabf8c855e415cd2528736557da1af1cf6d620 (diff)
parentc39bb4aaa7be1b9b0cc9fb0b1f03d54f7609ffeb (diff)
downloadframeworks_base-3dee21eb0f253a7e78572872b8dfc7b5d990a063.zip
frameworks_base-3dee21eb0f253a7e78572872b8dfc7b5d990a063.tar.gz
frameworks_base-3dee21eb0f253a7e78572872b8dfc7b5d990a063.tar.bz2
Merge "Switch to returnCode for IPackageDeleteObserver"
-rw-r--r--cmds/pm/src/com/android/commands/pm/Pm.java4
-rw-r--r--core/java/android/content/pm/IPackageDeleteObserver.aidl2
-rw-r--r--core/java/android/content/pm/PackageManager.java33
-rwxr-xr-xcore/tests/coretests/src/android/content/pm/PackageManagerTests.java4
-rw-r--r--services/java/com/android/server/PackageManagerService.java17
5 files changed, 45 insertions, 15 deletions
diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java
index cc6e739..d058e38 100644
--- a/cmds/pm/src/com/android/commands/pm/Pm.java
+++ b/cmds/pm/src/com/android/commands/pm/Pm.java
@@ -767,10 +767,10 @@ public final class Pm {
boolean finished;
boolean result;
- public void packageDeleted(boolean succeeded) {
+ public void packageDeleted(String packageName, int returnCode) {
synchronized (this) {
finished = true;
- result = succeeded;
+ result = returnCode == PackageManager.DELETE_SUCCEEDED;
notifyAll();
}
}
diff --git a/core/java/android/content/pm/IPackageDeleteObserver.aidl b/core/java/android/content/pm/IPackageDeleteObserver.aidl
index bc16b3e..2e2d16e 100644
--- a/core/java/android/content/pm/IPackageDeleteObserver.aidl
+++ b/core/java/android/content/pm/IPackageDeleteObserver.aidl
@@ -23,6 +23,6 @@ package android.content.pm;
* {@hide}
*/
oneway interface IPackageDeleteObserver {
- void packageDeleted(in boolean succeeded);
+ void packageDeleted(in String packageName, in int returnCode);
}
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 7525749..fc07478 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -552,9 +552,38 @@ public abstract class PackageManager {
public static final int DONT_DELETE_DATA = 0x00000001;
/**
+ * Return code for when package deletion succeeds. This is passed to the
+ * {@link IPackageDeleteObserver} by {@link #deletePackage()} if the system
+ * succeeded in deleting the package.
+ *
+ * @hide
+ */
+ public static final int DELETE_SUCCEEDED = 1;
+
+ /**
+ * Deletion failed return code: this is passed to the
+ * {@link IPackageDeleteObserver} by {@link #deletePackage()} if the system
+ * failed to delete the package for an unspecified reason.
+ *
+ * @hide
+ */
+ public static final int DELETE_FAILED_INTERNAL_ERROR = -1;
+
+ /**
+ * Deletion failed return code: this is passed to the
+ * {@link IPackageDeleteObserver} by {@link #deletePackage()} if the system
+ * failed to delete the package because it is the active DevicePolicy
+ * manager.
+ *
+ * @hide
+ */
+ public static final int DELETE_FAILED_DEVICE_POLICY_MANAGER = -2;
+
+ /**
* Return code that is passed to the {@link IPackageMoveObserver} by
- * {@link #movePackage(android.net.Uri, IPackageMoveObserver)}
- * when the package has been successfully moved by the system.
+ * {@link #movePackage(android.net.Uri, IPackageMoveObserver)} when the
+ * package has been successfully moved by the system.
+ *
* @hide
*/
public static final int MOVE_SUCCEEDED = 1;
diff --git a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
index 7af64e4..5d28ef7 100755
--- a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
+++ b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
@@ -769,9 +769,9 @@ public class PackageManagerTests extends AndroidTestCase {
return doneFlag;
}
- public void packageDeleted(boolean succeeded) throws RemoteException {
+ public void packageDeleted(String packageName, int returnCode) throws RemoteException {
synchronized(this) {
- this.succeeded = succeeded;
+ this.succeeded = returnCode == PackageManager.DELETE_SUCCEEDED;
doneFlag = true;
notifyAll();
}
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index f1a6e15..461a3e5 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -6204,10 +6204,10 @@ class PackageManagerService extends IPackageManager.Stub {
mHandler.post(new Runnable() {
public void run() {
mHandler.removeCallbacks(this);
- final boolean succeded = deletePackageX(packageName, true, true, flags);
+ final int returnCode = deletePackageX(packageName, true, true, flags);
if (observer != null) {
try {
- observer.packageDeleted(succeded);
+ observer.packageDeleted(packageName, returnCode);
} catch (RemoteException e) {
Log.i(TAG, "Observer no longer exists.");
} //end catch
@@ -6230,17 +6230,17 @@ class PackageManagerService extends IPackageManager.Stub {
* persisting settings for later use
* sending a broadcast if necessary
*/
- private boolean deletePackageX(String packageName, boolean sendBroadCast,
+ private int deletePackageX(String packageName, boolean sendBroadCast,
boolean deleteCodeAndResources, int flags) {
- PackageRemovedInfo info = new PackageRemovedInfo();
- boolean res;
+ final PackageRemovedInfo info = new PackageRemovedInfo();
+ final boolean res;
IDevicePolicyManager dpm = IDevicePolicyManager.Stub.asInterface(
ServiceManager.getService(Context.DEVICE_POLICY_SERVICE));
try {
if (dpm != null && dpm.packageHasActiveAdmins(packageName)) {
Slog.w(TAG, "Not removing package " + packageName + ": has active device admin");
- return false;
+ return PackageManager.DELETE_FAILED_DEVICE_POLICY_MANAGER;
}
} catch (RemoteException e) {
}
@@ -6250,7 +6250,7 @@ class PackageManagerService extends IPackageManager.Stub {
flags | REMOVE_CHATTY, info, true);
}
- if(res && sendBroadCast) {
+ if (res && sendBroadCast) {
boolean systemUpdate = info.isRemovedPackageSystemUpdate;
info.sendBroadcast(deleteCodeAndResources, systemUpdate);
@@ -6278,7 +6278,8 @@ class PackageManagerService extends IPackageManager.Stub {
info.args.doPostDeleteLI(deleteCodeAndResources);
}
}
- return res;
+
+ return res ? PackageManager.DELETE_SUCCEEDED : PackageManager.DELETE_FAILED_INTERNAL_ERROR;
}
static class PackageRemovedInfo {