/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.quicksearchbox; import com.google.common.annotations.VisibleForTesting; import android.content.ComponentName; import android.content.Intent; /** * Holds data for each suggest item including the display data and how to launch the result. * Used for passing from the provider to the suggest cursor. */ public class SuggestionData implements Suggestion { private final Source mSource; private String mFormat; private String mText1; private String mText2; private String mText2Url; private String mIcon1; private String mIcon2; private String mShortcutId; private boolean mSpinnerWhileRefreshing; private String mIntentAction; private String mIntentData; private String mIntentExtraData; private String mSuggestionQuery; private String mLogType; private boolean mIsShortcut; private boolean mIsHistory; private SuggestionExtras mExtras; public SuggestionData(Source source) { mSource = source; } public Source getSuggestionSource() { return mSource; } public String getSuggestionFormat() { return mFormat; } public String getSuggestionText1() { return mText1; } public String getSuggestionText2() { return mText2; } public String getSuggestionText2Url() { return mText2Url; } public String getSuggestionIcon1() { return mIcon1; } public String getSuggestionIcon2() { return mIcon2; } public boolean isSpinnerWhileRefreshing() { return mSpinnerWhileRefreshing; } public String getIntentExtraData() { return mIntentExtraData; } public String getShortcutId() { return mShortcutId; } public String getSuggestionIntentAction() { if (mIntentAction != null) return mIntentAction; return mSource.getDefaultIntentAction(); } public ComponentName getSuggestionIntentComponent() { return mSource.getIntentComponent(); } public String getSuggestionIntentDataString() { return mIntentData; } public String getSuggestionIntentExtraData() { return mIntentExtraData; } public String getSuggestionQuery() { return mSuggestionQuery; } public String getSuggestionLogType() { return mLogType; } public boolean isSuggestionShortcut() { return mIsShortcut; } public boolean isWebSearchSuggestion() { return Intent.ACTION_WEB_SEARCH.equals(getSuggestionIntentAction()); } public boolean isHistorySuggestion() { return mIsHistory; } @VisibleForTesting public SuggestionData setFormat(String format) { mFormat = format; return this; } @VisibleForTesting public SuggestionData setText1(String text1) { mText1 = text1; return this; } @VisibleForTesting public SuggestionData setText2(String text2) { mText2 = text2; return this; } @VisibleForTesting public SuggestionData setText2Url(String text2Url) { mText2Url = text2Url; return this; } @VisibleForTesting public SuggestionData setIcon1(String icon1) { mIcon1 = icon1; return this; } @VisibleForTesting public SuggestionData setIcon2(String icon2) { mIcon2 = icon2; return this; } @VisibleForTesting public SuggestionData setIntentAction(String intentAction) { mIntentAction = intentAction; return this; } @VisibleForTesting public SuggestionData setIntentData(String intentData) { mIntentData = intentData; return this; } @VisibleForTesting public SuggestionData setIntentExtraData(String intentExtraData) { mIntentExtraData = intentExtraData; return this; } @VisibleForTesting public SuggestionData setSuggestionQuery(String suggestionQuery) { mSuggestionQuery = suggestionQuery; return this; } @VisibleForTesting public SuggestionData setShortcutId(String shortcutId) { mShortcutId = shortcutId; return this; } @VisibleForTesting public SuggestionData setSpinnerWhileRefreshing(boolean spinnerWhileRefreshing) { mSpinnerWhileRefreshing = spinnerWhileRefreshing; return this; } @VisibleForTesting public SuggestionData setSuggestionLogType(String logType) { mLogType = logType; return this; } @VisibleForTesting public SuggestionData setIsShortcut(boolean isShortcut) { mIsShortcut = isShortcut; return this; } @VisibleForTesting public SuggestionData setIsHistory(boolean isHistory) { mIsHistory = isHistory; return this; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((mFormat == null) ? 0 : mFormat.hashCode()); result = prime * result + ((mIcon1 == null) ? 0 : mIcon1.hashCode()); result = prime * result + ((mIcon2 == null) ? 0 : mIcon2.hashCode()); result = prime * result + ((mIntentAction == null) ? 0 : mIntentAction.hashCode()); result = prime * result + ((mIntentData == null) ? 0 : mIntentData.hashCode()); result = prime * result + ((mIntentExtraData == null) ? 0 : mIntentExtraData.hashCode()); result = prime * result + ((mLogType == null) ? 0 : mLogType.hashCode()); result = prime * result + ((mShortcutId == null) ? 0 : mShortcutId.hashCode()); result = prime * result + ((mSource == null) ? 0 : mSource.hashCode()); result = prime * result + (mSpinnerWhileRefreshing ? 1231 : 1237); result = prime * result + ((mSuggestionQuery == null) ? 0 : mSuggestionQuery.hashCode()); result = prime * result + ((mText1 == null) ? 0 : mText1.hashCode()); result = prime * result + ((mText2 == null) ? 0 : mText2.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; SuggestionData other = (SuggestionData)obj; if (mFormat == null) { if (other.mFormat != null) return false; } else if (!mFormat.equals(other.mFormat)) return false; if (mIcon1 == null) { if (other.mIcon1 != null) return false; } else if (!mIcon1.equals(other.mIcon1)) return false; if (mIcon2 == null) { if (other.mIcon2 != null) return false; } else if (!mIcon2.equals(other.mIcon2)) return false; if (mIntentAction == null) { if (other.mIntentAction != null) return false; } else if (!mIntentAction.equals(other.mIntentAction)) return false; if (mIntentData == null) { if (other.mIntentData != null) return false; } else if (!mIntentData.equals(other.mIntentData)) return false; if (mIntentExtraData == null) { if (other.mIntentExtraData != null) return false; } else if (!mIntentExtraData.equals(other.mIntentExtraData)) return false; if (mLogType == null) { if (other.mLogType != null) return false; } else if (!mLogType.equals(other.mLogType)) return false; if (mShortcutId == null) { if (other.mShortcutId != null) return false; } else if (!mShortcutId.equals(other.mShortcutId)) return false; if (mSource == null) { if (other.mSource != null) return false; } else if (!mSource.equals(other.mSource)) return false; if (mSpinnerWhileRefreshing != other.mSpinnerWhileRefreshing) return false; if (mSuggestionQuery == null) { if (other.mSuggestionQuery != null) return false; } else if (!mSuggestionQuery.equals(other.mSuggestionQuery)) return false; if (mText1 == null) { if (other.mText1 != null) return false; } else if (!mText1.equals(other.mText1)) return false; if (mText2 == null) { if (other.mText2 != null) return false; } else if (!mText2.equals(other.mText2)) return false; return true; } /** * Returns a string representation of the contents of this SuggestionData, * for debugging purposes. */ @Override public String toString() { StringBuilder builder = new StringBuilder("SuggestionData("); appendField(builder, "source", mSource.getName()); appendField(builder, "text1", mText1); appendField(builder, "intentAction", mIntentAction); appendField(builder, "intentData", mIntentData); appendField(builder, "query", mSuggestionQuery); appendField(builder, "shortcutid", mShortcutId); appendField(builder, "logtype", mLogType); return builder.toString(); } private void appendField(StringBuilder builder, String name, String value) { if (value != null) { builder.append(",").append(name).append("=").append(value); } } @VisibleForTesting public void setExtras(SuggestionExtras extras) { mExtras = extras; } public SuggestionExtras getExtras() { return mExtras; } }