From c56e3ff2ee03d1756ff70574421e497c5d2f0331 Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Wed, 23 Aug 2017 12:13:24 -0700 Subject: Show progress dialog when uninstalling an app in Launcher3Go. This ensures that the uninstall activity will finish only after the task is completed. We initially assumed that this was always the case, but in Android Go the uninstall activity finishes before the uninstall is completed. Bug: 64033585 Change-Id: Ic5d8dd99e2fecd0c9cb24093ee66668b4b38cb1a --- go/res/values/override.xml | 22 ++++++++++++++++ res/values/config.xml | 3 +++ src/com/android/launcher3/UninstallDropTarget.java | 30 ++++++++++++++-------- 3 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 go/res/values/override.xml diff --git a/go/res/values/override.xml b/go/res/values/override.xml new file mode 100644 index 000000000..268cb980c --- /dev/null +++ b/go/res/values/override.xml @@ -0,0 +1,22 @@ + + + + + #Intent;action=android.intent.action.DELETE;launchFlags=0x10800000;B.android.intent.extra.RETURN_RESULT=true;end + \ No newline at end of file diff --git a/res/values/config.xml b/res/values/config.xml index e7ec0a0b1..fb0a82eb4 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -19,6 +19,9 @@ q= to the data to the intent --> market://search?c=apps + + #Intent;action=android.intent.action.DELETE;launchFlags=0x10800000;end + diff --git a/src/com/android/launcher3/UninstallDropTarget.java b/src/com/android/launcher3/UninstallDropTarget.java index e15cf9f50..84d6a9b34 100644 --- a/src/com/android/launcher3/UninstallDropTarget.java +++ b/src/com/android/launcher3/UninstallDropTarget.java @@ -11,12 +11,17 @@ import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; import android.util.AttributeSet; +import android.util.Log; import android.widget.Toast; import com.android.launcher3.compat.LauncherAppsCompat; +import java.net.URISyntaxException; + public class UninstallDropTarget extends ButtonDropTarget { + private static final String TAG = "UninstallDropTarget"; + public UninstallDropTarget(Context context, AttributeSet attrs) { this(context, attrs, 0); } @@ -99,25 +104,28 @@ public class UninstallDropTarget extends ButtonDropTarget { final Launcher launcher, ItemInfo info, DropTargetResultCallback callback) { final ComponentName cn = getUninstallTarget(launcher, info); - final boolean isUninstallable; + boolean canUninstall; if (cn == null) { // System applications cannot be installed. For now, show a toast explaining that. // We may give them the option of disabling apps this way. Toast.makeText(launcher, R.string.uninstall_system_app_text, Toast.LENGTH_SHORT).show(); - isUninstallable = false; + canUninstall = false; } else { - Intent intent = new Intent(Intent.ACTION_DELETE, - Uri.fromParts("package", cn.getPackageName(), cn.getClassName())) - .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK - | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); - intent.putExtra(Intent.EXTRA_USER, info.user); - launcher.startActivity(intent); - isUninstallable = true; + try { + Intent i = Intent.parseUri(launcher.getString(R.string.delete_package_intent), 0) + .setData(Uri.fromParts("package", cn.getPackageName(), cn.getClassName())) + .putExtra(Intent.EXTRA_USER, info.user); + launcher.startActivity(i); + canUninstall = true; + } catch (URISyntaxException e) { + Log.e(TAG, "Failed to parse intent to start uninstall activity for item=" + info); + canUninstall = false; + } } if (callback != null) { - sendUninstallResult(launcher, isUninstallable, cn, info.user, callback); + sendUninstallResult(launcher, canUninstall, cn, info.user, callback); } - return isUninstallable; + return canUninstall; } /** -- cgit v1.2.3