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 4e6dcd50a0bd5..ddf1eab33e73a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -146,6 +146,7 @@ import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.colorextraction.SysuiColorExtractor; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.UiBackground; +import com.android.systemui.demomode.DemoMode; import com.android.systemui.demomode.DemoModeController; import com.android.systemui.dump.DumpManager; import com.android.systemui.emergency.EmergencyGesture; @@ -1549,7 +1550,7 @@ public class StatusBar extends CoreStartable implements mHeadsUpManager.addListener(mStatusBarComponent.getStatusBarHeadsUpChangeListener()); // Listen for demo mode changes - mDemoModeController.addCallback(mStatusBarComponent.getStatusBarDemoMode()); + mDemoModeController.addCallback(mDemoModeCallback); if (mCommandQueueCallbacks != null) { mCommandQueue.removeCallback(mCommandQueueCallbacks); @@ -4430,4 +4431,14 @@ public class StatusBar extends CoreStartable implements return mStartingSurfaceOptional.get().getBackgroundColor(task); } }; + + private final DemoMode mDemoModeCallback = new DemoMode() { + @Override + public void onDemoModeFinished() { + checkBarModes(); + } + + @Override + public void dispatchDemoCommand(String command, Bundle args) { } + }; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarDemoMode.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarDemoMode.java index e642b2e244e8f..3c09b78740a36 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarDemoMode.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarDemoMode.java @@ -21,28 +21,39 @@ import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRAN import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSLUCENT; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARENT; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_WARNING; +import static com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentModule.OPERATOR_NAME_VIEW; import android.annotation.NonNull; import android.os.Bundle; import android.view.View; -import com.android.systemui.R; import com.android.systemui.dagger.qualifiers.DisplayId; import com.android.systemui.demomode.DemoMode; import com.android.systemui.demomode.DemoModeCommandReceiver; +import com.android.systemui.demomode.DemoModeController; import com.android.systemui.navigationbar.NavigationBarController; import com.android.systemui.statusbar.NotificationShadeWindowController; -import com.android.systemui.statusbar.phone.dagger.StatusBarComponent; +import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentScope; +import com.android.systemui.statusbar.policy.Clock; +import com.android.systemui.util.ViewController; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; +import javax.inject.Named; -/** */ -@StatusBarComponent.StatusBarScope -public class StatusBarDemoMode implements DemoMode { - private final StatusBar mStatusBar; +/** + * A controller that updates status-bar-related views during demo mode. + * + * This class extends ViewController not because it controls a specific view, but because we want it + * to get torn down and re-created in line with the view's lifecycle. + */ +@StatusBarFragmentScope +public class StatusBarDemoMode extends ViewController implements DemoMode { + private final Clock mClockView; + private final View mOperatorNameView; + private final DemoModeController mDemoModeController; private final NotificationShadeWindowController mNotificationShadeWindowController; private final NotificationShadeWindowViewController mNotificationShadeWindowViewController; private final NavigationBarController mNavigationBarController; @@ -50,18 +61,33 @@ public class StatusBarDemoMode implements DemoMode { @Inject StatusBarDemoMode( - StatusBar statusBar, + Clock clockView, + @Named(OPERATOR_NAME_VIEW) View operatorNameView, + DemoModeController demoModeController, NotificationShadeWindowController notificationShadeWindowController, NotificationShadeWindowViewController notificationShadeWindowViewController, NavigationBarController navigationBarController, @DisplayId int displayId) { - mStatusBar = statusBar; + super(clockView); + mClockView = clockView; + mOperatorNameView = operatorNameView; + mDemoModeController = demoModeController; mNotificationShadeWindowController = notificationShadeWindowController; mNotificationShadeWindowViewController = notificationShadeWindowViewController; mNavigationBarController = navigationBarController; mDisplayId = displayId; } + @Override + protected void onViewAttached() { + mDemoModeController.addCallback(this); + } + + @Override + protected void onViewDetached() { + mDemoModeController.removeCallback(this); + } + @Override public List demoCommands() { List s = new ArrayList<>(); @@ -74,21 +100,23 @@ public class StatusBarDemoMode implements DemoMode { @Override public void onDemoModeStarted() { // Must send this message to any view that we delegate to via dispatchDemoCommandToView - dispatchDemoModeStartedToView(R.id.clock); - dispatchDemoModeStartedToView(R.id.operator_name); + dispatchDemoModeStartedToView(mClockView); + dispatchDemoModeStartedToView(mOperatorNameView); } @Override public void onDemoModeFinished() { - dispatchDemoModeFinishedToView(R.id.clock); - dispatchDemoModeFinishedToView(R.id.operator_name); - mStatusBar.checkBarModes(); + dispatchDemoModeFinishedToView(mClockView); + dispatchDemoModeFinishedToView(mOperatorNameView); } @Override public void dispatchDemoCommand(String command, @NonNull Bundle args) { if (command.equals(COMMAND_CLOCK)) { - dispatchDemoCommandToView(command, args, R.id.clock); + dispatchDemoCommandToView(command, args, mClockView); + } + if (command.equals(COMMAND_OPERATOR)) { + dispatchDemoCommandToView(command, args, mOperatorNameView); } if (command.equals(COMMAND_BARS)) { String mode = args.getString("mode"); @@ -108,34 +136,21 @@ public class StatusBarDemoMode implements DemoMode { mNavigationBarController.transitionTo(mDisplayId, barMode, animate); } } - if (command.equals(COMMAND_OPERATOR)) { - dispatchDemoCommandToView(command, args, R.id.operator_name); - } } - private void dispatchDemoModeStartedToView(int id) { - View statusBarView = mStatusBar.getStatusBarView(); - if (statusBarView == null) return; - View v = statusBarView.findViewById(id); + private void dispatchDemoModeStartedToView(View v) { if (v instanceof DemoModeCommandReceiver) { ((DemoModeCommandReceiver) v).onDemoModeStarted(); } } - //TODO: these should have controllers, and this method should be removed - private void dispatchDemoCommandToView(String command, Bundle args, int id) { - View statusBarView = mStatusBar.getStatusBarView(); - if (statusBarView == null) return; - View v = statusBarView.findViewById(id); + private void dispatchDemoCommandToView(String command, Bundle args, View v) { if (v instanceof DemoModeCommandReceiver) { ((DemoModeCommandReceiver) v).dispatchDemoCommand(command, args); } } - private void dispatchDemoModeFinishedToView(int id) { - View statusBarView = mStatusBar.getStatusBarView(); - if (statusBarView == null) return; - View v = statusBarView.findViewById(id); + private void dispatchDemoModeFinishedToView(View v) { if (v instanceof DemoModeCommandReceiver) { ((DemoModeCommandReceiver) v).onDemoModeFinished(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java index 4f418430fcde1..8297c194fe12c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java @@ -29,7 +29,6 @@ import com.android.systemui.statusbar.phone.NotificationShadeWindowView; import com.android.systemui.statusbar.phone.NotificationShadeWindowViewController; import com.android.systemui.statusbar.phone.SplitShadeHeaderController; import com.android.systemui.statusbar.phone.StatusBarCommandQueueCallbacks; -import com.android.systemui.statusbar.phone.StatusBarDemoMode; import com.android.systemui.statusbar.phone.StatusBarHeadsUpChangeListener; import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment; @@ -108,12 +107,6 @@ public interface StatusBarComponent { @StatusBarScope AuthRippleController getAuthRippleController(); - /** - * Creates a StatusBarDemoMode. - */ - @StatusBarScope - StatusBarDemoMode getStatusBarDemoMode(); - /** * Creates a StatusBarHeadsUpChangeListener. */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentComponent.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentComponent.java index 9dfbe88129a0d..a4ebab9b763c0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentComponent.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentComponent.java @@ -22,6 +22,7 @@ import com.android.systemui.statusbar.phone.HeadsUpAppearanceController; import com.android.systemui.statusbar.phone.LightsOutNotifController; import com.android.systemui.statusbar.phone.PhoneStatusBarView; import com.android.systemui.statusbar.phone.PhoneStatusBarViewController; +import com.android.systemui.statusbar.phone.StatusBarDemoMode; import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment; import dagger.BindsInstance; @@ -62,6 +63,7 @@ public interface StatusBarFragmentComponent { getHeadsUpAppearanceController().init(); getPhoneStatusBarViewController().init(); getLightsOutNotifController().init(); + getStatusBarDemoMode().init(); } /** */ @@ -84,4 +86,8 @@ public interface StatusBarFragmentComponent { /** */ @StatusBarFragmentScope LightsOutNotifController getLightsOutNotifController(); + + /** */ + @StatusBarFragmentScope + StatusBarDemoMode getStatusBarDemoMode(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentModule.java index f8014fc54fc09..0cbd401916b70 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentModule.java @@ -25,6 +25,7 @@ import com.android.systemui.statusbar.phone.NotificationPanelViewController; import com.android.systemui.statusbar.phone.PhoneStatusBarView; import com.android.systemui.statusbar.phone.PhoneStatusBarViewController; import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment; +import com.android.systemui.statusbar.policy.Clock; import javax.inject.Named; @@ -36,6 +37,7 @@ import dagger.Provides; public interface StatusBarFragmentModule { String LIGHTS_OUT_NOTIF_VIEW = "lights_out_notif_view"; + String OPERATOR_NAME_VIEW = "operator_name_view"; /** */ @Provides @@ -61,6 +63,21 @@ public interface StatusBarFragmentModule { return view.findViewById(R.id.notification_lights_out); } + /** */ + @Provides + @StatusBarFragmentScope + @Named(OPERATOR_NAME_VIEW) + static View provideOperatorNameView(@RootView PhoneStatusBarView view) { + return view.findViewById(R.id.operator_name); + } + + /** */ + @Provides + @StatusBarFragmentScope + static Clock provideClock(@RootView PhoneStatusBarView view) { + return view.findViewById(R.id.clock); + } + /** */ @Provides @StatusBarFragmentScope