Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c2476a5 authored by Nathan Muggli's avatar Nathan Muggli Committed by Android (Google) Code Review
Browse files

Merge "Add new invalid state to print spooler" into main

parents 32b4056b 97540c54
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -510,7 +510,10 @@ public final class PageContentRepository {
                protected Void doInBackground(Void... params) {
                    synchronized (mLock) {
                        try {
                            if (mRenderer != null) {
                            // A page count < 0 indicates there was an error
                            // opening the document, in which case it doesn't
                            // need to be closed.
                            if (mRenderer != null && mPageCount >= 0) {
                                mRenderer.closeDocument();
                            }
                        } catch (RemoteException re) {
+16 −1
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ public final class RemotePrintDocument {
    private static final int STATE_CANCELING = 6;
    private static final int STATE_CANCELED = 7;
    private static final int STATE_DESTROYED = 8;
    private static final int STATE_INVALID = 9;

    private final Context mContext;

@@ -287,7 +288,8 @@ public final class RemotePrintDocument {
        }
        if (mState != STATE_STARTED && mState != STATE_UPDATED
                && mState != STATE_FAILED && mState != STATE_CANCELING
                && mState != STATE_CANCELED && mState != STATE_DESTROYED) {
                && mState != STATE_CANCELED && mState != STATE_DESTROYED
                && mState != STATE_INVALID) {
            throw new IllegalStateException("Cannot finish in state:"
                    + stateToString(mState));
        }
@@ -300,6 +302,16 @@ public final class RemotePrintDocument {
        }
    }

    /**
     * Mark this document as invalid.
     */
    public void invalid() {
        if (DEBUG) {
            Log.i(LOG_TAG, "[CALLED] invalid()");
        }
        mState = STATE_INVALID;
    }

    public void cancel(boolean force) {
        if (DEBUG) {
            Log.i(LOG_TAG, "[CALLED] cancel(" + force + ")");
@@ -491,6 +503,9 @@ public final class RemotePrintDocument {
            case STATE_DESTROYED: {
                return "STATE_DESTROYED";
            }
            case STATE_INVALID: {
                return "STATE_INVALID";
            }
            default: {
                return "STATE_UNKNOWN";
            }
+37 −6
Original line number Diff line number Diff line
@@ -167,6 +167,7 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
    private static final int STATE_PRINTER_UNAVAILABLE = 6;
    private static final int STATE_UPDATE_SLOW = 7;
    private static final int STATE_PRINT_COMPLETED = 8;
    private static final int STATE_FILE_INVALID = 9;

    private static final int UI_STATE_PREVIEW = 0;
    private static final int UI_STATE_ERROR = 1;
@@ -404,6 +405,11 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
    public void onPause() {
        PrintSpoolerService spooler = mSpoolerProvider.getSpooler();

        if (isInvalid()) {
            super.onPause();
            return;
        }

        if (mState == STATE_INITIALIZING) {
            if (isFinishing()) {
                if (spooler != null) {
@@ -478,7 +484,8 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
        }

        if (mState == STATE_PRINT_CANCELED || mState == STATE_PRINT_CONFIRMED
                || mState == STATE_PRINT_COMPLETED) {
                || mState == STATE_PRINT_COMPLETED
                || mState == STATE_FILE_INVALID) {
            return true;
        }

@@ -509,23 +516,32 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
    @Override
    public void onMalformedPdfFile() {
        onPrintDocumentError("Cannot print a malformed PDF file");
        mPrintedDocument.invalid();
        setState(STATE_FILE_INVALID);
    }

    @Override
    public void onSecurePdfFile() {
        onPrintDocumentError("Cannot print a password protected PDF file");
        mPrintedDocument.invalid();
        setState(STATE_FILE_INVALID);
    }

    private void onPrintDocumentError(String message) {
        setState(mProgressMessageController.cancel());
        ensureErrorUiShown(null, PrintErrorFragment.ACTION_RETRY);
        ensureErrorUiShown(
                getString(R.string.print_cannot_load_page), PrintErrorFragment.ACTION_NONE);

        setState(STATE_UPDATE_FAILED);
        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);
        // Use a cancel state for the spooler.  This will prevent the notification from getting
        // displayed and will remove the job.  The notification (which displays the cancel and
        // restart options) doesn't make sense for an invalid document since it will just fail
        // again.
        spooler.setPrintJobState(mPrintJob.getId(), PrintJobInfo.STATE_CANCELED, message);
        mPrintedDocument.finish();
    }

@@ -995,6 +1011,9 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
    }

    private void setState(int state) {
        if (isInvalid()) {
            return;
        }
        if (isFinalState(mState)) {
            if (isFinalState(state)) {
                if (DEBUG) {
@@ -1015,7 +1034,12 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
    private static boolean isFinalState(int state) {
        return state == STATE_PRINT_CANCELED
                || state == STATE_PRINT_COMPLETED
                || state == STATE_CREATE_FILE_FAILED;
                || state == STATE_CREATE_FILE_FAILED
                || state == STATE_FILE_INVALID;
    }

    private boolean isInvalid() {
        return mState == STATE_FILE_INVALID;
    }

    private void updateSelectedPagesFromPreview() {
@@ -1100,7 +1124,7 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
    }

    private void ensurePreviewUiShown() {
        if (isFinishing() || isDestroyed()) {
        if (isFinishing() || isDestroyed() || isInvalid()) {
            return;
        }
        if (mUiState != UI_STATE_PREVIEW) {
@@ -1257,6 +1281,9 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
    }

    private boolean updateDocument(boolean clearLastError) {
        if (isInvalid()) {
            return false;
        }
        if (!clearLastError && mPrintedDocument.hasUpdateError()) {
            return false;
        }
@@ -1676,7 +1703,8 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
                || mState == STATE_UPDATE_FAILED
                || mState == STATE_CREATE_FILE_FAILED
                || mState == STATE_PRINTER_UNAVAILABLE
                || mState == STATE_UPDATE_SLOW) {
                || mState == STATE_UPDATE_SLOW
                || mState == STATE_FILE_INVALID) {
            disableOptionsUi(isFinalState(mState));
            return;
        }
@@ -2100,6 +2128,9 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
    }

    private boolean canUpdateDocument() {
        if (isInvalid()) {
            return false;
        }
        if (mPrintedDocument.isDestroyed()) {
            return false;
        }