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