Merge changes from topic "b234146317_statusbar_network_improved_dumpsys-tm-qpr-dev" into tm-qpr-dev

* changes:
  Logs aux dump of status bar telephony broadcasts.
  Adds logging for signal controller set changes
  Adds active mobile data sub to dumpsys
This commit is contained in:
Alejandro Nijamkin
2022-06-03 20:46:15 +00:00
committed by Android (Google) Code Review
6 changed files with 192 additions and 36 deletions

View File

@@ -251,4 +251,14 @@ public class LogModule {
return new LogcatEchoTrackerProd(); 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.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags; 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.qs.tiles.dialog.InternetDialogFactory;
import com.android.systemui.settings.CurrentUserTracker; import com.android.systemui.settings.CurrentUserTracker;
import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController;
@@ -94,9 +97,12 @@ import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.stream.Collectors;
import javax.inject.Inject; import javax.inject.Inject;
import kotlin.Unit;
/** Platform implementation of the network controller. **/ /** Platform implementation of the network controller. **/
@SysUISingleton @SysUISingleton
public class NetworkControllerImpl extends BroadcastReceiver public class NetworkControllerImpl extends BroadcastReceiver
@@ -133,6 +139,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
private final CarrierConfigTracker mCarrierConfigTracker; private final CarrierConfigTracker mCarrierConfigTracker;
private final FeatureFlags mFeatureFlags; private final FeatureFlags mFeatureFlags;
private final DumpManager mDumpManager; private final DumpManager mDumpManager;
private final LogBuffer mLogBuffer;
private TelephonyCallback.ActiveDataSubscriptionIdListener mPhoneStateListener; private TelephonyCallback.ActiveDataSubscriptionIdListener mPhoneStateListener;
private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
@@ -231,7 +238,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
@Main Handler handler, @Main Handler handler,
InternetDialogFactory internetDialogFactory, InternetDialogFactory internetDialogFactory,
FeatureFlags featureFlags, FeatureFlags featureFlags,
DumpManager dumpManager) { DumpManager dumpManager,
@StatusBarNetworkControllerLog LogBuffer logBuffer) {
this(context, connectivityManager, this(context, connectivityManager,
telephonyManager, telephonyManager,
telephonyListenerManager, telephonyListenerManager,
@@ -251,7 +259,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
trackerFactory, trackerFactory,
handler, handler,
featureFlags, featureFlags,
dumpManager); dumpManager,
logBuffer);
mReceiverHandler.post(mRegisterListeners); mReceiverHandler.post(mRegisterListeners);
mInternetDialogFactory = internetDialogFactory; mInternetDialogFactory = internetDialogFactory;
} }
@@ -276,7 +285,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
WifiStatusTrackerFactory trackerFactory, WifiStatusTrackerFactory trackerFactory,
@Main Handler handler, @Main Handler handler,
FeatureFlags featureFlags, FeatureFlags featureFlags,
DumpManager dumpManager DumpManager dumpManager,
LogBuffer logBuffer
) { ) {
mContext = context; mContext = context;
mTelephonyListenerManager = telephonyListenerManager; mTelephonyListenerManager = telephonyListenerManager;
@@ -297,6 +307,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
mCarrierConfigTracker = carrierConfigTracker; mCarrierConfigTracker = carrierConfigTracker;
mFeatureFlags = featureFlags; mFeatureFlags = featureFlags;
mDumpManager = dumpManager; mDumpManager = dumpManager;
mLogBuffer = logBuffer;
// telephony // telephony
mPhone = telephonyManager; mPhone = telephonyManager;
@@ -770,6 +781,17 @@ public class NetworkControllerImpl extends BroadcastReceiver
Log.d(TAG, "onReceive: intent=" + intent); Log.d(TAG, "onReceive: intent=" + intent);
} }
final String action = intent.getAction(); 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) { switch (action) {
case ConnectivityManager.CONNECTIVITY_ACTION: case ConnectivityManager.CONNECTIVITY_ACTION:
updateConnectivity(); updateConnectivity();
@@ -937,6 +959,12 @@ public class NetworkControllerImpl extends BroadcastReceiver
: lhs.getSimSlotIndex() - rhs.getSimSlotIndex(); : lhs.getSimSlotIndex() - rhs.getSimSlotIndex();
} }
}); });
Log.i(
TAG,
String.format(
Locale.US,
"Subscriptions changed: %s",
createSubscriptionChangeStatement(mCurrentSubscriptions, subscriptions)));
mCurrentSubscriptions = subscriptions; mCurrentSubscriptions = subscriptions;
SparseArray<MobileSignalController> cachedControllers = SparseArray<MobileSignalController> cachedControllers =
@@ -1154,6 +1182,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
pw.print(" hasVoiceCallingFeature()="); pw.print(" hasVoiceCallingFeature()=");
pw.println(hasVoiceCallingFeature()); pw.println(hasVoiceCallingFeature());
pw.println(" mListening=" + mListening); pw.println(" mListening=" + mListening);
pw.println(" mActiveMobileDataSubscription=" + mActiveMobileDataSubscription);
pw.println(" - connectivity ------"); pw.println(" - connectivity ------");
pw.print(" mConnectedTransports="); pw.print(" mConnectedTransports=");
@@ -1473,4 +1502,23 @@ public class NetworkControllerImpl extends BroadcastReceiver
* get created will also run on the BG Looper. * get created will also run on the BG Looper.
*/ */
private final Runnable mRegisterListeners = () -> registerListeners(); private final Runnable mRegisterListeners = () -> registerListeners();
/** Returns a logging statement for the given old and new list of {@link SubscriptionInfo} */
private static String createSubscriptionChangeStatement(
final @Nullable List<SubscriptionInfo> oldSubscriptions,
final @Nullable List<SubscriptionInfo> newSubscriptions) {
return String.format(
Locale.US,
"old=%s, new=%s",
toSubscriptionIds(oldSubscriptions),
toSubscriptionIds(newSubscriptions));
}
/** Returns to a list of subscription IDs for the given list of {@link SubscriptionInfo} */
@Nullable
private static List<Integer> toSubscriptionIds(
final @Nullable List<SubscriptionInfo> subscriptions) {
return subscriptions != null ? subscriptions.stream().map(
SubscriptionInfo::getSubscriptionId).collect(Collectors.toList()) : null;
}
} }

