[PS] Show "Uninstall" in Long Press menu for Private Space apps.
Video : https://b.corp.google.com/issues/319250810#comment18
- Add SecondaryDropTarget.performUninstall()
- Make SecondaryDropTarget.getUninstallTarget() public static.
Test: Manual
Flag: aconfig com.android.launcher3.enable_private_space TEAMFOOD
Bug: 319250810
Change-Id: If6488033a976914fdc0a50658fc0561dc1a6586a
diff --git a/src/com/android/launcher3/SecondaryDropTarget.java b/src/com/android/launcher3/SecondaryDropTarget.java
index 0b92c28..1362586 100644
--- a/src/com/android/launcher3/SecondaryDropTarget.java
+++ b/src/com/android/launcher3/SecondaryDropTarget.java
@@ -34,6 +34,8 @@
import android.view.View;
import android.widget.Toast;
+import androidx.annotation.Nullable;
+
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.dragndrop.DragOptions;
import com.android.launcher3.logging.FileLog;
@@ -43,6 +45,7 @@
import com.android.launcher3.logging.StatsLogManager.StatsLogger;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.ItemInfoWithIcon;
+import com.android.launcher3.pm.UserCache;
import com.android.launcher3.util.PackageManagerHelper;
import com.android.launcher3.widget.LauncherAppWidgetProviderInfo;
@@ -176,6 +179,10 @@
if (uninstallDisabled) {
return INVALID;
}
+ if (Flags.enablePrivateSpace() && UserCache.getInstance(getContext()).getUserInfo(
+ info.user).isPrivate()) {
+ return INVALID;
+ }
if (info instanceof ItemInfoWithIcon) {
ItemInfoWithIcon iconInfo = (ItemInfoWithIcon) info;
@@ -184,7 +191,7 @@
return INVALID;
}
}
- if (getUninstallTarget(info) == null) {
+ if (getUninstallTarget(getContext(), info) == null) {
return INVALID;
}
return UNINSTALL;
@@ -193,7 +200,7 @@
/**
* @return the component name that should be uninstalled or null.
*/
- private ComponentName getUninstallTarget(ItemInfo item) {
+ public static ComponentName getUninstallTarget(Context context, ItemInfo item) {
Intent intent = null;
UserHandle user = null;
if (item != null &&
@@ -202,7 +209,7 @@
user = item.user;
}
if (intent != null) {
- LauncherActivityInfo info = getContext().getSystemService(LauncherApps.class)
+ LauncherActivityInfo info = context.getSystemService(LauncherApps.class)
.resolveActivity(intent, user);
if (info != null
&& (info.getApplicationInfo().flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
@@ -280,32 +287,41 @@
if (FeatureFlags.ENABLE_DISMISS_PREDICTION_UNDO.get()) {
CharSequence announcement = getContext().getString(R.string.item_removed);
mDropTargetHandler
- .dismissPrediction(announcement, () -> {}, () -> {
- mStatsLogManager.logger()
- .withInstanceId(instanceId)
- .withItemInfo(info)
- .log(LAUNCHER_DISMISS_PREDICTION_UNDO);
- });
+ .dismissPrediction(announcement, () -> {
+ }, () -> {
+ mStatsLogManager.logger()
+ .withInstanceId(instanceId)
+ .withItemInfo(info)
+ .log(LAUNCHER_DISMISS_PREDICTION_UNDO);
+ });
}
return null;
}
- ComponentName cn = getUninstallTarget(info);
+ return performUninstall(getContext(), getUninstallTarget(getContext(), info), info);
+ }
+
+ /**
+ * Performs uninstall and returns the target component for the {@link ItemInfo} or null if
+ * the uninstall was not performed.
+ */
+ public static ComponentName performUninstall(Context context, @Nullable ComponentName cn,
+ ItemInfo info) {
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(
- getContext(),
+ context,
R.string.uninstall_system_app_text,
Toast.LENGTH_SHORT
- ).show();
+ ).show();
return null;
}
try {
- Intent i = Intent.parseUri(getContext().getString(R.string.delete_package_intent), 0)
+ Intent i = Intent.parseUri(context.getString(R.string.delete_package_intent), 0)
.setData(Uri.fromParts("package", cn.getPackageName(), cn.getClassName()))
.putExtra(Intent.EXTRA_USER, info.user);
- getContext().startActivity(i);
+ context.startActivity(i);
FileLog.d(TAG, "start uninstall activity " + cn.getPackageName());
return cn;
} catch (URISyntaxException e) {