Merge "Adding methods to access LauncherApps APIs." into main
diff --git a/aconfig/launcher_search.aconfig b/aconfig/launcher_search.aconfig
index fc79200..97e56b7 100644
--- a/aconfig/launcher_search.aconfig
+++ b/aconfig/launcher_search.aconfig
@@ -12,4 +12,18 @@
namespace: "launcher_search"
description: "This flag enables the animation of the Private Space container"
bug: "299294792"
+}
+
+flag {
+ name: "private_space_sys_apps_separation"
+ namespace: "launcher_search"
+ description: "This flag enables showing system apps separate in Private Space container."
+ bug: "308054233"
+}
+
+flag {
+ name: "private_space_app_installer_button"
+ namespace: "launcher_search"
+ description: "This flag enables addition of App Installer button in Private Space container."
+ bug: "308064949"
}
\ No newline at end of file
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
index 5726497..fb25ec1 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
@@ -107,6 +107,7 @@
import com.android.launcher3.testing.shared.TestProtocol;
import com.android.launcher3.touch.ItemClickHandler;
import com.android.launcher3.touch.ItemClickHandler.ItemClickProxy;
+import com.android.launcher3.uioverrides.ApiWrapper;
import com.android.launcher3.util.ActivityOptionsWrapper;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.DisplayController;
@@ -1056,9 +1057,8 @@
} else if (info.isPromise()) {
TestLogging.recordEvent(
TestProtocol.SEQUENCE_MAIN, "start: taskbarPromiseIcon");
- intent = new PackageManagerHelper(this)
- .getMarketIntent(info.getTargetPackage())
- .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent = ApiWrapper.getAppMarketActivityIntent(this,
+ info.getTargetPackage(), Process.myUserHandle());
startActivity(intent);
} else if (info.itemType == Favorites.ITEM_TYPE_DEEP_SHORTCUT) {
diff --git a/quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java b/quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java
index 4a26559..784c560 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java
@@ -17,13 +17,16 @@
package com.android.launcher3.uioverrides;
import android.app.ActivityOptions;
+import android.app.PendingIntent;
import android.app.Person;
import android.content.Context;
+import android.content.Intent;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.LauncherApps;
import android.content.pm.LauncherUserInfo;
import android.content.pm.ShortcutInfo;
import android.graphics.drawable.ColorDrawable;
+import android.net.Uri;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.ArrayMap;
@@ -31,9 +34,12 @@
import com.android.launcher3.Flags;
import com.android.launcher3.Utilities;
+import com.android.launcher3.proxy.ProxyActivityStarter;
+import com.android.launcher3.util.StartActivityParams;
import com.android.launcher3.util.UserIconInfo;
import com.android.quickstep.util.FadeOutRemoteTransition;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -102,6 +108,44 @@
return users;
}
+ /**
+ * Returns the list of the system packages that are installed at user creation.
+ * An empty list denotes that all system packages are installed for that user at creation.
+ */
+ public static List<String> getPreInstalledSystemPackages(Context context, UserHandle user) {
+ LauncherApps launcherApps = context.getSystemService(LauncherApps.class);
+ if (android.os.Flags.allowPrivateProfile() && Flags.enablePrivateSpace()
+ && Flags.privateSpaceSysAppsSeparation()) {
+ return launcherApps.getPreInstalledSystemPackages(user);
+ } else {
+ return new ArrayList<>();
+ }
+ }
+
+ /**
+ * Returns an intent which can be used to start the App Market activity (Installer
+ * Activity).
+ */
+ public static Intent getAppMarketActivityIntent(Context context, String packageName,
+ UserHandle user) {
+ LauncherApps launcherApps = context.getSystemService(LauncherApps.class);
+ if (android.os.Flags.allowPrivateProfile() && Flags.enablePrivateSpace()
+ && Flags.privateSpaceAppInstallerButton()) {
+ StartActivityParams params = new StartActivityParams((PendingIntent) null, 0);
+ params.intentSender = launcherApps.getAppMarketActivityIntent(packageName, user);
+ return ProxyActivityStarter.getLaunchIntent(context, params);
+ } else {
+ return new Intent(Intent.ACTION_VIEW)
+ .setData(new Uri.Builder()
+ .scheme("market")
+ .authority("details")
+ .appendQueryParameter("id", packageName)
+ .build())
+ .putExtra(Intent.EXTRA_REFERRER, new Uri.Builder().scheme("android-app")
+ .authority(context.getPackageName()).build());
+ }
+ }
+
private static class NoopDrawable extends ColorDrawable {
@Override
public int getIntrinsicHeight() {
diff --git a/src/com/android/launcher3/model/data/ItemInfoWithIcon.java b/src/com/android/launcher3/model/data/ItemInfoWithIcon.java
index dc180d8..5141db9 100644
--- a/src/com/android/launcher3/model/data/ItemInfoWithIcon.java
+++ b/src/com/android/launcher3/model/data/ItemInfoWithIcon.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.content.Intent;
+import android.os.Process;
import androidx.annotation.Nullable;
@@ -26,7 +27,7 @@
import com.android.launcher3.icons.FastBitmapDrawable;
import com.android.launcher3.logging.FileLog;
import com.android.launcher3.pm.PackageInstallInfo;
-import com.android.launcher3.util.PackageManagerHelper;
+import com.android.launcher3.uioverrides.ApiWrapper;
/**
* Represents an ItemInfo which also holds an icon.
@@ -216,7 +217,8 @@
String targetPackage = getTargetPackage();
return targetPackage != null
- ? new PackageManagerHelper(context).getMarketIntent(targetPackage)
+ ? ApiWrapper.getAppMarketActivityIntent(
+ context, targetPackage, Process.myUserHandle())
: null;
}
diff --git a/src/com/android/launcher3/popup/SystemShortcut.java b/src/com/android/launcher3/popup/SystemShortcut.java
index 69bba69..f39f806 100644
--- a/src/com/android/launcher3/popup/SystemShortcut.java
+++ b/src/com/android/launcher3/popup/SystemShortcut.java
@@ -7,6 +7,7 @@
import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
+import android.os.Process;
import android.view.View;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.ImageView;
@@ -22,6 +23,7 @@
import com.android.launcher3.model.WidgetItem;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
+import com.android.launcher3.uioverrides.ApiWrapper;
import com.android.launcher3.util.InstantAppResolver;
import com.android.launcher3.util.PackageManagerHelper;
import com.android.launcher3.util.PackageUserKey;
@@ -237,8 +239,9 @@
@Override
public void onClick(View view) {
- Intent intent = new PackageManagerHelper(view.getContext()).getMarketIntent(
- mItemInfo.getTargetComponent().getPackageName());
+ Intent intent = ApiWrapper.getAppMarketActivityIntent(view.getContext(),
+ mItemInfo.getTargetComponent().getPackageName(),
+ Process.myUserHandle());
mTarget.startActivitySafely(view, intent, mItemInfo);
AbstractFloatingView.closeAllOpenViews(mTarget);
}
diff --git a/src/com/android/launcher3/touch/ItemClickHandler.java b/src/com/android/launcher3/touch/ItemClickHandler.java
index a9c2a2e..839f98c 100644
--- a/src/com/android/launcher3/touch/ItemClickHandler.java
+++ b/src/com/android/launcher3/touch/ItemClickHandler.java
@@ -31,6 +31,7 @@
import android.content.Intent;
import android.content.pm.LauncherApps;
import android.content.pm.PackageInstaller.SessionInfo;
+import android.os.Process;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
@@ -58,8 +59,8 @@
import com.android.launcher3.shortcuts.ShortcutKey;
import com.android.launcher3.testing.TestLogging;
import com.android.launcher3.testing.shared.TestProtocol;
+import com.android.launcher3.uioverrides.ApiWrapper;
import com.android.launcher3.util.ItemInfoMatcher;
-import com.android.launcher3.util.PackageManagerHelper;
import com.android.launcher3.views.FloatingIconView;
import com.android.launcher3.views.Snackbar;
import com.android.launcher3.widget.LauncherAppWidgetProviderInfo;
@@ -207,7 +208,8 @@
}
}
// Fallback to using custom market intent.
- Intent intent = new PackageManagerHelper(launcher).getMarketIntent(packageName);
+ Intent intent = ApiWrapper.getAppMarketActivityIntent(launcher,
+ packageName, Process.myUserHandle());
launcher.startActivitySafely(v, intent, item);
};
@@ -344,8 +346,8 @@
&& (((ItemInfoWithIcon) item).runtimeStatusFlags
& ItemInfoWithIcon.FLAG_INSTALL_SESSION_ACTIVE) != 0) {
ItemInfoWithIcon appInfo = (ItemInfoWithIcon) item;
- intent = new PackageManagerHelper(launcher)
- .getMarketIntent(appInfo.getTargetComponent().getPackageName());
+ intent = ApiWrapper.getAppMarketActivityIntent(launcher,
+ appInfo.getTargetComponent().getPackageName(), Process.myUserHandle());
} else {
intent = item.getIntent();
}
diff --git a/src/com/android/launcher3/util/PackageManagerHelper.java b/src/com/android/launcher3/util/PackageManagerHelper.java
index 91203a7..3f7a128 100644
--- a/src/com/android/launcher3/util/PackageManagerHelper.java
+++ b/src/com/android/launcher3/util/PackageManagerHelper.java
@@ -28,8 +28,8 @@
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.graphics.Rect;
-import android.net.Uri;
import android.os.Bundle;
+import android.os.Process;
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Log;
@@ -46,6 +46,7 @@
import com.android.launcher3.model.data.ItemInfoWithIcon;
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
+import com.android.launcher3.uioverrides.ApiWrapper;
import java.net.URISyntaxException;
import java.util.List;
@@ -137,17 +138,6 @@
return (info.flags & ApplicationInfo.FLAG_SUSPENDED) != 0;
}
- public Intent getMarketIntent(String packageName) {
- return new Intent(Intent.ACTION_VIEW)
- .setData(new Uri.Builder()
- .scheme("market")
- .authority("details")
- .appendQueryParameter("id", packageName)
- .build())
- .putExtra(Intent.EXTRA_REFERRER, new Uri.Builder().scheme("android-app")
- .authority(mContext.getPackageName()).build());
- }
-
/**
* Creates a new market search intent.
*/
@@ -172,8 +162,8 @@
&& (((ItemInfoWithIcon) info).runtimeStatusFlags
& ItemInfoWithIcon.FLAG_INSTALL_SESSION_ACTIVE) != 0) {
ItemInfoWithIcon appInfo = (ItemInfoWithIcon) info;
- mContext.startActivity(new PackageManagerHelper(mContext)
- .getMarketIntent(appInfo.getTargetComponent().getPackageName()));
+ mContext.startActivity(ApiWrapper.getAppMarketActivityIntent(mContext,
+ appInfo.getTargetComponent().getPackageName(), Process.myUserHandle()));
return;
}
ComponentName componentName = null;
diff --git a/src_ui_overrides/com/android/launcher3/uioverrides/ApiWrapper.java b/src_ui_overrides/com/android/launcher3/uioverrides/ApiWrapper.java
index fe5c1fd..b9f9ac5 100644
--- a/src_ui_overrides/com/android/launcher3/uioverrides/ApiWrapper.java
+++ b/src_ui_overrides/com/android/launcher3/uioverrides/ApiWrapper.java
@@ -19,9 +19,11 @@
import android.app.ActivityOptions;
import android.app.Person;
import android.content.Context;
+import android.content.Intent;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.ShortcutInfo;
import android.graphics.drawable.ColorDrawable;
+import android.net.Uri;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.ArrayMap;
@@ -29,6 +31,7 @@
import com.android.launcher3.Utilities;
import com.android.launcher3.util.UserIconInfo;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -80,6 +83,30 @@
return users;
}
+ /**
+ * Returns the list of the system packages that are installed at user creation.
+ * An empty list denotes that all system packages are installed for that user at creation.
+ */
+ public static List<String> getPreInstalledSystemPackages(Context context, UserHandle user) {
+ return new ArrayList<>();
+ }
+
+ /**
+ * Returns an intent which can be used to start the App Market activity (Installer
+ * Activity).
+ */
+ public static Intent getAppMarketActivityIntent(Context context, String packageName,
+ UserHandle user) {
+ return new Intent(Intent.ACTION_VIEW)
+ .setData(new Uri.Builder()
+ .scheme("market")
+ .authority("details")
+ .appendQueryParameter("id", packageName)
+ .build())
+ .putExtra(Intent.EXTRA_REFERRER, new Uri.Builder().scheme("android-app")
+ .authority(context.getPackageName()).build());
+ }
+
private static class NoopDrawable extends ColorDrawable {
@Override
public int getIntrinsicHeight() {