Merge "Fix resource-loading code for TransitionSet" into klp-dev
diff --git a/api/current.txt b/api/current.txt
index 4967b52..1ad4377 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -19368,12 +19368,6 @@
method public android.print.PrintDocumentInfo.Builder setPageCount(int);
}
- public class PrintFileDocumentAdapter extends android.print.PrintDocumentAdapter {
- ctor public PrintFileDocumentAdapter(android.content.Context, java.io.File, android.print.PrintDocumentInfo);
- method public void onLayout(android.print.PrintAttributes, android.print.PrintAttributes, android.os.CancellationSignal, android.print.PrintDocumentAdapter.LayoutResultCallback, android.os.Bundle);
- method public void onWrite(android.print.PageRange[], android.os.ParcelFileDescriptor, android.os.CancellationSignal, android.print.PrintDocumentAdapter.WriteResultCallback);
- }
-
public final class PrintJob {
method public void cancel();
method public android.print.PrintJobId getId();
@@ -19403,10 +19397,8 @@
method public android.print.PageRange[] getPages();
method public android.print.PrinterId getPrinterId();
method public int getState();
- method public java.lang.String getTag();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator CREATOR;
- field public static final int PRINT_JOB_ID_UNDEFINED = -1; // 0xffffffff
field public static final int STATE_BLOCKED = 4; // 0x4
field public static final int STATE_CANCELED = 7; // 0x7
field public static final int STATE_COMPLETED = 5; // 0x5
@@ -19501,6 +19493,7 @@
method public android.printservice.PrintDocument getDocument();
method public android.print.PrintJobId getId();
method public android.print.PrintJobInfo getInfo();
+ method public java.lang.String getTag();
method public boolean isBlocked();
method public boolean isCancelled();
method public boolean isCompleted();
diff --git a/core/java/android/print/PrintFileDocumentAdapter.java b/core/java/android/print/PrintFileDocumentAdapter.java
index c3a23a5..5d655bf 100644
--- a/core/java/android/print/PrintFileDocumentAdapter.java
+++ b/core/java/android/print/PrintFileDocumentAdapter.java
@@ -41,6 +41,8 @@
* spooling the data, so you can delete the file if it is a
* temporary one. To achieve this one must override {@link #onFinish()}
* and delete the file yourself.
+ *
+ * @hide
*/
public class PrintFileDocumentAdapter extends PrintDocumentAdapter {
diff --git a/core/java/android/print/PrintJobInfo.java b/core/java/android/print/PrintJobInfo.java
index e5d06a2..ccb4f44 100644
--- a/core/java/android/print/PrintJobInfo.java
+++ b/core/java/android/print/PrintJobInfo.java
@@ -26,9 +26,6 @@
*/
public final class PrintJobInfo implements Parcelable {
- /** Undefined print job id. */
- public static final int PRINT_JOB_ID_UNDEFINED = -1;
-
/**
* Constant for matching any print job state.
*
@@ -356,6 +353,8 @@
* Gets the optional tag assigned by a print service.
*
* @return The tag.
+ *
+ * @hide
*/
public String getTag() {
return mTag;
diff --git a/core/java/android/printservice/PrintJob.java b/core/java/android/printservice/PrintJob.java
index 721e31e..d1dbedf 100644
--- a/core/java/android/printservice/PrintJob.java
+++ b/core/java/android/printservice/PrintJob.java
@@ -301,6 +301,18 @@
return false;
}
+ /**
+ * Gets the print job tag.
+ *
+ * @return tag The tag or null.
+ *
+ * @see #setTag(String)
+ */
+ public String getTag() {
+ PrintService.throwIfNotCalledOnMainThread();
+ return getInfo().getTag();
+ }
+
@Override
public boolean equals(Object obj) {
if (this == obj) {
diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp
index 73f3639..a0c50fa 100644
--- a/core/jni/android/graphics/TextLayoutCache.cpp
+++ b/core/jni/android/graphics/TextLayoutCache.cpp
@@ -868,6 +868,7 @@
hb_shape(font, mBuffer, NULL, 0);
hb_font_destroy(font);
+ mShapingPaint.setTypeface(paint->getTypeface());
return baseGlyphCount;
}
diff --git a/packages/PrintSpooler/res/drawable-hdpi/ic_restart.png b/packages/PrintSpooler/res/drawable-hdpi/ic_restart.png
new file mode 100644
index 0000000..bb9d855
--- /dev/null
+++ b/packages/PrintSpooler/res/drawable-hdpi/ic_restart.png
Binary files differ
diff --git a/packages/PrintSpooler/res/drawable-mdpi/ic_restart.png b/packages/PrintSpooler/res/drawable-mdpi/ic_restart.png
new file mode 100644
index 0000000..bd611e8
--- /dev/null
+++ b/packages/PrintSpooler/res/drawable-mdpi/ic_restart.png
Binary files differ
diff --git a/packages/PrintSpooler/res/drawable-xhdpi/ic_restart.png b/packages/PrintSpooler/res/drawable-xhdpi/ic_restart.png
new file mode 100644
index 0000000..a7fdc0d
--- /dev/null
+++ b/packages/PrintSpooler/res/drawable-xhdpi/ic_restart.png
Binary files differ
diff --git a/packages/PrintSpooler/res/values/strings.xml b/packages/PrintSpooler/res/values/strings.xml
index 5b947ba..3a888a8 100644
--- a/packages/PrintSpooler/res/values/strings.xml
+++ b/packages/PrintSpooler/res/values/strings.xml
@@ -56,7 +56,7 @@
<string name="printing_app_crashed">Printing app crashed</string>
<!-- Title if the number of pages in a printed document is unknown. [CHAR LIMIT=20] -->
- <string name="page_count_unknown">unavailable</string>
+ <string name="page_count_unknown">Pages</string>
<!-- Title for the temporary dialog show while an app is generating a print job. [CHAR LIMIT=30] -->
<string name="generating_print_job">Generating print job</string>
diff --git a/packages/PrintSpooler/src/com/android/printspooler/NotificationController.java b/packages/PrintSpooler/src/com/android/printspooler/NotificationController.java
index dae7770..2bd0443 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/NotificationController.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/NotificationController.java
@@ -110,7 +110,7 @@
printJob.getLabel()))
.addAction(R.drawable.stat_notify_cancelling, mContext.getString(R.string.cancel),
createCancelIntent(printJob))
- .addAction(android.R.drawable.ic_secure, mContext.getString(R.string.restart),
+ .addAction(R.drawable.ic_restart, mContext.getString(R.string.restart),
createRestartIntent(printJob.getId()))
.setContentText(printJob.getPrinterName())
.setWhen(System.currentTimeMillis())
diff --git a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
index 293be1b..f1678ff 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
@@ -1862,18 +1862,17 @@
}
}
final int pageCount = mDocument.info.getPageCount();
- mRangeOptionsTitle.setText(getString(R.string.label_pages,
- (pageCount == PrintDocumentInfo.PAGE_COUNT_UNKNOWN)
- ? getString(R.string.page_count_unknown)
- : String.valueOf(pageCount)));
+ String title = (pageCount != PrintDocumentInfo.PAGE_COUNT_UNKNOWN)
+ ? getString(R.string.label_pages, String.valueOf(pageCount))
+ : getString(R.string.page_count_unknown);
+ mRangeOptionsTitle.setText(title);
} else {
if (mRangeOptionsSpinner.getSelectedItemPosition() != 0) {
mIgnoreNextRangeOptionChange = true;
mRangeOptionsSpinner.setSelection(0);
}
mRangeOptionsSpinner.setEnabled(false);
- mRangeOptionsTitle.setText(getString(R.string.label_pages,
- getString(R.string.page_count_unknown)));
+ mRangeOptionsTitle.setText(getString(R.string.page_count_unknown));
mPageRangeEditText.setEnabled(false);
mPageRangeEditText.setVisibility(View.INVISIBLE);
mPageRangeTitle.setVisibility(View.INVISIBLE);
diff --git a/packages/SystemUI/res/drawable-hdpi/search_light.png b/packages/SystemUI/res/drawable-hdpi/search_light.png
index c8b5a2e..c64ae19 100644
--- a/packages/SystemUI/res/drawable-hdpi/search_light.png
+++ b/packages/SystemUI/res/drawable-hdpi/search_light.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/search_light.png b/packages/SystemUI/res/drawable-mdpi/search_light.png
index 4b5b2a4..fb99061 100644
--- a/packages/SystemUI/res/drawable-mdpi/search_light.png
+++ b/packages/SystemUI/res/drawable-mdpi/search_light.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/search_light.png b/packages/SystemUI/res/drawable-xhdpi/search_light.png
index 3aa890f..4389707 100644
--- a/packages/SystemUI/res/drawable-xhdpi/search_light.png
+++ b/packages/SystemUI/res/drawable-xhdpi/search_light.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/search_light.png b/packages/SystemUI/res/drawable-xxhdpi/search_light.png
index 74ad3c8..b4fa297 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/search_light.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/search_light.png
Binary files differ
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index 04885f0..6e53363 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -391,7 +391,7 @@
final AccessibilityManager accessibilityManager =
(AccessibilityManager) mContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
- if (accessibilityManager.isEnabled()) {
+ if (accessibilityManager.isEnabled() && accessibilityManager.isTouchExplorationEnabled()) {
// In accessibility mode, we add a simple click handler since swipe is tough to
// trigger near screen edges.
View camera = getCameraButton();
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index f23bcba..7c15abc 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -15818,9 +15818,11 @@
}
}
- boolean haveActivities = mStackSupervisor.switchUserLocked(userId, uss);
- if (!haveActivities) {
+ boolean homeInFront = mStackSupervisor.switchUserLocked(userId, uss);
+ if (homeInFront) {
startHomeActivityLocked(userId);
+ } else {
+ mStackSupervisor.resumeTopActivitiesLocked();
}
EventLogTags.writeAmSwitchUser(userId);
@@ -16146,6 +16148,8 @@
} catch (RemoteException e) {
}
}
+
+ mStackSupervisor.removeUserLocked(userId);
}
@Override
diff --git a/services/java/com/android/server/am/ActivityRecord.java b/services/java/com/android/server/am/ActivityRecord.java
index 2c0b83b..cf686672 100644
--- a/services/java/com/android/server/am/ActivityRecord.java
+++ b/services/java/com/android/server/am/ActivityRecord.java
@@ -572,8 +572,8 @@
}
boolean isRootActivity() {
- ArrayList<ActivityRecord> activities = task.mActivities;
- return activities.size() == 0 || this == task.mActivities.get(0);
+ final ArrayList<ActivityRecord> activities = task.mActivities;
+ return activities.size() == 0 || this == activities.get(0);
}
UriPermissionOwner getUriPermissionsLocked() {
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index 45b30f1..1014502 100644
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -549,31 +549,26 @@
/*
* Move the activities around in the stack to bring a user to the foreground.
- * @return whether there are any activities for the specified user.
*/
- final boolean switchUserLocked(int userId) {
+ final void switchUserLocked(int userId) {
if (VALIDATE_TOKENS) {
validateAppTokensLocked();
}
if (mCurrentUser == userId) {
- return true;
+ return;
}
mCurrentUser = userId;
// Move userId's tasks to the top.
- boolean haveActivities = false;
int index = mTaskHistory.size();
for (int i = 0; i < index; ++i) {
TaskRecord task = mTaskHistory.get(i);
if (task.userId == userId) {
- haveActivities = true;
mTaskHistory.remove(i);
mTaskHistory.add(task);
--index;
}
}
-
- return haveActivities;
}
void minimalResumeActivityLocked(ActivityRecord r) {
@@ -1623,6 +1618,12 @@
}
private void insertTaskAtTop(TaskRecord task) {
+ // If this is being moved to the top by another activity or being launched from the home
+ // activity, set mOnTopOfHome accordingly.
+ final boolean fromHome = mStackSupervisor.getLastStack().isHomeStack();
+ if (!isHomeStack() && (fromHome || topTask() != task)) {
+ task.mOnTopOfHome = fromHome;
+ }
mTaskHistory.remove(task);
// Now put task at top.
int stackNdx = mTaskHistory.size();
diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java
index 2b69a4e..dc9036f 100644
--- a/services/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/java/com/android/server/am/ActivityStackSupervisor.java
@@ -70,6 +70,7 @@
import android.util.Slog;
import android.util.SparseArray;
+import android.util.SparseBooleanArray;
import com.android.internal.app.HeavyWeightSwitcherActivity;
import com.android.internal.os.TransferPipe;
import com.android.server.am.ActivityManagerService.PendingActivityLaunch;
@@ -203,6 +204,9 @@
*/
final PowerManager.WakeLock mGoingToSleep;
+ /** State of the stacks when user switched, indexed by userId. */
+ SparseBooleanArray mUserHomeInFront = new SparseBooleanArray(2);
+
public ActivityStackSupervisor(ActivityManagerService service, Context context,
Looper looper) {
mService = service;
@@ -288,22 +292,6 @@
return mService.startHomeActivityLocked(mCurrentUser);
}
- final void setLaunchHomeTaskNextFlag(ActivityRecord sourceRecord, ActivityRecord r,
- ActivityStack stack) {
- if (stack == mHomeStack) {
- return;
- }
- if ((sourceRecord == null && getLastStack() == mHomeStack) ||
- (sourceRecord != null && sourceRecord.isHomeActivity())) {
- if (r == null) {
- r = stack.topRunningActivityLocked(null);
- }
- if (r != null && !r.isHomeActivity() && r.isRootActivity()) {
- r.task.mOnTopOfHome = true;
- }
- }
- }
-
void setDismissKeyguard(boolean dismiss) {
if (ActivityManagerService.DEBUG_LOCKSCREEN) mService.logLockScreen(" dismiss=" + dismiss);
mDismissKeyguardOnNextActivity = dismiss;
@@ -1479,7 +1467,6 @@
// is the case, so this is it! And for paranoia, make
// sure we have correctly resumed the top activity.
if (doResume) {
- setLaunchHomeTaskNextFlag(sourceRecord, null, targetStack);
resumeTopActivitiesLocked(targetStack, null, options);
} else {
ActivityOptions.abort(options);
@@ -1575,9 +1562,6 @@
// don't use that intent!) And for paranoia, make
// sure we have correctly resumed the top activity.
if (doResume) {
- // Reset flag so it gets correctly reevaluated.
- intentActivity.task.mOnTopOfHome = false;
- setLaunchHomeTaskNextFlag(sourceRecord, intentActivity, targetStack);
targetStack.resumeTopActivityLocked(null, options);
} else {
ActivityOptions.abort(options);
@@ -1615,7 +1599,6 @@
// resumed the top activity.
topStack.mLastPausedActivity = null;
if (doResume) {
- setLaunchHomeTaskNextFlag(sourceRecord, null, topStack);
resumeTopActivitiesLocked();
}
ActivityOptions.abort(options);
@@ -1694,7 +1677,6 @@
// resumed the top activity.
targetStack.mLastPausedActivity = null;
if (doResume) {
- setLaunchHomeTaskNextFlag(sourceRecord, null, targetStack);
targetStack.resumeTopActivityLocked(null);
}
ActivityOptions.abort(options);
@@ -1717,7 +1699,6 @@
top.deliverNewIntentLocked(callingUid, r.intent);
targetStack.mLastPausedActivity = null;
if (doResume) {
- setLaunchHomeTaskNextFlag(sourceRecord, null, targetStack);
targetStack.resumeTopActivityLocked(null);
}
return ActivityManager.START_DELIVERED_TO_TOP;
@@ -1751,7 +1732,6 @@
EventLog.writeEvent(EventLogTags.AM_CREATE_TASK, r.userId, r.task.taskId);
}
ActivityStack.logStartActivity(EventLogTags.AM_CREATE_ACTIVITY, r, r.task);
- setLaunchHomeTaskNextFlag(sourceRecord, r, targetStack);
targetStack.mLastPausedActivity = null;
targetStack.startActivityLocked(r, newTask, doResume, keepCurTransition, options);
mService.setFocusedActivityLocked(r);
@@ -1960,6 +1940,10 @@
}
}
+ void removeUserLocked(int userId) {
+ mUserHomeInFront.delete(userId);
+ }
+
/**
* @return true if some activity was finished (or would have finished if doit were true).
*/
@@ -2278,17 +2262,17 @@
}
boolean switchUserLocked(int userId, UserStartedState uss) {
+ mUserHomeInFront.put(mCurrentUser, isFrontStack(mHomeStack));
+ final boolean homeInFront = mUserHomeInFront.get(userId, true);
mCurrentUser = userId;
mStartingUsers.add(uss);
- boolean haveActivities = false;
for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) {
- haveActivities |= mStacks.get(stackNdx).switchUserLocked(userId);
+ mStacks.get(stackNdx).switchUserLocked(userId);
}
- resumeTopActivitiesLocked();
-
- return haveActivities;
+ moveHomeStack(homeInFront);
+ return homeInFront;
}
final ArrayList<ActivityRecord> processStoppingActivitiesLocked(boolean remove) {
@@ -2381,6 +2365,7 @@
pw.print(prefix); pw.print("mStackState="); pw.println(stackStateToString(mStackState));
pw.print(prefix); pw.println("mSleepTimeout: " + mSleepTimeout);
pw.print(prefix); pw.println("mCurTaskId: " + mCurTaskId);
+ pw.print(prefix); pw.println("mUserHomeInFront: " + mUserHomeInFront);
}
ArrayList<ActivityRecord> getDumpActivitiesLocked(String name) {
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index f093f2b..d239be7 100755
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -850,6 +850,19 @@
sendPackageBroadcast(Intent.ACTION_MY_PACKAGE_REPLACED,
null, null,
res.pkg.applicationInfo.packageName, null, updateUsers);
+
+ // treat asec-hosted packages like removable media on upgrade
+ if (isForwardLocked(res.pkg) || isExternal(res.pkg)) {
+ if (DEBUG_INSTALL) {
+ Slog.i(TAG, "upgrading pkg " + res.pkg
+ + " is ASEC-hosted -> AVAILABLE");
+ }
+ int[] uidArray = new int[] { res.pkg.applicationInfo.uid };
+ ArrayList<String> pkgList = new ArrayList<String>(1);
+ pkgList.add(res.pkg.applicationInfo.packageName);
+ sendResourcesChangedBroadcast(true, false,
+ pkgList,uidArray, null);
+ }
}
if (res.removedInfo.args != null) {
// Remove the replaced package's older resources safely now
@@ -4643,6 +4656,20 @@
// so that we do not end up in a confused state while the user is still using the older
// version of the application while the new one gets installed.
if ((parseFlags & PackageManager.INSTALL_REPLACE_EXISTING) != 0) {
+ // If the package lives in an asec, tell everyone that the container is going
+ // away so they can clean up any references to its resources (which would prevent
+ // vold from being able to unmount the asec)
+ if (isForwardLocked(pkg) || isExternal(pkg)) {
+ if (DEBUG_INSTALL) {
+ Slog.i(TAG, "upgrading pkg " + pkg + " is ASEC-hosted -> UNAVAILABLE");
+ }
+ final int[] uidArray = new int[] { pkg.applicationInfo.uid };
+ final ArrayList<String> pkgList = new ArrayList<String>(1);
+ pkgList.add(pkg.applicationInfo.packageName);
+ sendResourcesChangedBroadcast(false, true, pkgList, uidArray, null);
+ }
+
+ // Post the request that it be killed now that the going-away broadcast is en route
killApplication(pkg.applicationInfo.packageName,
pkg.applicationInfo.uid, "update pkg");
}
@@ -10731,8 +10758,8 @@
}
}
- private void sendResourcesChangedBroadcast(boolean mediaStatus, ArrayList<String> pkgList,
- int uidArr[], IIntentReceiver finishedReceiver) {
+ private void sendResourcesChangedBroadcast(boolean mediaStatus, boolean replacing,
+ ArrayList<String> pkgList, int uidArr[], IIntentReceiver finishedReceiver) {
int size = pkgList.size();
if (size > 0) {
// Send broadcasts here
@@ -10742,6 +10769,9 @@
if (uidArr != null) {
extras.putIntArray(Intent.EXTRA_CHANGED_UID_LIST, uidArr);
}
+ if (replacing && !mediaStatus) {
+ extras.putBoolean(Intent.EXTRA_REPLACING, replacing);
+ }
String action = mediaStatus ? Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE
: Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE;
sendPackageBroadcast(action, null, extras, null, finishedReceiver, null);
@@ -10844,7 +10874,7 @@
}
// Send a broadcast to let everyone know we are done processing
if (pkgList.size() > 0) {
- sendResourcesChangedBroadcast(true, pkgList, uidArr, null);
+ sendResourcesChangedBroadcast(true, false, pkgList, uidArr, null);
}
// Force gc to avoid any stale parser references that we might have.
if (doGc) {
@@ -10921,7 +10951,8 @@
// broadcast when packages get disabled, force a gc to clean things up.
// and unload all the containers.
if (pkgList.size() > 0) {
- sendResourcesChangedBroadcast(false, pkgList, uidArr, new IIntentReceiver.Stub() {
+ sendResourcesChangedBroadcast(false, false, pkgList, uidArr,
+ new IIntentReceiver.Stub() {
public void performReceive(Intent intent, int resultCode, String data,
Bundle extras, boolean ordered, boolean sticky,
int sendingUser) throws RemoteException {
@@ -11041,7 +11072,7 @@
}
if (returnCode == PackageManager.MOVE_SUCCEEDED) {
// Send resources unavailable broadcast
- sendResourcesChangedBroadcast(false, pkgList, uidArr, null);
+ sendResourcesChangedBroadcast(false, true, pkgList, uidArr, null);
// Update package code and resource paths
synchronized (mInstallLock) {
synchronized (mPackages) {
@@ -11119,7 +11150,7 @@
}
}
// Send resources available broadcast
- sendResourcesChangedBroadcast(true, pkgList, uidArr, null);
+ sendResourcesChangedBroadcast(true, false, pkgList, uidArr, null);
}
}
if (returnCode != PackageManager.MOVE_SUCCEEDED) {
diff --git a/services/java/com/android/server/print/UserState.java b/services/java/com/android/server/print/UserState.java
index 3b0ee24..b3f0036 100644
--- a/services/java/com/android/server/print/UserState.java
+++ b/services/java/com/android/server/print/UserState.java
@@ -205,6 +205,10 @@
for (int i = 0; i < cachedPrintJobCount; i++) {
PrintJobInfo cachedPrintJob = cachedPrintJobs.get(i);
result.put(cachedPrintJob.getId(), cachedPrintJob);
+ // Strip out the tag - it is visible only to print services.
+ // Also the cached print jobs are delivered only to apps, so
+ // stripping the tag of a cached print job is fine.
+ cachedPrintJob.setTag(null);
}
// Add everything else the spooler knows about.
@@ -215,6 +219,8 @@
for (int i = 0; i < printJobCount; i++) {
PrintJobInfo printJob = printJobs.get(i);
result.put(printJob.getId(), printJob);
+ // Strip out the tag - it is visible only to print services.
+ printJob.setTag(null);
}
}