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

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16148664

Change-Id: I53e82a7847b793c82dff74c324d705db8e54530c
This commit is contained in:
Caitlin Cassidy
2021-11-03 19:13:00 +00:00
committed by Automerger Merge Worker
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.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;
}
}

View File

@@ -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()

View File

@@ -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());
}
}

View File

@@ -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",

View File

@@ -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<ActivityLaunchAnimator.Controller> 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;
}
}

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.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,

View File

@@ -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);

View File

@@ -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,