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:
committed by
Android (Google) Code Review
commit
31bb3ec91a
@@ -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,
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user