diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java index a4e2572836f8e..3fb8c1a95078d 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java @@ -18,7 +18,6 @@ package com.android.systemui.dagger; import android.app.INotificationManager; import android.content.Context; -import android.view.LayoutInflater; import androidx.annotation.Nullable; @@ -27,7 +26,6 @@ import com.android.keyguard.clock.ClockModule; import com.android.keyguard.dagger.KeyguardBouncerComponent; import com.android.systemui.BootCompleteCache; import com.android.systemui.BootCompleteCacheImpl; -import com.android.systemui.R; import com.android.systemui.SystemUIFactory; import com.android.systemui.appops.dagger.AppOpsModule; import com.android.systemui.assist.AssistModule; @@ -66,7 +64,6 @@ import com.android.systemui.statusbar.notification.row.dagger.NotificationRowCom import com.android.systemui.statusbar.notification.row.dagger.NotificationShelfComponent; import com.android.systemui.statusbar.phone.ShadeController; import com.android.systemui.statusbar.phone.StatusBar; -import com.android.systemui.statusbar.phone.StatusBarWindowView; import com.android.systemui.statusbar.phone.dagger.StatusBarComponent; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.HeadsUpManager; @@ -212,17 +209,4 @@ public abstract class SystemUIModule { groupManager, entryManager, notifPipeline, sysUiState, featureFlags, dumpManager, sysuiMainExecutor)); } - - @Provides - @SysUISingleton - static StatusBarWindowView providesStatusBarWindowView(LayoutInflater layoutInflater) { - StatusBarWindowView view = - (StatusBarWindowView) layoutInflater.inflate(R.layout.super_status_bar, - /* root= */ null); - if (view == null) { - throw new IllegalStateException( - "R.layout.super_status_bar could not be properly inflated"); - } - return view; - } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt index 589446f3b075e..7e4db03148c53 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt @@ -27,7 +27,6 @@ import android.widget.FrameLayout import com.android.systemui.R import com.android.systemui.statusbar.phone.StatusBarLocationPublisher import com.android.systemui.statusbar.phone.StatusBarWindowController -import com.android.systemui.statusbar.phone.StatusBarWindowView import javax.inject.Inject /** @@ -35,7 +34,6 @@ import javax.inject.Inject */ class SystemEventChipAnimationController @Inject constructor( private val context: Context, - private val statusBarWindowView: StatusBarWindowView, private val statusBarWindowController: StatusBarWindowController, private val locationPublisher: StatusBarLocationPublisher ) : SystemStatusChipAnimationCallback { @@ -126,7 +124,7 @@ class SystemEventChipAnimationController @Inject constructor( animationDotView = animationWindowView.findViewById(R.id.dot_view) val lp = FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT) lp.gravity = Gravity.END or Gravity.CENTER_VERTICAL - statusBarWindowView.addView(animationWindowView, lp) + statusBarWindowController.addViewToWindow(animationWindowView, lp) } private fun start() = if (animationWindowView.isLayoutRtl) right() else left() diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java index 8de041287c41d..09bcb69790f48 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java @@ -107,7 +107,7 @@ public class NotificationShadeWindowViewController { private final DockManager mDockManager; private final NotificationPanelViewController mNotificationPanelViewController; private final PanelExpansionStateManager mPanelExpansionStateManager; - private final StatusBarWindowView mStatusBarWindowView; + private final StatusBarWindowController mStatusBarWindowController; // Used for determining view / touch intersection private int[] mTempLocation = new int[2]; @@ -137,7 +137,7 @@ public class NotificationShadeWindowViewController { NotificationShadeWindowView notificationShadeWindowView, NotificationPanelViewController notificationPanelViewController, PanelExpansionStateManager panelExpansionStateManager, - StatusBarWindowView statusBarWindowView, + StatusBarWindowController statusBarWindowController, NotificationStackScrollLayoutController notificationStackScrollLayoutController, StatusBarKeyguardViewManager statusBarKeyguardViewManager, LockIconViewController lockIconViewController) { @@ -162,7 +162,7 @@ public class NotificationShadeWindowViewController { mNotificationPanelViewController = notificationPanelViewController; mPanelExpansionStateManager = panelExpansionStateManager; mDepthController = depthController; - mStatusBarWindowView = statusBarWindowView; + mStatusBarWindowController = statusBarWindowController; mNotificationStackScrollLayoutController = notificationStackScrollLayoutController; mStatusBarKeyguardViewManager = statusBarKeyguardViewManager; mLockIconViewController = lockIconViewController; @@ -500,7 +500,7 @@ public class NotificationShadeWindowViewController { if (statusBarView != null) { mBarTransitions = new PhoneStatusBarTransitions( statusBarView, - mStatusBarWindowView.findViewById(R.id.status_bar_container)); + mStatusBarWindowController.getBackgroundView()); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index d272afab64dd5..8bb5fb415a7b0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -505,7 +505,6 @@ public class StatusBar extends SystemUI implements private final StatusBarNotificationActivityStarter.Builder mStatusBarNotificationActivityStarterBuilder; private final ShadeController mShadeController; - private final StatusBarWindowView mStatusBarWindowView; private final LightsOutNotifController mLightsOutNotifController; private final InitController mInitController; @@ -770,7 +769,6 @@ public class StatusBar extends SystemUI implements StatusBarNotificationActivityStarter.Builder statusBarNotificationActivityStarterBuilder, ShadeController shadeController, - StatusBarWindowView statusBarWindowView, StatusBarKeyguardViewManager statusBarKeyguardViewManager, ViewMediatorCallback viewMediatorCallback, InitController initController, @@ -876,7 +874,6 @@ public class StatusBar extends SystemUI implements mSplitScreenOptional = splitScreenOptional; mStatusBarNotificationActivityStarterBuilder = statusBarNotificationActivityStarterBuilder; mShadeController = shadeController; - mStatusBarWindowView = statusBarWindowView; mLightsOutNotifController = lightsOutNotifController; mStatusBarKeyguardViewManager = statusBarKeyguardViewManager; mKeyguardViewMediatorCallback = viewMediatorCallback; @@ -1169,7 +1166,7 @@ public class StatusBar extends SystemUI implements // Allow plugins to reference DarkIconDispatcher and StatusBarStateController mPluginDependencyProvider.allowPluginDependency(DarkIconDispatcher.class); mPluginDependencyProvider.allowPluginDependency(StatusBarStateController.class); - FragmentHostManager.get(mStatusBarWindowView) + mStatusBarWindowController.getFragmentHostManager() .addTagListener(CollapsedStatusBarFragment.TAG, (tag, fragment) -> { CollapsedStatusBarFragment statusBarFragment = (CollapsedStatusBarFragment) fragment; @@ -1697,10 +1694,6 @@ public class StatusBar extends SystemUI implements return mNotificationShadeWindowView; } - public StatusBarWindowView getStatusBarWindow() { - return mStatusBarWindowView; - } - public NotificationShadeWindowViewController getNotificationShadeWindowViewController() { return mNotificationShadeWindowViewController; } @@ -2427,7 +2420,7 @@ public class StatusBar extends SystemUI implements pw.print(" mDozing="); pw.println(mDozing); pw.print(" mWallpaperSupported= "); pw.println(mWallpaperSupported); - pw.println(" StatusBarWindowView: "); + pw.println(" ShadeWindowView: "); if (mNotificationShadeWindowViewController != null) { mNotificationShadeWindowViewController.dump(fd, pw, args); dumpBarTransitions(pw, "PhoneStatusBarTransitions", diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java index 2fae7f10392d6..f8895d338e136 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java @@ -36,6 +36,7 @@ import android.os.RemoteException; import android.util.Log; import android.view.Gravity; import android.view.IWindowManager; +import android.view.LayoutInflater; import android.view.Surface; import android.view.View; import android.view.ViewGroup; @@ -47,6 +48,7 @@ import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.animation.DelegateLaunchAnimatorController; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; +import com.android.systemui.fragments.FragmentHostManager; import java.util.Optional; @@ -68,7 +70,7 @@ public class StatusBarWindowController { private int mBarHeight = -1; private final State mCurrentState = new State(); - private final ViewGroup mStatusBarView; + private final ViewGroup mStatusBarWindowView; // The container in which we should run launch animations started from the status bar and // expanding into the opening window. private final ViewGroup mLaunchAnimationContainer; @@ -80,15 +82,14 @@ public class StatusBarWindowController { Context context, WindowManager windowManager, IWindowManager iWindowManager, - StatusBarWindowView statusBarWindowView, StatusBarContentInsetsProvider contentInsetsProvider, @Main Resources resources) { mContext = context; mWindowManager = windowManager; mIWindowManager = iWindowManager; mContentInsetsProvider = contentInsetsProvider; - mStatusBarView = statusBarWindowView; - mLaunchAnimationContainer = mStatusBarView.findViewById( + mStatusBarWindowView = createWindowView(mContext); + mLaunchAnimationContainer = mStatusBarWindowView.findViewById( R.id.status_bar_launch_animation_container); mLpChanged = new WindowManager.LayoutParams(); mResources = resources; @@ -126,13 +127,28 @@ public class StatusBarWindowController { // hardware-accelerated. mLp = getBarLayoutParams(mContext.getDisplay().getRotation()); - mWindowManager.addView(mStatusBarView, mLp); + mWindowManager.addView(mStatusBarWindowView, mLp); mLpChanged.copyFrom(mLp); mContentInsetsProvider.addCallback(this::calculateStatusBarLocationsForAllRotations); calculateStatusBarLocationsForAllRotations(); } + /** Adds the given view to the status bar window view. */ + public void addViewToWindow(View view, ViewGroup.LayoutParams layoutParams) { + mStatusBarWindowView.addView(view, layoutParams); + } + + /** Returns the status bar window's background view. */ + public View getBackgroundView() { + return mStatusBarWindowView.findViewById(R.id.status_bar_container); + } + + /** Returns a fragment host manager for the status bar window view. */ + public FragmentHostManager getFragmentHostManager() { + return FragmentHostManager.get(mStatusBarWindowView); + } + /** * Provides an updated animation controller if we're animating a view in the status bar. * @@ -148,7 +164,7 @@ public class StatusBarWindowController { */ public Optional wrapAnimationControllerIfInStatusBar( View rootView, ActivityLaunchAnimator.Controller animationController) { - if (rootView != mStatusBarView) { + if (rootView != mStatusBarWindowView) { return Optional.empty(); } @@ -278,7 +294,7 @@ public class StatusBarWindowController { applyForceStatusBarVisibleFlag(state); applyHeight(state); if (mLp != null && mLp.copyFrom(mLpChanged) != 0) { - mWindowManager.updateViewLayout(mStatusBarView, mLp); + mWindowManager.updateViewLayout(mStatusBarWindowView, mLp); } } @@ -298,4 +314,14 @@ public class StatusBarWindowController { mLpChanged.privateFlags &= ~PRIVATE_FLAG_FORCE_SHOW_STATUS_BAR; } } + + private ViewGroup createWindowView(Context context) { + ViewGroup view = (ViewGroup) LayoutInflater.from(context).inflate( + R.layout.super_status_bar, /* root= */ null); + if (view == null) { + throw new IllegalStateException( + "R.layout.super_status_bar could not be properly inflated"); + } + return view; + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java index 076a9a9bb0121..adff2fd434250 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java @@ -99,7 +99,6 @@ import com.android.systemui.statusbar.phone.StatusBarLocationPublisher; import com.android.systemui.statusbar.phone.StatusBarMoveFromCenterAnimationController; import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter; import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager; -import com.android.systemui.statusbar.phone.StatusBarWindowView; import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager; @@ -207,7 +206,6 @@ public interface StatusBarPhoneModule { StatusBarNotificationActivityStarter.Builder statusBarNotificationActivityStarterBuilder, ShadeController shadeController, - StatusBarWindowView statusBarWindowView, StatusBarKeyguardViewManager statusBarKeyguardViewManager, ViewMediatorCallback viewMediatorCallback, InitController initController, @@ -311,7 +309,6 @@ public interface StatusBarPhoneModule { lightsOutNotifController, statusBarNotificationActivityStarterBuilder, shadeController, - statusBarWindowView, statusBarKeyguardViewManager, viewMediatorCallback, initController, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewTest.java index a9db1a422ca2a..4bf8821d1185b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewTest.java @@ -91,7 +91,7 @@ public class NotificationShadeWindowViewTest extends SysuiTestCase { @Mock private NotificationPanelViewController mNotificationPanelViewController; @Mock private NotificationStackScrollLayout mNotificationStackScrollLayout; @Mock private NotificationShadeDepthController mNotificationShadeDepthController; - @Mock private StatusBarWindowView mStatusBarWindowView; + @Mock private StatusBarWindowController mStatusBarWindowController; @Mock private NotificationShadeWindowController mNotificationShadeWindowController; @Mock private NotificationStackScrollLayoutController mNotificationStackScrollLayoutController; @Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; @@ -137,7 +137,7 @@ public class NotificationShadeWindowViewTest extends SysuiTestCase { mView, mNotificationPanelViewController, new PanelExpansionStateManager(), - mStatusBarWindowView, + mStatusBarWindowController, mNotificationStackScrollLayoutController, mStatusBarKeyguardViewManager, mLockIconViewController); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java index d0d3d41abbc72..9fe142337bbe0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java @@ -246,7 +246,6 @@ public class StatusBarTest extends SysuiTestCase { @Mock private StatusBarComponent mStatusBarComponent; @Mock private PluginManager mPluginManager; @Mock private LegacySplitScreen mLegacySplitScreen; - @Mock private StatusBarWindowView mStatusBarWindowView; @Mock private LightsOutNotifController mLightsOutNotifController; @Mock private ViewMediatorCallback mViewMediatorCallback; @Mock private StatusBarTouchableRegionManager mStatusBarTouchableRegionManager; @@ -426,7 +425,6 @@ public class StatusBarTest extends SysuiTestCase { mLightsOutNotifController, mStatusBarNotificationActivityStarterBuilder, mShadeController, - mStatusBarWindowView, mStatusBarKeyguardViewManager, mViewMediatorCallback, mInitController,