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

Commit 1bb7f363 authored by Philip P. Moltmann's avatar Philip P. Moltmann
Browse files

Update print document view if printer capabilities changed

Bonus: Remove Printer-onChange listener before other state gets cleaned
       up. Otherwise onChange callbacks at the wrong time cause into
       destroyed data.

Bug: 27219320
Change-Id: I8335b9d8dd71112b76aa684f00524d4d8aad3f94
parent 556b3226
Loading
Loading
Loading
Loading
+22 −9
Original line number Original line Diff line number Diff line
@@ -236,6 +236,9 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat


    private int mUiState = UI_STATE_PREVIEW;
    private int mUiState = UI_STATE_PREVIEW;


    /** Observer for changes to the printers */
    private PrintersObserver mPrintersObserver;

    @Override
    @Override
    public void onCreate(Bundle savedInstanceState) {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.onCreate(savedInstanceState);
@@ -1191,7 +1194,8 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
        mCopiesEditText.addTextChangedListener(new EditTextWatcher());
        mCopiesEditText.addTextChangedListener(new EditTextWatcher());


        // Destination.
        // Destination.
        mDestinationSpinnerAdapter.registerDataSetObserver(new PrintersObserver());
        mPrintersObserver = new PrintersObserver();
        mDestinationSpinnerAdapter.registerDataSetObserver(mPrintersObserver);
        mDestinationSpinner = (Spinner) findViewById(R.id.destination_spinner);
        mDestinationSpinner = (Spinner) findViewById(R.id.destination_spinner);
        mDestinationSpinner.setAdapter(mDestinationSpinnerAdapter);
        mDestinationSpinner.setAdapter(mDestinationSpinnerAdapter);
        mDestinationSpinner.setOnItemSelectedListener(itemSelectedListener);
        mDestinationSpinner.setOnItemSelectedListener(itemSelectedListener);
@@ -1969,6 +1973,10 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
            mPrinterRegistry.setTrackedPrinter(null);
            mPrinterRegistry.setTrackedPrinter(null);
        }
        }


        if (mPrintersObserver != null) {
            mDestinationSpinnerAdapter.unregisterDataSetObserver(mPrintersObserver);
        }

        if (mState != STATE_INITIALIZING) {
        if (mState != STATE_INITIALIZING) {
            mProgressMessageController.cancel();
            mProgressMessageController.cancel();
            mSpoolerProvider.destroy();
            mSpoolerProvider.destroy();
@@ -2449,6 +2457,7 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
            PrinterCapabilitiesInfo oldCapab = oldPrinterState.getCapabilities();
            PrinterCapabilitiesInfo oldCapab = oldPrinterState.getCapabilities();
            PrinterCapabilitiesInfo newCapab = newPrinterState.getCapabilities();
            PrinterCapabilitiesInfo newCapab = newPrinterState.getCapabilities();


            final boolean hadCabab = oldCapab != null;
            final boolean hasCapab = newCapab != null;
            final boolean hasCapab = newCapab != null;
            final boolean gotCapab = oldCapab == null && newCapab != null;
            final boolean gotCapab = oldCapab == null && newCapab != null;
            final boolean lostCapab = oldCapab != null && newCapab == null;
            final boolean lostCapab = oldCapab != null && newCapab == null;
@@ -2467,19 +2476,23 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat


            mCurrentPrinter = newPrinterState;
            mCurrentPrinter = newPrinterState;


            if ((isActive && gotCapab) || (becameActive && hasCapab)) {
            final boolean updateNeeded = ((capabChanged && hasCapab && isActive)
                if (hasCapab && capabChanged) {
                    || (becameActive && hasCapab) || (isActive && gotCapab));

            if (capabChanged && hasCapab) {
                updatePrintAttributesFromCapabilities(newCapab);
                updatePrintAttributesFromCapabilities(newCapab);
            }

            if (updateNeeded) {
                updatePrintPreviewController(false);
                updatePrintPreviewController(false);
            }
            }

            if ((isActive && gotCapab) || (becameActive && hasCapab)) {
                onPrinterAvailable(newPrinterState);
                onPrinterAvailable(newPrinterState);
            } else if ((becameInactive && hasCapab) || (isActive && lostCapab)) {
            } else if ((becameInactive && hadCabab) || (isActive && lostCapab)) {
                onPrinterUnavailable(newPrinterState);
                onPrinterUnavailable(newPrinterState);
            }
            }


            final boolean updateNeeded = ((capabChanged && hasCapab && isActive)
                    || (becameActive && hasCapab) || (isActive && gotCapab));

            if (updateNeeded && canUpdateDocument()) {
            if (updateNeeded && canUpdateDocument()) {
                updateDocument(false);
                updateDocument(false);
            }
            }