summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Philip P. Moltmann <moltmann@google.com> 2016-06-29 11:44:02 -0700
committer Philip P. Moltmann <moltmann@google.com> 2016-06-30 17:38:06 +0000
commit2eae8eb7e23d454a323bbbe9c77a9704488b1d6a (patch)
treeb60debf889048249ba52d59d8e24d23c6ea9a70f
parenta2beb44834f8847a6532987e9941a9afcd812129 (diff)
Prevent PrintRegistry callbacks when finishing
Previously these callbacks could happen while we clean up the print preview controller. Then these callbacks called in destroyed and cleaned up modules. Fixes: 29874802 Change-Id: I5d8497e3364b97a33a837f8e3e825e5d254592f9
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java1
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/ui/PrinterRegistry.java44
2 files changed, 21 insertions, 24 deletions
diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
index c318275aafd0..2c4025d25380 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
@@ -2060,6 +2060,7 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
if (mPrinterRegistry != null) {
mPrinterRegistry.setTrackedPrinter(null);
+ mPrinterRegistry.setOnPrintersChangeListener(null);
}
if (mPrintersObserver != null) {
diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PrinterRegistry.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PrinterRegistry.java
index 86366dd21ead..9fca9593162c 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/ui/PrinterRegistry.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PrinterRegistry.java
@@ -120,13 +120,11 @@ public class PrinterRegistry {
@Override
public void onLoaderReset(Loader<List<PrinterInfo>> loader) {
mPrinters.clear();
- if (mOnPrintersChangeListener != null) {
- // Post a message as we are in onLoadFinished and certain operations
- // are not allowed in this callback, such as fragment transactions.
- // Clients should not handle this explicitly.
- mHandler.obtainMessage(MyHandler.MSG_PRINTERS_INVALID,
- mOnPrintersChangeListener).sendToTarget();
- }
+
+ // Post a message as we are in onLoadFinished and certain operations
+ // are not allowed in this callback, such as fragment transactions.
+ // Clients should not handle this explicitly.
+ mHandler.obtainMessage(MyHandler.MSG_PRINTERS_INVALID).sendToTarget();
}
// LoaderCallbacks#onLoadFinished
@@ -134,15 +132,12 @@ public class PrinterRegistry {
public void onLoadFinished(Loader<List<PrinterInfo>> loader, List<PrinterInfo> printers) {
mPrinters.clear();
mPrinters.addAll(printers);
- if (mOnPrintersChangeListener != null) {
- // Post a message as we are in onLoadFinished and certain operations
- // are not allowed in this callback, such as fragment transactions.
- // Clients should not handle this explicitly.
- SomeArgs args = SomeArgs.obtain();
- args.arg1 = mOnPrintersChangeListener;
- args.arg2 = printers;
- mHandler.obtainMessage(MyHandler.MSG_PRINTERS_CHANGED, args).sendToTarget();
- }
+
+ // Post a message as we are in onLoadFinished and certain operations
+ // are not allowed in this callback, such as fragment transactions.
+ // Clients should not handle this explicitly.
+ mHandler.obtainMessage(MyHandler.MSG_PRINTERS_CHANGED, printers).sendToTarget();
+
if (!mReady) {
mReady = true;
if (mReadyCallback != null) {
@@ -158,7 +153,7 @@ public class PrinterRegistry {
}
};
- private static final class MyHandler extends Handler {
+ private final class MyHandler extends Handler {
public static final int MSG_PRINTERS_CHANGED = 0;
public static final int MSG_PRINTERS_INVALID = 1;
@@ -171,16 +166,17 @@ public class PrinterRegistry {
public void handleMessage(Message message) {
switch (message.what) {
case MSG_PRINTERS_CHANGED: {
- SomeArgs args = (SomeArgs) message.obj;
- OnPrintersChangeListener callback = (OnPrintersChangeListener) args.arg1;
- List<PrinterInfo> printers = (List<PrinterInfo>) args.arg2;
- args.recycle();
- callback.onPrintersChanged(printers);
+ List<PrinterInfo> printers = (List<PrinterInfo>) message.obj;
+
+ if (mOnPrintersChangeListener != null) {
+ mOnPrintersChangeListener.onPrintersChanged(printers);
+ }
} break;
case MSG_PRINTERS_INVALID: {
- OnPrintersChangeListener callback = (OnPrintersChangeListener) message.obj;
- callback.onPrintersInvalid();
+ if (mOnPrintersChangeListener != null) {
+ mOnPrintersChangeListener.onPrintersInvalid();
+ }
} break;
}
}