From 74a9155f2d9324027c884c18ab0fa7cb1916a372 Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Fri, 13 Aug 2021 17:33:16 -0400 Subject: [PATCH] 1/N Add an OperatorNameViewController. Bug: 196625757 Test: manual Change-Id: I2754321c7572682048df1678893d8475835da86f --- .../statusbar/OperatorNameViewController.java | 59 +++++++++++++++++++ .../phone/CollapsedStatusBarFragment.java | 21 ++++--- .../systemui/statusbar/phone/StatusBar.java | 9 ++- .../phone/dagger/StatusBarPhoneModule.java | 5 +- .../phone/CollapsedStatusBarFragmentTest.java | 12 +++- .../phone/PhoneStatusBarViewControllerTest.kt | 1 - .../statusbar/phone/StatusBarTest.java | 9 ++- 7 files changed, 103 insertions(+), 13 deletions(-) create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java new file mode 100644 index 0000000000000..f37a580943a07 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java @@ -0,0 +1,59 @@ +/* + * 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; + +import android.view.View; + +import com.android.systemui.util.ViewController; + +import javax.inject.Inject; + +/** Controller for {@link OperatorNameView}. */ +public class OperatorNameViewController extends ViewController { + private OperatorNameViewController(OperatorNameView view) { + super(view); + } + + @Override + protected void onViewAttached() { + } + + @Override + protected void onViewDetached() { + } + + /** Factory for constructing an {@link OperatorNameViewController}. */ + public static class Factory { + @Inject + public Factory() { + } + + /** Create an {@link OperatorNameViewController}. */ + public OperatorNameViewController create(OperatorNameView view) { + return new OperatorNameViewController(view); + } + } + + /** + * Needed because of how {@link CollapsedStatusBarFragment} works. + * + * Ideally this can be done internally. + **/ + public View getView() { + return mView; + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java index 1bd26c3359885..45348d9f5977d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java @@ -42,6 +42,8 @@ import com.android.systemui.animation.Interpolators; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.CommandQueue; +import com.android.systemui.statusbar.OperatorNameView; +import com.android.systemui.statusbar.OperatorNameViewController; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.events.SystemStatusAnimationCallback; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; @@ -90,8 +92,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue private int mDisabled2; private Lazy> mStatusBarOptionalLazy; private DarkIconManager mDarkIconManager; - private View mOperatorNameFrame; private final CommandQueue mCommandQueue; + private final OperatorNameViewController.Factory mOperatorNameViewControllerFactory; private final OngoingCallController mOngoingCallController; private final SystemStatusAnimationScheduler mAnimationScheduler; private final StatusBarLocationPublisher mLocationPublisher; @@ -114,6 +116,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue disable(getContext().getDisplayId(), mDisabled1, mDisabled2, animate); } }; + private OperatorNameViewController mOperatorNameViewController; @Inject public CollapsedStatusBarFragment( @@ -127,7 +130,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue NetworkController networkController, StatusBarStateController statusBarStateController, Lazy> statusBarOptionalLazy, - CommandQueue commandQueue + CommandQueue commandQueue, + OperatorNameViewController.Factory operatorNameViewControllerFactory ) { mOngoingCallController = ongoingCallController; mAnimationScheduler = animationScheduler; @@ -140,6 +144,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue mStatusBarStateController = statusBarStateController; mStatusBarOptionalLazy = statusBarOptionalLazy; mCommandQueue = commandQueue; + mOperatorNameViewControllerFactory = operatorNameViewControllerFactory; } @Override @@ -411,14 +416,14 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue } public void hideOperatorName(boolean animate) { - if (mOperatorNameFrame != null) { - animateHide(mOperatorNameFrame, animate); + if (mOperatorNameViewController != null) { + animateHide(mOperatorNameViewController.getView(), animate); } } public void showOperatorName(boolean animate) { - if (mOperatorNameFrame != null) { - animateShow(mOperatorNameFrame, animate); + if (mOperatorNameViewController != null) { + animateShow(mOperatorNameViewController.getView(), animate); } } @@ -495,7 +500,9 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue private void initOperatorName() { if (getResources().getBoolean(R.bool.config_showOperatorNameInStatusBar)) { ViewStub stub = mStatusBar.findViewById(R.id.operator_name); - mOperatorNameFrame = stub.inflate(); + mOperatorNameViewController = + mOperatorNameViewControllerFactory.create((OperatorNameView) stub.inflate()); + mOperatorNameViewController.init(); } } 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 61a63b38886cf..c9f90a2e32cbf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -189,6 +189,7 @@ import com.android.systemui.statusbar.NotificationShadeDepthController; import com.android.systemui.statusbar.NotificationShadeWindowController; import com.android.systemui.statusbar.NotificationShelfController; import com.android.systemui.statusbar.NotificationViewHierarchyManager; +import com.android.systemui.statusbar.OperatorNameViewController; import com.android.systemui.statusbar.PowerButtonReveal; import com.android.systemui.statusbar.PulseExpansionHandler; import com.android.systemui.statusbar.StatusBarState; @@ -224,8 +225,8 @@ import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.UserInfoControllerImpl; import com.android.systemui.statusbar.policy.UserSwitcherController; -import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation; import com.android.systemui.tuner.TunerService; +import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation; import com.android.systemui.volume.VolumeComponent; import com.android.systemui.wmshell.BubblesManager; import com.android.unfold.config.UnfoldTransitionConfig; @@ -523,6 +524,7 @@ public class StatusBar extends SystemUI implements // settings private QSPanelController mQSPanelController; + private final OperatorNameViewController.Factory mOperatorNameViewControllerFactory; KeyguardIndicationController mKeyguardIndicationController; private View mReportRejectedTouch; @@ -862,6 +864,7 @@ public class StatusBar extends SystemUI implements KeyguardDismissUtil keyguardDismissUtil, ExtensionController extensionController, UserInfoControllerImpl userInfoControllerImpl, + OperatorNameViewController.Factory operatorNameViewControllerFactory, PhoneStatusBarPolicy phoneStatusBarPolicy, KeyguardIndicationController keyguardIndicationController, DemoModeController demoModeController, @@ -892,6 +895,7 @@ public class StatusBar extends SystemUI implements mKeyguardBypassController = keyguardBypassController; mKeyguardStateController = keyguardStateController; mHeadsUpManager = headsUpManagerPhone; + mOperatorNameViewControllerFactory = operatorNameViewControllerFactory; mKeyguardIndicationController = keyguardIndicationController; mStatusBarTouchableRegionManager = statusBarTouchableRegionManager; mDynamicPrivacyController = dynamicPrivacyController; @@ -1282,7 +1286,8 @@ public class StatusBar extends SystemUI implements mNetworkController, mStatusBarStateController, () -> Optional.of(this), - mCommandQueue + mCommandQueue, + mOperatorNameViewControllerFactory ), CollapsedStatusBarFragment.TAG) .commit(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java index 4074caaa2fb44..2a34794c5acfa 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java @@ -55,6 +55,7 @@ import com.android.systemui.statusbar.NotificationRemoteInputManager; import com.android.systemui.statusbar.NotificationShadeDepthController; import com.android.systemui.statusbar.NotificationShadeWindowController; import com.android.systemui.statusbar.NotificationViewHierarchyManager; +import com.android.systemui.statusbar.OperatorNameViewController; import com.android.systemui.statusbar.PulseExpansionHandler; import com.android.systemui.statusbar.SuperStatusBarViewFactory; import com.android.systemui.statusbar.SysuiStatusBarStateController; @@ -100,8 +101,8 @@ import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.UserInfoControllerImpl; import com.android.systemui.statusbar.policy.UserSwitcherController; -import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation; import com.android.systemui.tuner.TunerService; +import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation; import com.android.systemui.volume.VolumeComponent; import com.android.systemui.wmshell.BubblesManager; import com.android.unfold.config.UnfoldTransitionConfig; @@ -199,6 +200,7 @@ public interface StatusBarPhoneModule { KeyguardDismissUtil keyguardDismissUtil, ExtensionController extensionController, UserInfoControllerImpl userInfoControllerImpl, + OperatorNameViewController.Factory operatorNameViewControllerFactory, PhoneStatusBarPolicy phoneStatusBarPolicy, KeyguardIndicationController keyguardIndicationController, DemoModeController demoModeController, @@ -288,6 +290,7 @@ public interface StatusBarPhoneModule { keyguardDismissUtil, extensionController, userInfoControllerImpl, + operatorNameViewControllerFactory, phoneStatusBarPolicy, keyguardIndicationController, demoModeController, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java index 55c69f71ec1a9..e159caebd15c1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java @@ -17,6 +17,7 @@ package com.android.systemui.statusbar.phone; import static android.view.Display.DEFAULT_DISPLAY; import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.mock; @@ -40,6 +41,7 @@ import com.android.systemui.SysuiBaseFragmentTest; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.CommandQueue; +import com.android.systemui.statusbar.OperatorNameViewController; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; import com.android.systemui.statusbar.policy.KeyguardStateController; @@ -72,6 +74,8 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { private final StatusBar mStatusBar = mock(StatusBar.class); private final CommandQueue mCommandQueue = mock(CommandQueue.class); + private OperatorNameViewController.Factory mOperatorNameViewControllerFactory; + private OperatorNameViewController mOperatorNameViewController; public CollapsedStatusBarFragmentTest() { @@ -243,6 +247,11 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { mNetworkController = mock(NetworkController.class); mStatusBarStateController = mock(StatusBarStateController.class); mKeyguardStateController = mock(KeyguardStateController.class); + mOperatorNameViewController = mock(OperatorNameViewController.class); + mOperatorNameViewControllerFactory = mock(OperatorNameViewController.Factory.class); + when(mOperatorNameViewControllerFactory.create(any())) + .thenReturn(mOperatorNameViewController); + setUpNotificationIconAreaController(); return new CollapsedStatusBarFragment( mOngoingCallController, @@ -255,7 +264,8 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { mNetworkController, mStatusBarStateController, () -> Optional.of(mStatusBar), - mCommandQueue); + mCommandQueue, + mOperatorNameViewControllerFactory); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewControllerTest.kt index 50cea073c7015..d63730d596d03 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewControllerTest.kt @@ -38,7 +38,6 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() { @Before fun setUp() { MockitoAnnotations.initMocks(this) - view = PhoneStatusBarView(mContext, null) controller = PhoneStatusBarViewController(view, commandQueue) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java index 216be628620a9..079a621546dd7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java @@ -105,6 +105,7 @@ import com.android.systemui.statusbar.NotificationRemoteInputManager; import com.android.systemui.statusbar.NotificationShadeDepthController; import com.android.systemui.statusbar.NotificationShadeWindowController; import com.android.systemui.statusbar.NotificationViewHierarchyManager; +import com.android.systemui.statusbar.OperatorNameViewController; import com.android.systemui.statusbar.PulseExpansionHandler; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarStateControllerImpl; @@ -137,8 +138,8 @@ import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.UserInfoControllerImpl; import com.android.systemui.statusbar.policy.UserSwitcherController; -import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation; import com.android.systemui.tuner.TunerService; +import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.volume.VolumeComponent; @@ -267,6 +268,8 @@ public class StatusBarTest extends SysuiTestCase { @Mock private UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController; @Mock private TunerService mTunerService; @Mock private StartingSurface mStartingSurface; + @Mock private OperatorNameViewController mOperatorNameViewController; + @Mock private OperatorNameViewController.Factory mOperatorNameViewControllerFactory; private ShadeController mShadeController; private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock()); private InitController mInitController = new InitController(); @@ -345,6 +348,9 @@ public class StatusBarTest extends SysuiTestCase { mStatusBarKeyguardViewManager, mContext.getSystemService(WindowManager.class), () -> Optional.of(mStatusBar), () -> mAssistManager, Optional.of(mBubbles)); + when(mOperatorNameViewControllerFactory.create(any())) + .thenReturn(mOperatorNameViewController); + mStatusBar = new StatusBar( mContext, mNotificationsController, @@ -413,6 +419,7 @@ public class StatusBarTest extends SysuiTestCase { mKeyguardDismissUtil, mExtensionController, mUserInfoControllerImpl, + mOperatorNameViewControllerFactory, mPhoneStatusBarPolicy, mKeyguardIndicationController, mDemoModeController,