PageRange.java revision 525a66b2bb5abf844aff2109bdc9ed819566bece
1493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams/*
2493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams * Copyright (C) 2013 The Android Open Source Project
3493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams *
4493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams * you may not use this file except in compliance with the License.
6493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams * You may obtain a copy of the License at
7493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams *
8493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams *
10493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams * Unless required by applicable law or agreed to in writing, software
11493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams * See the License for the specific language governing permissions and
14493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams * limitations under the License.
15493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams */
16493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams
17493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Samspackage android.print;
18493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams
19493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Samsimport android.os.Parcel;
20493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Samsimport android.os.Parcelable;
21493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams
22493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams/**
23493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams * Represents a range of pages. The start and end page indices of
249ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich * the range are zero based and inclusive.
259ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich */
26493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Samspublic final class PageRange implements Parcelable {
27493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams
28493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams    /**
29493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams     * Constant for specifying all pages.
30493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams     */
31493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams    public static final PageRange ALL_PAGES = new PageRange(0, Integer.MAX_VALUE);
32493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams
33493220dcb8d2f5d9633c157b41e1e27c6613b21dJason Sams    private final int mStart;
349ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    private final int mEnd;
359ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich
369ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    /**
379ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     * Creates a new instance.
389ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     *
399ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     * @param start The start page index (zero based and inclusive).
409ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     * @param end The end page index (zero based and inclusive).
419ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     *
429ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     * @throws IllegalArgumentException If start is less than zero or end
439ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     * is less than zero or start greater than end.
449ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     */
4513e68424fb7d68b4b9a9dd443eb0e87721312834Jack Palevich    public PageRange(int start, int end) {
4613e68424fb7d68b4b9a9dd443eb0e87721312834Jack Palevich        if (start < 0) {
4713e68424fb7d68b4b9a9dd443eb0e87721312834Jack Palevich            throw new IllegalArgumentException("start cannot be less than zero.");
489ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        }
499ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        if (end < 0) {
509ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich            throw new IllegalArgumentException("end cannot be less than zero.");
519ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        }
529ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        if (start > end) {
539ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich            throw new IllegalArgumentException("start must be lesser than end.");
549ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        }
559ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        mStart = start;
569ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        mEnd = end;
5713e68424fb7d68b4b9a9dd443eb0e87721312834Jack Palevich    }
58058777592dc784034cc19f6d358fe5ca4225d81dJack Palevich
59058777592dc784034cc19f6d358fe5ca4225d81dJack Palevich    private PageRange (Parcel parcel) {
60058777592dc784034cc19f6d358fe5ca4225d81dJack Palevich        this(parcel.readInt(), parcel.readInt());
61058777592dc784034cc19f6d358fe5ca4225d81dJack Palevich    }
62058777592dc784034cc19f6d358fe5ca4225d81dJack Palevich
639ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    /**
649ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     * Gets the start page index (zero based and inclusive).
6513e68424fb7d68b4b9a9dd443eb0e87721312834Jack Palevich     *
6613e68424fb7d68b4b9a9dd443eb0e87721312834Jack Palevich     * @return The start page index.
6713e68424fb7d68b4b9a9dd443eb0e87721312834Jack Palevich     */
6813e68424fb7d68b4b9a9dd443eb0e87721312834Jack Palevich    public int getStart() {
699ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        return mStart;
709ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    }
719ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich
729ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    /**
739ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     * Gets the end page index (zero based and inclusive).
749ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     *
759ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     * @return The end page index.
769ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     */
779ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    public int getEnd() {
789ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        return mEnd;
799ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    }
809ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich
819ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    /**
829ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     * Gets whether a page range contains a a given page.
839ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     *
849ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     * @param pageIndex The page index.
859ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     * @return True if the page is within this range.
869ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     *
879ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     * @hide
889ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     */
899ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    public boolean contains(int pageIndex) {
909ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        return pageIndex >= mStart && pageIndex <= mEnd;
919ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    }
929ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich
939ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    /**
949ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     * Get the size of this range which is the number of
959ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     * pages it contains.
969ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     *
979ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     * @return The size of the range.
989ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     *
999ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     * @hide
1009ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich     */
1019ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    public int getSize() {
1029ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        return mEnd - mStart + 1;
1039ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    }
1049ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich
1059ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    @Override
1069ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    public int describeContents() {
1079ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        return 0;
1089ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    }
1099ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich
1109ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    @Override
1119ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    public void writeToParcel(Parcel parcel, int flags) {
1129ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        parcel.writeInt(mStart);
1139ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        parcel.writeInt(mEnd);
1149ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    }
1159ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich
1169ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    @Override
1179ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    public int hashCode() {
1189ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        final int prime = 31;
1199ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        int result = 1;
1209ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        result = prime * result + mEnd;
1219ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        result = prime * result + mStart;
1229ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        return result;
1239ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    }
1249ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich
1259ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    @Override
1269ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    public boolean equals(Object obj) {
1279ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        if (this == obj) {
1289ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich            return true;
1299ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        }
1309ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        if (obj == null) {
1319ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich            return false;
1329ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        }
1339ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        if (getClass() != obj.getClass()) {
1349ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich            return false;
1359ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        }
1369ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        PageRange other = (PageRange) obj;
1379ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        if (mEnd != other.mEnd) {
1389ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich            return false;
1399ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        }
1409ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        if (mStart != other.mStart) {
1419ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich            return false;
1429ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        }
1439ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        return true;
1449ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    }
1459ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich
1469ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    @Override
1479ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    public String toString() {
1489ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        if (mStart == 0 && mEnd == Integer.MAX_VALUE) {
1499ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich            return "PageRange[<all pages>]";
1509ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        }
1519ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        StringBuilder builder = new StringBuilder();
1529ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        builder.append("PageRange[")
1539ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich            .append(mStart)
1549ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich            .append(" - ")
1559ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich            .append(mEnd)
1569ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich            .append("]");
1579ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        return builder.toString();
1589ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    }
1599ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich
1609ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    public static final Parcelable.Creator<PageRange> CREATOR =
1619ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich            new Creator<PageRange>() {
16213e68424fb7d68b4b9a9dd443eb0e87721312834Jack Palevich        @Override
1639ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        public PageRange createFromParcel(Parcel parcel) {
1649ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich            return new PageRange(parcel);
1659ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        }
1669ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich
1679ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        @Override
1689ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        public PageRange[] newArray(int size) {
1699ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich            return new PageRange[size];
1709ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich        }
1719ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich    };
1729ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich}
1739ec24af0e8fa1005e8b37073a27590d8f42149ceJack Palevich