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

Commit c3484024 authored by Svetoslav's avatar Svetoslav
Browse files

Print pooler crashes for some page ranges.

1. The print spooler fails to parse page ranges that end with
   a dash, e,g, "1-", which are however valid inputs since the
   user can continue typing to end up with a well-fromed range.

2. After a layout we are asking for the first selected page
   to be written emulating print preview, thus increasing the
   changes that apps will correctly implement the APIs.

bug:10743632

Change-Id: Ia74172d4fa6bce6ad93a0bc53da1aaa3fe8bef42
parent 3fb53d82
Loading
Loading
Loading
Loading
+20 −3
Original line number Original line Diff line number Diff line
@@ -413,12 +413,25 @@ public class PrintJobConfigActivity extends Activity {
            // write anything and wait for the user to fix the range which will
            // write anything and wait for the user to fix the range which will
            // trigger an update.
            // trigger an update.
            mRequestedPages = mEditor.getRequestedPages();
            mRequestedPages = mEditor.getRequestedPages();
            if (mRequestedPages == null) {
            if (mRequestedPages == null || mRequestedPages.length == 0) {
                mEditor.updateUi();
                mEditor.updateUi();
                if (mEditor.isDone()) {
                if (mEditor.isDone()) {
                    PrintJobConfigActivity.this.finish();
                    PrintJobConfigActivity.this.finish();
                }
                }
                return;
                return;
            } else {
                // If print is not confirmed we just ask for the first of the
                // selected pages to emulate a behavior that shows preview
                // increasing the chances that apps will implement the APIs
                // correctly.
                if (!mEditor.isPrintConfirmed()) {
                    if (ALL_PAGES_ARRAY.equals(mRequestedPages)) {
                        mRequestedPages = new PageRange[] {new PageRange(0, 0)};
                    } else {
                        final int firstPage = mRequestedPages[0].getStart();
                        mRequestedPages = new PageRange[] {new PageRange(firstPage, firstPage)};
                    }
                }
            }
            }


            // If the info and the layout did not change and we already have
            // If the info and the layout did not change and we already have
@@ -1460,8 +1473,12 @@ public class PrintJobConfigActivity extends Activity {


                    if (dashIndex > 0) {
                    if (dashIndex > 0) {
                        fromIndex = Integer.parseInt(range.substring(0, dashIndex)) - 1;
                        fromIndex = Integer.parseInt(range.substring(0, dashIndex)) - 1;
                        toIndex = Integer.parseInt(range.substring(
                        // It is possible that the dash is at the end since the input
                                dashIndex + 1, range.length())) - 1;
                        // verification can has to allow the user to keep entering if
                        // this would lead to a valid input. So we handle this.
                        toIndex = (dashIndex < range.length() - 1)
                                ? Integer.parseInt(range.substring(dashIndex + 1,
                                        range.length())) - 1 : fromIndex;
                    } else {
                    } else {
                        fromIndex = toIndex = Integer.parseInt(range) - 1;
                        fromIndex = toIndex = Integer.parseInt(range) - 1;
                    }
                    }