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

Commit 115e7e86 authored by Nicolo' Mazzucato's avatar Nicolo' Mazzucato
Browse files

Remove getRotation binder call on each fold/unfold

By registering with RotationWatcher, it is possible to avoid context.display.rotation binder call on each DisplayListener displayChanged callback.

Bug: 197515205
Test: Manual
Change-Id: I54240cb4c8495ee94a367d10840ee6794792b94b
parent 5479e1e0
Loading
Loading
Loading
Loading
+16 −21
Original line number Diff line number Diff line
@@ -22,11 +22,12 @@ import android.hardware.devicestate.DeviceStateManager
import android.hardware.devicestate.DeviceStateManager.FoldStateListener
import android.hardware.display.DisplayManager
import android.hardware.input.InputManager
import android.os.Handler
import android.os.Trace
import android.view.Choreographer
import android.view.Display
import android.view.DisplayInfo
import android.view.IRotationWatcher
import android.view.IWindowManager
import android.view.Surface
import android.view.SurfaceControl
import android.view.SurfaceControlViewHost
@@ -39,6 +40,7 @@ import com.android.systemui.statusbar.LightRevealEffect
import com.android.systemui.statusbar.LightRevealScrim
import com.android.systemui.statusbar.LinearLightRevealEffect
import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
import com.android.systemui.util.traceSection
import com.android.wm.shell.displayareahelper.DisplayAreaHelper
import java.util.Optional
import java.util.concurrent.Executor
@@ -55,12 +57,12 @@ constructor(
    private val unfoldTransitionProgressProvider: UnfoldTransitionProgressProvider,
    private val displayAreaHelper: Optional<DisplayAreaHelper>,
    @Main private val executor: Executor,
    @Main private val handler: Handler,
    @UiBackground private val backgroundExecutor: Executor
    @UiBackground private val backgroundExecutor: Executor,
    private val windowManagerInterface: IWindowManager
) {

    private val transitionListener = TransitionListener()
    private val displayListener = DisplayChangeListener()
    private val rotationWatcher = RotationWatcher()

    private lateinit var wwm: WindowlessWindowManager
    private lateinit var unfoldedDisplayInfo: DisplayInfo
@@ -76,6 +78,7 @@ constructor(
    fun init() {
        deviceStateManager.registerCallback(executor, FoldListener())
        unfoldTransitionProgressProvider.addCallback(transitionListener)
        windowManagerInterface.watchRotation(rotationWatcher, context.display.displayId)

        val containerBuilder =
            SurfaceControl.Builder(SurfaceSession())
@@ -97,9 +100,6 @@ constructor(
            }
        }

        displayManager.registerDisplayListener(
            displayListener, handler, DisplayManager.EVENT_FLAG_DISPLAY_CHANGED)

        // Get unfolded display size immediately as 'current display info' might be
        // not up-to-date during unfolding
        unfoldedDisplayInfo = getUnfoldedDisplayInfo()
@@ -180,7 +180,7 @@ constructor(
    private fun getLayoutParams(): WindowManager.LayoutParams {
        val params: WindowManager.LayoutParams = WindowManager.LayoutParams()

        val rotation = context.display!!.rotation
        val rotation = currentRotation
        val isNatural = rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180

        params.height =
@@ -243,20 +243,15 @@ constructor(
        }
    }

    private inner class DisplayChangeListener : DisplayManager.DisplayListener {

        override fun onDisplayChanged(displayId: Int) {
            val newRotation: Int = context.display!!.rotation
    private inner class RotationWatcher : IRotationWatcher.Stub() {
        override fun onRotationChanged(newRotation: Int) =
            traceSection("UnfoldLightRevealOverlayAnimation#onRotationChanged") {
                if (currentRotation != newRotation) {
                    currentRotation = newRotation
                    scrimView?.revealEffect = createLightRevealEffect()
                    root?.relayout(getLayoutParams())
                }
            }

        override fun onDisplayAdded(displayId: Int) {}

        override fun onDisplayRemoved(displayId: Int) {}
    }

    private inner class FoldListener :