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

Commit 50f04b29 authored by Coco Duan's avatar Coco Duan
Browse files

Wrap call to updateLayoutEngine with dreamsV2 flag

Fix a previous change that is not guarded with the right flag.
Only when flag is enabled, listen to configuration change and
call updateLayoutEngine.

Bug: b/378163332
Fixes: b/378163332
Flag: android.service.dreams.dreams_v2
Test: atest ComplicationHostViewControllerTest
Change-Id: I2da71debb557f1b564bdcd941f2fe8c80624971c
parent 8c68933c
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@
 */
package com.android.systemui.complication;

import static android.service.dreams.Flags.FLAG_DREAMS_V2;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
@@ -25,6 +27,8 @@ import static org.mockito.Mockito.when;
import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.UserHandle;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.provider.Settings;
import android.testing.TestableLooper;
import android.testing.ViewUtils;
@@ -147,7 +151,8 @@ public class ComplicationHostViewControllerTest extends SysuiTestCase {
     * Ensures layout engine update is called on configuration change.
     */
    @Test
    public void testUpdateLayoutEngineOnConfigurationChange() {
    @EnableFlags(FLAG_DREAMS_V2)
    public void updateLayoutEngine_isCalled_onConfigurationChange_flagEnabled() {
        mController.onViewAttached();
        // Attach the complication host view so flows collecting on it start running.
        ViewUtils.attachView(mComplicationHostView);
@@ -163,6 +168,24 @@ public class ComplicationHostViewControllerTest extends SysuiTestCase {
        verify(mLayoutEngine).updateLayoutEngine(bounds);
    }

    @Test
    @DisableFlags(FLAG_DREAMS_V2)
    public void updateLayoutEngine_notCalled_onConfigurationChange_flagDisabled() {
        mController.onViewAttached();
        // Attach the complication host view so flows collecting on it start running.
        ViewUtils.attachView(mComplicationHostView);
        mLooper.processAllMessages();

        // emit configuration change
        Rect bounds = new Rect(0, 0, 2000, 2000);
        Configuration config = new Configuration();
        config.windowConfiguration.setMaxBounds(bounds);
        mKosmos.getConfigurationRepository().onConfigurationChange(config);
        mKosmos.getTestScope().getTestScheduler().runCurrent();

        verify(mLayoutEngine, never()).updateLayoutEngine(bounds);
    }

    /**
     * Ensures the lifecycle of complications is properly handled.
     */
+51 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ package com.android.systemui.complication;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -24,6 +25,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.graphics.Rect;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.service.dreams.Flags;
import android.view.View;

import androidx.constraintlayout.widget.ConstraintLayout;
@@ -180,6 +184,7 @@ public class ComplicationLayoutEngineTest extends SysuiTestCase {
    }

    @Test
    @EnableFlags(Flags.FLAG_DREAMS_V2)
    public void testComplicationMarginsOnScreenSizeChange() {
        final Random rand = new Random();
        final int spacing = rand.nextInt();
@@ -230,6 +235,52 @@ public class ComplicationLayoutEngineTest extends SysuiTestCase {
        });
    }

    @Test
    @DisableFlags(Flags.FLAG_DREAMS_V2)
    public void updateLayoutEngine_willNotUpdateViews_whenFlagDisabled() {
        final ComplicationLayoutEngine engine = createComplicationLayoutEngine();
        final ViewInfo viewInfo = new ViewInfo(
                new ComplicationLayoutParams(
                        100,
                        100,
                        ComplicationLayoutParams.POSITION_TOP
                                | ComplicationLayoutParams.POSITION_END,
                        ComplicationLayoutParams.DIRECTION_DOWN,
                        0),
                Complication.CATEGORY_SYSTEM,
                mLayout);

        addComplication(engine, viewInfo);
        viewInfo.clearInvocations();

        engine.updateLayoutEngine(new Rect(0, 0, 800, 1000));
        // Views won't be updated.
        verify(viewInfo.view, never()).setLayoutParams(any());
    }

    @Test
    @EnableFlags(Flags.FLAG_DREAMS_V2)
    public void updateLayoutEngine_willUpdateViews_whenFlagEnabled() {
        final ComplicationLayoutEngine engine = createComplicationLayoutEngine();
        final ViewInfo viewInfo = new ViewInfo(
                new ComplicationLayoutParams(
                        100,
                        100,
                        ComplicationLayoutParams.POSITION_TOP
                                | ComplicationLayoutParams.POSITION_END,
                        ComplicationLayoutParams.DIRECTION_DOWN,
                        0),
                Complication.CATEGORY_SYSTEM,
                mLayout);

        addComplication(engine, viewInfo);
        viewInfo.clearInvocations();

        engine.updateLayoutEngine(new Rect(0, 0, 800, 1000));
        // Views will be updated.
        verify(viewInfo.view).setLayoutParams(any());
    }

    /**
     * Makes sure the engine properly places a view within the {@link ConstraintLayout}.
     */
+10 −7
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.graphics.Region;
import android.os.Debug;
import android.os.UserHandle;
import android.provider.Settings;
import android.service.dreams.Flags;
import android.util.Log;
import android.view.View;

@@ -94,6 +95,7 @@ public class ComplicationHostViewController extends ViewController<ConstraintLay
        // Whether animations are enabled.
        mIsAnimationEnabled = secureSettings.getFloatForUser(
                Settings.Global.ANIMATOR_DURATION_SCALE, 1.0f, UserHandle.USER_CURRENT) != 0.0f;
        if (Flags.dreamsV2()) {
            // Update layout on configuration change like rotation, fold etc.
            collectFlow(
                    view,
@@ -102,6 +104,7 @@ public class ComplicationHostViewController extends ViewController<ConstraintLay
                    mainDispatcher
            );
        }
    }

    /**
     * Returns the region in display space occupied by complications. Touches in this region
+3 −1
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import static com.android.systemui.complication.dagger.ComplicationHostViewModul
import static com.android.systemui.complication.dagger.ComplicationHostViewModule.SCOPED_COMPLICATIONS_LAYOUT;

import android.graphics.Rect;
import android.service.dreams.Flags;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
@@ -651,7 +652,8 @@ public class ComplicationLayoutEngine implements Complication.VisibilityControll
     * Update margins on screen dimension change.
      */
    public void updateLayoutEngine(@NonNull Rect bounds) {
        if (bounds.width() == mScreenBounds.width() && bounds.height() == mScreenBounds.height()) {
        if (!Flags.dreamsV2() || (bounds.width() == mScreenBounds.width()
                && bounds.height() == mScreenBounds.height())) {
            return;
        }
        mScreenBounds = bounds;