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

Commit afd19675 authored by Svetoslav's avatar Svetoslav
Browse files

Avoid NPE and add a warning log if a printing app misbehaves.

An app can print only from an activity. If the activity is finished
before printing completes we destroy the PrintDocumentAdapter. The
app may however invoke some of the print callbacks after destruction
resulting in a NPE. This change checks if the adapter is destroyed
and if so does not crash while printing a meaningful log error with
the mistake of the app developer.

bug:11675274

Change-Id: I66539cfbd7583f52cb863a84ef8e40856f92ceed
parent a951fa56
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -860,6 +860,11 @@ public final class PrintManager {
                }
                final ILayoutResultCallback callback;
                synchronized (mLock) {
                    if (mDestroyed) {
                        Log.e(LOG_TAG, "PrintDocumentAdapter is destroyed. Did you "
                                + "finish the printing activity before print completion?");
                        return;
                    }
                    callback = mCallback;
                    clearLocked();
                }
@@ -876,6 +881,11 @@ public final class PrintManager {
            public void onLayoutFailed(CharSequence error) {
                final ILayoutResultCallback callback;
                synchronized (mLock) {
                    if (mDestroyed) {
                        Log.e(LOG_TAG, "PrintDocumentAdapter is destroyed. Did you "
                                + "finish the printing activity before print completion?");
                        return;
                    }
                    callback = mCallback;
                    clearLocked();
                }
@@ -891,6 +901,11 @@ public final class PrintManager {
            @Override
            public void onLayoutCancelled() {
                synchronized (mLock) {
                    if (mDestroyed) {
                        Log.e(LOG_TAG, "PrintDocumentAdapter is destroyed. Did you "
                                + "finish the printing activity before print completion?");
                        return;
                    }
                    clearLocked();
                }
            }
@@ -918,6 +933,11 @@ public final class PrintManager {
            public void onWriteFinished(PageRange[] pages) {
                final IWriteResultCallback callback;
                synchronized (mLock) {
                    if (mDestroyed) {
                        Log.e(LOG_TAG, "PrintDocumentAdapter is destroyed. Did you "
                                + "finish the printing activity before print completion?");
                        return;
                    }
                    callback = mCallback;
                    clearLocked();
                }
@@ -940,6 +960,11 @@ public final class PrintManager {
            public void onWriteFailed(CharSequence error) {
                final IWriteResultCallback callback;
                synchronized (mLock) {
                    if (mDestroyed) {
                        Log.e(LOG_TAG, "PrintDocumentAdapter is destroyed. Did you "
                                + "finish the printing activity before print completion?");
                        return;
                    }
                    callback = mCallback;
                    clearLocked();
                }
@@ -955,6 +980,11 @@ public final class PrintManager {
            @Override
            public void onWriteCancelled() {
                synchronized (mLock) {
                    if (mDestroyed) {
                        Log.e(LOG_TAG, "PrintDocumentAdapter is destroyed. Did you "
                                + "finish the printing activity before print completion?");
                        return;
                    }
                    clearLocked();
                }
            }