175a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank/* 275a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank * Copyright (C) 2011 The Android Open Source Project 375a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank * 475a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank * Licensed under the Apache License, Version 2.0 (the "License"); 575a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank * you may not use this file except in compliance with the License. 675a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank * You may obtain a copy of the License at 775a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank * 875a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank * http://www.apache.org/licenses/LICENSE-2.0 975a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank * 1075a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank * Unless required by applicable law or agreed to in writing, software 1175a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank * distributed under the License is distributed on an "AS IS" BASIS, 1275a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1375a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank * See the License for the specific language governing permissions and 1475a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank * limitations under the License. 1575a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank */ 1675a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank 1775a754660e33c5e18cacffff193983ba22a7b9b0Marc Blankpackage com.android.emailcommon.service; 1875a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank 1975a754660e33c5e18cacffff193983ba22a7b9b0Marc Blankimport android.os.Parcel; 2075a754660e33c5e18cacffff193983ba22a7b9b0Marc Blankimport android.os.Parcelable; 2175a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank 22ed1dc9ee72410e07de24bc4a072d066981611a48Marc Blankimport com.android.emailcommon.provider.Mailbox; 2353300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komaloimport com.google.common.base.Objects; 24ed1dc9ee72410e07de24bc4a072d066981611a48Marc Blank 2575a754660e33c5e18cacffff193983ba22a7b9b0Marc Blankpublic class SearchParams implements Parcelable { 2675a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank public static final long ALL_MAILBOXES = Mailbox.NO_MAILBOX; 2775a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank 28ed1dc9ee72410e07de24bc4a072d066981611a48Marc Blank private static final int DEFAULT_LIMIT = 10; // Need input on what this number should be 2975a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank private static final int DEFAULT_OFFSET = 0; 3075a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank 3175a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank // The id of the mailbox to be searched; if -1, all mailboxes MUST be searched 3275a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank public final long mMailboxId; 3375a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank // If true, all subfolders of the specified mailbox MUST be searched 3475a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank public boolean mIncludeChildren = true; 3575a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank // The search terms (the search MUST only select messages whose contents include all of the 3675a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank // search terms in the query) 3775a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank public final String mFilter; 3875a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank // The maximum number of results to be created by this search 3975a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank public int mLimit = DEFAULT_LIMIT; 4075a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank // If zero, specifies a "new" search; otherwise, asks for a continuation of the previous 4175a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank // query(ies) starting with the mOffset'th match (0 based) 4275a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank public int mOffset = DEFAULT_OFFSET; 4375a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank 4475a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank /** 4575a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank * Error codes returned by the searchMessages API 4675a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank */ 4775a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank public static class SearchParamsError { 4875a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank public static final int CANT_SEARCH_ALL_MAILBOXES = -1; 4975a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank public static final int CANT_SEARCH_CHILDREN = -2; 5075a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank } 5175a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank 5275a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank public SearchParams(long mailboxId, String filter) { 5375a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank mMailboxId = mailboxId; 5475a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank mFilter = filter; 5575a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank } 5675a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank 5775a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank @Override 5853300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo public boolean equals(Object o) { 5953300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo if (o == this) { 6053300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo return true; 6153300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo } 6253300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo if ((o == null) || !(o instanceof SearchParams)) { 6353300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo return false; 6453300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo } 6553300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo 6653300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo SearchParams os = (SearchParams) o; 6753300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo return mMailboxId == os.mMailboxId 6853300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo && mIncludeChildren == os.mIncludeChildren 6953300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo && mFilter.equals(os.mFilter) 7053300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo && mLimit == os.mLimit 7153300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo && mOffset == os.mOffset; 7253300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo } 7353300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo 7453300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo @Override 7553300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo public int hashCode() { 7653300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo return Objects.hashCode(mMailboxId, mFilter, mOffset); 7753300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo } 7853300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo 7953300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo @Override 8053300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo public String toString() { 8153300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo return "[SearchParams " + mMailboxId + ":" + mFilter + " (" + mOffset + ", " + mLimit + "]"; 8253300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo } 8353300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo 8453300963ff0d2cefa94a7170bfb4a6418f5b5b17Ben Komalo @Override 8575a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank public int describeContents() { 8675a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank return 0; 8775a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank } 8875a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank 8975a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank /** 9075a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank * Supports Parcelable 9175a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank */ 9275a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank public static final Parcelable.Creator<SearchParams> CREATOR 9375a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank = new Parcelable.Creator<SearchParams>() { 9475a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank @Override 9575a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank public SearchParams createFromParcel(Parcel in) { 9675a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank return new SearchParams(in); 9775a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank } 9875a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank 9975a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank @Override 10075a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank public SearchParams[] newArray(int size) { 10175a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank return new SearchParams[size]; 10275a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank } 10375a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank }; 10475a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank 10575a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank /** 10675a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank * Supports Parcelable 10775a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank */ 10875a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank @Override 10975a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank public void writeToParcel(Parcel dest, int flags) { 11075a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank dest.writeLong(mMailboxId); 11175a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank dest.writeInt(mIncludeChildren ? 1 : 0); 11275a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank dest.writeString(mFilter); 11375a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank dest.writeInt(mLimit); 11475a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank dest.writeInt(mOffset); 11575a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank } 11675a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank 11775a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank /** 11875a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank * Supports Parcelable 11975a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank */ 12075a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank public SearchParams(Parcel in) { 12175a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank mMailboxId = in.readLong(); 12275a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank mIncludeChildren = in.readInt() == 1; 12375a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank mFilter = in.readString(); 12475a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank mLimit = in.readInt(); 12575a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank mOffset = in.readInt(); 12675a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank } 12775a754660e33c5e18cacffff193983ba22a7b9b0Marc Blank} 128