1/**
2 * Copyright (c) 2012, Google Inc.
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 com.android.mail.providers;
18
19import com.android.mail.utils.LogTag;
20import com.android.mail.utils.LogUtils;
21
22import android.os.Parcel;
23import android.os.Parcelable;
24
25import org.json.JSONException;
26import org.json.JSONObject;
27
28public class ListParams implements Parcelable {
29    private static final String LIMIT_KEY = "limit";
30    private static final String USE_NETWORK_KEY = "use-network";
31
32    public static final int NO_LIMIT = -1;
33
34    private static final String LOG_TAG = LogTag.getLogTag();
35
36    // The maximum number of results to be created by this search
37    public final int mLimit;
38
39    public final boolean mUseNetwork;
40
41    public ListParams(int limit, boolean useNetwork) {
42        mLimit = limit;
43        mUseNetwork = useNetwork;
44    }
45
46    /**
47     * Supports Parcelable
48     */
49    public static final Parcelable.Creator<ListParams> CREATOR
50        = new Parcelable.Creator<ListParams>() {
51        @Override
52        public ListParams createFromParcel(Parcel in) {
53            return new ListParams(in);
54        }
55
56        @Override
57        public ListParams[] newArray(int size) {
58            return new ListParams[size];
59        }
60    };
61
62    /**
63     * Supports Parcelable
64     */
65    @Override
66    public void writeToParcel(Parcel dest, int flags) {
67        dest.writeInt(mLimit);
68        dest.writeInt(mUseNetwork ? 1 : 0);
69    }
70
71    /**
72     * Supports Parcelable
73     */
74    @Override
75    public int describeContents() {
76        return 0;
77    }
78
79    /**
80     * Supports Parcelable
81     */
82    public ListParams(Parcel in) {
83        mLimit = in.readInt();
84        mUseNetwork = in.readInt() != 0;
85    }
86
87    /**
88     * Return a serialized String for this ListParams.
89     */
90    public synchronized String serialize() {
91        JSONObject json = new JSONObject();
92        try {
93            json.put(LIMIT_KEY, mLimit);
94            json.put(USE_NETWORK_KEY, mUseNetwork);
95        } catch (JSONException e) {
96            LogUtils.wtf(LOG_TAG, e, "Could not serialize ListParams");
97        }
98        return json.toString();
99    }
100
101    /**
102     * Create a new instance of an ListParams object using a serialized instance created previously
103     * using {@link #serialize()}. This returns null if the serialized instance was invalid or does
104     * not represent a valid parameter object.
105     *
106     * @param serializedParams
107     * @return
108     */
109    public static ListParams newinstance(String serializedParams) {
110        // This method is a wrapper to check for errors and exceptions and return back a null
111        // in cases something breaks.
112        JSONObject json = null;
113        try {
114            json = new JSONObject(serializedParams);
115            final int limit = json.getInt(LIMIT_KEY);
116            final boolean useNetwork = json.getBoolean(USE_NETWORK_KEY);
117            return new ListParams(limit, useNetwork);
118        } catch (JSONException e) {
119            LogUtils.wtf(LOG_TAG, e, "Could not create an params object from this input: \""
120                    + serializedParams);
121            return null;
122        }
123    }
124
125
126
127}