Merge "[Status Bar Refactor] 2/3: Make StatusBarWindowView only accessible from its controller, instead of accessible to anyone via Dagger." into sc-v2-dev

This commit is contained in:
Caitlin Cassidy
2021-11-03 18:33:23 +00:00
committed by Android (Google) Code Review
8 changed files with 42 additions and 46 deletions

View File

@@ -18,7 +18,6 @@ package com.android.systemui.dagger;
import android.app.INotificationManager; import android.app.INotificationManager;
import android.content.Context; import android.content.Context;
import android.view.LayoutInflater;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@@ -27,7 +26,6 @@ import com.android.keyguard.clock.ClockModule;
import com.android.keyguard.dagger.KeyguardBouncerComponent; import com.android.keyguard.dagger.KeyguardBouncerComponent;
import com.android.systemui.BootCompleteCache; import com.android.systemui.BootCompleteCache;
import com.android.systemui.BootCompleteCacheImpl; import com.android.systemui.BootCompleteCacheImpl;
import com.android.systemui.R;
import com.android.systemui.SystemUIFactory; import com.android.systemui.SystemUIFactory;
import com.android.systemui.appops.dagger.AppOpsModule; import com.android.systemui.appops.dagger.AppOpsModule;
import com.android.systemui.assist.AssistModule; 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.notification.row.dagger.NotificationShelfComponent;
import com.android.systemui.statusbar.phone.ShadeController; import com.android.systemui.statusbar.phone.ShadeController;
import com.android.systemui.statusbar.phone.StatusBar; 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.phone.dagger.StatusBarComponent;
import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.statusbar.policy.HeadsUpManager;
@@ -212,17 +209,4 @@ public abstract class SystemUIModule {
groupManager, entryManager, notifPipeline, sysUiState, featureFlags, dumpManager, groupManager, entryManager, notifPipeline, sysUiState, featureFlags, dumpManager,
sysuiMainExecutor)); 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;
}
} }

View File

