diff options
author | 2014-11-25 18:51:20 +0000 | |
---|---|---|
committer | 2014-11-25 18:51:20 +0000 | |
commit | 657fcb172e76772198505e4acfd8b67b74bc3c30 (patch) | |
tree | 8d7cdadb1e0a4a070f5d621a1cdcbc33606441eb | |
parent | 0b43c7eefbbbd5a68040d128a07a37f7f229f73f (diff) | |
parent | 846aac1a22a23df440e39c642cb9213a025f21b7 (diff) |
am 846aac1a: am 48956f26: am f51d7015: Merge "Lockup in the print spooler." into lmp-mr1-dev
* commit '846aac1a22a23df440e39c642cb9213a025f21b7':
Lockup in the print spooler.
4 files changed, 33 insertions, 13 deletions
diff --git a/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java b/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java index 09236491e217..90875c0b31ff 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java +++ b/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java @@ -106,12 +106,26 @@ public final class PageContentRepository { mRenderer.close(callback); } - public void destroy() { + public void destroy(final Runnable callback) { + if (mState == STATE_OPENED) { + close(new Runnable() { + @Override + public void run() { + destroy(callback); + } + }); + return; + } + mState = STATE_DESTROYED; if (DEBUG) { Log.i(LOG_TAG, "STATE_DESTROYED"); } mRenderer.destroy(); + + if (callback != null) { + callback.run(); + } } public void startPreload(int firstShownPage, int lastShownPage) { @@ -158,7 +172,7 @@ public final class PageContentRepository { try { if (mState != STATE_DESTROYED) { mCloseGuard.warnIfOpen(); - destroy(); + destroy(null); } } finally { super.finalize(); @@ -455,6 +469,10 @@ public final class PageContentRepository { public void close(final Runnable callback) { cancelAllRendering(); + if (mOpenTask != null) { + mOpenTask.cancel(); + } + new AsyncTask<Void, Void, Void>() { @Override protected void onPreExecute() { @@ -492,10 +510,6 @@ public final class PageContentRepository { mContext.unbindService(AsyncRenderer.this); } - if (mOpenTask != null) { - mOpenTask.cancel(); - } - mPageContentCache.invalidate(); mPageContentCache.clear(); mDestroyed = true; diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java index 0d2e7361cfdd..2757b816db40 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java +++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java @@ -493,13 +493,13 @@ public final class PageAdapter extends Adapter { return selectedPages; } - public void destroy() { - mPageContentRepository.destroy(); + public void destroy(Runnable callback) { mCloseGuard.close(); mState = STATE_DESTROYED; if (DEBUG) { Log.i(LOG_TAG, "STATE_DESTROYED"); } + mPageContentRepository.destroy(callback); } @Override @@ -507,7 +507,7 @@ public final class PageAdapter extends Adapter { try { if (mState != STATE_DESTROYED) { mCloseGuard.warnIfOpen(); - destroy(); + destroy(null); } } finally { super.finalize(); diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java index 71d53409ed91..352b545af8d6 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java +++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java @@ -1635,9 +1635,15 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat mSpoolerProvider.destroy(); mPrintedDocument.finish(); mPrintedDocument.destroy(); - mPrintPreviewController.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 15342ae3f595..8716fd21cdb8 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintPreviewController.java +++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintPreviewController.java @@ -192,10 +192,10 @@ class PrintPreviewController implements MutexFileProvider.OnReleaseRequestCallba }); } - public void destroy() { + public void destroy(Runnable callback) { mHandler.cancelQueuedOperations(); mRecyclerView.setAdapter(null); - mPageAdapter.destroy(); + mPageAdapter.destroy(callback); } @Override |