PageRange.java revision 85b1f883056a1d74473fd9ce774948878f389ab6
14b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov/*
24b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Copyright (C) 2013 The Android Open Source Project
34b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov *
44b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Licensed under the Apache License, Version 2.0 (the "License");
54b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * you may not use this file except in compliance with the License.
64b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * You may obtain a copy of the License at
74b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov *
84b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov *      http://www.apache.org/licenses/LICENSE-2.0
94b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov *
104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Unless required by applicable law or agreed to in writing, software
114b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * distributed under the License is distributed on an "AS IS" BASIS,
124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * See the License for the specific language governing permissions and
144b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * limitations under the License.
154b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */
164b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
174b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovpackage android.print;
184b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
194b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.os.Parcel;
204b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.os.Parcelable;
214b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
224b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov/**
234b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Represents a range of pages. The start and end page indices of
24fd90651cfcc7e2b75254666fd6861038b72fb4acSvetoslav * the range are zero based and inclusive.
254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */
264b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovpublic final class PageRange implements Parcelable {
274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Constant for specifying all pages.
304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public static final PageRange ALL_PAGES = new PageRange(0, Integer.MAX_VALUE);
324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private final int mStart;
344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private final int mEnd;
354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Creates a new instance.
384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
394b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @param start The start page index (zero based and inclusive).
404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @param end The end page index (zero based and inclusive).
414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @throws IllegalArgumentException If start is less than zero.
434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @throws IllegalArgumentException If end is less than zero.
444b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @throws IllegalArgumentException If start greater than end.
4588d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov     *
4688d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov     * @hide
474b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
4888d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov    public PageRange(int start, int end) {
494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        if (start < 0) {
504b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            throw new IllegalArgumentException("start cannot be less than zero.");
514b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
524b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        if (end < 0) {
534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            throw new IllegalArgumentException("end cannot be less than zero.");
544b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
554b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        if (start > end) {
564b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            throw new IllegalArgumentException("start must be lesser than end.");
574b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
584b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mStart = start;
594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mEnd = end;
604b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
614b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
624b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private PageRange (Parcel parcel) {
634b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        this(parcel.readInt(), parcel.readInt());
644b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
654b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
664b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
674b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Gets the start page index (zero based and inclusive).
684b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
694b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @return The start page index.
704b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
714b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public int getStart() {
724b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mStart;
734b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
744b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
754b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
764b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Gets the end page index (zero based and inclusive).
774b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
784b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @return The end page index.
794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public int getEnd() {
814b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mEnd;
824b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
834b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
844b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    @Override
854b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public int describeContents() {
864b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return 0;
874b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
884b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
894b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    @Override
904b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public void writeToParcel(Parcel parcel, int flags) {
914b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        parcel.writeInt(mStart);
924b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        parcel.writeInt(mEnd);
934b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
944b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
954b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    @Override
9685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    public int hashCode() {
9785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        final int prime = 31;
9885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        int result = 1;
9985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        result = prime * result + mEnd;
10085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        result = prime * result + mStart;
10185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        return result;
10285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    }
10385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov
10485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    @Override
10585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    public boolean equals(Object obj) {
10685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        if (this == obj) {
10785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            return true;
10885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        }
10985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        if (obj == null) {
11085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            return false;
11185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        }
11285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        if (getClass() != obj.getClass()) {
11385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            return false;
11485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        }
11585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        PageRange other = (PageRange) obj;
11685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        if (mEnd != other.mEnd) {
11785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            return false;
11885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        }
11985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        if (mStart != other.mStart) {
12085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            return false;
12185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        }
12285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        return true;
12385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    }
12485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov
12585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    @Override
1264b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public String toString() {
12785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        if (mStart == 0 && mEnd == Integer.MAX_VALUE) {
1284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            return "PageRange[<all pages>]";
1294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
1304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        StringBuilder builder = new StringBuilder();
1314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        builder.append("PageRange[")
1324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            .append(mStart)
1334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            .append(" - ")
1344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            .append(mEnd)
1354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            .append("]");
1364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return builder.toString();
1374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
1384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1394b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public static final Parcelable.Creator<PageRange> CREATOR =
1404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            new Creator<PageRange>() {
1414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        @Override
1424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        public PageRange createFromParcel(Parcel parcel) {
1434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            return new PageRange(parcel);
1444b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
1454b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1464b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        @Override
1474b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        public PageRange[] newArray(int size) {
1484b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            return new PageRange[size];
1494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
1504b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    };
1514b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov}
152