@@ -27,7 +27,6 @@ import android.widget.FrameLayout
import com.android.systemui.R import com.android.systemui.R
import com.android.systemui.statusbar.phone.StatusBarLocationPublisher import com.android.systemui.statusbar.phone.StatusBarLocationPublisher
import com.android.systemui.statusbar.phone.StatusBarWindowController import com.android.systemui.statusbar.phone.StatusBarWindowController
import com.android.systemui.statusbar.phone.StatusBarWindowView
import javax.inject.Inject import javax.inject.Inject
/** /**
@@ -35,7 +34,6 @@ import javax.inject.Inject
*/ */
class SystemEventChipAnimationController @Inject constructor( class SystemEventChipAnimationController @Inject constructor(
private val context: Context, private val context: Context,
private val statusBarWindowView: StatusBarWindowView,
private val statusBarWindowController: StatusBarWindowController, private val statusBarWindowController: StatusBarWindowController,
private val locationPublisher: StatusBarLocationPublisher private val locationPublisher: StatusBarLocationPublisher
) : SystemStatusChipAnimationCallback { ) : SystemStatusChipAnimationCallback {
@@ -126,7 +124,7 @@ class SystemEventChipAnimationController @Inject constructor(
animationDotView = animationWindowView.findViewById(R.id.dot_view) animationDotView = animationWindowView.findViewById(R.id.dot_view)
val lp = FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT) val lp = FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)
lp.gravity = Gravity.END or Gravity.CENTER_VERTICAL 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() private fun start() = if (animationWindowView.isLayoutRtl) right() else left()

View File

@@ -107,7 +107,7 @@ public class NotificationShadeWindowViewController {
private final DockManager mDockManager; private final DockManager mDockManager;
private final NotificationPanelViewController mNotificationPanelViewController; private final NotificationPanelViewController mNotificationPanelViewController;
private final PanelExpansionStateManager mPanelExpansionStateManager; private final PanelExpansionStateManager mPanelExpansionStateManager;
private final StatusBarWindowView mStatusBarWindowView; private final StatusBarWindowController mStatusBarWindowController;
// Used for determining view / touch intersection // Used for determining view / touch intersection
private int[] mTempLocation = new int[2]; private int[] mTempLocation = new int[2];
@@ -137,7 +137,7 @@ public class NotificationShadeWindowViewController {
NotificationShadeWindowView notificationShadeWindowView, NotificationShadeWindowView notificationShadeWindowView,
NotificationPanelViewController notificationPanelViewController, NotificationPanelViewController notificationPanelViewController,
PanelExpansionStateManager panelExpansionStateManager, PanelExpansionStateManager panelExpansionStateManager,
StatusBarWindowView statusBarWindowView, StatusBarWindowController statusBarWindowController,
NotificationStackScrollLayoutController notificationStackScrollLayoutController, NotificationStackScrollLayoutController notificationStackScrollLayoutController,
StatusBarKeyguardViewManager statusBarKeyguardViewManager, StatusBarKeyguardViewManager statusBarKeyguardViewManager,
LockIconViewController lockIconViewController) { LockIconViewController lockIconViewController) {
@@ -162,7 +162,7 @@ public class NotificationShadeWindowViewController {
mNotificationPanelViewController = notificationPanelViewController; mNotificationPanelViewController = notificationPanelViewController;
mPanelExpansionStateManager = panelExpansionStateManager; mPanelExpansionStateManager = panelExpansionStateManager;
mDepthController = depthController; mDepthController = depthController;
mStatusBarWindowView = statusBarWindowView; mStatusBarWindowController = statusBarWindowController;
mNotificationStackScrollLayoutController = notificationStackScrollLayoutController; mNotificationStackScrollLayoutController = notificationStackScrollLayoutController;
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager; mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
mLockIconViewController = lockIconViewController; mLockIconViewController = lockIconViewController;
@@ -500,7 +500,7 @@ public class NotificationShadeWindowViewController {
if (statusBarView != null) { if (statusBarView != null) {
mBarTransitions = new PhoneStatusBarTransitions( mBarTransitions = new PhoneStatusBarTransitions(
statusBarView, statusBarView,
mStatusBarWindowView.findViewById(R.id.status_bar_container)); mStatusBarWindowController.getBackgroundView());
} }
} }

View File

@@ -505,7 +505,6 @@ public class StatusBar extends SystemUI implements
private final StatusBarNotificationActivityStarter.Builder private final StatusBarNotificationActivityStarter.Builder
mStatusBarNotificationActivityStarterBuilder; mStatusBarNotificationActivityStarterBuilder;
private final ShadeController mShadeController; private final ShadeController mShadeController;
private final StatusBarWindowView mStatusBarWindowView;
private final LightsOutNotifController mLightsOutNotifController; private final LightsOutNotifController mLightsOutNotifController;
private final InitController mInitController; private final InitController mInitController;
@@ -770,7 +769,6 @@ public class StatusBar extends SystemUI implements
StatusBarNotificationActivityStarter.Builder StatusBarNotificationActivityStarter.Builder
statusBarNotificationActivityStarterBuilder, statusBarNotificationActivityStarterBuilder,
ShadeController shadeController, ShadeController shadeController,
StatusBarWindowView statusBarWindowView,
StatusBarKeyguardViewManager statusBarKeyguardViewManager, StatusBarKeyguardViewManager statusBarKeyguardViewManager,
ViewMediatorCallback viewMediatorCallback, ViewMediatorCallback viewMediatorCallback,
InitController initController, InitController initController,
@@ -876,7 +874,6 @@ public class StatusBar extends SystemUI implements
mSplitScreenOptional = splitScreenOptional; mSplitScreenOptional = splitScreenOptional;
mStatusBarNotificationActivityStarterBuilder = statusBarNotificationActivityStarterBuilder; mStatusBarNotificationActivityStarterBuilder = statusBarNotificationActivityStarterBuilder;
mShadeController = shadeController; mShadeController = shadeController;
mStatusBarWindowView = statusBarWindowView;
mLightsOutNotifController = lightsOutNotifController; mLightsOutNotifController = lightsOutNotifController;
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager; mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
mKeyguardViewMediatorCallback = viewMediatorCallback; mKeyguardViewMediatorCallback = viewMediatorCallback;
@@ -1169,7 +1166,7 @@ public class StatusBar extends SystemUI implements
// Allow plugins to reference DarkIconDispatcher and StatusBarStateController // Allow plugins to reference DarkIconDispatcher and StatusBarStateController
mPluginDependencyProvider.allowPluginDependency(DarkIconDispatcher.class); mPluginDependencyProvider.allowPluginDependency(DarkIconDispatcher.class);
mPluginDependencyProvider.allowPluginDependency(StatusBarStateController.class); mPluginDependencyProvider.allowPluginDependency(StatusBarStateController.class);
FragmentHostManager.get(mStatusBarWindowView) mStatusBarWindowController.getFragmentHostManager()
.addTagListener(CollapsedStatusBarFragment.TAG, (tag, fragment) -> { .addTagListener(CollapsedStatusBarFragment.TAG, (tag, fragment) -> {
CollapsedStatusBarFragment statusBarFragment = CollapsedStatusBarFragment statusBarFragment =
(CollapsedStatusBarFragment) fragment; (CollapsedStatusBarFragment) fragment;
@@ -1696,10 +1693,6 @@ public class StatusBar extends SystemUI implements
return mNotificationShadeWindowView; return mNotificationShadeWindowView;
} }
public StatusBarWindowView getStatusBarWindow() {
return mStatusBarWindowView;
}
public NotificationShadeWindowViewController getNotificationShadeWindowViewController() { public NotificationShadeWindowViewController getNotificationShadeWindowViewController() {
return mNotificationShadeWindowViewController; return mNotificationShadeWindowViewController;
} }
@@ -2426,7 +2419,7 @@ public class StatusBar extends SystemUI implements
pw.print(" mDozing="); pw.println(mDozing); pw.print(" mDozing="); pw.println(mDozing);
pw.print(" mWallpaperSupported= "); pw.println(mWallpaperSupported); pw.print(" mWallpaperSupported= "); pw.println(mWallpaperSupported);
pw.println(" StatusBarWindowView: "); pw.println(" ShadeWindowView: ");
if (mNotificationShadeWindowViewController != null) { if (mNotificationShadeWindowViewController != null) {
mNotificationShadeWindowViewController.dump(fd, pw, args); mNotificationShadeWindowViewController.dump(fd, pw, args);
dumpBarTransitions(pw, "PhoneStatusBarTransitions", dumpBarTransitions(pw, "PhoneStatusBarTransitions",

View File

@@ -36,6 +36,7 @@ import android.os.RemoteException;
import android.util.Log; import android.util.Log;
import android.view.Gravity; import android.view.Gravity;
import android.view.IWindowManager; import android.view.IWindowManager;
import android.view.LayoutInflater;
import android.view.Surface; import android.view.Surface;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@@ -47,6 +48,7 @@ import com.android.systemui.animation.ActivityLaunchAnimator;
import com.android.systemui.animation.DelegateLaunchAnimatorController; import com.android.systemui.animation.DelegateLaunchAnimatorController;
import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.fragments.FragmentHostManager;
import java.util.Optional; import java.util.Optional;
@@ -68,7 +70,7 @@ public class StatusBarWindowController {
private int mBarHeight = -1; private int mBarHeight = -1;
private final State mCurrentState = new State(); 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 // The container in which we should run launch animations started from the status bar and
// expanding into the opening window. // expanding into the opening window.
private final ViewGroup mLaunchAnimationContainer; private final ViewGroup mLaunchAnimationContainer;
@@ -80,15 +82,14 @@ public class StatusBarWindowController {
Context context, Context context,
WindowManager windowManager, WindowManager windowManager,
IWindowManager iWindowManager, IWindowManager iWindowManager,
StatusBarWindowView statusBarWindowView,
StatusBarContentInsetsProvider contentInsetsProvider, StatusBarContentInsetsProvider contentInsetsProvider,
@Main Resources resources) { @Main Resources resources) {
mContext = context; mContext = context;
mWindowManager = windowManager; mWindowManager = windowManager;
mIWindowManager = iWindowManager; mIWindowManager = iWindowManager;
mContentInsetsProvider = contentInsetsProvider; mContentInsetsProvider = contentInsetsProvider;
mStatusBarView = statusBarWindowView; mStatusBarWindowView = createWindowView(mContext);
mLaunchAnimationContainer = mStatusBarView.findViewById( mLaunchAnimationContainer = mStatusBarWindowView.findViewById(
R.id.status_bar_launch_animation_container); R.id.status_bar_launch_animation_container);
mLpChanged = new WindowManager.LayoutParams(); mLpChanged = new WindowManager.LayoutParams();
mResources = resources; mResources = resources;
@@ -126,13 +127,28 @@ public class StatusBarWindowController {
// hardware-accelerated. // hardware-accelerated.
mLp = getBarLayoutParams(mContext.getDisplay().getRotation()); mLp = getBarLayoutParams(mContext.getDisplay().getRotation());
mWindowManager.addView(mStatusBarView, mLp); mWindowManager.addView(mStatusBarWindowView, mLp);
mLpChanged.copyFrom(mLp); mLpChanged.copyFrom(mLp);
mContentInsetsProvider.addCallback(this::calculateStatusBarLocationsForAllRotations); mContentInsetsProvider.addCallback(this::calculateStatusBarLocationsForAllRotations);
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. * Provides an updated animation controller if we're animating a view in the status bar.
* *
@@ -148,7 +164,7 @@ public class StatusBarWindowController {
*/ */
public Optional<ActivityLaunchAnimator.Controller> wrapAnimationControllerIfInStatusBar( public Optional<ActivityLaunchAnimator.Controller> wrapAnimationControllerIfInStatusBar(
View rootView, ActivityLaunchAnimator.Controller animationController) { View rootView, ActivityLaunchAnimator.Controller animationController) {
if (rootView != mStatusBarView) { if (rootView != mStatusBarWindowView) {
return Optional.empty(); return Optional.empty();
} }
@@ -278,7 +294,7 @@ public class StatusBarWindowController {
applyForceStatusBarVisibleFlag(state); applyForceStatusBarVisibleFlag(state);
applyHeight(state); applyHeight(state);
if (mLp != null && mLp.copyFrom(mLpChanged) != 0) { 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; 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;
}
} }

View File

@@ -99,7 +99,6 @@ import com.android.systemui.statusbar.phone.StatusBarLocationPublisher;
import com.android.systemui.statusbar.phone.StatusBarMoveFromCenterAnimationController; import com.android.systemui.statusbar.phone.StatusBarMoveFromCenterAnimationController;
import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter; import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter;
import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager; 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.UnlockedScreenOffAnimationController;
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager; import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
@@ -207,7 +206,6 @@ public interface StatusBarPhoneModule {
StatusBarNotificationActivityStarter.Builder StatusBarNotificationActivityStarter.Builder
statusBarNotificationActivityStarterBuilder, statusBarNotificationActivityStarterBuilder,
ShadeController shadeController, ShadeController shadeController,
StatusBarWindowView statusBarWindowView,
StatusBarKeyguardViewManager statusBarKeyguardViewManager, StatusBarKeyguardViewManager statusBarKeyguardViewManager,
ViewMediatorCallback viewMediatorCallback, ViewMediatorCallback viewMediatorCallback,
InitController initController, InitController initController,
@@ -311,7 +309,6 @@ public interface StatusBarPhoneModule {
lightsOutNotifController, lightsOutNotifController,
statusBarNotificationActivityStarterBuilder, statusBarNotificationActivityStarterBuilder,
shadeController, shadeController,
statusBarWindowView,
statusBarKeyguardViewManager, statusBarKeyguardViewManager,
viewMediatorCallback, viewMediatorCallback,
initController, initController,

View File

@@ -91,7 +91,7 @@ public class NotificationShadeWindowViewTest extends SysuiTestCase {
@Mock private NotificationPanelViewController mNotificationPanelViewController; @Mock private NotificationPanelViewController mNotificationPanelViewController;
@Mock private NotificationStackScrollLayout mNotificationStackScrollLayout; @Mock private NotificationStackScrollLayout mNotificationStackScrollLayout;
@Mock private NotificationShadeDepthController mNotificationShadeDepthController; @Mock private NotificationShadeDepthController mNotificationShadeDepthController;
@Mock private StatusBarWindowView mStatusBarWindowView; @Mock private StatusBarWindowController mStatusBarWindowController;
@Mock private NotificationShadeWindowController mNotificationShadeWindowController; @Mock private NotificationShadeWindowController mNotificationShadeWindowController;
@Mock private NotificationStackScrollLayoutController mNotificationStackScrollLayoutController; @Mock private NotificationStackScrollLayoutController mNotificationStackScrollLayoutController;
@Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; @Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
@@ -137,7 +137,7 @@ public class NotificationShadeWindowViewTest extends SysuiTestCase {
mView, mView,
mNotificationPanelViewController, mNotificationPanelViewController,
new PanelExpansionStateManager(), new PanelExpansionStateManager(),
mStatusBarWindowView, mStatusBarWindowController,
mNotificationStackScrollLayoutController, mNotificationStackScrollLayoutController,
mStatusBarKeyguardViewManager, mStatusBarKeyguardViewManager,
mLockIconViewController); mLockIconViewController);

View File

@@ -246,7 +246,6 @@ public class StatusBarTest extends SysuiTestCase {
@Mock private StatusBarComponent mStatusBarComponent; @Mock private StatusBarComponent mStatusBarComponent;
@Mock private PluginManager mPluginManager; @Mock private PluginManager mPluginManager;
@Mock private LegacySplitScreen mLegacySplitScreen; @Mock private LegacySplitScreen mLegacySplitScreen;
@Mock private StatusBarWindowView mStatusBarWindowView;
@Mock private LightsOutNotifController mLightsOutNotifController; @Mock private LightsOutNotifController mLightsOutNotifController;
@Mock private ViewMediatorCallback mViewMediatorCallback; @Mock private ViewMediatorCallback mViewMediatorCallback;
@Mock private StatusBarTouchableRegionManager mStatusBarTouchableRegionManager; @Mock private StatusBarTouchableRegionManager mStatusBarTouchableRegionManager;
@@ -426,7 +425,6 @@ public class StatusBarTest extends SysuiTestCase {
mLightsOutNotifController, mLightsOutNotifController,
mStatusBarNotificationActivityStarterBuilder, mStatusBarNotificationActivityStarterBuilder,
mShadeController, mShadeController,
mStatusBarWindowView,
mStatusBarKeyguardViewManager, mStatusBarKeyguardViewManager,
mViewMediatorCallback, mViewMediatorCallback,
mInitController, mInitController,