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 e2832d14daaef..3b5d69da4c89c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -39,9 +39,7 @@ import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OU import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT_TRANSPARENT; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT; -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.BarTransitions.TransitionMode; import static com.android.wm.shell.bubbles.BubbleController.TASKBAR_CHANGED_BROADCAST; @@ -158,8 +156,6 @@ import com.android.systemui.charging.WirelessChargingAnimation; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.colorextraction.SysuiColorExtractor; import com.android.systemui.dagger.qualifiers.UiBackground; -import com.android.systemui.demomode.DemoMode; -import com.android.systemui.demomode.DemoModeCommandReceiver; import com.android.systemui.demomode.DemoModeController; import com.android.systemui.emergency.EmergencyGesture; import com.android.systemui.fragments.ExtensionFragmentListener; @@ -718,60 +714,6 @@ public class StatusBar extends SystemUI implements private ActivityIntentHelper mActivityIntentHelper; private NotificationStackScrollLayoutController mStackScrollerController; - private final DemoMode mDemoMode = new DemoMode() { - - @Override - public List demoCommands() { - List s = new ArrayList<>(); - s.add(DemoMode.COMMAND_BARS); - s.add(DemoMode.COMMAND_CLOCK); - s.add(DemoMode.COMMAND_OPERATOR); - return s; - } - - @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); - } - - @Override - public void onDemoModeFinished() { - dispatchDemoModeFinishedToView(R.id.clock); - dispatchDemoModeFinishedToView(R.id.operator_name); - checkBarModes(); - } - - @Override - public void dispatchDemoCommand(String command, @NonNull Bundle args) { - if (command.equals(COMMAND_CLOCK)) { - dispatchDemoCommandToView(command, args, R.id.clock); - } - if (command.equals(COMMAND_BARS)) { - String mode = args.getString("mode"); - int barMode = "opaque".equals(mode) ? MODE_OPAQUE : - "translucent".equals(mode) ? MODE_TRANSLUCENT : - "semi-transparent".equals(mode) ? MODE_SEMI_TRANSPARENT : - "transparent".equals(mode) ? MODE_TRANSPARENT : - "warning".equals(mode) ? MODE_WARNING : - -1; - if (barMode != -1) { - boolean animate = true; - if (mNotificationShadeWindowController != null - && mNotificationShadeWindowViewController.getBarTransitions() != null) { - mNotificationShadeWindowViewController.getBarTransitions().transitionTo( - barMode, animate); - } - mNavigationBarController.transitionTo(mDisplayId, barMode, animate); - } - } - if (command.equals(COMMAND_OPERATOR)) { - dispatchDemoCommandToView(command, args, R.id.operator_name); - } - } - }; - /** * Public constructor for StatusBar. * @@ -1026,8 +968,6 @@ public class StatusBar extends SystemUI implements // Connect in to the status bar manager service mCommandQueue.addCallback(this); - // Listen for demo mode changes - mDemoModeController.addCallback(mDemoMode); RegisterStatusBarResult result = null; try { @@ -1655,6 +1595,9 @@ public class StatusBar extends SystemUI implements mAuthRippleController = statusBarComponent.getAuthRippleController(); mAuthRippleController.init(); + + // Listen for demo mode changes + mDemoModeController.addCallback(statusBarComponent.getStatusBarDemoMode()); } protected void startKeyguard() { @@ -3430,32 +3373,6 @@ public class StatusBar extends SystemUI implements delay); } - - //TODO: these should have controllers, and this method should be removed - private void dispatchDemoCommandToView(String command, Bundle args, int id) { - if (mStatusBarView == null) return; - View v = mStatusBarView.findViewById(id); - if (v instanceof DemoModeCommandReceiver) { - ((DemoModeCommandReceiver) v).dispatchDemoCommand(command, args); - } - } - - private void dispatchDemoModeStartedToView(int id) { - if (mStatusBarView == null) return; - View v = mStatusBarView.findViewById(id); - if (v instanceof DemoModeCommandReceiver) { - ((DemoModeCommandReceiver) v).onDemoModeStarted(); - } - } - - private void dispatchDemoModeFinishedToView(int id) { - if (mStatusBarView == null) return; - View v = mStatusBarView.findViewById(id); - if (v instanceof DemoModeCommandReceiver) { - ((DemoModeCommandReceiver) v).onDemoModeFinished(); - } - } - public void showKeyguard() { mStatusBarStateController.setKeyguardRequested(true); mStatusBarStateController.setLeaveOpenOnKeyguardHide(false); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarDemoMode.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarDemoMode.java new file mode 100644 index 0000000000000..8938f9604d3e5 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarDemoMode.java @@ -0,0 +1,144 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.phone; + +import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE; +import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT; +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 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.navigationbar.NavigationBarController; +import com.android.systemui.statusbar.NotificationShadeWindowController; +import com.android.systemui.statusbar.phone.dagger.StatusBarComponent; + +import java.util.ArrayList; +import java.util.List; + +import javax.inject.Inject; + +/** */ +@StatusBarComponent.StatusBarScope +public class StatusBarDemoMode implements DemoMode { + private final StatusBar mStatusBar; + private final NotificationShadeWindowController mNotificationShadeWindowController; + private final NotificationShadeWindowViewController mNotificationShadeWindowViewController; + private final NavigationBarController mNavigationBarController; + private final int mDisplayId; + + @Inject + StatusBarDemoMode( + StatusBar statusBar, + NotificationShadeWindowController notificationShadeWindowController, + NotificationShadeWindowViewController notificationShadeWindowViewController, + NavigationBarController navigationBarController, + @DisplayId int displayId) { + mStatusBar = statusBar; + mNotificationShadeWindowController = notificationShadeWindowController; + mNotificationShadeWindowViewController = notificationShadeWindowViewController; + mNavigationBarController = navigationBarController; + mDisplayId = displayId; + } + + @Override + public List demoCommands() { + List s = new ArrayList<>(); + s.add(DemoMode.COMMAND_BARS); + s.add(DemoMode.COMMAND_CLOCK); + s.add(DemoMode.COMMAND_OPERATOR); + return s; + } + + @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); + } + + @Override + public void onDemoModeFinished() { + dispatchDemoModeFinishedToView(R.id.clock); + dispatchDemoModeFinishedToView(R.id.operator_name); + mStatusBar.checkBarModes(); + } + + @Override + public void dispatchDemoCommand(String command, @NonNull Bundle args) { + if (command.equals(COMMAND_CLOCK)) { + dispatchDemoCommandToView(command, args, R.id.clock); + } + if (command.equals(COMMAND_BARS)) { + String mode = args.getString("mode"); + int barMode = "opaque".equals(mode) ? MODE_OPAQUE : + "translucent".equals(mode) ? MODE_TRANSLUCENT : + "semi-transparent".equals(mode) ? MODE_SEMI_TRANSPARENT : + "transparent".equals(mode) ? MODE_TRANSPARENT : + "warning".equals(mode) ? MODE_WARNING : + -1; + if (barMode != -1) { + boolean animate = true; + if (mNotificationShadeWindowController != null + && mNotificationShadeWindowViewController.getBarTransitions() != null) { + mNotificationShadeWindowViewController.getBarTransitions().transitionTo( + barMode, animate); + } + 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); + 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); + 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); + 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 4fab22676eaea..a4063bb20c3c7 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 @@ -24,6 +24,7 @@ import com.android.systemui.statusbar.phone.NotificationPanelViewController; 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.StatusBarDemoMode; import com.android.systemui.statusbar.phone.StatusBarWindowController; import java.lang.annotation.Documented; @@ -88,6 +89,12 @@ public interface StatusBarComponent { @StatusBarScope AuthRippleController getAuthRippleController(); + /** + * Creates a StatusBarDemoMode. + */ + @StatusBarScope + StatusBarDemoMode getStatusBarDemoMode(); + /** * Creates a SplitShadeHeaderController. */