blob: 8c229c505014feaf6d882a5d09860a33b94225c6 [file] [log] [blame]
Svetoslav Ganov4b9a4d12013-06-11 15:20:06 -07001/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.print;
18
19import android.os.Parcel;
20import android.os.Parcelable;
21
22/**
23 * Represents a range of pages. The start and end page indices of
Svetoslavfd906512013-06-24 09:04:48 -070024 * the range are zero based and inclusive.
Svetoslav Ganov4b9a4d12013-06-11 15:20:06 -070025 */
26public final class PageRange implements Parcelable {
27
28 /**
29 * Constant for specifying all pages.
30 */
31 public static final PageRange ALL_PAGES = new PageRange(0, Integer.MAX_VALUE);
32
33 private final int mStart;
34 private final int mEnd;
35
36 /**
37 * Creates a new instance.
38 *
39 * @param start The start page index (zero based and inclusive).
40 * @param end The end page index (zero based and inclusive).
41 *
Svetoslav Ganov4d4c66d2013-10-24 18:04:39 -070042 * @throws IllegalArgumentException If start is less than zero or end
43 * is less than zero or start greater than end.
Svetoslav Ganov4b9a4d12013-06-11 15:20:06 -070044 */
Svetoslav Ganov88d19912013-07-22 12:32:03 -070045 public PageRange(int start, int end) {
Svetoslav Ganov4b9a4d12013-06-11 15:20:06 -070046 if (start < 0) {
47 throw new IllegalArgumentException("start cannot be less than zero.");
48 }
49 if (end < 0) {
50 throw new IllegalArgumentException("end cannot be less than zero.");
51 }
52 if (start > end) {
53 throw new IllegalArgumentException("start must be lesser than end.");
54 }
55 mStart = start;
56 mEnd = end;
57 }
58
59 private PageRange (Parcel parcel) {
60 this(parcel.readInt(), parcel.readInt());
61 }
62
63 /**
64 * Gets the start page index (zero based and inclusive).
65 *
66 * @return The start page index.
67 */
68 public int getStart() {
69 return mStart;
70 }
71
72 /**
73 * Gets the end page index (zero based and inclusive).
74 *
75 * @return The end page index.
76 */
77 public int getEnd() {
78 return mEnd;
79 }
80
Svet Ganov525a66b2014-06-14 22:29:00 -070081 /**
82 * Gets whether a page range contains a a given page.
83 *
84 * @param pageIndex The page index.
85 * @return True if the page is within this range.
86 *
87 * @hide
88 */
89 public boolean contains(int pageIndex) {
90 return pageIndex >= mStart && pageIndex <= mEnd;
91 }
92
93 /**
94 * Get the size of this range which is the number of
95 * pages it contains.
96 *
97 * @return The size of the range.
98 *
99 * @hide
100 */
101 public int getSize() {
102 return mEnd - mStart + 1;
103 }
104
Svetoslav Ganov4b9a4d12013-06-11 15:20:06 -0700105 @Override
106 public int describeContents() {
107 return 0;
108 }
109
110 @Override
111 public void writeToParcel(Parcel parcel, int flags) {
112 parcel.writeInt(mStart);
113 parcel.writeInt(mEnd);
114 }
115
116 @Override
Svetoslav Ganov85b1f882013-07-24 17:00:06 -0700117 public int hashCode() {
118 final int prime = 31;
119 int result = 1;
120 result = prime * result + mEnd;
121 result = prime * result + mStart;
122 return result;
123 }
124
125 @Override
126 public boolean equals(Object obj) {
127 if (this == obj) {
128 return true;
129 }
130 if (obj == null) {
131 return false;
132 }
133 if (getClass() != obj.getClass()) {
134 return false;
135 }
136 PageRange other = (PageRange) obj;
137 if (mEnd != other.mEnd) {
138 return false;
139 }
140 if (mStart != other.mStart) {
141 return false;
142 }
143 return true;
144 }
145
146 @Override
Svetoslav Ganov4b9a4d12013-06-11 15:20:06 -0700147 public String toString() {
Svetoslav Ganov85b1f882013-07-24 17:00:06 -0700148 if (mStart == 0 && mEnd == Integer.MAX_VALUE) {
Svetoslav Ganov4b9a4d12013-06-11 15:20:06 -0700149 return "PageRange[<all pages>]";
150 }
151 StringBuilder builder = new StringBuilder();
152 builder.append("PageRange[")
153 .append(mStart)
154 .append(" - ")
155 .append(mEnd)
156 .append("]");
157 return builder.toString();
158 }
159
160 public static final Parcelable.Creator<PageRange> CREATOR =
161 new Creator<PageRange>() {
162 @Override
163 public PageRange createFromParcel(Parcel parcel) {
164 return new PageRange(parcel);
165 }
166
167 @Override
168 public PageRange[] newArray(int size) {
169 return new PageRange[size];
170 }
171 };
172}