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 com.android.systemui.animation.back
18 
19 import android.view.View
20 
21 /**
22  * This object that represents the transformation to apply to the target. The properties of this
23  * object are mutable for performance reasons (avoid recreating this object)
24  */
25 data class BackTransformation(
26     var translateX: Float = Float.NaN,
27     var translateY: Float = Float.NaN,
28     var scale: Float = Float.NaN,
29     var scalePivotPosition: ScalePivotPosition? = null,
30 )
31 
32 /** Enum that describes the location of the scale pivot position */
33 enum class ScalePivotPosition {
34     // more options may be added in the future
35     CENTER,
36     BOTTOM_CENTER;
37 
applyTonull38     fun applyTo(view: View) {
39         val pivotX =
40             when (this) {
41                 CENTER -> view.width / 2f
42                 BOTTOM_CENTER -> view.width / 2f
43             }
44         val pivotY =
45             when (this) {
46                 CENTER -> view.height / 2f
47                 BOTTOM_CENTER -> view.height.toFloat()
48             }
49         view.pivotX = pivotX
50         view.pivotY = pivotY
51     }
52 }
53 
54 /** Apply the transformation to the [targetView] */
applyTonull55 fun BackTransformation.applyTo(targetView: View) {
56     if (translateX.isFinite()) targetView.translationX = translateX
57     if (translateY.isFinite()) targetView.translationY = translateY
58     scalePivotPosition?.applyTo(targetView)
59     if (scale.isFinite()) {
60         targetView.scaleX = scale
61         targetView.scaleY = scale
62     }
63 }
64