Revert "Block apps instead of uninstalling."
We need to go back to uninstalling applications so that
non-default system applications can be installed by Play.
This reverts commit 2bc39bf7805e36919341b166065980fd909e195e.
Change-Id: I07e7fe67d8794f7f3c49a5ace0c5037b8781a1ed
diff --git a/src/com/android/managedprovisioning/task/DeleteNonRequiredAppsTask.java b/src/com/android/managedprovisioning/task/DeleteNonRequiredAppsTask.java
index a36a5f9..c481a8f 100644
--- a/src/com/android/managedprovisioning/task/DeleteNonRequiredAppsTask.java
+++ b/src/com/android/managedprovisioning/task/DeleteNonRequiredAppsTask.java
@@ -2,6 +2,7 @@
import android.content.Context;
import android.content.Intent;
+import android.content.pm.IPackageDeleteObserver;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
@@ -15,6 +16,7 @@
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
/**
* Removes all apps with a launcher that are not required.
@@ -63,17 +65,17 @@
}
}
+ PackageDeleteObserver packageDeleteObserver =
+ new PackageDeleteObserver(packagesToDelete.size());
for (String packageName : packagesToDelete) {
try {
- mIpm.setApplicationHiddenSettingAsUser(packageName, true, mUserId);
+ mIpm.deletePackageAsUser(packageName, packageDeleteObserver, mUserId,
+ PackageManager.DELETE_SYSTEM_APP);
} catch (RemoteException neverThrown) {
// Never thrown, as we are making local calls.
ProvisionLogger.loge("This should not happen.", neverThrown);
- mCallback.onError();
}
}
-
- mCallback.onSuccess();
}
protected Set<String> getRequiredApps() {
@@ -85,6 +87,32 @@
return requiredApps;
}
+ /**
+ * Runs the next task when all packages have been deleted or shuts down the activity if package
+ * deletion fails.
+ */
+ class PackageDeleteObserver extends IPackageDeleteObserver.Stub {
+ private final AtomicInteger mPackageCount = new AtomicInteger(0);
+
+ public PackageDeleteObserver(int packageCount) {
+ this.mPackageCount.set(packageCount);
+ }
+
+ @Override
+ public void packageDeleted(String packageName, int returnCode) {
+ if (returnCode != PackageManager.DELETE_SUCCEEDED) {
+ ProvisionLogger.logw(
+ "Could not finish managed profile provisioning: package deletion failed");
+ mCallback.onError();
+ }
+ int currentPackageCount = mPackageCount.decrementAndGet();
+ if (currentPackageCount == 0) {
+ ProvisionLogger.logi("All non-required system apps have been uninstalled.");
+ mCallback.onSuccess();
+ }
+ }
+ }
+
public abstract static class Callback {
public abstract void onSuccess();
public abstract void onError();