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