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

Commit f8f9d338 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Allow ongoing activity chips on dream to receive touch" into main

parents b8f396ee 39990acb
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -44,7 +44,9 @@ constructor(private val factory: AmbientStatusBarComponent.Factory) {
                        ) as AmbientStatusBarView)
                    .apply {
                        visibility = View.VISIBLE
                        factory.create(this).getController().apply { init() }
                        factory.create(this, touchInsetSession = null).getController().apply {
                            init()
                        }
                    }
            },
            modifier = modifier.element(Communal.Elements.StatusBar),
+25 −0
Original line number Diff line number Diff line
@@ -36,14 +36,17 @@ import android.app.AlarmManager;
import android.content.Context;
import android.content.res.Resources;
import android.hardware.SensorPrivacyManager;
import android.platform.test.annotations.EnableFlags;
import android.provider.Settings;
import android.testing.TestableLooper;
import android.view.View;

import androidx.compose.ui.platform.ComposeView;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;

import com.android.systemui.SysuiTestCase;
import com.android.systemui.ambient.statusbar.shared.flag.OngoingActivityChipsOnDream;
import com.android.systemui.dreams.DreamOverlayNotificationCountProvider;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider;
@@ -62,6 +65,7 @@ import com.android.systemui.statusbar.policy.NextAlarmController;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.statusbar.window.StatusBarWindowStateController;
import com.android.systemui.statusbar.window.StatusBarWindowStateListener;
import com.android.systemui.touch.TouchInsetManager;
import com.android.systemui.util.time.DateFormatUtil;

