blob: bc9b5f2bd7bfadcb40c3356010ee48dce2311843 [file] [log] [blame]
/*
* Copyright (C) 2022 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 android.content.ComponentName
import android.content.Intent
import com.google.common.annotations.VisibleForTesting
/**
* 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.
*/
class SuggestionData(override val suggestionSource: Source?) : Suggestion {
private var mFormat: String? = null
private var mText1: String? = null
private var mText2: String? = null
private var mText2Url: String? = null
private var mIcon1: String? = null
private var mIcon2: String? = null
private var mShortcutId: String? = null
override var isSpinnerWhileRefreshing = false
private set
private var mIntentAction: String? = null
private var mIntentData: String? = null
var intentExtraData: String? = null
private set
private var mSuggestionQuery: String? = null
private var mLogType: String? = null
override var isSuggestionShortcut = false
private set
override var isHistorySuggestion = false
private set
private var mExtras: SuggestionExtras? = null
override val suggestionFormat: String
get() = mFormat!!
override val suggestionText1: String
get() = mText1!!
override val suggestionText2: String
get() = mText2!!
override val suggestionText2Url: String
get() = mText2Url!!
override val suggestionIcon1: String
get() = mIcon1!!
override val suggestionIcon2: String
get() = mIcon2!!
override val shortcutId: String
get() = mShortcutId!!
override val suggestionIntentAction: String?
get() = mIntentAction ?: suggestionSource?.defaultIntentAction
override val suggestionIntentComponent: ComponentName?
get() = suggestionSource?.intentComponent
override val suggestionIntentDataString: String
get() = mIntentData!!
override val suggestionIntentExtraData: String
get() = intentExtraData!!
override val suggestionQuery: String
get() = mSuggestionQuery!!
override val suggestionLogType: String
get() = mLogType!!
override val isWebSearchSuggestion: Boolean
get() = Intent.ACTION_WEB_SEARCH.equals(suggestionIntentAction)
@VisibleForTesting
fun setFormat(format: String?): SuggestionData {
mFormat = format
return this
}
@VisibleForTesting
fun setText1(text1: String?): SuggestionData {
mText1 = text1
return this
}
@VisibleForTesting
fun setText2(text2: String?): SuggestionData {
mText2 = text2
return this
}
@VisibleForTesting
fun setText2Url(text2Url: String?): SuggestionData {
mText2Url = text2Url
return this
}
@VisibleForTesting
fun setIcon1(icon1: String?): SuggestionData {
mIcon1 = icon1
return this
}
@VisibleForTesting
fun setIcon2(icon2: String?): SuggestionData {
mIcon2 = icon2
return this
}
@VisibleForTesting
fun setIntentAction(intentAction: String?): SuggestionData {
mIntentAction = intentAction
return this
}
@VisibleForTesting
fun setIntentData(intentData: String?): SuggestionData {
mIntentData = intentData
return this
}
@VisibleForTesting
fun setIntentExtraData(intentExtraData: String?): SuggestionData {
this.intentExtraData = intentExtraData
return this
}
@VisibleForTesting
fun setSuggestionQuery(suggestionQuery: String?): SuggestionData {
mSuggestionQuery = suggestionQuery
return this
}
@VisibleForTesting
fun setShortcutId(shortcutId: String?): SuggestionData {
mShortcutId = shortcutId
return this
}
@VisibleForTesting
fun setSpinnerWhileRefreshing(spinnerWhileRefreshing: Boolean): SuggestionData {
isSpinnerWhileRefreshing = spinnerWhileRefreshing
return this
}
@VisibleForTesting
fun setSuggestionLogType(logType: String?): SuggestionData {
mLogType = logType
return this
}
@VisibleForTesting
fun setIsShortcut(isShortcut: Boolean): SuggestionData {
isSuggestionShortcut = isShortcut
return this
}
@VisibleForTesting
fun setIsHistory(isHistory: Boolean): SuggestionData {
isHistorySuggestion = isHistory
return this
}
@Override
override fun hashCode(): Int {
val prime = 31
var result = 1
result = prime * result + if (mFormat == null) 0 else mFormat.hashCode()
result = prime * result + if (mIcon1 == null) 0 else mIcon1.hashCode()
result = prime * result + if (mIcon2 == null) 0 else mIcon2.hashCode()
result = prime * result + if (mIntentAction == null) 0 else mIntentAction.hashCode()
result = prime * result + if (mIntentData == null) 0 else mIntentData.hashCode()
result = prime * result + if (intentExtraData == null) 0 else intentExtraData.hashCode()
result = prime * result + if (mLogType == null) 0 else mLogType.hashCode()
result = prime * result + if (mShortcutId == null) 0 else mShortcutId.hashCode()
result = prime * result + if (suggestionSource == null) 0 else suggestionSource.hashCode()
result = prime * result + if (isSpinnerWhileRefreshing) 1231 else 1237
result = prime * result + if (mSuggestionQuery == null) 0 else mSuggestionQuery.hashCode()
result = prime * result + if (mText1 == null) 0 else mText1.hashCode()
result = prime * result + if (mText2 == null) 0 else mText2.hashCode()
return result
}
@Override
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other == null) return false
if (this::class !== other::class) return false
val suggestionData = other as SuggestionData
if (mFormat == null) {
if (suggestionData.mFormat != null) return false
} else if (!mFormat.equals(suggestionData.mFormat)) return false
if (mIcon1 == null) {
if (suggestionData.mIcon1 != null) return false
} else if (!mIcon1.equals(suggestionData.mIcon1)) return false
if (mIcon2 == null) {
if (suggestionData.mIcon2 != null) return false
} else if (!mIcon2.equals(suggestionData.mIcon2)) return false
if (mIntentAction == null) {
if (suggestionData.mIntentAction != null) return false
} else if (!mIntentAction.equals(suggestionData.mIntentAction)) return false
if (mIntentData == null) {
if (suggestionData.mIntentData != null) return false
} else if (!mIntentData.equals(suggestionData.mIntentData)) return false
if (intentExtraData == null) {
if (suggestionData.intentExtraData != null) return false
} else if (!intentExtraData.equals(suggestionData.intentExtraData)) return false
if (mLogType == null) {
if (suggestionData.mLogType != null) return false
} else if (!mLogType.equals(suggestionData.mLogType)) return false
if (mShortcutId == null) {
if (suggestionData.mShortcutId != null) return false
} else if (!mShortcutId.equals(suggestionData.mShortcutId)) return false
if (suggestionSource == null) {
if (suggestionData.suggestionSource != null) return false
} else if (!suggestionSource.equals(suggestionData.suggestionSource)) return false
if (isSpinnerWhileRefreshing != suggestionData.isSpinnerWhileRefreshing) return false
if (mSuggestionQuery == null) {
if (suggestionData.mSuggestionQuery != null) return false
} else if (!mSuggestionQuery.equals(suggestionData.mSuggestionQuery)) return false
if (mText1 == null) {
if (suggestionData.mText1 != null) return false
} else if (!mText1.equals(suggestionData.mText1)) return false
if (mText2 == null) {
if (suggestionData.mText2 != null) return false
} else if (!mText2.equals(suggestionData.mText2)) return false
return true
}
/**
* Returns a string representation of the contents of this SuggestionData,
* for debugging purposes.
*/
@Override
override fun toString(): String {
val builder: StringBuilder = StringBuilder("SuggestionData(")
appendField(builder, "source", suggestionSource!!.name)
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 fun appendField(builder: StringBuilder, name: String, value: String?) {
if (value != null) {
builder.append(",").append(name).append("=").append(value)
}
}
@set:VisibleForTesting
override var extras: SuggestionExtras?
get() = mExtras
set(extras) {
mExtras = extras
}
}