1 /* <lambda>null2 * Copyright (C) 2024 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.util.DisplayMetrics 20 import android.view.animation.Interpolator 21 import com.android.app.animation.Interpolators 22 import com.android.systemui.util.dpToPx 23 24 private const val MAX_SCALE_DELTA_DP = 48 25 26 /** Create a [BackAnimationSpec] from [displayMetrics] and design specs. */ 27 fun BackAnimationSpec.Companion.createBottomsheetAnimationSpec( 28 displayMetricsProvider: () -> DisplayMetrics, 29 scaleEasing: Interpolator = Interpolators.BACK_GESTURE, 30 ): BackAnimationSpec { 31 return BackAnimationSpec { backEvent, _, result -> 32 val displayMetrics = displayMetricsProvider() 33 val screenWidthPx = displayMetrics.widthPixels 34 val minScale = 1 - MAX_SCALE_DELTA_DP.dpToPx(displayMetrics) / screenWidthPx 35 val progressX = backEvent.progress 36 val ratioScale = scaleEasing.getInterpolation(progressX) 37 result.apply { 38 scale = 1f - ratioScale * (1f - minScale) 39 scalePivotPosition = ScalePivotPosition.BOTTOM_CENTER 40 } 41 } 42 } 43