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();
}
}
/**
* 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;
@@ -94,9 +97,12 @@ import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;
import javax.inject.Inject;
import kotlin.Unit;
/** Platform implementation of the network controller. **/
@SysUISingleton
public class NetworkControllerImpl extends BroadcastReceiver
@@ -133,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;
@@ -231,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,
@@ -251,7 +259,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
trackerFactory,
handler,
featureFlags,
dumpManager);
dumpManager,
logBuffer);
mReceiverHandler.post(mRegisterListeners);
mInternetDialogFactory = internetDialogFactory;
}
@@ -276,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;
@@ -297,6 +307,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
mCarrierConfigTracker = carrierConfigTracker;
mFeatureFlags = featureFlags;
mDumpManager = dumpManager;
mLogBuffer = logBuffer;
// telephony
mPhone = telephonyManager;
@@ -770,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();
@@ -937,6 +959,12 @@ public class NetworkControllerImpl extends BroadcastReceiver
: lhs.getSimSlotIndex() - rhs.getSimSlotIndex();
}
});
Log.i(
TAG,
String.format(
Locale.US,
"Subscriptions changed: %s",
createSubscriptionChangeStatement(mCurrentSubscriptions, subscriptions)));
mCurrentSubscriptions = subscriptions;
SparseArray<MobileSignalController> cachedControllers =
@@ -1154,6 +1182,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
pw.print(" hasVoiceCallingFeature()=");
pw.println(hasVoiceCallingFeature());
pw.println(" mListening=" + mListening);
pw.println(" mActiveMobileDataSubscription=" + mActiveMobileDataSubscription);
pw.println(" - connectivity ------");
pw.print(" mConnectedTransports=");
@@ -1473,4 +1502,23 @@ public class NetworkControllerImpl extends BroadcastReceiver
* get created will also run on the BG Looper.
*/
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.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.