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

Commit eeb66e41 authored by Tony Wickham's avatar Tony Wickham
Browse files

Cleanup taskbar+assistant interactions

- Always move the taskbar layer when voice interaction window visibility
  changes, to ensure we remove the temporary taskbar background in all
  cases (e.g. swipe to home)
- Move check to not draw taskbar background to the temporary view
  itself, so that it's at the proper layer when shown (e.g. during
  fulfillment on the home screen)
- Don't add view to window if it's already added (we already have this
  check for the removal case)

Test: Open an app, invoke Assistant, swipe home; Taskbar background is
removed; invoke and fulfill assistant from home screen, in app, in 3
button mode, and in gesture mode (all permutations)
Fixes: 236924161
Fixes: 240101132
Fixes: 235895444

Change-Id: I5958f1dbe14a6d190d3808014429f7f8146c9f96
parent 592d80dc
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -622,8 +622,10 @@ public class TaskbarActivityContext extends BaseTaskbarContext {

    /** Adds the given view to WindowManager with the provided LayoutParams (creates new window). */
    public void addWindowView(View view, WindowManager.LayoutParams windowLayoutParams) {
        if (!view.isAttachedToWindow()) {
            mWindowManager.addView(view, windowLayoutParams);
        }
    }

    /** Removes the given view from WindowManager. See {@link #addWindowView}. */
    public void removeWindowView(View view) {
+11 −6
Original line number Diff line number Diff line
@@ -36,9 +36,12 @@ class VoiceInteractionWindowController(val context: TaskbarActivityContext)

                override fun draw(canvas: Canvas) {
                    super.draw(canvas)
                    if (this@VoiceInteractionWindowController.context.isGestureNav
                        && controllers.taskbarStashController.isInAppAndNotStashed) {
                        taskbarBackgroundRenderer.draw(canvas)
                    }
                }
            }
        separateWindowForTaskbarBackground.recreateControllers()
        separateWindowForTaskbarBackground.setWillNotDraw(false)

@@ -74,18 +77,20 @@ class VoiceInteractionWindowController(val context: TaskbarActivityContext)
            fadeStashedHandle.end()
        }

        if (context.isGestureNav && controllers.taskbarStashController.isInAppAndNotStashed) {
            moveTaskbarBackgroundToLowerLayer()
        }
        moveTaskbarBackgroundToAppropriateLayer()
    }

    /**
     * Either:
     * Hides the TaskbarDragLayer background and creates a new window to draw just that background.
     * OR
     * Removes the temporary window and show the TaskbarDragLayer background again.
     */
    private fun moveTaskbarBackgroundToLowerLayer() {
    private fun moveTaskbarBackgroundToAppropriateLayer() {
        val taskbarBackgroundOverride = controllers.taskbarDragLayerController
            .overrideBackgroundAlpha
        if (isVoiceInteractionWindowVisible) {
        val moveToLowerLayer = isVoiceInteractionWindowVisible
        if (moveToLowerLayer) {
            // First add the temporary window, then hide the overlapping taskbar background.
            context.addWindowView(separateWindowForTaskbarBackground, separateWindowLayoutParams)
            ViewRootSync.synchronizeNextDraw(separateWindowForTaskbarBackground, context.dragLayer