1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.tools.flicker.config.pip
18 
19 import android.tools.flicker.config.AssertionTemplates
20 import android.tools.flicker.config.FlickerConfigEntry
21 import android.tools.flicker.config.ScenarioId
22 import android.tools.flicker.config.TransitionFilters
23 import android.tools.flicker.extractors.CujAdjust
24 import android.tools.flicker.extractors.TaggedCujTransitionMatcher
25 import android.tools.flicker.extractors.TaggedScenarioExtractorBuilder
26 import android.tools.io.Reader
27 import android.tools.traces.events.Cuj
28 import android.tools.traces.events.CujType
29 
30 val AppCloseToPip =
31     FlickerConfigEntry(
32         enabled = false,
33         scenarioId = ScenarioId("APP_CLOSE_TO_PIP"),
34         assertions = AssertionTemplates.APP_CLOSE_TO_PIP_ASSERTIONS,
35         extractor =
36             TaggedScenarioExtractorBuilder()
37                 .setTargetTag(CujType.CUJ_LAUNCHER_APP_CLOSE_TO_PIP)
38                 .setTransitionMatcher(
39                     TaggedCujTransitionMatcher(TransitionFilters.APP_CLOSE_TO_PIP_TRANSITION_FILTER)
40                 )
41                 .setAdjustCuj(
42                     object : CujAdjust {
adjustCujnull43                         override fun adjustCuj(cujEntry: Cuj, reader: Reader): Cuj {
44                             val cujTrace = reader.readCujTrace() ?: error("Missing CUJ trace")
45                             val closeToHomeCuj =
46                                 cujTrace.entries.firstOrNull {
47                                     it.cuj == CujType.CUJ_LAUNCHER_APP_CLOSE_TO_HOME &&
48                                         it.startTimestamp <= cujEntry.startTimestamp &&
49                                         cujEntry.startTimestamp <= it.endTimestamp
50                                 }
51 
52                             return if (closeToHomeCuj == null) {
53                                 cujEntry
54                             } else {
55                                 Cuj(
56                                     cujEntry.cuj,
57                                     closeToHomeCuj.startTimestamp,
58                                     cujEntry.endTimestamp,
59                                     cujEntry.canceled
60                                 )
61                             }
62                         }
63                     }
64                 )
65                 .build()
66     )
67