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:
committed by
Android (Google) Code Review
commit
cb727584bc
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user