Home | History | Annotate | Download | only in print
      1 /*
      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 
     17 package android.print;
     18 
     19 import android.os.Parcel;
     20 import android.os.Parcelable;
     21 
     22 /**
     23  * Represents a range of pages. The start and end page indices of
     24  * the range are zero based and inclusive.
     25  */
     26 public 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      *
     42      * @throws IllegalArgumentException If start is less than zero or end
     43      * is less than zero or start greater than end.
     44      */
     45     public PageRange(int start, int end) {
     46         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 
     81     /**
     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 
    105     @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
    117     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
    147     public String toString() {
    148         if (mStart == 0 && mEnd == Integer.MAX_VALUE) {
    149             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 }
    173