Merge "Omit icons from bulk SessionInfo calls." into oc-dr1-dev
diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java
index 7f3f35f..5eca57b 100644
--- a/core/java/android/content/pm/PackageInstaller.java
+++ b/core/java/android/content/pm/PackageInstaller.java
@@ -24,6 +24,7 @@
import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.SystemApi;
import android.app.ActivityManager;
+import android.app.AppGlobals;
import android.content.Intent;
import android.content.IntentSender;
import android.content.pm.PackageManager.InstallReason;
@@ -1355,6 +1356,16 @@
* if unavailable.
*/
public @Nullable Bitmap getAppIcon() {
+ if (appIcon == null) {
+ // Icon may have been omitted for calls that return bulk session
+ // lists, so try fetching the specific icon.
+ try {
+ appIcon = AppGlobals.getPackageManager().getPackageInstaller()
+ .getSessionInfo(sessionId).appIcon;
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
return appIcon;
}
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index 75e7a1e..6f07973 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -848,7 +848,7 @@
for (int i = 0; i < mSessions.size(); i++) {
final PackageInstallerSession session = mSessions.valueAt(i);
if (session.userId == userId) {
- result.add(session.generateInfo());
+ result.add(session.generateInfo(false));
}
}
}
@@ -866,7 +866,7 @@
final PackageInstallerSession session = mSessions.valueAt(i);
if (Objects.equals(session.installerPackageName, installerPackageName)
&& session.userId == userId) {
- result.add(session.generateInfo());
+ result.add(session.generateInfo(false));
}
}
}
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index 4540d2d..f5808af 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -288,6 +288,10 @@
}
public SessionInfo generateInfo() {
+ return generateInfo(true);
+ }
+
+ public SessionInfo generateInfo(boolean includeIcon) {
final SessionInfo info = new SessionInfo();
synchronized (mLock) {
info.sessionId = sessionId;
@@ -302,7 +306,9 @@
info.installReason = params.installReason;
info.sizeBytes = params.sizeBytes;
info.appPackageName = params.appPackageName;
- info.appIcon = params.appIcon;
+ if (includeIcon) {
+ info.appIcon = params.appIcon;
+ }
info.appLabel = params.appLabel;
}
return info;