Merge "[Status Bar Refactor] 1/3: Have HeadsUpAppearanceController be created by dagger and use it in CollapsedStatusBarFragment instead of using StatusBar.java." into sc-v2-dev

This commit is contained in:
Caitlin Cassidy
2021-11-24 21:41:55 +00:00
committed by Android (Google) Code Review
7 changed files with 67 additions and 22 deletions

View File

@@ -66,7 +66,6 @@ import com.android.systemui.statusbar.notification.row.dagger.NotificationShelfC
import com.android.systemui.statusbar.phone.ShadeController;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.statusbar.policy.ZenModeController;
@@ -125,7 +124,6 @@ import dagger.Provides;
},
subcomponents = {
StatusBarComponent.class,
StatusBarFragmentComponent.class,
NotificationRowComponent.class,
DozeComponent.class,
ExpandableNotificationRowComponent.class,

View File

@@ -24,6 +24,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.widget.ViewClippingUtil;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.RootView;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.CommandQueue;
@@ -35,15 +36,19 @@ import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentScope;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import javax.inject.Inject;
/**
* Controls the appearance of heads up notifications in the icon area and the header itself.
*/
@StatusBarFragmentScope
public class HeadsUpAppearanceController implements OnHeadsUpChangedListener,
DarkIconDispatcher.DarkReceiver, NotificationWakeUpCoordinator.WakeUpListener {
public static final int CONTENT_FADE_DURATION = 110;
@@ -83,7 +88,7 @@ public class HeadsUpAppearanceController implements OnHeadsUpChangedListener,
Point mPoint;
private KeyguardStateController mKeyguardStateController;
@Inject
public HeadsUpAppearanceController(
NotificationIconAreaController notificationIconAreaController,
HeadsUpManagerPhone headsUpManager,
@@ -92,11 +97,15 @@ public class HeadsUpAppearanceController implements OnHeadsUpChangedListener,
KeyguardBypassController keyguardBypassController,
KeyguardStateController keyguardStateController,
NotificationWakeUpCoordinator wakeUpCoordinator, CommandQueue commandQueue,
NotificationPanelViewController notificationPanelViewController, View statusBarView) {
NotificationPanelViewController notificationPanelViewController,
@RootView PhoneStatusBarView statusBarView) {
this(notificationIconAreaController, headsUpManager, statusBarStateController,
keyguardBypassController, wakeUpCoordinator, keyguardStateController,
commandQueue, notificationStackScrollLayoutController,
notificationPanelViewController,
// TODO(b/205609837): We should have the StatusBarFragmentComponent provide these
// four views, and then we can delete this constructor and just use the one below
// (which also removes the undesirable @VisibleForTesting).
statusBarView.findViewById(R.id.heads_up_status_bar_view),
statusBarView.findViewById(R.id.clock),
statusBarView.findViewById(R.id.operator_name_frame),

View File

@@ -1167,16 +1167,16 @@ public class StatusBar extends SystemUI implements
HeadsUpAppearanceController oldController = mHeadsUpAppearanceController;
if (mHeadsUpAppearanceController != null) {
// This view is being recreated, let's destroy the old one
// TODO(b/205609837): Automatically destroy the old controller so that this
// class doesn't need to hold a reference to the old one.
mHeadsUpAppearanceController.destroy();
}
// TODO (b/136993073) Separate notification shade and status bar
// TODO(b/205609837): Migrate this to StatusBarFragmentComponent.
mHeadsUpAppearanceController = new HeadsUpAppearanceController(
mNotificationIconAreaController, mHeadsUpManager,
mStackScrollerController,
mStatusBarStateController, mKeyguardBypassController,
mKeyguardStateController, mWakeUpCoordinator, mCommandQueue,
mNotificationPanelViewController, mStatusBarView);
mHeadsUpAppearanceController =
statusBarFragmentComponent.getHeadsUpAppearanceController();
// TODO(b/205609837): Delete this readFrom method so that this class doesn't
// need to hold a reference to the old controller.
mHeadsUpAppearanceController.readFrom(oldController);
mLightsOutNotifController.setLightsOutNotifView(
@@ -1904,10 +1904,6 @@ public class StatusBar extends SystemUI implements
mScrimController.setKeyguardOccluded(occluded);
}
public boolean headsUpShouldBeVisible() {
return mHeadsUpAppearanceController.shouldBeVisible();
}
/** A launch animation was cancelled. */
//TODO: These can / should probably be moved to NotificationPresenter or ShadeController
public void onLaunchAnimationCancelled(boolean isLaunchForActivity) {

View File

@@ -68,7 +68,7 @@ import dagger.Lazy;
import dagger.Module;
import dagger.Provides;
@Module
@Module(subcomponents = StatusBarFragmentComponent.class)
public abstract class StatusBarViewModule {
public static final String SPLIT_SHADE_HEADER = "split_shade_header";

View File

@@ -329,8 +329,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
}
protected int adjustDisableFlags(int state) {
boolean headsUpVisible = mStatusBarOptionalLazy.get()
.map(StatusBar::headsUpShouldBeVisible).orElse(false);
boolean headsUpVisible =
mStatusBarFragmentComponent.getHeadsUpAppearanceController().shouldBeVisible();
if (headsUpVisible) {
state |= DISABLE_CLOCK;
}

View File

@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.phone.fragment.dagger;
import com.android.systemui.battery.BatteryMeterViewController;
import com.android.systemui.dagger.qualifiers.RootView;
import com.android.systemui.statusbar.phone.HeadsUpAppearanceController;
import com.android.systemui.statusbar.phone.PhoneStatusBarView;
import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment;
@@ -66,4 +67,8 @@ public interface StatusBarFragmentComponent {
@StatusBarFragmentScope
@RootView
PhoneStatusBarView getPhoneStatusBarView();
/** */
@StatusBarFragmentScope
HeadsUpAppearanceController getHeadsUpAppearanceController();
}

View File

@@ -48,6 +48,7 @@ import com.android.systemui.statusbar.DisableFlagsLogger;
import com.android.systemui.statusbar.OperatorNameViewController;
import com.android.systemui.statusbar.connectivity.NetworkController;
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
import com.android.systemui.statusbar.phone.HeadsUpAppearanceController;
import com.android.systemui.statusbar.phone.NotificationIconAreaController;
import com.android.systemui.statusbar.phone.NotificationPanelViewController;
import com.android.systemui.statusbar.phone.StatusBar;
@@ -65,7 +66,9 @@ import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import java.util.Optional;
@@ -90,8 +93,12 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest {
private OperatorNameViewController.Factory mOperatorNameViewControllerFactory;
private OperatorNameViewController mOperatorNameViewController;
@Mock
private StatusBarFragmentComponent.Factory mStatusBarFragmentComponentFactory;
@Mock
private StatusBarFragmentComponent mStatusBarFragmentComponent;
@Mock
private HeadsUpAppearanceController mHeadsUpAppearanceController;
public CollapsedStatusBarFragmentTest() {
super(CollapsedStatusBarFragment.class);
@@ -253,6 +260,32 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest {
Mockito.verify(mNotificationAreaInner, atLeast(1)).setVisibility(eq(View.VISIBLE));
}
@Test
public void disable_headsUpShouldBeVisibleTrue_clockDisabled() {
mFragments.dispatchResume();
processAllMessages();
CollapsedStatusBarFragment fragment = (CollapsedStatusBarFragment) mFragment;
when(mHeadsUpAppearanceController.shouldBeVisible()).thenReturn(true);
fragment.disable(DEFAULT_DISPLAY, 0, 0, false);
assertEquals(View.GONE, mFragment.getView().findViewById(R.id.clock).getVisibility());
}
@Test
public void disable_headsUpShouldBeVisibleFalse_clockNotDisabled() {
mFragments.dispatchResume();
processAllMessages();
CollapsedStatusBarFragment fragment = (CollapsedStatusBarFragment) mFragment;
when(mHeadsUpAppearanceController.shouldBeVisible()).thenReturn(false);
fragment.disable(DEFAULT_DISPLAY, 0, 0, false);
assertEquals(View.VISIBLE, mFragment.getView().findViewById(R.id.clock).getVisibility());
}
@Test
public void setUp_fragmentCreatesDaggerComponent() {
mFragments.dispatchResume();
@@ -264,11 +297,8 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest {
@Override
protected Fragment instantiate(Context context, String className, Bundle arguments) {
mStatusBarFragmentComponentFactory =
mock(StatusBarFragmentComponent.Factory.class);
mStatusBarFragmentComponent = mock(StatusBarFragmentComponent.class);
when(mStatusBarFragmentComponentFactory.create(any()))
.thenReturn(mStatusBarFragmentComponent);
MockitoAnnotations.initMocks(this);
setUpDaggerComponent();
mOngoingCallController = mock(OngoingCallController.class);
mAnimationScheduler = mock(SystemStatusAnimationScheduler.class);
mLocationPublisher = mock(StatusBarLocationPublisher.class);
@@ -306,6 +336,13 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest {
mOperatorNameViewControllerFactory);
}
private void setUpDaggerComponent() {
when(mStatusBarFragmentComponentFactory.create(any()))
.thenReturn(mStatusBarFragmentComponent);
when(mStatusBarFragmentComponent.getHeadsUpAppearanceController())
.thenReturn(mHeadsUpAppearanceController);
}
private void setUpNotificationIconAreaController() {
mMockNotificationAreaController = mock(NotificationIconAreaController.class);