Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9500ceb5 authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

Remove unlaunched ENABLE_UNFOLD_STATUS_BAR_ANIMATIONS flag

This flag was introduced to test enabling/disabling an unfold animation,
but isn't launched and isn't relevant anymore.

Bug: 265764985
Flag: EXEMPT refactor
Test: verify status bar still works on fold & unfold
Test: atest PhoneStatusBarViewControllerTest
Change-Id: Id158be7014ccb237b69d4384a2767323c9b7ba14
parent 838177fa
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -218,7 +218,6 @@ filegroup {
        "tests/src/**/systemui/statusbar/phone/PhoneStatusBarViewControllerTest.kt",
        "tests/src/**/systemui/statusbar/phone/PhoneStatusBarViewTest.kt",
        "tests/src/**/systemui/statusbar/phone/StatusBarBoundsProviderTest.kt",
        "tests/src/**/systemui/statusbar/phone/StatusBarMoveFromCenterAnimationControllerTest.kt",
        "tests/src/**/systemui/statusbar/pipeline/airplane/ui/viewmodel/AirplaneModeViewModelImplTest.kt",
        "tests/src/**/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryKairosAdapterTest.kt",
        "tests/src/**/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt",
+0 −5
Original line number Diff line number Diff line
@@ -263,11 +263,6 @@ object Flags {
    @JvmField
    val ENABLE_DARK_VIGNETTE_WHEN_FOLDING = unreleasedFlag("enable_dark_vignette_when_folding")

    // TODO(b/265764985): Tracking Bug
    @Keep
    @JvmField
    val ENABLE_UNFOLD_STATUS_BAR_ANIMATIONS = unreleasedFlag("enable_unfold_status_bar_animations")

    // TODO(b/316157842): Tracking Bug
    // Adds extra delay to notifications measure
    @Keep
+0 −74
Original line number Diff line number Diff line
@@ -16,21 +16,16 @@
package com.android.systemui.statusbar.phone

import android.app.StatusBarManager.WINDOW_STATUS_BAR
import android.graphics.Point
import android.util.Log
import android.view.Display.DEFAULT_DISPLAY
import android.view.InputDevice
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.view.ViewTreeObserver
import androidx.annotation.VisibleForTesting
import com.android.systemui.Flags
import com.android.systemui.Gefingerpoken
import com.android.systemui.battery.BatteryMeterView
import com.android.systemui.dagger.qualifiers.DisplaySpecific
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags.ENABLE_UNFOLD_STATUS_BAR_ANIMATIONS
import com.android.systemui.plugins.DarkIconDispatcher
import com.android.systemui.res.R
import com.android.systemui.scene.shared.flag.SceneContainerFlag
@@ -45,14 +40,12 @@ import com.android.systemui.shade.display.StatusBarTouchShadeDisplayPolicy
import com.android.systemui.shade.domain.interactor.PanelExpansionInteractor
import com.android.systemui.shade.domain.interactor.ShadeModeInteractor
import com.android.systemui.shade.shared.flag.ShadeWindowGoesAround
import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator
import com.android.systemui.statusbar.core.StatusBarConnectedDisplays
import com.android.systemui.statusbar.data.repository.StatusBarConfigurationControllerStore
import com.android.systemui.statusbar.data.repository.StatusBarContentInsetsProviderStore
import com.android.systemui.statusbar.policy.Clock
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.statusbar.window.StatusBarWindowStateController
import com.android.systemui.unfold.SysUIUnfoldComponent
import com.android.systemui.unfold.UNFOLD_STATUS_BAR
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider
import com.android.systemui.user.ui.viewmodel.StatusBarUserChipViewModel
@@ -81,7 +74,6 @@ private constructor(
    private val statusBarLongPressGestureDetector: Provider<StatusBarLongPressGestureDetector>,
    private val windowRootView: Provider<WindowRootView>,
    private val shadeLogger: ShadeLogger,
    private val moveFromCenterAnimationController: StatusBarMoveFromCenterAnimationController?,
    private val userChipViewModel: StatusBarUserChipViewModel,
    private val viewUtil: ViewUtil,
    private val configurationController: ConfigurationController,
@@ -157,31 +149,6 @@ private constructor(

        progressProvider?.setReadyToHandleTransition(true)
        configurationController.addCallback(configurationListener)

        if (moveFromCenterAnimationController == null) return

        val statusBarLeftSide: View =
            mView.requireViewById(R.id.status_bar_start_side_except_heads_up)
        val systemIconArea: ViewGroup = mView.requireViewById(R.id.status_bar_end_side_content)

        val viewsToAnimate = arrayOf(statusBarLeftSide, systemIconArea)

        mView.viewTreeObserver.addOnPreDrawListener(
            object : ViewTreeObserver.OnPreDrawListener {
                override fun onPreDraw(): Boolean {
                    moveFromCenterAnimationController.onViewsReady(viewsToAnimate)
                    mView.viewTreeObserver.removeOnPreDrawListener(this)
                    return true
                }
            }
        )

        mView.addOnLayoutChangeListener { _, left, _, right, _, oldLeft, _, oldRight, _ ->
            val widthChanged = right - left != oldRight - oldLeft
            if (widthChanged) {
                moveFromCenterAnimationController.onStatusBarWidthChanged()
            }
        }
    }

    private fun addCursorSupportToIconContainers() {
@@ -218,7 +185,6 @@ private constructor(
        startSideContainer.setOnHoverListener(null)
        endSideContainer.setOnHoverListener(null)
        progressProvider?.setReadyToHandleTransition(false)
        moveFromCenterAnimationController?.onViewDetached()
        configurationController.removeCallback(configurationListener)
    }

@@ -355,43 +321,11 @@ private constructor(
        }
    }

    class StatusBarViewsCenterProvider : UnfoldMoveFromCenterAnimator.ViewCenterProvider {
        override fun getViewCenter(view: View, outPoint: Point) =
            when (view.id) {
                R.id.status_bar_start_side_except_heads_up -> {
                    // items aligned to the start, return start center point
                    getViewEdgeCenter(view, outPoint, isStart = true)
                }
                R.id.status_bar_end_side_content -> {
                    // items aligned to the end, return end center point
                    getViewEdgeCenter(view, outPoint, isStart = false)
                }
                else -> super.getViewCenter(view, outPoint)
            }

        /** Returns start or end (based on [isStart]) center point of the view */
        private fun getViewEdgeCenter(view: View, outPoint: Point, isStart: Boolean) {
            val isRtl = view.resources.configuration.layoutDirection == View.LAYOUT_DIRECTION_RTL
            val isLeftEdge = isRtl xor isStart

            val viewLocation = IntArray(2)
            view.getLocationOnScreen(viewLocation)

            val viewX = viewLocation[0]
            val viewY = viewLocation[1]

            outPoint.x = viewX + if (isLeftEdge) view.height / 2 else view.width - view.height / 2
            outPoint.y = viewY + view.height / 2
        }
    }

    class Factory
    @Inject
    constructor(
        private val unfoldComponent: Optional<SysUIUnfoldComponent>,
        @Named(UNFOLD_STATUS_BAR)
        private val progressProvider: Optional<ScopedUnfoldTransitionProgressProvider>,
        private val featureFlags: FeatureFlags,
        private val userChipViewModel: StatusBarUserChipViewModel,
        private val centralSurfaces: CentralSurfaces,
        private val statusBarWindowStateController: StatusBarWindowStateController,
@@ -412,13 +346,6 @@ private constructor(
        private val lazyShadeDisplaysRepository: Lazy<ShadeDisplaysRepository>,
    ) {
        fun create(view: PhoneStatusBarView): PhoneStatusBarViewController {
            val statusBarMoveFromCenterAnimationController =
                if (featureFlags.isEnabled(ENABLE_UNFOLD_STATUS_BAR_ANIMATIONS)) {
                    unfoldComponent.getOrNull()?.getStatusBarMoveFromCenterAnimationController()
                } else {
                    null
                }

            val configurationController =
                if (StatusBarConnectedDisplays.isEnabled) {
                    statusBarConfigurationControllerStore.forDisplay(view.context.displayId)
@@ -442,7 +369,6 @@ private constructor(
                statusBarLongPressGestureDetector,
                windowRootView,
                shadeLogger,
                statusBarMoveFromCenterAnimationController,
                userChipViewModel,
                viewUtil,
                configurationController,
+0 −105
Original line number Diff line number Diff line
/*
 * Copyright (C) 2021 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.phone

import android.view.View
import android.view.WindowManager
import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator
import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator.AlphaProvider
import com.android.systemui.statusbar.phone.PhoneStatusBarViewController.StatusBarViewsCenterProvider
import com.android.systemui.unfold.SysUIUnfoldScope
import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
import com.android.systemui.unfold.util.CurrentActivityTypeProvider
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider
import javax.inject.Inject
import kotlin.math.max

@SysUIUnfoldScope
class StatusBarMoveFromCenterAnimationController @Inject constructor(
    private val progressProvider: ScopedUnfoldTransitionProgressProvider,
    private val currentActivityTypeProvider: CurrentActivityTypeProvider,
    windowManager: WindowManager
) {

    // Whether we're on home activity. Updated only when the animation starts.
    private var isOnHomeActivity: Boolean? = null

    private val transitionListener = TransitionListener()
    private val moveFromCenterAnimator = UnfoldMoveFromCenterAnimator(
        windowManager,
        viewCenterProvider = StatusBarViewsCenterProvider(),
        alphaProvider = StatusBarIconsAlphaProvider()
    )

    fun onViewsReady(viewsToAnimate: Array<View>) {
        moveFromCenterAnimator.updateDisplayProperties()

        viewsToAnimate.forEach {
            moveFromCenterAnimator.registerViewForAnimation(it)
        }

        progressProvider.addCallback(transitionListener)
    }

    fun onViewDetached() {
        progressProvider.removeCallback(transitionListener)
        moveFromCenterAnimator.clearRegisteredViews()
    }

    fun onStatusBarWidthChanged() {
        moveFromCenterAnimator.updateDisplayProperties()
        moveFromCenterAnimator.updateViewPositions()
    }

    private inner class TransitionListener : TransitionProgressListener {
        override fun onTransitionStarted() {
            isOnHomeActivity = currentActivityTypeProvider.isHomeActivity
        }

        override fun onTransitionProgress(progress: Float) {
            moveFromCenterAnimator.onTransitionProgress(progress)
        }

        override fun onTransitionFinished() {
            // Reset translations when transition is stopped/cancelled
            // (e.g. the transition could be cancelled mid-way when rotating the screen)
            moveFromCenterAnimator.onTransitionProgress(1f)
            isOnHomeActivity = null
        }
    }


    /**
     * In certain cases, an alpha is applied based on the progress.
     *
     * This mainly happens to hide the statusbar during the unfold animation while on apps, as the
     * bounds of the app "collapse" to the center, but the statusbar doesn't.
     * While on launcher, this alpha is not applied.
     */
    private inner class StatusBarIconsAlphaProvider : AlphaProvider {
        override fun getAlpha(progress: Float): Float {
            if (isOnHomeActivity == true) {
                return 1.0f
            }
            return max(
                0f,
                (progress - ICONS_START_APPEARING_PROGRESS) / (1 - ICONS_START_APPEARING_PROGRESS)
            )
        }
    }
}

private const val ICONS_START_APPEARING_PROGRESS = 0.75F
+0 −3
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import com.android.systemui.CoreStartable
import com.android.systemui.Flags.unfoldLatencyTrackingFix
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.shade.NotificationPanelUnfoldAnimationController
import com.android.systemui.statusbar.phone.StatusBarMoveFromCenterAnimationController
import com.android.systemui.unfold.dagger.NaturalRotation
import com.android.systemui.unfold.dagger.UnfoldBg
import com.android.systemui.unfold.domain.interactor.DisplaySwitchTrackingInteractor
@@ -161,8 +160,6 @@ interface SysUIUnfoldComponent {

    fun getKeyguardUnfoldTransition(): KeyguardUnfoldTransition

    fun getStatusBarMoveFromCenterAnimationController(): StatusBarMoveFromCenterAnimationController

    fun getNotificationPanelUnfoldAnimationController(): NotificationPanelUnfoldAnimationController

    fun getFoldAodAnimationController(): FoldAodAnimationController
Loading