View File

@@ -72,6 +72,7 @@ import com.android.systemui.demomode.DemoModeController;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags; 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;
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener; import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
import com.android.systemui.telephony.TelephonyListenerManager; import com.android.systemui.telephony.TelephonyListenerManager;
@@ -244,7 +245,8 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
mWifiStatusTrackerFactory, mWifiStatusTrackerFactory,
mMainHandler, mMainHandler,
mFeatureFlags, mFeatureFlags,
mock(DumpManager.class) mock(DumpManager.class),
mock(LogBuffer.class)
); );
setupNetworkController(); setupNetworkController();

View File

@@ -38,6 +38,7 @@ import android.testing.TestableLooper.RunWithLooper;
import com.android.settingslib.mobile.TelephonyIcons; import com.android.settingslib.mobile.TelephonyIcons;
import com.android.settingslib.net.DataUsageController; import com.android.settingslib.net.DataUsageController;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.log.LogBuffer;
import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.util.CarrierConfigTracker; import com.android.systemui.util.CarrierConfigTracker;
@@ -125,16 +126,29 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
public void test4gDataIcon() { public void test4gDataIcon() {
// Switch to showing 4g icon and re-initialize the NetworkController. // Switch to showing 4g icon and re-initialize the NetworkController.
mConfig.show4gForLte = true; mConfig.show4gForLte = true;
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mNetworkController = new NetworkControllerImpl(
mTelephonyListenerManager, mMockWm, mContext,
mMockSm, mConfig, Looper.getMainLooper(), mFakeExecutor, mCallbackHandler, mMockCm,
mMockTm,
mTelephonyListenerManager,
mMockWm,
mMockSm,
mConfig,
Looper.getMainLooper(),
mFakeExecutor,
mCallbackHandler,
mock(AccessPointControllerImpl.class), mock(AccessPointControllerImpl.class),
mock(DataUsageController.class), mMockSubDefaults, mock(DataUsageController.class),
mock(DeviceProvisionedController.class), mMockBd, mDemoModeController, mMockSubDefaults,
mock(DeviceProvisionedController.class),
mMockBd,
mDemoModeController,
mock(CarrierConfigTracker.class), mock(CarrierConfigTracker.class),
mWifiStatusTrackerFactory, mWifiStatusTrackerFactory,
new Handler(TestableLooper.get(this).getLooper()), new Handler(TestableLooper.get(this).getLooper()),
mFeatureFlags, mock(DumpManager.class)); mFeatureFlags,
mock(DumpManager.class),
mock(LogBuffer.class));
setupNetworkController(); setupNetworkController();
setupDefaultSignal(); setupDefaultSignal();

View File

@@ -43,6 +43,7 @@ import com.android.settingslib.mobile.TelephonyIcons;
import com.android.settingslib.net.DataUsageController; import com.android.settingslib.net.DataUsageController;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.log.LogBuffer;
import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.util.CarrierConfigTracker; import com.android.systemui.util.CarrierConfigTracker;
@@ -86,7 +87,8 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
mWifiStatusTrackerFactory, mWifiStatusTrackerFactory,
mMainHandler, mMainHandler,
mFeatureFlags, mFeatureFlags,
mock(DumpManager.class) mock(DumpManager.class),
mock(LogBuffer.class)
); );
TestableLooper.get(this).processAllMessages(); TestableLooper.get(this).processAllMessages();
@@ -100,7 +102,8 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
when(mMockProvisionController.isCurrentUserSetup()).thenReturn(true); when(mMockProvisionController.isCurrentUserSetup()).thenReturn(true);
// WHEN - a NetworkController is created // WHEN - a NetworkController is created
mNetworkController = new NetworkControllerImpl(mContext, mNetworkController = new NetworkControllerImpl(
mContext,
mMockCm, mMockCm,
mMockTm, mMockTm,
mTelephonyListenerManager, mTelephonyListenerManager,
@@ -120,8 +123,8 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
mWifiStatusTrackerFactory, mWifiStatusTrackerFactory,
mMainHandler, mMainHandler,
mFeatureFlags, mFeatureFlags,
mock(DumpManager.class) mock(DumpManager.class),
); mock(LogBuffer.class));
TestableLooper.get(this).processAllMessages(); TestableLooper.get(this).processAllMessages();
// THEN - NetworkController claims the user is not setup // THEN - NetworkController claims the user is not setup
@@ -133,15 +136,29 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
// Turn off mobile network support. // Turn off mobile network support.
when(mMockTm.isDataCapable()).thenReturn(false); when(mMockTm.isDataCapable()).thenReturn(false);
// Create a new NetworkController as this is currently handled in constructor. // Create a new NetworkController as this is currently handled in constructor.
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mNetworkController = new NetworkControllerImpl(
mTelephonyListenerManager, mMockWm, mMockSm, mConfig, mContext,
Looper.getMainLooper(), mFakeExecutor, mCallbackHandler, mMockCm,
mock(AccessPointControllerImpl.class), mock(DataUsageController.class), mMockTm,
mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd, mTelephonyListenerManager,
mDemoModeController, mock(CarrierConfigTracker.class), mMockWm,
mMockSm,
mConfig,
Looper.getMainLooper(),
mFakeExecutor,
mCallbackHandler,
mock(AccessPointControllerImpl.class),
mock(DataUsageController.class),
mMockSubDefaults,
mock(DeviceProvisionedController.class),
mMockBd,
mDemoModeController,
mock(CarrierConfigTracker.class),
mWifiStatusTrackerFactory, mWifiStatusTrackerFactory,
mMainHandler, mFeatureFlags, mMainHandler,
mock(DumpManager.class)); mFeatureFlags,
mock(DumpManager.class),
mock(LogBuffer.class));
setupNetworkController(); setupNetworkController();
verifyLastMobileDataIndicators(false, -1, 0); verifyLastMobileDataIndicators(false, -1, 0);
@@ -156,14 +173,29 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
when(mMockTm.getServiceState()).thenReturn(mServiceState); when(mMockTm.getServiceState()).thenReturn(mServiceState);
when(mMockSm.getCompleteActiveSubscriptionInfoList()).thenReturn(Collections.emptyList()); when(mMockSm.getCompleteActiveSubscriptionInfoList()).thenReturn(Collections.emptyList());
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mNetworkController = new NetworkControllerImpl(
mTelephonyListenerManager, mMockWm, mMockSm, mConfig, mContext,
Looper.getMainLooper(), mFakeExecutor, mCallbackHandler, mMockCm,
mock(AccessPointControllerImpl.class), mock(DataUsageController.class), mMockTm,
mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd, mTelephonyListenerManager,
mDemoModeController, mock(CarrierConfigTracker.class), mMockWm,
mMockSm,
mConfig,
Looper.getMainLooper(),
mFakeExecutor,
mCallbackHandler,
mock(AccessPointControllerImpl.class),
mock(DataUsageController.class),
mMockSubDefaults,
mock(DeviceProvisionedController.class),
mMockBd,
mDemoModeController,
mock(CarrierConfigTracker.class),
mWifiStatusTrackerFactory, mWifiStatusTrackerFactory,
mMainHandler, mFeatureFlags, mock(DumpManager.class)); mMainHandler,
mFeatureFlags,
mock(DumpManager.class),
mock(LogBuffer.class));
mNetworkController.registerListeners(); mNetworkController.registerListeners();
// Wait for the main looper to execute the previous command // Wait for the main looper to execute the previous command
@@ -226,14 +258,29 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
// Turn off mobile network support. // Turn off mobile network support.
when(mMockTm.isDataCapable()).thenReturn(false); when(mMockTm.isDataCapable()).thenReturn(false);
// Create a new NetworkController as this is currently handled in constructor. // Create a new NetworkController as this is currently handled in constructor.
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mNetworkController = new NetworkControllerImpl(
mTelephonyListenerManager, mMockWm, mMockSm, mConfig, mContext,
Looper.getMainLooper(), mFakeExecutor, mCallbackHandler, mMockCm,
mock(AccessPointControllerImpl.class), mock(DataUsageController.class), mMockTm,
mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd, mTelephonyListenerManager,
mDemoModeController, mock(CarrierConfigTracker.class), mMockWm,
mMockSm,
mConfig,
Looper.getMainLooper(),
mFakeExecutor,
mCallbackHandler,
mock(AccessPointControllerImpl.class),
mock(DataUsageController.class),
mMockSubDefaults,
mock(DeviceProvisionedController.class),
mMockBd,
mDemoModeController,
mock(CarrierConfigTracker.class),
mWifiStatusTrackerFactory, mWifiStatusTrackerFactory,
mMainHandler, mFeatureFlags, mock(DumpManager.class)); mMainHandler,
mFeatureFlags,
mock(DumpManager.class),
mock(LogBuffer.class));
setupNetworkController(); setupNetworkController();
// No Subscriptions. // No Subscriptions.