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