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
This commit is contained in:
@@ -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
|
||||
if (currentRotation != newRotation) {
|
||||
currentRotation = newRotation
|
||||
scrimView?.revealEffect = createLightRevealEffect()
|
||||
root?.relayout(getLayoutParams())
|
||||
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 :
|
||||
|
||||
Reference in New Issue
Block a user