From 8c2089938fa2b3879289ea974639016877ef57c7 Mon Sep 17 00:00:00 2001 From: Alejandro Nijamkin Date: Sun, 29 May 2022 11:46:09 -0700 Subject: [PATCH] Logs aux dump of status bar telephony broadcasts. 1. Adds auxillary dumpsys logging capabilities to NetworkControllerImpl 2. Adds logging statements when any broadcast is received Test: Toggled airplane mode on and off. Ran dumpsys using `$ adb shell dumpsys activity service com.android.systemui/.dump.SystemUIAuxiliaryDumpService`, saw some logging statements Bug: 234146317 Fixes: 234146317 Change-Id: I44f69a28911b61bd42d9c68a733ed17d8ca24de2 --- .../systemui/log/dagger/LogModule.java | 10 ++ .../dagger/StatusBarNetworkControllerLog.java | 35 +++++++ .../connectivity/NetworkControllerImpl.java | 27 ++++- .../NetworkControllerBaseTest.java | 4 +- .../NetworkControllerDataTest.java | 26 +++-- .../NetworkControllerSignalTest.java | 99 ++++++++++++++----- 6 files changed, 165 insertions(+), 36 deletions(-) create mode 100644 packages/SystemUI/src/com/android/systemui/log/dagger/StatusBarNetworkControllerLog.java diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java index eff025f771a51..05da4bb4d1ad3 100644 --- a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java +++ b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java @@ -251,4 +251,14 @@ public class LogModule { return new LogcatEchoTrackerProd(); } } + + /** + * Provides a {@link LogBuffer} for use by the status bar network controller. + */ + @Provides + @SysUISingleton + @StatusBarNetworkControllerLog + public static LogBuffer provideStatusBarNetworkControllerBuffer(LogBufferFactory factory) { + return factory.create("StatusBarNetworkControllerLog", 20); + } } diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/StatusBarNetworkControllerLog.java b/packages/SystemUI/src/com/android/systemui/log/dagger/StatusBarNetworkControllerLog.java new file mode 100644 index 0000000000000..f26b3164f488f --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/log/dagger/StatusBarNetworkControllerLog.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2022 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.log.dagger; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import com.android.systemui.log.LogBuffer; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; + +import javax.inject.Qualifier; + +/** + * A {@link LogBuffer} for {@link com.android.systemui.statusbar.connectivity.NetworkController} + */ +@Qualifier +@Documented +@Retention(RUNTIME) +public @interface StatusBarNetworkControllerLog { +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java index f84f3ab8abf61..a1dc7b41d42bf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java @@ -73,6 +73,9 @@ import com.android.systemui.demomode.DemoModeController; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; +import com.android.systemui.log.LogBuffer; +import com.android.systemui.log.LogLevel; +import com.android.systemui.log.dagger.StatusBarNetworkControllerLog; import com.android.systemui.qs.tiles.dialog.InternetDialogFactory; import com.android.systemui.settings.CurrentUserTracker; import com.android.systemui.statusbar.policy.ConfigurationController; @@ -98,6 +101,8 @@ import java.util.stream.Collectors; import javax.inject.Inject; +import kotlin.Unit; + /** Platform implementation of the network controller. **/ @SysUISingleton public class NetworkControllerImpl extends BroadcastReceiver @@ -134,6 +139,7 @@ public class NetworkControllerImpl extends BroadcastReceiver private final CarrierConfigTracker mCarrierConfigTracker; private final FeatureFlags mFeatureFlags; private final DumpManager mDumpManager; + private final LogBuffer mLogBuffer; private TelephonyCallback.ActiveDataSubscriptionIdListener mPhoneStateListener; private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID; @@ -232,7 +238,8 @@ public class NetworkControllerImpl extends BroadcastReceiver @Main Handler handler, InternetDialogFactory internetDialogFactory, FeatureFlags featureFlags, - DumpManager dumpManager) { + DumpManager dumpManager, + @StatusBarNetworkControllerLog LogBuffer logBuffer) { this(context, connectivityManager, telephonyManager, telephonyListenerManager, @@ -252,7 +259,8 @@ public class NetworkControllerImpl extends BroadcastReceiver trackerFactory, handler, featureFlags, - dumpManager); + dumpManager, + logBuffer); mReceiverHandler.post(mRegisterListeners); mInternetDialogFactory = internetDialogFactory; } @@ -277,7 +285,8 @@ public class NetworkControllerImpl extends BroadcastReceiver WifiStatusTrackerFactory trackerFactory, @Main Handler handler, FeatureFlags featureFlags, - DumpManager dumpManager + DumpManager dumpManager, + LogBuffer logBuffer ) { mContext = context; mTelephonyListenerManager = telephonyListenerManager; @@ -298,6 +307,7 @@ public class NetworkControllerImpl extends BroadcastReceiver mCarrierConfigTracker = carrierConfigTracker; mFeatureFlags = featureFlags; mDumpManager = dumpManager; + mLogBuffer = logBuffer; // telephony mPhone = telephonyManager; @@ -771,6 +781,17 @@ public class NetworkControllerImpl extends BroadcastReceiver Log.d(TAG, "onReceive: intent=" + intent); } final String action = intent.getAction(); + mLogBuffer.log( + TAG, + LogLevel.INFO, + logMessage -> { + logMessage.setStr1(action); + return Unit.INSTANCE; + }, + logMessage -> String.format( + Locale.US, + "Received broadcast with action \"%s\"", + logMessage.getStr1())); switch (action) { case ConnectivityManager.CONNECTIVITY_ACTION: updateConnectivity(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java index e01ebbdda3745..0d1879cb25939 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java @@ -72,6 +72,7 @@ import com.android.systemui.demomode.DemoModeController; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; +import com.android.systemui.log.LogBuffer; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener; import com.android.systemui.telephony.TelephonyListenerManager; @@ -244,7 +245,8 @@ public class NetworkControllerBaseTest extends SysuiTestCase { mWifiStatusTrackerFactory, mMainHandler, mFeatureFlags, - mock(DumpManager.class) + mock(DumpManager.class), + mock(LogBuffer.class) ); setupNetworkController(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerDataTest.java index 3a0c203f76e0c..e3dd6f4e6e406 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerDataTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerDataTest.java @@ -38,6 +38,7 @@ import android.testing.TestableLooper.RunWithLooper; import com.android.settingslib.mobile.TelephonyIcons; import com.android.settingslib.net.DataUsageController; import com.android.systemui.dump.DumpManager; +import com.android.systemui.log.LogBuffer; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.util.CarrierConfigTracker; @@ -125,16 +126,29 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest { public void test4gDataIcon() { // Switch to showing 4g icon and re-initialize the NetworkController. mConfig.show4gForLte = true; - mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, - mTelephonyListenerManager, mMockWm, - mMockSm, mConfig, Looper.getMainLooper(), mFakeExecutor, mCallbackHandler, + mNetworkController = new NetworkControllerImpl( + mContext, + mMockCm, + mMockTm, + mTelephonyListenerManager, + mMockWm, + mMockSm, + mConfig, + Looper.getMainLooper(), + mFakeExecutor, + mCallbackHandler, mock(AccessPointControllerImpl.class), - mock(DataUsageController.class), mMockSubDefaults, - mock(DeviceProvisionedController.class), mMockBd, mDemoModeController, + mock(DataUsageController.class), + mMockSubDefaults, + mock(DeviceProvisionedController.class), + mMockBd, + mDemoModeController, mock(CarrierConfigTracker.class), mWifiStatusTrackerFactory, new Handler(TestableLooper.get(this).getLooper()), - mFeatureFlags, mock(DumpManager.class)); + mFeatureFlags, + mock(DumpManager.class), + mock(LogBuffer.class)); setupNetworkController(); setupDefaultSignal(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerSignalTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerSignalTest.java index ae1b3d1e1f42e..698899a8fc36f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerSignalTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerSignalTest.java @@ -43,6 +43,7 @@ import com.android.settingslib.mobile.TelephonyIcons; import com.android.settingslib.net.DataUsageController; import com.android.systemui.R; import com.android.systemui.dump.DumpManager; +import com.android.systemui.log.LogBuffer; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.util.CarrierConfigTracker; @@ -86,7 +87,8 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest { mWifiStatusTrackerFactory, mMainHandler, mFeatureFlags, - mock(DumpManager.class) + mock(DumpManager.class), + mock(LogBuffer.class) ); TestableLooper.get(this).processAllMessages(); @@ -100,7 +102,8 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest { when(mMockProvisionController.isCurrentUserSetup()).thenReturn(true); // WHEN - a NetworkController is created - mNetworkController = new NetworkControllerImpl(mContext, + mNetworkController = new NetworkControllerImpl( + mContext, mMockCm, mMockTm, mTelephonyListenerManager, @@ -120,8 +123,8 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest { mWifiStatusTrackerFactory, mMainHandler, mFeatureFlags, - mock(DumpManager.class) - ); + mock(DumpManager.class), + mock(LogBuffer.class)); TestableLooper.get(this).processAllMessages(); // THEN - NetworkController claims the user is not setup @@ -133,15 +136,29 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest { // Turn off mobile network support. when(mMockTm.isDataCapable()).thenReturn(false); // Create a new NetworkController as this is currently handled in constructor. - mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, - mTelephonyListenerManager, mMockWm, mMockSm, mConfig, - Looper.getMainLooper(), mFakeExecutor, mCallbackHandler, - mock(AccessPointControllerImpl.class), mock(DataUsageController.class), - mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd, - mDemoModeController, mock(CarrierConfigTracker.class), + mNetworkController = new NetworkControllerImpl( + mContext, + mMockCm, + mMockTm, + mTelephonyListenerManager, + mMockWm, + mMockSm, + mConfig, + Looper.getMainLooper(), + mFakeExecutor, + mCallbackHandler, + mock(AccessPointControllerImpl.class), + mock(DataUsageController.class), + mMockSubDefaults, + mock(DeviceProvisionedController.class), + mMockBd, + mDemoModeController, + mock(CarrierConfigTracker.class), mWifiStatusTrackerFactory, - mMainHandler, mFeatureFlags, - mock(DumpManager.class)); + mMainHandler, + mFeatureFlags, + mock(DumpManager.class), + mock(LogBuffer.class)); setupNetworkController(); verifyLastMobileDataIndicators(false, -1, 0); @@ -156,14 +173,29 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest { when(mMockTm.getServiceState()).thenReturn(mServiceState); when(mMockSm.getCompleteActiveSubscriptionInfoList()).thenReturn(Collections.emptyList()); - mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, - mTelephonyListenerManager, mMockWm, mMockSm, mConfig, - Looper.getMainLooper(), mFakeExecutor, mCallbackHandler, - mock(AccessPointControllerImpl.class), mock(DataUsageController.class), - mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd, - mDemoModeController, mock(CarrierConfigTracker.class), + mNetworkController = new NetworkControllerImpl( + mContext, + mMockCm, + mMockTm, + mTelephonyListenerManager, + mMockWm, + mMockSm, + mConfig, + Looper.getMainLooper(), + mFakeExecutor, + mCallbackHandler, + mock(AccessPointControllerImpl.class), + mock(DataUsageController.class), + mMockSubDefaults, + mock(DeviceProvisionedController.class), + mMockBd, + mDemoModeController, + mock(CarrierConfigTracker.class), mWifiStatusTrackerFactory, - mMainHandler, mFeatureFlags, mock(DumpManager.class)); + mMainHandler, + mFeatureFlags, + mock(DumpManager.class), + mock(LogBuffer.class)); mNetworkController.registerListeners(); // Wait for the main looper to execute the previous command @@ -226,14 +258,29 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest { // Turn off mobile network support. when(mMockTm.isDataCapable()).thenReturn(false); // Create a new NetworkController as this is currently handled in constructor. - mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, - mTelephonyListenerManager, mMockWm, mMockSm, mConfig, - Looper.getMainLooper(), mFakeExecutor, mCallbackHandler, - mock(AccessPointControllerImpl.class), mock(DataUsageController.class), - mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd, - mDemoModeController, mock(CarrierConfigTracker.class), + mNetworkController = new NetworkControllerImpl( + mContext, + mMockCm, + mMockTm, + mTelephonyListenerManager, + mMockWm, + mMockSm, + mConfig, + Looper.getMainLooper(), + mFakeExecutor, + mCallbackHandler, + mock(AccessPointControllerImpl.class), + mock(DataUsageController.class), + mMockSubDefaults, + mock(DeviceProvisionedController.class), + mMockBd, + mDemoModeController, + mock(CarrierConfigTracker.class), mWifiStatusTrackerFactory, - mMainHandler, mFeatureFlags, mock(DumpManager.class)); + mMainHandler, + mFeatureFlags, + mock(DumpManager.class), + mock(LogBuffer.class)); setupNetworkController(); // No Subscriptions.