SuggestionData.java revision 93bd2e70b8b08da1ec37fd0e990dac05551d2e90
1/*
2 * Copyright (C) 2009 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
17package com.android.quicksearchbox;
18
19import com.google.common.annotations.VisibleForTesting;
20
21import android.content.Intent;
22
23
24/**
25 * Holds data for each suggest item including the display data and how to launch the result.
26 * Used for passing from the provider to the suggest cursor.
27 */
28public class SuggestionData implements Suggestion {
29
30    private final Source mSource;
31    private String mFormat;
32    private String mText1;
33    private String mText2;
34    private String mText2Url;
35    private String mIcon1;
36    private String mIcon2;
37    private String mShortcutId;
38    private boolean mSpinnerWhileRefreshing;
39    private String mIntentAction;
40    private String mIntentData;
41    private String mIntentExtraData;
42    private String mSuggestionQuery;
43    private String mLogType;
44    private boolean mIsShortcut;
45
46    public SuggestionData(Source source) {
47        mSource = source;
48    }
49
50    public Source getSuggestionSource() {
51        return mSource;
52    }
53
54    public String getSuggestionFormat() {
55        return mFormat;
56    }
57
58    public String getSuggestionText1() {
59        return mText1;
60    }
61
62    public String getSuggestionText2() {
63        return mText2;
64    }
65
66    public String getSuggestionText2Url() {
67        return mText2Url;
68    }
69
70    public String getSuggestionIcon1() {
71        return mIcon1;
72    }
73
74    public String getSuggestionIcon2() {
75        return mIcon2;
76    }
77
78    public boolean isSpinnerWhileRefreshing() {
79        return mSpinnerWhileRefreshing;
80    }
81
82    public String getIntentExtraData() {
83        return mIntentExtraData;
84    }
85
86    public String getShortcutId() {
87        return mShortcutId;
88    }
89
90    public String getSuggestionIntentAction() {
91        if (mIntentAction != null) return mIntentAction;
92        return mSource.getDefaultIntentAction();
93    }
94
95    public String getSuggestionIntentDataString() {
96        return mIntentData;
97    }
98
99    public String getSuggestionIntentExtraData() {
100        return mIntentExtraData;
101    }
102
103    public String getSuggestionQuery() {
104        return mSuggestionQuery;
105    }
106
107    public String getSuggestionLogType() {
108        return mLogType;
109    }
110
111    public boolean isSuggestionShortcut() {
112        return mIsShortcut;
113    }
114
115    public boolean isWebSearchSuggestion() {
116        return Intent.ACTION_WEB_SEARCH.equals(getSuggestionIntentAction());
117    }
118
119    @VisibleForTesting
120    public SuggestionData setFormat(String format) {
121        mFormat = format;
122        return this;
123    }
124
125    @VisibleForTesting
126    public SuggestionData setText1(String text1) {
127        mText1 = text1;
128        return this;
129    }
130
131    @VisibleForTesting
132    public SuggestionData setText2(String text2) {
133        mText2 = text2;
134        return this;
135    }
136
137    @VisibleForTesting
138    public SuggestionData setText2Url(String text2Url) {
139        mText2Url = text2Url;
140        return this;
141    }
142
143    @VisibleForTesting
144    public SuggestionData setIcon1(String icon1) {
145        mIcon1 = icon1;
146        return this;
147    }
148
149    @VisibleForTesting
150    public SuggestionData setIcon2(String icon2) {
151        mIcon2 = icon2;
152        return this;
153    }
154
155    @VisibleForTesting
156    public SuggestionData setIntentAction(String intentAction) {
157        mIntentAction = intentAction;
158        return this;
159    }
160
161    @VisibleForTesting
162    public SuggestionData setIntentData(String intentData) {
163        mIntentData = intentData;
164        return this;
165    }
166
167    @VisibleForTesting
168    public SuggestionData setIntentExtraData(String intentExtraData) {
169        mIntentExtraData = intentExtraData;
170        return this;
171    }
172
173    @VisibleForTesting
174    public SuggestionData setSuggestionQuery(String suggestionQuery) {
175        mSuggestionQuery = suggestionQuery;
176        return this;
177    }
178
179    @VisibleForTesting
180    public SuggestionData setShortcutId(String shortcutId) {
181        mShortcutId = shortcutId;
182        return this;
183    }
184
185    @VisibleForTesting
186    public SuggestionData setSpinnerWhileRefreshing(boolean spinnerWhileRefreshing) {
187        mSpinnerWhileRefreshing = spinnerWhileRefreshing;
188        return this;
189    }
190
191    @VisibleForTesting
192    public SuggestionData setSuggestionLogType(String logType) {
193        mLogType = logType;
194        return this;
195    }
196
197    @VisibleForTesting
198    public SuggestionData setIsShortcut(boolean isShortcut) {
199        mIsShortcut = isShortcut;
200        return this;
201    }
202
203    @Override
204    public int hashCode() {
205        final int prime = 31;
206        int result = 1;
207        result = prime * result + ((mFormat == null) ? 0 : mFormat.hashCode());
208        result = prime * result + ((mIcon1 == null) ? 0 : mIcon1.hashCode());
209        result = prime * result + ((mIcon2 == null) ? 0 : mIcon2.hashCode());
210        result = prime * result + ((mIntentAction == null) ? 0 : mIntentAction.hashCode());
211        result = prime * result + ((mIntentData == null) ? 0 : mIntentData.hashCode());
212        result = prime * result + ((mIntentExtraData == null) ? 0 : mIntentExtraData.hashCode());
213        result = prime * result + ((mLogType == null) ? 0 : mLogType.hashCode());
214        result = prime * result + ((mShortcutId == null) ? 0 : mShortcutId.hashCode());
215        result = prime * result + ((mSource == null) ? 0 : mSource.hashCode());
216        result = prime * result + (mSpinnerWhileRefreshing ? 1231 : 1237);
217        result = prime * result + ((mSuggestionQuery == null) ? 0 : mSuggestionQuery.hashCode());
218        result = prime * result + ((mText1 == null) ? 0 : mText1.hashCode());
219        result = prime * result + ((mText2 == null) ? 0 : mText2.hashCode());
220        return result;
221    }
222
223    @Override
224    public boolean equals(Object obj) {
225        if (this == obj)
226            return true;
227        if (obj == null)
228            return false;
229        if (getClass() != obj.getClass())
230            return false;
231        SuggestionData other = (SuggestionData)obj;
232        if (mFormat == null) {
233            if (other.mFormat != null)
234                return false;
235        } else if (!mFormat.equals(other.mFormat))
236            return false;
237        if (mIcon1 == null) {
238            if (other.mIcon1 != null)
239                return false;
240        } else if (!mIcon1.equals(other.mIcon1))
241            return false;
242        if (mIcon2 == null) {
243            if (other.mIcon2 != null)
244                return false;
245        } else if (!mIcon2.equals(other.mIcon2))
246            return false;
247        if (mIntentAction == null) {
248            if (other.mIntentAction != null)
249                return false;
250        } else if (!mIntentAction.equals(other.mIntentAction))
251            return false;
252        if (mIntentData == null) {
253            if (other.mIntentData != null)
254                return false;
255        } else if (!mIntentData.equals(other.mIntentData))
256            return false;
257        if (mIntentExtraData == null) {
258            if (other.mIntentExtraData != null)
259                return false;
260        } else if (!mIntentExtraData.equals(other.mIntentExtraData))
261            return false;
262        if (mLogType == null) {
263            if (other.mLogType != null)
264                return false;
265        } else if (!mLogType.equals(other.mLogType))
266            return false;
267        if (mShortcutId == null) {
268            if (other.mShortcutId != null)
269                return false;
270        } else if (!mShortcutId.equals(other.mShortcutId))
271            return false;
272        if (mSource == null) {
273            if (other.mSource != null)
274                return false;
275        } else if (!mSource.equals(other.mSource))
276            return false;
277        if (mSpinnerWhileRefreshing != other.mSpinnerWhileRefreshing)
278            return false;
279        if (mSuggestionQuery == null) {
280            if (other.mSuggestionQuery != null)
281                return false;
282        } else if (!mSuggestionQuery.equals(other.mSuggestionQuery))
283            return false;
284        if (mText1 == null) {
285            if (other.mText1 != null)
286                return false;
287        } else if (!mText1.equals(other.mText1))
288            return false;
289        if (mText2 == null) {
290            if (other.mText2 != null)
291                return false;
292        } else if (!mText2.equals(other.mText2))
293            return false;
294        return true;
295    }
296
297    /**
298     * Returns a string representation of the contents of this SuggestionData,
299     * for debugging purposes.
300     */
301    @Override
302    public String toString() {
303        StringBuilder builder = new StringBuilder("SuggestionData(");
304        appendField(builder, "source", mSource.getName());
305        appendField(builder, "text1", mText1);
306        appendField(builder, "intentAction", mIntentAction);
307        appendField(builder, "intentData", mIntentData);
308        appendField(builder, "query", mSuggestionQuery);
309        appendField(builder, "shortcutid", mShortcutId);
310        appendField(builder, "logtype", mLogType);
311        return builder.toString();
312    }
313
314    private void appendField(StringBuilder builder, String name, String value) {
315        if (value != null) {
316            builder.append(",").append(name).append("=").append(value);
317        }
318    }
319
320}
321