diff options
| author | 2024-10-14 13:59:03 +0000 | |
|---|---|---|
| committer | 2024-10-17 03:46:36 +0000 | |
| commit | e6cd19d9df5261d71687890e0857aeafea51f205 (patch) | |
| tree | 5b790a755c713ce2590a379f96f83ddb8fc02157 | |
| parent | 882509d8e5bf4db0c4b6078e075ad66129c0fcd6 (diff) | |
Handle malformed PDFs gracefully in PrintSpooler
The PrintSpooler now handles malformed PDFs by marking the print job as failed and calling finish(), preventing RuntimeException
Bug: 367448551
Flag: EXEMPT bug fix
Test: atest IPrintManagerParametersTest, tested in test app on a physical device
Change-Id: I54d14b270741172eff7e4147ad59b2e0d39ab188
4 files changed, 6 insertions, 35 deletions
diff --git a/core/java/android/print/IPrintDocumentAdapter.aidl b/core/java/android/print/IPrintDocumentAdapter.aidl index 8f33e0b2c003..9d384fba874d 100644 --- a/core/java/android/print/IPrintDocumentAdapter.aidl +++ b/core/java/android/print/IPrintDocumentAdapter.aidl @@ -37,5 +37,4 @@ oneway interface IPrintDocumentAdapter { void write(in PageRange[] pages, in ParcelFileDescriptor fd, IWriteResultCallback callback, int sequence); void finish(); - void kill(String reason); } diff --git a/core/java/android/print/PrintManager.java b/core/java/android/print/PrintManager.java index ef274a56e1d3..1b1554f8192d 100644 --- a/core/java/android/print/PrintManager.java +++ b/core/java/android/print/PrintManager.java @@ -946,17 +946,6 @@ public final class PrintManager { } @Override - public void kill(String reason) { - synchronized (mLock) { - // If destroyed the handler is null. - if (!isDestroyedLocked()) { - mHandler.obtainMessage(MyHandler.MSG_ON_KILL, - reason).sendToTarget(); - } - } - } - - @Override public void onActivityPaused(Activity activity) { /* do nothing */ } @@ -1118,15 +1107,6 @@ public final class PrintManager { } } break; - case MSG_ON_KILL: { - if (DEBUG) { - Log.i(LOG_TAG, "onKill()"); - } - - String reason = (String) message.obj; - throw new RuntimeException(reason); - } - default: { throw new IllegalArgumentException("Unknown message: " + message.what); diff --git a/packages/PrintSpooler/src/com/android/printspooler/model/RemotePrintDocument.java b/packages/PrintSpooler/src/com/android/printspooler/model/RemotePrintDocument.java index bfc00bb8b94d..b48c55ddfef0 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/model/RemotePrintDocument.java +++ b/packages/PrintSpooler/src/com/android/printspooler/model/RemotePrintDocument.java @@ -329,18 +329,6 @@ public final class RemotePrintDocument { disconnectFromRemoteDocument(); } - public void kill(String reason) { - if (DEBUG) { - Log.i(LOG_TAG, "[CALLED] kill()"); - } - - try { - mPrintDocumentAdapter.kill(reason); - } catch (RemoteException re) { - Log.e(LOG_TAG, "Error calling kill()", re); - } - } - public boolean isUpdating() { return mState == STATE_UPDATING || mState == STATE_CANCELING; } diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java index c4173ed999f3..bd2b5ec8436e 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java +++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java @@ -514,8 +514,12 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat ensureErrorUiShown(null, PrintErrorFragment.ACTION_RETRY); setState(STATE_UPDATE_FAILED); - - mPrintedDocument.kill(message); + if (DEBUG) { + Log.i(LOG_TAG, "PrintJob state[" + PrintJobInfo.STATE_FAILED + "] reason: " + message); + } + PrintSpoolerService spooler = mSpoolerProvider.getSpooler(); + spooler.setPrintJobState(mPrintJob.getId(), PrintJobInfo.STATE_FAILED, message); + mPrintedDocument.finish(); } @Override |