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
This commit is contained in:
Alejandro Nijamkin
2022-05-29 11:46:09 -07:00
parent 74b3b88d21
commit 8c2089938f
6 changed files with 165 additions and 36 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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