blob: 07e8b9fe31232ae30628e198c22f038f3c766f6b [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.systemui.shade
import android.view.MotionEvent
import com.android.systemui.dump.DumpsysTableLogger
import com.android.systemui.dump.Row
import com.android.systemui.util.collection.RingBuffer
import java.text.SimpleDateFormat
import java.util.Locale
/** Container for storing information about [MotionEvent.ACTION_DOWN] on
* [NotificationPanelViewController].
*
* This will be used in a dump to log the latest recorded down events.
*
* @see NotificationPanelViewController.initDownStates
*/
class NPVCDownEventState private constructor(
private var timeStamp: Long = 0,
private var x: Float = 0f,
private var y: Float = 0f,
private var qsTouchAboveFalsingThreshold: Boolean = false,
private var dozing: Boolean = false,
private var collapsed: Boolean = false,
private var canCollapseOnQQS: Boolean = false,
private var listenForHeadsUp: Boolean = false,
private var allowExpandForSmallExpansion: Boolean = false,
private var touchSlopExceededBeforeDown: Boolean = false,
private var lastEventSynthesized: Boolean = false
) {
/**
* List of [String] to be used as a [Row] with [DumpsysTableLogger].
*/
val asStringList: List<String> by lazy {
listOf(
DATE_FORMAT.format(timeStamp),
x.toString(),
y.toString(),
qsTouchAboveFalsingThreshold.toString(),
dozing.toString(),
collapsed.toString(),
canCollapseOnQQS.toString(),
listenForHeadsUp.toString(),
allowExpandForSmallExpansion.toString(),
touchSlopExceededBeforeDown.toString(),
lastEventSynthesized.toString()
)
}
/**
* [RingBuffer] to store [NPVCDownEventState]. After the buffer is full, it will recycle old
* events.
*
* Do not use [append] to add new elements. Instead use [insert], as it will recycle if
* necessary.
*/
class Buffer(capacity: Int) {
private val buffer = RingBuffer(capacity) { NPVCDownEventState() }
/**
* Insert a new element in the buffer.
*/
fun insert(
timeStamp: Long,
x: Float,
y: Float,
qsTouchAboveFalsingThreshold: Boolean,
dozing: Boolean,
collapsed: Boolean,
canCollapseOnQQS: Boolean,
listenForHeadsUp: Boolean,
allowExpandForSmallExpansion: Boolean,
touchSlopExceededBeforeDown: Boolean,
lastEventSynthesized: Boolean
) {
buffer.advance().apply {
this.timeStamp = timeStamp
this.x = x
this.y = y
this.qsTouchAboveFalsingThreshold = qsTouchAboveFalsingThreshold
this.dozing = dozing
this.collapsed = collapsed
this.canCollapseOnQQS = canCollapseOnQQS
this.listenForHeadsUp = listenForHeadsUp
this.allowExpandForSmallExpansion = allowExpandForSmallExpansion
this.touchSlopExceededBeforeDown = touchSlopExceededBeforeDown
this.lastEventSynthesized = lastEventSynthesized
}
}
/**
* Returns the content of the buffer (sorted from latest to newest).
*
* @see NPVCDownEventState.asStringList
*/
fun toList(): List<Row> {
return buffer.asSequence().map { it.asStringList }.toList()
}
}
companion object {
/**
* Headers for dumping a table using [DumpsysTableLogger].
*/
@JvmField
val TABLE_HEADERS = listOf(
"Timestamp",
"X",
"Y",
"QSTouchAboveFalsingThreshold",
"Dozing",
"Collapsed",
"CanCollapseOnQQS",
"ListenForHeadsUp",
"AllowExpandForSmallExpansion",
"TouchSlopExceededBeforeDown",
"LastEventSynthesized"
)
}
}
private val DATE_FORMAT = SimpleDateFormat("MM-dd HH:mm:ss.SSS", Locale.US)