[Status Bar Refactor] Make StatusBarDemoMode part of the fragment

component so it's re-created each time we get a new status bar view.

This also lets us remove some StatusBar.java #getStatusBarView calls
because the demo mode class now just gets access to the views via its
dagger component.

Bug: 209005990
Bug: 205609837
Test: manual (verified demo mode still works)

Change-Id: I4522f2d0c09260369725286a72e3e664abbb87db
This commit is contained in:
Caitlin Cassidy
2021-12-03 18:37:29 +00:00
parent b1f9ef728f
commit 7ffc220960
5 changed files with 80 additions and 38 deletions

View File

@@ -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;
@@ -1547,7 +1548,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);
@@ -4420,4 +4421,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) { }
};
}

View File

@@ -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<View> 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<String> demoCommands() {
List<String> 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();
}

View File

@@ -27,7 +27,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;
@@ -105,12 +104,6 @@ public interface StatusBarComponent {
@StatusBarScope
AuthRippleController getAuthRippleController();
/**
* Creates a StatusBarDemoMode.
*/
@StatusBarScope
StatusBarDemoMode getStatusBarDemoMode();
/**
* Creates a StatusBarHeadsUpChangeListener.
*/

View File

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

View File

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