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

Commit 027ff385 authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by Android (Google) Code Review
Browse files

Merge "Page range validation edge case handling." into klp-dev

parents 1de64c0a ab051bae
Loading
Loading
Loading
Loading
+14 −6
Original line number Original line Diff line number Diff line
@@ -77,6 +77,8 @@ import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.TextView;


import libcore.io.IoUtils;

import java.io.File;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileNotFoundException;
@@ -92,8 +94,6 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Matcher;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.Pattern;


import libcore.io.IoUtils;

/**
/**
 * Activity for configuring a print job.
 * Activity for configuring a print job.
 */
 */
@@ -144,7 +144,8 @@ public class PrintJobConfigActivity extends Activity {
            "(?=[]\\[+&|!(){}^\"~*?:\\\\])");
            "(?=[]\\[+&|!(){}^\"~*?:\\\\])");


    private static final Pattern PATTERN_PAGE_RANGE = Pattern.compile(
    private static final Pattern PATTERN_PAGE_RANGE = Pattern.compile(
            "([0-9]+[\\s]*[\\-]?[\\s]*[0-9]*[\\s]*[,]?[\\s]*)+");
            "[\\s]*[0-9]*[\\s]*[\\-]?[\\s]*[0-9]*[\\s]*?(([,])"
            + "[\\s]*[0-9]*[\\s]*[\\-]?[\\s]*[0-9]*[\\s]*|[\\s]*)+");


    public static final PageRange[] ALL_PAGES_ARRAY = new PageRange[] {PageRange.ALL_PAGES};
    public static final PageRange[] ALL_PAGES_ARRAY = new PageRange[] {PageRange.ALL_PAGES};


@@ -1076,9 +1077,13 @@ public class PrintJobConfigActivity extends Activity {
                    return;
                    return;
                }
                }


                // The range
                Matcher matcher = PATTERN_DIGITS.matcher(text);
                Matcher matcher = PATTERN_DIGITS.matcher(text);
                while (matcher.find()) {
                while (matcher.find()) {
                    String numericString = text.substring(matcher.start(), matcher.end());
                    String numericString = text.substring(matcher.start(), matcher.end()).trim();
                    if (TextUtils.isEmpty(numericString)) {
                        continue;
                    }
                    final int pageIndex = Integer.parseInt(numericString);
                    final int pageIndex = Integer.parseInt(numericString);
                    if (pageIndex < 1 || pageIndex > mDocument.info.getPageCount()) {
                    if (pageIndex < 1 || pageIndex > mDocument.info.getPageCount()) {
                        mPageRangeEditText.setError("");
                        mPageRangeEditText.setError("");
@@ -1506,18 +1511,21 @@ public class PrintJobConfigActivity extends Activity {


                while (mStringCommaSplitter.hasNext()) {
                while (mStringCommaSplitter.hasNext()) {
                    String range = mStringCommaSplitter.next().trim();
                    String range = mStringCommaSplitter.next().trim();
                    if (TextUtils.isEmpty(range)) {
                        continue;
                    }
                    final int dashIndex = range.indexOf('-');
                    final int dashIndex = range.indexOf('-');
                    final int fromIndex;
                    final int fromIndex;
                    final int toIndex;
                    final int toIndex;


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