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 17 package com.android.quicksearchbox; 18 19 import com.google.common.annotations.VisibleForTesting; 20 21 import 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 */ 28 public 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