summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Svet Ganov <svetoslavganov@google.com> 2014-11-25 18:51:20 +0000
committer Android Git Automerger <android-git-automerger@android.com> 2014-11-25 18:51:20 +0000
commit657fcb172e76772198505e4acfd8b67b74bc3c30 (patch)
tree8d7cdadb1e0a4a070f5d621a1cdcbc33606441eb
parent0b43c7eefbbbd5a68040d128a07a37f7f229f73f (diff)
parent846aac1a22a23df440e39c642cb9213a025f21b7 (diff)
am 846aac1a: am 48956f26: am f51d7015: Merge "Lockup in the print spooler." into lmp-mr1-dev
* commit '846aac1a22a23df440e39c642cb9213a025f21b7': Lockup in the print spooler.
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java26
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java6
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java10
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/ui/PrintPreviewController.java4
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