1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
/*
* 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.statusbar.disableflags
import com.android.systemui.statusbar.CommandQueue
/**
* Tracks the relevant DISABLE_* flags provided in [mask1] and [mask2] and sets [isDisabled] based
* on those masks. [callback] will be notified whenever [isDisabled] changes.
*
* Users are responsible for adding and removing this tracker from [CommandQueue] callbacks.
*/
class DisableStateTracker(
private val mask1: Int,
private val mask2: Int,
private val callback: Callback,
) : CommandQueue.Callbacks {
/**
* True if any of the bits in [mask1] or [mask2] are on for the current disable flags, and false
* otherwise.
*/
var isDisabled = false
private set(value) {
if (field == value) return
field = value
callback.onDisabledChanged()
}
private var displayId: Int? = null
/** Start tracking the disable flags and updating [isDisabled] accordingly. */
fun startTracking(commandQueue: CommandQueue, displayId: Int) {
// A view will only have its displayId once it's attached to a window, so we can only
// provide the displayId when we start tracking.
this.displayId = displayId
commandQueue.addCallback(this)
}
/**
* Stop tracking the disable flags.
*
* [isDisabled] will stay at the same value until we start tracking again.
*/
fun stopTracking(commandQueue: CommandQueue) {
this.displayId = null
commandQueue.removeCallback(this)
}
override fun disable(displayId: Int, state1: Int, state2: Int, animate: Boolean) {
if (this.displayId == null || displayId != this.displayId) {
return
}
isDisabled = state1 and mask1 != 0 || state2 and mask2 != 0
}
/** Callback triggered whenever the value of [isDisabled] changes. */
fun interface Callback {
fun onDisabledChanged()
}
}
|