From 0288de0e5635b714273ff8185b4bdbfb9ece447c Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Thu, 23 Feb 2017 14:48:05 -0500 Subject: [PATCH] Fix data disabled icon from not showing in status bar The NetworkController seemed to think the user wasn't set up since the DeviceProvisionedController didn't send an initial callback on add. Also add some extra listening to data disabled state to avoid race conditions there. Change-Id: I17f759894a283da08eb0da7ceb5181355c8f4d55 Fixes: 35708363 Fixes: 35632846 Test: runtest systemui --- .../policy/DeviceProvisionedController.java | 4 ++- .../DeviceProvisionedControllerImpl.java | 2 ++ .../policy/MobileSignalController.java | 26 +++++++++++++++---- .../statusbar/policy/NetworkController.java | 1 - .../policy/NetworkControllerImpl.java | 12 +++------ .../policy/NetworkControllerBaseTest.java | 19 ++++++++++++-- .../policy/NetworkControllerDataTest.java | 14 ++++++---- .../utils/leaks/FakeNetworkController.java | 5 ---- 8 files changed, 55 insertions(+), 28 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedController.java index aa4eaa7acf7da..21f9a79fda068 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedController.java @@ -26,7 +26,9 @@ public interface DeviceProvisionedController extends CallbackController, D void addEmergencyListener(EmergencyListener listener); void removeEmergencyListener(EmergencyListener listener); - void setUserSetupComplete(boolean userSetup); boolean hasEmergencyCryptKeeperText(); boolean isRadioOn(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java index d7c919d9348ce..a85426c6f01d8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java @@ -551,17 +551,11 @@ public class NetworkControllerImpl extends BroadcastReceiver updateAirplaneMode(true /* force */); } - public void setUserSetupComplete(final boolean userSetup) { - mReceiverHandler.post(new Runnable() { - @Override - public void run() { - handleSetUserSetupComplete(userSetup); - } - }); + private void setUserSetupComplete(final boolean userSetup) { + mReceiverHandler.post(() -> handleSetUserSetupComplete(userSetup)); } - @VisibleForTesting - void handleSetUserSetupComplete(boolean userSetup) { + private void handleSetUserSetupComplete(boolean userSetup) { mUserSetup = userSetup; for (MobileSignalController controller : mMobileSignalControllers.values()) { controller.setUserSetupComplete(mUserSetup); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java index 0e5f51313b7e2..19b4b173c42d9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java @@ -31,6 +31,7 @@ import android.telephony.TelephonyManager; import android.util.Log; import com.android.internal.telephony.cdma.EriInfo; import com.android.settingslib.net.DataUsageController; +import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener; import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; import com.android.systemui.statusbar.policy.NetworkControllerImpl.Config; @@ -43,6 +44,8 @@ import org.junit.rules.TestWatcher; import org.junit.runner.Description; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; import java.io.PrintWriter; import java.io.StringWriter; @@ -56,6 +59,7 @@ import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -82,6 +86,8 @@ public class NetworkControllerBaseTest extends SysuiTestCase { protected CallbackHandler mCallbackHandler; protected SubscriptionDefaults mMockSubDefaults; protected NetworkScoreManager mMockNetworkScoreManager; + protected DeviceProvisionedController mMockProvisionController; + protected DeviceProvisionedListener mUserCallback; protected int mSubId; @@ -120,11 +126,21 @@ public class NetworkControllerBaseTest extends SysuiTestCase { mConfig = new Config(); mConfig.hspaDataDistinguishable = true; mCallbackHandler = mock(CallbackHandler.class); + + mMockProvisionController = mock(DeviceProvisionedController.class); + when(mMockProvisionController.isUserSetup(anyInt())).thenReturn(true); + doAnswer(invocation -> { + mUserCallback = (DeviceProvisionedListener) invocation.getArguments()[0]; + mUserCallback.onUserSetupChanged(); + mUserCallback.onDeviceProvisionedChanged(); + return null; + }).when(mMockProvisionController).addCallback(any()); + mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockNetworkScoreManager, mMockTm, mMockWm, mMockSm, mConfig, Looper.getMainLooper(), mCallbackHandler, mock(AccessPointControllerImpl.class), mock(DataUsageController.class), - mMockSubDefaults, mock(DeviceProvisionedController.class)); + mMockSubDefaults, mMockProvisionController); setupNetworkController(); // Trigger blank callbacks to always get the current state (some tests don't trigger @@ -139,7 +155,6 @@ public class NetworkControllerBaseTest extends SysuiTestCase { when(mMockTm.getDataEnabled(mSubId)).thenReturn(true); setDefaultSubId(mSubId); setSubscriptions(mSubId); - mNetworkController.handleSetUserSetupComplete(true); mMobileSignalController = mNetworkController.mMobileSignalControllers.get(mSubId); mPhoneStateListener = mMobileSignalController.mPhoneStateListener; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java index d7f961cb0738f..ba2099928d96a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java @@ -1,16 +1,19 @@ package com.android.systemui.statusbar.policy; +import static org.mockito.Matchers.anyInt; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import android.net.NetworkCapabilities; import android.os.Looper; import android.support.test.runner.AndroidJUnit4; import android.telephony.TelephonyManager; import android.test.suitebuilder.annotation.SmallTest; + import com.android.settingslib.net.DataUsageController; + import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mockito; @SmallTest @RunWith(AndroidJUnit4.class) @@ -106,7 +109,7 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest { @Test public void testDataDisabledIcon() { setupNetworkController(); - Mockito.when(mMockTm.getDataEnabled(mSubId)).thenReturn(false); + when(mMockTm.getDataEnabled(mSubId)).thenReturn(false); setupDefaultSignal(); updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0); setConnectivity(NetworkCapabilities.TRANSPORT_CELLULAR, false, false); @@ -118,11 +121,12 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest { @Test public void testDataDisabledIcon_UserNotSetup() { setupNetworkController(); - Mockito.when(mMockTm.getDataEnabled(mSubId)).thenReturn(false); + when(mMockTm.getDataEnabled(mSubId)).thenReturn(false); setupDefaultSignal(); updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0); setConnectivity(NetworkCapabilities.TRANSPORT_CELLULAR, false, false); - mNetworkController.handleSetUserSetupComplete(false); + when(mMockProvisionController.isUserSetup(anyInt())).thenReturn(false); + mUserCallback.onUserSetupChanged(); // Don't show the X until the device is setup. verifyDataIndicators(0, 0); @@ -154,7 +158,7 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest { verifyDataIndicators(TelephonyIcons.DATA_LTE[1][0 /* No direction */], TelephonyIcons.QS_DATA_LTE); - Mockito.when(mServiceState.getDataNetworkType()) + when(mServiceState.getDataNetworkType()) .thenReturn(TelephonyManager.NETWORK_TYPE_HSPA); updateServiceState(); verifyDataIndicators(TelephonyIcons.DATA_H[1][0 /* No direction */], diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeNetworkController.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeNetworkController.java index 5497686da865d..47ed5ca053121 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeNetworkController.java +++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeNetworkController.java @@ -46,11 +46,6 @@ public class FakeNetworkController extends BaseLeakChecker mEmergencyChecker.removeCallback(listener); } - @Override - public void setUserSetupComplete(boolean userSetup) { - - } - @Override public boolean hasEmergencyCryptKeeperText() { return false;