From c2e54bc2104655c448e4e8de44c42a9382f59c70 Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Fri, 10 May 2019 13:31:51 -0700 Subject: [PATCH] Use LauncherApps#getAllPackageInstallerSessions to get all sessions. This new API allows us to get the package installer sessions for the main user as well as the managed profile, which will allow us to restore work profile items on the workspace. Bug: 131315856 Change-Id: Id76e815a76d1c715bc160776fd87d75bba92ff93 --- .../launcher3/compat/LauncherAppsCompat.java | 7 +++- .../compat/LauncherAppsCompatVL.java | 6 ++++ .../compat/LauncherAppsCompatVQ.java | 36 +++++++++++++++++++ .../compat/PackageInstallerCompatVL.java | 7 +++- 4 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 src/com/android/launcher3/compat/LauncherAppsCompatVQ.java diff --git a/src/com/android/launcher3/compat/LauncherAppsCompat.java b/src/com/android/launcher3/compat/LauncherAppsCompat.java index 4275f312b3..58fc73d235 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompat.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompat.java @@ -21,6 +21,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.LauncherActivityInfo; +import android.content.pm.PackageInstaller; import android.content.pm.ShortcutInfo; import android.graphics.Rect; import android.os.Bundle; @@ -56,7 +57,9 @@ public abstract class LauncherAppsCompat { public static LauncherAppsCompat getInstance(Context context) { synchronized (sInstanceLock) { if (sInstance == null) { - if (Utilities.ATLEAST_OREO) { + if (Utilities.ATLEAST_Q) { + sInstance = new LauncherAppsCompatVQ(context.getApplicationContext()); + } else if (Utilities.ATLEAST_OREO) { sInstance = new LauncherAppsCompatVO(context.getApplicationContext()); } else { sInstance = new LauncherAppsCompatVL(context.getApplicationContext()); @@ -83,4 +86,6 @@ public abstract class LauncherAppsCompat { UserHandle user); public abstract List getCustomShortcutActivityList( @Nullable PackageUserKey packageUser); + + public abstract List getAllPackageInstallerSessions(); } diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java index fc48ba7568..1d19b533a0 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java @@ -22,6 +22,7 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.LauncherActivityInfo; import android.content.pm.LauncherApps; +import android.content.pm.PackageInstaller; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ShortcutInfo; @@ -199,5 +200,10 @@ public class LauncherAppsCompatVL extends LauncherAppsCompat { } return result; } + + @Override + public List getAllPackageInstallerSessions() { + return mContext.getPackageManager().getPackageInstaller().getAllSessions(); + } } diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVQ.java b/src/com/android/launcher3/compat/LauncherAppsCompatVQ.java new file mode 100644 index 0000000000..0a1811e341 --- /dev/null +++ b/src/com/android/launcher3/compat/LauncherAppsCompatVQ.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3.compat; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageInstaller; + +import java.util.List; + +@TargetApi(29) +public class LauncherAppsCompatVQ extends LauncherAppsCompatVO { + + LauncherAppsCompatVQ(Context context) { + super(context); + } + + public List getAllPackageInstallerSessions() { + return mLauncherApps.getAllPackageInstallerSessions(); + } +} diff --git a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java index fe7b4e5d0d..a34ca50ebf 100644 --- a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java +++ b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java @@ -27,6 +27,7 @@ import android.os.UserHandle; import android.text.TextUtils; import android.util.SparseArray; +import com.android.launcher3.Utilities; import com.android.launcher3.icons.IconCache; import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherModel; @@ -49,6 +50,7 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { private final Handler mWorker; private final Context mAppContext; private final HashMap mSessionVerifiedMap = new HashMap<>(); + private final LauncherAppsCompat mLauncherApps; PackageInstallerCompatVL(Context context) { mAppContext = context.getApplicationContext(); @@ -56,6 +58,7 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { mCache = LauncherAppState.getInstance(context).getIconCache(); mWorker = new Handler(LauncherModel.getWorkerLooper()); mInstaller.registerSessionCallback(mCallback, mWorker); + mLauncherApps = LauncherAppsCompat.getInstance(context); } @Override @@ -171,7 +174,9 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { @Override public List getAllVerifiedSessions() { - List list = new ArrayList<>(mInstaller.getAllSessions()); + List list = new ArrayList<>(Utilities.ATLEAST_Q + ? mLauncherApps.getAllPackageInstallerSessions() + : mInstaller.getAllSessions()); Iterator it = list.iterator(); while (it.hasNext()) { if (verify(it.next()) == null) {