import org.junit.Before;
@@ -85,6 +89,8 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase {
    private static final String NOTIFICATION_INDICATOR_FORMATTER_STRING =
            "{count, plural, =1 {# notification} other {# notifications}}";

    @Mock
    Context mContext;
    @Mock
    MockAmbientStatusBarView mView;
    @Mock
@@ -119,6 +125,8 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase {
    AmbientStatusBarViewModel.Factory mAmbientStatusBarViewModelFactory;
    @Mock
    ConnectedDisplaysStatusBarNotificationIconViewStore.Factory mIconViewStoreFactory;
    @Mock
    TouchInsetManager.TouchInsetSession mTouchInsetSession;

    LogBuffer mLogBuffer = FakeLogBuffer.Factory.Companion.create();

@@ -142,6 +150,7 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase {
        doCallRealMethod().when(mView).setVisibility(anyInt());
        doCallRealMethod().when(mView).getVisibility();
        when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser());
        when(mView.getContext()).thenReturn(mContext);

        mController = new AmbientStatusBarViewController(
                mView,
@@ -162,6 +171,7 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase {
                mKosmos.getCommunalSceneInteractor(),
                mAmbientStatusBarViewModelFactory,
                mIconViewStoreFactory,
                mTouchInsetSession,
                mLogBuffer);
        mController.onInit();
    }
@@ -342,6 +352,7 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase {
                mKosmos.getCommunalSceneInteractor(),
                mAmbientStatusBarViewModelFactory,
                mIconViewStoreFactory,
                mTouchInsetSession,
                mLogBuffer);
        controller.onViewAttached();
        verify(mView, never()).showIcon(
@@ -596,6 +607,20 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase {
        verify(mStatusBarWindowStateController).removeListener(eq(listenerCaptor.getValue()));
    }

    @EnableFlags(OngoingActivityChipsOnDream.FLAG_NAME)
    @Test
    public void testAddAndRemoveOngoingActivityChipsViewFromTouchInsetSession() {
        final ComposeView ongoingActivityChipsView = Mockito.mock(ComposeView.class);
        when(mView.findViewById(R.id.dream_overlay_ongoing_activity_chips))
                .thenReturn(ongoingActivityChipsView);

        mController.onViewAttached();
        verify(mTouchInsetSession).addViewToTracking(ongoingActivityChipsView);

        mController.onViewDetached();
        verify(mTouchInsetSession).removeViewFromTracking(ongoingActivityChipsView);
    }

    private StatusBarWindowStateListener updateStatusBarWindowState(boolean show) {
        when(mStatusBarWindowStateController.windowIsShowing()).thenReturn(show);
        final ArgumentCaptor<StatusBarWindowStateListener>
+2 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.ambient.statusbar.dagger

import com.android.systemui.ambient.statusbar.ui.AmbientStatusBarView
import com.android.systemui.ambient.statusbar.ui.AmbientStatusBarViewController
import com.android.systemui.touch.TouchInsetManager
import dagger.BindsInstance
import dagger.Subcomponent

@@ -31,6 +32,7 @@ interface AmbientStatusBarComponent {
    interface Factory {
        fun create(
            @BindsInstance view: AmbientStatusBarView,
            @BindsInstance touchInsetSession: TouchInsetManager.TouchInsetSession?,
        ): AmbientStatusBarComponent
    }

+28 −6
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@ import com.android.systemui.statusbar.policy.NextAlarmController;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.statusbar.window.StatusBarWindowStateController;
import com.android.systemui.statusbar.window.StatusBarWindowStateListener;
import com.android.systemui.touch.TouchInsetManager;
import com.android.systemui.util.ViewController;
import com.android.systemui.util.time.DateFormatUtil;

@@ -100,12 +101,17 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus
    private final ConnectedDisplaysStatusBarNotificationIconViewStore.Factory mIconViewStoreFactory;
    private final DreamLogger mLogger;

    @Nullable
    private final TouchInsetManager.TouchInsetSession mTouchInsetSession;

    private boolean mIsAttached;
    private boolean mCommunalVisible;

    // Whether dream entry animations are finished.
    private boolean mEntryAnimationsFinished = false;

    @Nullable private ComposeView mOngoingActivityChipsView = null;

    private final DreamOverlayStateController.Callback mDreamOverlayStateCallback =
            new DreamOverlayStateController.Callback() {
                @Override
@@ -169,6 +175,7 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus
            CommunalSceneInteractor communalSceneInteractor,
            AmbientStatusBarViewModel.Factory ambientStatusBarViewModelFactory,
            ConnectedDisplaysStatusBarNotificationIconViewStore.Factory iconViewStoreFactory,
            @Nullable TouchInsetManager.TouchInsetSession touchInsetSession,
            @DreamLog LogBuffer logBuffer) {
        super(view);
        mResources = resources;
@@ -188,6 +195,7 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus
        mCommunalSceneInteractor = communalSceneInteractor;
        mAmbientStatusBarViewModelFactory = ambientStatusBarViewModelFactory;
        mIconViewStoreFactory = iconViewStoreFactory;
        mTouchInsetSession = touchInsetSession;
        mLogger = new DreamLogger(logBuffer, TAG);
    }

@@ -214,13 +222,21 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus
        mIsAttached = true;

        if (OngoingActivityChipsOnDream.isEnabled()) {
            final ComposeView ongoingActivityChipsView =
            mOngoingActivityChipsView =
                    mView.findViewById(R.id.dream_overlay_ongoing_activity_chips);

            if (mOngoingActivityChipsView != null) {
                AmbientStatusBarViewBinder.bindOngoingActivityChipsView(
                        getContext(),
                    ongoingActivityChipsView,
                        mOngoingActivityChipsView,
                        mAmbientStatusBarViewModelFactory,
                        mIconViewStoreFactory);

                // Allow the ongoing activity chips view to receive touch events.
                if (mTouchInsetSession != null) {
                    mTouchInsetSession.addViewToTracking(mOngoingActivityChipsView);
                }
            }
        }

        mFlows.add(collectFlow(
@@ -268,6 +284,12 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus
            flow.dispose();
        }
        mFlows.clear();

        if (mTouchInsetSession != null && mOngoingActivityChipsView != null) {
            mTouchInsetSession.removeViewFromTracking(mOngoingActivityChipsView);
            mOngoingActivityChipsView = null;
        }

        mIsAttached = false;
    }

+3 −2
Original line number Diff line number Diff line
@@ -104,8 +104,9 @@ public abstract class DreamOverlayModule {
    @Provides
    @DreamOverlayComponent.DreamOverlayScope
    public static AmbientStatusBarViewController providesStatusBarViewController(
            AmbientStatusBarView view, AmbientStatusBarComponent.Factory factory) {
        return factory.create(view).getController();
            AmbientStatusBarView view, AmbientStatusBarComponent.Factory factory,
            TouchInsetManager.TouchInsetSession touchInsetSession) {
        return factory.create(view, touchInsetSession).getController();
    }

    /**  */