diff options
author | Svetoslav <svetoslavganov@google.com> | 2014-09-19 23:30:17 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-09-19 23:30:17 +0000 |
commit | 40f1a329d172ac794a8fd726a526dab39fbed904 (patch) | |
tree | 999fceb6a813be8fdb784f22e9637821d1a80f14 /packages/PrintSpooler | |
parent | 3d1ec9675462f187896427fe4323626e1d573a4a (diff) | |
parent | 52dc625669cd6997b0e9e77c2e9e914a021d5d46 (diff) | |
download | frameworks_base-40f1a329d172ac794a8fd726a526dab39fbed904.zip frameworks_base-40f1a329d172ac794a8fd726a526dab39fbed904.tar.gz frameworks_base-40f1a329d172ac794a8fd726a526dab39fbed904.tar.bz2 |
am e289f35b: am e5350332: am 63f3936c: am 0d397697: am a2201272: Merge "Fix a print spooler crash when printing." into lmp-dev
* commit 'e289f35bb7a0ec003e9707ce6ffb7e3279fb3a39':
Fix a print spooler crash when printing.
Diffstat (limited to 'packages/PrintSpooler')
4 files changed, 33 insertions, 18 deletions
diff --git a/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java b/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java index a4555f1..f779f87 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java +++ b/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java @@ -110,13 +110,13 @@ public final class PageContentRepository { mRenderer.close(callback); } - public void destroy() { + public void destroy(Runnable callback) { throwIfNotClosed(); mState = STATE_DESTROYED; if (DEBUG) { Log.i(LOG_TAG, "STATE_DESTROYED"); } - doDestroy(); + doDestroy(callback); } public void startPreload(int firstShownPage, int lastShownPage) { @@ -163,19 +163,19 @@ public final class PageContentRepository { try { if (mState != STATE_DESTROYED) { mCloseGuard.warnIfOpen(); - doDestroy(); + doDestroy(null); } } finally { super.finalize(); } } - private void doDestroy() { + private void doDestroy(Runnable callback) { mState = STATE_DESTROYED; if (DEBUG) { Log.i(LOG_TAG, "STATE_DESTROYED"); } - mRenderer.destroy(); + mRenderer.destroy(callback); } private void throwIfNotOpened() { @@ -536,7 +536,7 @@ public final class PageContentRepository { }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); } - public void destroy() { + public void destroy(final Runnable callback) { new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { @@ -551,6 +551,10 @@ public final class PageContentRepository { } mPageContentCache.invalidate(); mPageContentCache.clear(); + if (callback != null) { + callback.run(); + } + } }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); } diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java index da8160a..20e774f 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java +++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java @@ -488,9 +488,9 @@ public final class PageAdapter extends Adapter implements return selectedPages; } - public void destroy() { + public void destroy(Runnable callback) { throwIfNotClosed(); - doDestroy(); + doDestroy(callback); } @Override @@ -498,7 +498,7 @@ public final class PageAdapter extends Adapter implements try { if (mState != STATE_DESTROYED) { mCloseGuard.warnIfOpen(); - doDestroy(); + doDestroy(null); } } finally { super.finalize(); @@ -745,8 +745,8 @@ public final class PageAdapter extends Adapter implements mPageContentRepository.stopPreload(); } - private void doDestroy() { - mPageContentRepository.destroy(); + private void doDestroy(Runnable callback) { + mPageContentRepository.destroy(callback); mCloseGuard.close(); mState = STATE_DESTROYED; if (DEBUG) { diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java index c4b3262..56497d7 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java +++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java @@ -1562,12 +1562,18 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat if (mState != STATE_INITIALIZING) { mProgressMessageController.cancel(); mPrinterRegistry.setTrackedPrinter(null); - mPrintPreviewController.destroy(); mSpoolerProvider.destroy(); mPrintedDocument.finish(); mPrintedDocument.destroy(); + mPrintPreviewController.destroy(new Runnable() { + @Override + public void run() { + finish(); + } + }); + } else { + finish(); } - finish(); } private final class SpinnerItem<T> { diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintPreviewController.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintPreviewController.java index 0d45352..e4eab10 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintPreviewController.java +++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintPreviewController.java @@ -192,12 +192,15 @@ class PrintPreviewController implements MutexFileProvider.OnReleaseRequestCallba }); } - public void destroy() { + public void destroy(Runnable callback) { if (mPageAdapter.isOpened()) { - mPageAdapter.close(null); + Message operation = mHandler.obtainMessage(MyHandler.MSG_CLOSE); + mHandler.enqueueOperation(operation); } - mRecyclerView.setAdapter(null); - mPageAdapter.destroy(); + + Message operation = mHandler.obtainMessage(MyHandler.MSG_DESTROY); + operation.obj = callback; + mHandler.enqueueOperation(operation); } @Override @@ -292,7 +295,9 @@ class PrintPreviewController implements MutexFileProvider.OnReleaseRequestCallba } break; case MSG_DESTROY: { - mPageAdapter.destroy(); + Runnable callback = (Runnable) message.obj; + mRecyclerView.setAdapter(null); + mPageAdapter.destroy(callback); handleNextOperation(); } break; |