Home | History | Annotate | Download | only in service
      1 /*
      2  * Copyright (C) 2011 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 com.android.emailcommon.service;
     18 
     19 import android.os.Parcel;
     20 import android.os.Parcelable;
     21 
     22 import com.android.emailcommon.provider.Mailbox;
     23 import com.google.common.base.Objects;
     24 
     25 public class SearchParams implements Parcelable {
     26     public static final long ALL_MAILBOXES = Mailbox.NO_MAILBOX;
     27 
     28     private static final int DEFAULT_LIMIT = 10; // Need input on what this number should be
     29     private static final int DEFAULT_OFFSET = 0;
     30 
     31     // The id of the mailbox to be searched; if -1, all mailboxes MUST be searched
     32     public final long mMailboxId;
     33     // If true, all subfolders of the specified mailbox MUST be searched
     34     public boolean mIncludeChildren = true;
     35     // The search terms (the search MUST only select messages whose contents include all of the
     36     // search terms in the query)
     37     public final String mFilter;
     38     // The maximum number of results to be created by this search
     39     public int mLimit = DEFAULT_LIMIT;
     40     // If zero, specifies a "new" search; otherwise, asks for a continuation of the previous
     41     // query(ies) starting with the mOffset'th match (0 based)
     42     public int mOffset = DEFAULT_OFFSET;
     43     // The total number of results for this search
     44     public int mTotalCount = 0;
     45     // The id of the "search" mailbox being used
     46     public long mSearchMailboxId;
     47 
     48     /**
     49      * Error codes returned by the searchMessages API
     50      */
     51     public static class SearchParamsError {
     52         public static final int CANT_SEARCH_ALL_MAILBOXES = -1;
     53         public static final int CANT_SEARCH_CHILDREN = -2;
     54     }
     55 
     56     public SearchParams(long mailboxId, String filter) {
     57         mMailboxId = mailboxId;
     58         mFilter = filter;
     59     }
     60 
     61     public SearchParams(long mailboxId, String filter, long searchMailboxId) {
     62         mMailboxId = mailboxId;
     63         mFilter = filter;
     64         mSearchMailboxId = searchMailboxId;
     65     }
     66 
     67     @Override
     68     public boolean equals(Object o) {
     69         if (o == this) {
     70             return true;
     71         }
     72         if ((o == null) || !(o instanceof SearchParams)) {
     73             return false;
     74         }
     75 
     76         SearchParams os = (SearchParams) o;
     77         return mMailboxId == os.mMailboxId
     78                 && mIncludeChildren == os.mIncludeChildren
     79                 && mFilter.equals(os.mFilter)
     80                 && mLimit == os.mLimit
     81                 && mOffset == os.mOffset;
     82     }
     83 
     84     @Override
     85     public int hashCode() {
     86         return Objects.hashCode(mMailboxId, mFilter, mOffset);
     87     }
     88 
     89     @Override
     90     public String toString() {
     91         return "[SearchParams " + mMailboxId + ":" + mFilter + " (" + mOffset + ", " + mLimit + "]";
     92     }
     93 
     94     @Override
     95     public int describeContents() {
     96         return 0;
     97     }
     98 
     99     /**
    100      * Supports Parcelable
    101      */
    102     public static final Parcelable.Creator<SearchParams> CREATOR
    103         = new Parcelable.Creator<SearchParams>() {
    104         @Override
    105         public SearchParams createFromParcel(Parcel in) {
    106             return new SearchParams(in);
    107         }
    108 
    109         @Override
    110         public SearchParams[] newArray(int size) {
    111             return new SearchParams[size];
    112         }
    113     };
    114 
    115     /**
    116      * Supports Parcelable
    117      */
    118     @Override
    119     public void writeToParcel(Parcel dest, int flags) {
    120         dest.writeLong(mMailboxId);
    121         dest.writeInt(mIncludeChildren ? 1 : 0);
    122         dest.writeString(mFilter);
    123         dest.writeInt(mLimit);
    124         dest.writeInt(mOffset);
    125     }
    126 
    127     /**
    128      * Supports Parcelable
    129      */
    130     public SearchParams(Parcel in) {
    131         mMailboxId = in.readLong();
    132         mIncludeChildren = in.readInt() == 1;
    133         mFilter = in.readString();
    134         mLimit = in.readInt();
    135         mOffset = in.readInt();
    136     }
    137 }
    138