From 9c4fcb83de6647d65e65360110c0a903bead4fe7 Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Fri, 13 Aug 2021 17:33:16 -0400 Subject: [PATCH 1/6] 1/N Add an OperatorNameViewController. Bug: 196625757 Test: manual Change-Id: I2754321c7572682048df1678893d8475835da86f Merged-In: 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 7610e6138ebbc..96c405866a683 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 KeyguardStateController keyguardStateController, NetworkController networkController, StatusBarStateController statusBarStateController, - CommandQueue commandQueue + CommandQueue commandQueue, + OperatorNameViewController.Factory operatorNameViewControllerFactory ) { mOngoingCallController = ongoingCallController; mAnimationScheduler = animationScheduler; @@ -140,6 +144,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue mNetworkController = networkController; mStatusBarStateController = statusBarStateController; 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 444432e0fecf2..6e16f38cdd5fe 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 mKeyguardStateController, mNetworkController, mStatusBarStateController, - 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 b051a5987fbcb..5f4670045ad64 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; @@ -71,6 +73,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() { super(CollapsedStatusBarFragment.class); @@ -241,6 +245,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, @@ -253,7 +262,8 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { mKeyguardStateController, mNetworkController, mStatusBarStateController, - mCommandQueue); + mCommandQueue, + mOperatorNameViewControllerFactory); } private void setUpNotificationIconAreaController() { 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, From f5204b6c51a1aee58260f5e5a00651fa11bf8380 Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Fri, 13 Aug 2021 17:35:54 -0400 Subject: [PATCH 2/6] 2/N Move DarkModeReceiver to OperatorNameViewController. Bug: 196625757 Test: manual Change-Id: Icc344bad703465df8f7a897643348aa0b359b840 --- .../systemui/statusbar/OperatorNameView.java | 12 +---------- .../statusbar/OperatorNameViewController.java | 20 ++++++++++++++++--- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameView.java b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameView.java index cc7a4f836c633..f88bde0166e28 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameView.java @@ -15,7 +15,6 @@ package com.android.systemui.statusbar; import android.content.Context; -import android.graphics.Rect; import android.os.Bundle; import android.telephony.ServiceState; import android.telephony.SubscriptionInfo; @@ -29,8 +28,6 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.settingslib.WirelessUtils; import com.android.systemui.Dependency; import com.android.systemui.demomode.DemoModeCommandReceiver; -import com.android.systemui.plugins.DarkIconDispatcher; -import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; @@ -40,7 +37,7 @@ import com.android.systemui.tuner.TunerService.Tunable; import java.util.List; /** Shows the operator name */ -public class OperatorNameView extends TextView implements DemoModeCommandReceiver, DarkReceiver, +public class OperatorNameView extends TextView implements DemoModeCommandReceiver, SignalCallback, Tunable { private static final String KEY_SHOW_OPERATOR_NAME = "show_operator_name"; @@ -72,7 +69,6 @@ public class OperatorNameView extends TextView implements DemoModeCommandReceive super.onAttachedToWindow(); mKeyguardUpdateMonitor = Dependency.get(KeyguardUpdateMonitor.class); mKeyguardUpdateMonitor.registerCallback(mCallback); - Dependency.get(DarkIconDispatcher.class).addDarkReceiver(this); Dependency.get(NetworkController.class).addCallback(this); Dependency.get(TunerService.class).addTunable(this, KEY_SHOW_OPERATOR_NAME); } @@ -81,16 +77,10 @@ public class OperatorNameView extends TextView implements DemoModeCommandReceive protected void onDetachedFromWindow() { super.onDetachedFromWindow(); mKeyguardUpdateMonitor.removeCallback(mCallback); - Dependency.get(DarkIconDispatcher.class).removeDarkReceiver(this); Dependency.get(NetworkController.class).removeCallback(this); Dependency.get(TunerService.class).removeTunable(this); } - @Override - public void onDarkChanged(Rect area, float darkIntensity, int tint) { - setTextColor(DarkIconDispatcher.getTint(area, this, tint)); - } - @Override public void setIsAirplaneMode(IconState icon) { update(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java index f37a580943a07..8537aa7f968db 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java @@ -18,33 +18,43 @@ package com.android.systemui.statusbar; import android.view.View; +import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.util.ViewController; import javax.inject.Inject; /** Controller for {@link OperatorNameView}. */ public class OperatorNameViewController extends ViewController { - private OperatorNameViewController(OperatorNameView view) { + private final DarkIconDispatcher mDarkIconDispatcher; + + private OperatorNameViewController(OperatorNameView view, + DarkIconDispatcher darkIconDispatcher) { super(view); + mDarkIconDispatcher = darkIconDispatcher; } @Override protected void onViewAttached() { + mDarkIconDispatcher.addDarkReceiver(mDarkReceiver); } @Override protected void onViewDetached() { + mDarkIconDispatcher.removeDarkReceiver(mDarkReceiver); } /** Factory for constructing an {@link OperatorNameViewController}. */ public static class Factory { + private final DarkIconDispatcher mDarkIconDispatcher; + @Inject - public Factory() { + public Factory(DarkIconDispatcher darkIconDispatcher) { + mDarkIconDispatcher = darkIconDispatcher; } /** Create an {@link OperatorNameViewController}. */ public OperatorNameViewController create(OperatorNameView view) { - return new OperatorNameViewController(view); + return new OperatorNameViewController(view, mDarkIconDispatcher); } } @@ -56,4 +66,8 @@ public class OperatorNameViewController extends ViewController public View getView() { return mView; } + + private final DarkIconDispatcher.DarkReceiver mDarkReceiver = + (area, darkIntensity, tint) -> + mView.setTextColor(DarkIconDispatcher.getTint(area, mView, tint)); } From c0777560244c681e052c4d8db3dcda1e1d956a17 Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Fri, 13 Aug 2021 17:38:49 -0400 Subject: [PATCH 3/6] 3/N Move SignalCallback to OperatorNameViewController. Bug: 196625757 Test: manual Change-Id: I73e8dec6fef63c10618656c975e30bb94cace03f --- .../systemui/statusbar/OperatorNameView.java | 15 ++----------- .../statusbar/OperatorNameViewController.java | 21 ++++++++++++++++--- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameView.java b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameView.java index f88bde0166e28..ef21a743b6a2d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameView.java @@ -28,17 +28,13 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.settingslib.WirelessUtils; import com.android.systemui.Dependency; import com.android.systemui.demomode.DemoModeCommandReceiver; -import com.android.systemui.statusbar.policy.NetworkController; -import com.android.systemui.statusbar.policy.NetworkController.IconState; -import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService.Tunable; import java.util.List; /** Shows the operator name */ -public class OperatorNameView extends TextView implements DemoModeCommandReceiver, - SignalCallback, Tunable { +public class OperatorNameView extends TextView implements DemoModeCommandReceiver, Tunable { private static final String KEY_SHOW_OPERATOR_NAME = "show_operator_name"; @@ -69,7 +65,6 @@ public class OperatorNameView extends TextView implements DemoModeCommandReceive super.onAttachedToWindow(); mKeyguardUpdateMonitor = Dependency.get(KeyguardUpdateMonitor.class); mKeyguardUpdateMonitor.registerCallback(mCallback); - Dependency.get(NetworkController.class).addCallback(this); Dependency.get(TunerService.class).addTunable(this, KEY_SHOW_OPERATOR_NAME); } @@ -77,15 +72,9 @@ public class OperatorNameView extends TextView implements DemoModeCommandReceive protected void onDetachedFromWindow() { super.onDetachedFromWindow(); mKeyguardUpdateMonitor.removeCallback(mCallback); - Dependency.get(NetworkController.class).removeCallback(this); Dependency.get(TunerService.class).removeTunable(this); } - @Override - public void setIsAirplaneMode(IconState icon) { - update(); - } - @Override public void onTuningChanged(String key, String newValue) { update(); @@ -107,7 +96,7 @@ public class OperatorNameView extends TextView implements DemoModeCommandReceive update(); } - private void update() { + void update() { boolean showOperatorName = Dependency.get(TunerService.class) .getValue(KEY_SHOW_OPERATOR_NAME, 1) != 0; setVisibility(showOperatorName ? VISIBLE : GONE); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java index 8537aa7f968db..41b7e5d3acca7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java @@ -19,6 +19,7 @@ package com.android.systemui.statusbar; import android.view.View; import com.android.systemui.plugins.DarkIconDispatcher; +import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.util.ViewController; import javax.inject.Inject; @@ -26,35 +27,42 @@ import javax.inject.Inject; /** Controller for {@link OperatorNameView}. */ public class OperatorNameViewController extends ViewController { private final DarkIconDispatcher mDarkIconDispatcher; + private final NetworkController mNetworkController; private OperatorNameViewController(OperatorNameView view, - DarkIconDispatcher darkIconDispatcher) { + DarkIconDispatcher darkIconDispatcher, + NetworkController networkController) { super(view); mDarkIconDispatcher = darkIconDispatcher; + mNetworkController = networkController; } @Override protected void onViewAttached() { mDarkIconDispatcher.addDarkReceiver(mDarkReceiver); + mNetworkController.addCallback(mSignalCallback); } @Override protected void onViewDetached() { mDarkIconDispatcher.removeDarkReceiver(mDarkReceiver); + mNetworkController.addCallback(mSignalCallback); } /** Factory for constructing an {@link OperatorNameViewController}. */ public static class Factory { private final DarkIconDispatcher mDarkIconDispatcher; + private final NetworkController mNetworkController; @Inject - public Factory(DarkIconDispatcher darkIconDispatcher) { + public Factory(DarkIconDispatcher darkIconDispatcher, NetworkController networkController) { mDarkIconDispatcher = darkIconDispatcher; + mNetworkController = networkController; } /** Create an {@link OperatorNameViewController}. */ public OperatorNameViewController create(OperatorNameView view) { - return new OperatorNameViewController(view, mDarkIconDispatcher); + return new OperatorNameViewController(view, mDarkIconDispatcher, mNetworkController); } } @@ -70,4 +78,11 @@ public class OperatorNameViewController extends ViewController private final DarkIconDispatcher.DarkReceiver mDarkReceiver = (area, darkIntensity, tint) -> mView.setTextColor(DarkIconDispatcher.getTint(area, mView, tint)); + private final NetworkController.SignalCallback mSignalCallback = + new NetworkController.SignalCallback() { + @Override + public void setIsAirplaneMode(NetworkController.IconState icon) { + mView.update(); + } + }; } From cbf3513180833629d15524c457f3bdf94b1abe85 Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Fri, 13 Aug 2021 18:05:04 -0400 Subject: [PATCH 4/6] 4/N Move Tunable to OperatorNameViewController Bug: 196625757 Test: manual Change-Id: I8f154b4ffbf76b7139c96e9272a89bb74d811a1a --- .../systemui/statusbar/OperatorNameView.java | 39 ++----------- .../statusbar/OperatorNameViewController.java | 57 +++++++++++++++++-- 2 files changed, 57 insertions(+), 39 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameView.java b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameView.java index ef21a743b6a2d..9b2d2b6f81892 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameView.java @@ -15,7 +15,6 @@ package com.android.systemui.statusbar; import android.content.Context; -import android.os.Bundle; import android.telephony.ServiceState; import android.telephony.SubscriptionInfo; import android.telephony.TelephonyManager; @@ -27,17 +26,11 @@ import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.settingslib.WirelessUtils; import com.android.systemui.Dependency; -import com.android.systemui.demomode.DemoModeCommandReceiver; -import com.android.systemui.tuner.TunerService; -import com.android.systemui.tuner.TunerService.Tunable; import java.util.List; /** Shows the operator name */ -public class OperatorNameView extends TextView implements DemoModeCommandReceiver, Tunable { - - private static final String KEY_SHOW_OPERATOR_NAME = "show_operator_name"; - +public class OperatorNameView extends TextView { private KeyguardUpdateMonitor mKeyguardUpdateMonitor; private boolean mDemoMode; @@ -64,44 +57,22 @@ public class OperatorNameView extends TextView implements DemoModeCommandReceive protected void onAttachedToWindow() { super.onAttachedToWindow(); mKeyguardUpdateMonitor = Dependency.get(KeyguardUpdateMonitor.class); - mKeyguardUpdateMonitor.registerCallback(mCallback); - Dependency.get(TunerService.class).addTunable(this, KEY_SHOW_OPERATOR_NAME); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); mKeyguardUpdateMonitor.removeCallback(mCallback); - Dependency.get(TunerService.class).removeTunable(this); } - @Override - public void onTuningChanged(String key, String newValue) { - update(); + + void setDemoMode(boolean demoMode) { + mDemoMode = demoMode; } - @Override - public void dispatchDemoCommand(String command, Bundle args) { - setText(args.getString("name")); - } - - @Override - public void onDemoModeStarted() { - mDemoMode = true; - } - - @Override - public void onDemoModeFinished() { - mDemoMode = false; - update(); - } - - void update() { - boolean showOperatorName = Dependency.get(TunerService.class) - .getValue(KEY_SHOW_OPERATOR_NAME, 1) != 0; + void update(boolean showOperatorName, boolean hasMobile) { setVisibility(showOperatorName ? VISIBLE : GONE); - boolean hasMobile = mContext.getSystemService(TelephonyManager.class).isDataCapable(); boolean airplaneMode = WirelessUtils.isAirplaneModeOn(mContext); if (!hasMobile || airplaneMode) { setText(null); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java index 41b7e5d3acca7..9c7fed435bea8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java @@ -16,53 +16,78 @@ package com.android.systemui.statusbar; +import android.os.Bundle; +import android.telephony.TelephonyManager; import android.view.View; +import com.android.systemui.demomode.DemoModeCommandReceiver; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.statusbar.policy.NetworkController; +import com.android.systemui.tuner.TunerService; import com.android.systemui.util.ViewController; import javax.inject.Inject; /** Controller for {@link OperatorNameView}. */ public class OperatorNameViewController extends ViewController { + private static final String KEY_SHOW_OPERATOR_NAME = "show_operator_name"; + private final DarkIconDispatcher mDarkIconDispatcher; private final NetworkController mNetworkController; + private final TunerService mTunerService; + private final TelephonyManager mTelephonyManager; private OperatorNameViewController(OperatorNameView view, DarkIconDispatcher darkIconDispatcher, - NetworkController networkController) { + NetworkController networkController, + TunerService tunerService, + TelephonyManager telephonyManager) { super(view); mDarkIconDispatcher = darkIconDispatcher; mNetworkController = networkController; + mTunerService = tunerService; + mTelephonyManager = telephonyManager; } @Override protected void onViewAttached() { mDarkIconDispatcher.addDarkReceiver(mDarkReceiver); mNetworkController.addCallback(mSignalCallback); + mTunerService.addTunable(mTunable, KEY_SHOW_OPERATOR_NAME); } @Override protected void onViewDetached() { mDarkIconDispatcher.removeDarkReceiver(mDarkReceiver); - mNetworkController.addCallback(mSignalCallback); + mNetworkController.removeCallback(mSignalCallback); + mTunerService.removeTunable(mTunable); + } + + private void update() { + mView.update(mTunerService.getValue(KEY_SHOW_OPERATOR_NAME, 1) != 0, + mTelephonyManager.isDataCapable()); } /** Factory for constructing an {@link OperatorNameViewController}. */ public static class Factory { private final DarkIconDispatcher mDarkIconDispatcher; private final NetworkController mNetworkController; + private final TunerService mTunerService; + private final TelephonyManager mTelephonyManager; @Inject - public Factory(DarkIconDispatcher darkIconDispatcher, NetworkController networkController) { + public Factory(DarkIconDispatcher darkIconDispatcher, NetworkController networkController, + TunerService tunerService, TelephonyManager telephonyManager) { mDarkIconDispatcher = darkIconDispatcher; mNetworkController = networkController; + mTunerService = tunerService; + mTelephonyManager = telephonyManager; } /** Create an {@link OperatorNameViewController}. */ public OperatorNameViewController create(OperatorNameView view) { - return new OperatorNameViewController(view, mDarkIconDispatcher, mNetworkController); + return new OperatorNameViewController(view, mDarkIconDispatcher, mNetworkController, + mTunerService, mTelephonyManager); } } @@ -78,11 +103,33 @@ public class OperatorNameViewController extends ViewController private final DarkIconDispatcher.DarkReceiver mDarkReceiver = (area, darkIntensity, tint) -> mView.setTextColor(DarkIconDispatcher.getTint(area, mView, tint)); + private final NetworkController.SignalCallback mSignalCallback = new NetworkController.SignalCallback() { @Override public void setIsAirplaneMode(NetworkController.IconState icon) { - mView.update(); + update(); + } + }; + + private final TunerService.Tunable mTunable = (key, newValue) -> update(); + + // TODO: do we even register this anywhere? + private final DemoModeCommandReceiver mDemoModeCommandReceiver = new DemoModeCommandReceiver() { + @Override + public void onDemoModeStarted() { + mView.setDemoMode(true); + } + + @Override + public void onDemoModeFinished() { + mView.setDemoMode(false); + update(); + } + + @Override + public void dispatchDemoCommand(String command, Bundle args) { + mView.setText(args.getString("name")); } }; } From 87b5fbae8002b81f68851a739b01c577f382e6a5 Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Fri, 13 Aug 2021 20:32:47 -0400 Subject: [PATCH 5/6] 5/N Move KeyguardUpdateMonitor to OperatorNameViewController. Bug: 196625757 Test: manual Change-Id: Ib9181eeac5eda86b3a2701b08bbde21bdffe56fc --- .../systemui/statusbar/OperatorNameView.java | 45 ++--------- .../statusbar/OperatorNameViewController.java | 74 ++++++++++++++++++- 2 files changed, 78 insertions(+), 41 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameView.java b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameView.java index 9b2d2b6f81892..4a6d7e184ec24 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameView.java @@ -15,32 +15,18 @@ package com.android.systemui.statusbar; import android.content.Context; -import android.telephony.ServiceState; -import android.telephony.SubscriptionInfo; -import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.AttributeSet; import android.widget.TextView; -import com.android.keyguard.KeyguardUpdateMonitor; -import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.settingslib.WirelessUtils; -import com.android.systemui.Dependency; import java.util.List; /** Shows the operator name */ public class OperatorNameView extends TextView { - private KeyguardUpdateMonitor mKeyguardUpdateMonitor; private boolean mDemoMode; - private final KeyguardUpdateMonitorCallback mCallback = new KeyguardUpdateMonitorCallback() { - @Override - public void onRefreshCarrierInfo() { - updateText(); - } - }; - public OperatorNameView(Context context) { this(context, null); } @@ -53,24 +39,12 @@ public class OperatorNameView extends TextView { super(context, attrs, defStyle); } - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - mKeyguardUpdateMonitor = Dependency.get(KeyguardUpdateMonitor.class); - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - mKeyguardUpdateMonitor.removeCallback(mCallback); - } - - void setDemoMode(boolean demoMode) { mDemoMode = demoMode; } - void update(boolean showOperatorName, boolean hasMobile) { + void update(boolean showOperatorName, boolean hasMobile, + List subs) { setVisibility(showOperatorName ? VISIBLE : GONE); boolean airplaneMode = WirelessUtils.isAirplaneModeOn(mContext); @@ -81,22 +55,19 @@ public class OperatorNameView extends TextView { } if (!mDemoMode) { - updateText(); + updateText(subs); } } - private void updateText() { + void updateText(List subs) { CharSequence displayText = null; - List subs = mKeyguardUpdateMonitor.getFilteredSubscriptionInfo(false); final int N = subs.size(); for (int i = 0; i < N; i++) { - int subId = subs.get(i).getSubscriptionId(); - int simState = mKeyguardUpdateMonitor.getSimState(subId); + OperatorNameViewController.SubInfo subInfo = subs.get(i); CharSequence carrierName = subs.get(i).getCarrierName(); - if (!TextUtils.isEmpty(carrierName) && simState == TelephonyManager.SIM_STATE_READY) { - ServiceState ss = mKeyguardUpdateMonitor.getServiceState(subId); - if (ss != null && ss.getState() == ServiceState.STATE_IN_SERVICE) { - displayText = carrierName; + if (!TextUtils.isEmpty(carrierName) && subInfo.simReady()) { + if (subInfo.stateInService()) { + displayText = subInfo.getCarrierName(); break; } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java index 9c7fed435bea8..e49f48f2cf498 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java @@ -17,15 +17,22 @@ package com.android.systemui.statusbar; import android.os.Bundle; +import android.telephony.ServiceState; +import android.telephony.SubscriptionInfo; import android.telephony.TelephonyManager; import android.view.View; +import com.android.keyguard.KeyguardUpdateMonitor; +import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.demomode.DemoModeCommandReceiver; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.tuner.TunerService; import com.android.systemui.util.ViewController; +import java.util.ArrayList; +import java.util.List; + import javax.inject.Inject; /** Controller for {@link OperatorNameView}. */ @@ -36,17 +43,20 @@ public class OperatorNameViewController extends ViewController private final NetworkController mNetworkController; private final TunerService mTunerService; private final TelephonyManager mTelephonyManager; + private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private OperatorNameViewController(OperatorNameView view, DarkIconDispatcher darkIconDispatcher, NetworkController networkController, TunerService tunerService, - TelephonyManager telephonyManager) { + TelephonyManager telephonyManager, + KeyguardUpdateMonitor keyguardUpdateMonitor) { super(view); mDarkIconDispatcher = darkIconDispatcher; mNetworkController = networkController; mTunerService = tunerService; mTelephonyManager = telephonyManager; + mKeyguardUpdateMonitor = keyguardUpdateMonitor; } @Override @@ -54,6 +64,7 @@ public class OperatorNameViewController extends ViewController mDarkIconDispatcher.addDarkReceiver(mDarkReceiver); mNetworkController.addCallback(mSignalCallback); mTunerService.addTunable(mTunable, KEY_SHOW_OPERATOR_NAME); + mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback); } @Override @@ -61,11 +72,28 @@ public class OperatorNameViewController extends ViewController mDarkIconDispatcher.removeDarkReceiver(mDarkReceiver); mNetworkController.removeCallback(mSignalCallback); mTunerService.removeTunable(mTunable); + mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback); } private void update() { mView.update(mTunerService.getValue(KEY_SHOW_OPERATOR_NAME, 1) != 0, - mTelephonyManager.isDataCapable()); + mTelephonyManager.isDataCapable(), getSubInfos()); + } + + private List getSubInfos() { + List result = new ArrayList<>(); + List subscritionInfos = + mKeyguardUpdateMonitor.getFilteredSubscriptionInfo(false); + + for (SubscriptionInfo subscriptionInfo : subscritionInfos) { + int subId = subscriptionInfo.getSubscriptionId(); + result.add(new SubInfo( + subscriptionInfo.getCarrierName(), + mKeyguardUpdateMonitor.getSimState(subId), + mKeyguardUpdateMonitor.getServiceState(subId))); + } + + return result; } /** Factory for constructing an {@link OperatorNameViewController}. */ @@ -74,20 +102,23 @@ public class OperatorNameViewController extends ViewController private final NetworkController mNetworkController; private final TunerService mTunerService; private final TelephonyManager mTelephonyManager; + private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; @Inject public Factory(DarkIconDispatcher darkIconDispatcher, NetworkController networkController, - TunerService tunerService, TelephonyManager telephonyManager) { + TunerService tunerService, TelephonyManager telephonyManager, + KeyguardUpdateMonitor keyguardUpdateMonitor) { mDarkIconDispatcher = darkIconDispatcher; mNetworkController = networkController; mTunerService = tunerService; mTelephonyManager = telephonyManager; + mKeyguardUpdateMonitor = keyguardUpdateMonitor; } /** Create an {@link OperatorNameViewController}. */ public OperatorNameViewController create(OperatorNameView view) { return new OperatorNameViewController(view, mDarkIconDispatcher, mNetworkController, - mTunerService, mTelephonyManager); + mTunerService, mTelephonyManager, mKeyguardUpdateMonitor); } } @@ -114,6 +145,15 @@ public class OperatorNameViewController extends ViewController private final TunerService.Tunable mTunable = (key, newValue) -> update(); + + private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback = + new KeyguardUpdateMonitorCallback() { + @Override + public void onRefreshCarrierInfo() { + mView.updateText(getSubInfos()); + } + }; + // TODO: do we even register this anywhere? private final DemoModeCommandReceiver mDemoModeCommandReceiver = new DemoModeCommandReceiver() { @Override @@ -132,4 +172,30 @@ public class OperatorNameViewController extends ViewController mView.setText(args.getString("name")); } }; + + static class SubInfo { + private final CharSequence mCarrierName; + private final int mSimState; + private final ServiceState mServiceState; + + private SubInfo(CharSequence carrierName, + int simState, ServiceState serviceState) { + mCarrierName = carrierName; + mSimState = simState; + mServiceState = serviceState; + } + + boolean simReady() { + return mSimState == TelephonyManager.SIM_STATE_READY; + } + + CharSequence getCarrierName() { + return mCarrierName; + } + + boolean stateInService() { + return mServiceState != null + && mServiceState.getState() == ServiceState.STATE_IN_SERVICE; + } + } } From 28f9c93386ee047ff82fa1b6c4a00d7de6d47881 Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Mon, 16 Aug 2021 17:20:52 -0400 Subject: [PATCH 6/6] 6/6 Remove NetworkController from Dependency. Fixes: 196625757 Test: atest SystemUITests Change-Id: Ib29e405c80c3c96b2ee9040d6e4a222f17c04dc3 --- packages/SystemUI/src/com/android/systemui/Dependency.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java index e51de66dc2b8d..e996e71b6715c 100644 --- a/packages/SystemUI/src/com/android/systemui/Dependency.java +++ b/packages/SystemUI/src/com/android/systemui/Dependency.java @@ -114,7 +114,6 @@ import com.android.systemui.statusbar.policy.FlashlightController; import com.android.systemui.statusbar.policy.HotspotController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.LocationController; -import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.NextAlarmController; import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler; import com.android.systemui.statusbar.policy.RotationLockController; @@ -244,7 +243,6 @@ public class Dependency { @Inject Lazy mBluetoothController; @Inject Lazy mLocationController; @Inject Lazy mRotationLockController; - @Inject Lazy mNetworkController; @Inject Lazy mZenModeController; @Inject Lazy mHotspotController; @Inject Lazy mCastController; @@ -389,8 +387,6 @@ public class Dependency { mProviders.put(RotationLockController.class, mRotationLockController::get); - mProviders.put(NetworkController.class, mNetworkController::get); - mProviders.put(ZenModeController.class, mZenModeController::get); mProviders.put(HotspotController.class, mHotspotController::get);