blob: a367b4e7fe0747f510b7a240a8455675c2a207aa [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.Context
import android.util.EventLog
import java.util.Random
import kotlin.text.StringBuilder
/** Logs events to [EventLog]. */
class EventLogLogger(context: Context?, config: Config) : Logger {
private val mContext: Context?
protected val config: Config
private val mPackageName: String
private val mRandom: Random
protected val context: Context?
get() = mContext
protected val versionCode: Long
get() = QsbApplication.get(context).versionCode
@Override
override fun logStart(onCreateLatency: Int, latency: Int, intentSource: String?) {
// TODO: Add more info to startMethod
EventLogTags.writeQsbStart(
mPackageName,
versionCode.toInt(),
intentSource,
latency,
null,
null,
onCreateLatency
)
}
@Override
override fun logSuggestionClick(
suggestionId: Long,
suggestionCursor: SuggestionCursor?,
clickType: Int
) {
val suggestions = getSuggestions(suggestionCursor)
val numChars: Int = suggestionCursor!!.userQuery!!.length
EventLogTags.writeQsbClick(suggestionId, suggestions, null, numChars, clickType)
}
@Override
override fun logSearch(startMethod: Int, numChars: Int) {
EventLogTags.writeQsbSearch(null, startMethod, numChars)
}
@Override
override fun logVoiceSearch() {
EventLogTags.writeQsbVoiceSearch(null)
}
@Override
override fun logExit(suggestionCursor: SuggestionCursor?, numChars: Int) {
val suggestions = getSuggestions(suggestionCursor)
EventLogTags.writeQsbExit(suggestions, numChars)
}
@Override override fun logLatency(result: SourceResult?) {}
private fun getSuggestions(cursor: SuggestionCursor?): String {
val sb = StringBuilder()
val count = cursor?.count ?: 0
for (i in 0 until count) {
if (i > 0) sb.append(LIST_SEPARATOR)
cursor!!.moveTo(i)
val source: String? = cursor.suggestionSource?.name
var type: String? = cursor.suggestionLogType
if (type == null) type = ""
val shortcut = if (cursor.isSuggestionShortcut) "shortcut" else ""
sb.append(source).append(":").append(type).append(":").append(shortcut)
}
return sb.toString()
}
companion object {
private const val LIST_SEPARATOR = '|'
}
init {
mContext = context
this.config = config
mPackageName = mContext!!.getPackageName()
mRandom = Random()
}
}