diff options
7 files changed, 199 insertions, 21 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/CarrierTextManager.java b/packages/SystemUI/src/com/android/keyguard/CarrierTextManager.java index b15378570358..1f75e81c201f 100644 --- a/packages/SystemUI/src/com/android/keyguard/CarrierTextManager.java +++ b/packages/SystemUI/src/com/android/keyguard/CarrierTextManager.java @@ -16,6 +16,11 @@ package com.android.keyguard; +import static com.android.keyguard.logging.CarrierTextManagerLogger.REASON_ACTIVE_DATA_SUB_CHANGED; +import static com.android.keyguard.logging.CarrierTextManagerLogger.REASON_ON_SIM_STATE_CHANGED; +import static com.android.keyguard.logging.CarrierTextManagerLogger.REASON_ON_TELEPHONY_CAPABLE; +import static com.android.keyguard.logging.CarrierTextManagerLogger.REASON_REFRESH_CARRIER_INFO; + import android.content.Context; import android.content.Intent; import android.content.IntentFilter; @@ -32,6 +37,7 @@ import android.util.Log; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; +import com.android.keyguard.logging.CarrierTextManagerLogger; import com.android.settingslib.WirelessUtils; import com.android.systemui.R; import com.android.systemui.dagger.qualifiers.Background; @@ -40,6 +46,7 @@ import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository; import com.android.systemui.telephony.TelephonyListenerManager; +import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.concurrent.Executor; @@ -68,6 +75,7 @@ public class CarrierTextManager { private final AtomicBoolean mNetworkSupported = new AtomicBoolean(); @VisibleForTesting protected KeyguardUpdateMonitor mKeyguardUpdateMonitor; + private final CarrierTextManagerLogger mLogger; private final WifiRepository mWifiRepository; private final boolean[] mSimErrorState; private final int mSimSlotsNumber; @@ -97,19 +105,13 @@ public class CarrierTextManager { protected final KeyguardUpdateMonitorCallback mCallback = new KeyguardUpdateMonitorCallback() { @Override public void onRefreshCarrierInfo() { - if (DEBUG) { - Log.d(TAG, "onRefreshCarrierInfo(), mTelephonyCapable: " - + Boolean.toString(mTelephonyCapable)); - } + mLogger.logUpdateCarrierTextForReason(REASON_REFRESH_CARRIER_INFO); updateCarrierText(); } @Override public void onTelephonyCapable(boolean capable) { - if (DEBUG) { - Log.d(TAG, "onTelephonyCapable() mTelephonyCapable: " - + Boolean.toString(capable)); - } + mLogger.logUpdateCarrierTextForReason(REASON_ON_TELEPHONY_CAPABLE); mTelephonyCapable = capable; updateCarrierText(); } @@ -121,7 +123,7 @@ public class CarrierTextManager { return; } - if (DEBUG) Log.d(TAG, "onSimStateChanged: " + getStatusForIccState(simState)); + mLogger.logUpdateCarrierTextForReason(REASON_ON_SIM_STATE_CHANGED); if (getStatusForIccState(simState) == CarrierTextManager.StatusMode.SimIoError) { mSimErrorState[slotId] = true; updateCarrierText(); @@ -137,6 +139,7 @@ public class CarrierTextManager { @Override public void onActiveDataSubscriptionIdChanged(int subId) { if (mNetworkSupported.get() && mCarrierTextCallback != null) { + mLogger.logUpdateCarrierTextForReason(REASON_ACTIVE_DATA_SUB_CHANGED); updateCarrierText(); } } @@ -175,7 +178,9 @@ public class CarrierTextManager { WakefulnessLifecycle wakefulnessLifecycle, @Main Executor mainExecutor, @Background Executor bgExecutor, - KeyguardUpdateMonitor keyguardUpdateMonitor) { + KeyguardUpdateMonitor keyguardUpdateMonitor, + CarrierTextManagerLogger logger) { + mContext = context; mIsEmergencyCallCapable = telephonyManager.isVoiceCapable(); @@ -191,6 +196,7 @@ public class CarrierTextManager { mMainExecutor = mainExecutor; mBgExecutor = bgExecutor; mKeyguardUpdateMonitor = keyguardUpdateMonitor; + mLogger = logger; mBgExecutor.execute(() -> { boolean supported = mContext.getPackageManager() .hasSystemFeature(PackageManager.FEATURE_TELEPHONY); @@ -315,7 +321,7 @@ public class CarrierTextManager { subOrderBySlot[i] = -1; } final CharSequence[] carrierNames = new CharSequence[numSubs]; - if (DEBUG) Log.d(TAG, "updateCarrierText(): " + numSubs); + mLogger.logUpdate(numSubs); for (int i = 0; i < numSubs; i++) { int subId = subs.get(i).getSubscriptionId(); @@ -325,9 +331,7 @@ public class CarrierTextManager { int simState = mKeyguardUpdateMonitor.getSimState(subId); CharSequence carrierName = subs.get(i).getCarrierName(); CharSequence carrierTextForSimState = getCarrierTextForSimState(simState, carrierName); - if (DEBUG) { - Log.d(TAG, "Handling (subId=" + subId + "): " + simState + " " + carrierName); - } + mLogger.logUpdateLoopStart(subId, simState, String.valueOf(carrierName)); if (carrierTextForSimState != null) { allSimsMissing = false; carrierNames[i] = carrierTextForSimState; @@ -340,9 +344,7 @@ public class CarrierTextManager { // Wi-Fi is disassociated or disabled if (ss.getRilDataRadioTechnology() != ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN || mWifiRepository.isWifiConnectedWithValidSsid()) { - if (DEBUG) { - Log.d(TAG, "SIM ready and in service: subId=" + subId + ", ss=" + ss); - } + mLogger.logUpdateWfcCheck(); anySimReadyAndInService = true; } } @@ -379,7 +381,7 @@ public class CarrierTextManager { if (i.getBooleanExtra(TelephonyManager.EXTRA_SHOW_PLMN, false)) { plmn = i.getStringExtra(TelephonyManager.EXTRA_PLMN); } - if (DEBUG) Log.d(TAG, "Getting plmn/spn sticky brdcst " + plmn + "/" + spn); + mLogger.logUpdateFromStickyBroadcast(plmn, spn); if (Objects.equals(plmn, spn)) { text = plmn; } else { @@ -409,6 +411,7 @@ public class CarrierTextManager { !allSimsMissing, subsIds, airplaneMode); + mLogger.logCallbackSentFromUpdate(info); postToCallback(info); Trace.endSection(); } @@ -645,6 +648,7 @@ public class CarrierTextManager { private final Executor mMainExecutor; private final Executor mBgExecutor; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; + private final CarrierTextManagerLogger mLogger; private boolean mShowAirplaneMode; private boolean mShowMissingSim; @@ -658,7 +662,8 @@ public class CarrierTextManager { WakefulnessLifecycle wakefulnessLifecycle, @Main Executor mainExecutor, @Background Executor bgExecutor, - KeyguardUpdateMonitor keyguardUpdateMonitor) { + KeyguardUpdateMonitor keyguardUpdateMonitor, + CarrierTextManagerLogger logger) { mContext = context; mSeparator = resources.getString( com.android.internal.R.string.kg_text_message_separator); @@ -669,6 +674,7 @@ public class CarrierTextManager { mMainExecutor = mainExecutor; mBgExecutor = bgExecutor; mKeyguardUpdateMonitor = keyguardUpdateMonitor; + mLogger = logger; } /** */ @@ -688,7 +694,7 @@ public class CarrierTextManager { return new CarrierTextManager( mContext, mSeparator, mShowAirplaneMode, mShowMissingSim, mWifiRepository, mTelephonyManager, mTelephonyListenerManager, mWakefulnessLifecycle, - mMainExecutor, mBgExecutor, mKeyguardUpdateMonitor); + mMainExecutor, mBgExecutor, mKeyguardUpdateMonitor, mLogger); } } /** @@ -716,6 +722,17 @@ public class CarrierTextManager { this.subscriptionIds = subscriptionIds; this.airplaneMode = airplaneMode; } + + @Override + public String toString() { + return "CarrierTextCallbackInfo{" + + "carrierText=" + carrierText + + ", listOfCarriers=" + Arrays.toString(listOfCarriers) + + ", anySimReady=" + anySimReady + + ", subscriptionIds=" + Arrays.toString(subscriptionIds) + + ", airplaneMode=" + airplaneMode + + '}'; + } } /** diff --git a/packages/SystemUI/src/com/android/keyguard/logging/CarrierTextManagerLogger.kt b/packages/SystemUI/src/com/android/keyguard/logging/CarrierTextManagerLogger.kt new file mode 100644 index 000000000000..3dc787cab0b2 --- /dev/null +++ b/packages/SystemUI/src/com/android/keyguard/logging/CarrierTextManagerLogger.kt @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2023 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.keyguard.logging + +import androidx.annotation.IntDef +import com.android.keyguard.CarrierTextManager.CarrierTextCallbackInfo +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.log.LogBuffer +import com.android.systemui.log.LogLevel +import com.android.systemui.log.dagger.CarrierTextManagerLog +import javax.inject.Inject + +/** Logger adapter for [CarrierTextManager] to add detailed messages in a [LogBuffer] */ +@SysUISingleton +class CarrierTextManagerLogger @Inject constructor(@CarrierTextManagerLog val buffer: LogBuffer) { + /** + * This method and the methods below trace the execution of CarrierTextManager.updateCarrierText + */ + fun logUpdate(numSubs: Int) { + buffer.log( + TAG, + LogLevel.VERBOSE, + { int1 = numSubs }, + { "updateCarrierText: numSubs=$int1" }, + ) + } + + fun logUpdateLoopStart(sub: Int, simState: Int, carrierName: String) { + buffer.log( + TAG, + LogLevel.VERBOSE, + { + int1 = sub + int2 = simState + str1 = carrierName + }, + { "┣ updateCarrierText: updating sub=$int1 simState=$int2 carrierName=$str1" }, + ) + } + + fun logUpdateWfcCheck() { + buffer.log( + TAG, + LogLevel.VERBOSE, + {}, + { "┣ updateCarrierText: found WFC state" }, + ) + } + + fun logUpdateFromStickyBroadcast(plmn: String, spn: String) { + buffer.log( + TAG, + LogLevel.VERBOSE, + { + str1 = plmn + str2 = spn + }, + { "┣ updateCarrierText: getting PLMN/SPN sticky brdcst. plmn=$str1, spn=$str1" }, + ) + } + + /** De-structures the info object so that we don't have to generate new strings */ + fun logCallbackSentFromUpdate(info: CarrierTextCallbackInfo) { + buffer.log( + TAG, + LogLevel.VERBOSE, + { + str1 = "${info.carrierText}" + bool1 = info.anySimReady + bool2 = info.airplaneMode + }, + { + "┗ updateCarrierText: " + + "result=(carrierText=$str1, anySimReady=$bool1, airplaneMode=$bool2)" + }, + ) + } + + /** + * Used to log the starting point for _why_ the carrier text is updating. In order to keep us + * from holding on to too many objects, we'll just use simple ints for reasons here + */ + fun logUpdateCarrierTextForReason(@CarrierTextRefreshReason reason: Int) { + buffer.log( + TAG, + LogLevel.DEBUG, + { int1 = reason }, + { "refreshing carrier info for reason: ${reason.reasonMessage()}" } + ) + } + + companion object { + const val REASON_REFRESH_CARRIER_INFO = 1 + const val REASON_ON_TELEPHONY_CAPABLE = 2 + const val REASON_ON_SIM_STATE_CHANGED = 3 + const val REASON_ACTIVE_DATA_SUB_CHANGED = 4 + + @Retention(AnnotationRetention.SOURCE) + @IntDef( + value = + [ + REASON_REFRESH_CARRIER_INFO, + REASON_ON_TELEPHONY_CAPABLE, + REASON_ON_SIM_STATE_CHANGED, + REASON_ACTIVE_DATA_SUB_CHANGED, + ] + ) + annotation class CarrierTextRefreshReason + + private fun @receiver:CarrierTextRefreshReason Int.reasonMessage() = + when (this) { + REASON_REFRESH_CARRIER_INFO -> "REFRESH_CARRIER_INFO" + REASON_ON_TELEPHONY_CAPABLE -> "ON_TELEPHONY_CAPABLE" + REASON_ON_SIM_STATE_CHANGED -> "SIM_STATE_CHANGED" + REASON_ACTIVE_DATA_SUB_CHANGED -> "ACTIVE_DATA_SUB_CHANGED" + else -> "unknown" + } + } +} + +private const val TAG = "CarrierTextManagerLog" diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/CarrierTextManagerLog.kt b/packages/SystemUI/src/com/android/systemui/log/dagger/CarrierTextManagerLog.kt new file mode 100644 index 000000000000..62b80b20a673 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/log/dagger/CarrierTextManagerLog.kt @@ -0,0 +1,9 @@ +package com.android.systemui.log.dagger + +import javax.inject.Qualifier + +/** A [LogBuffer] for detailed carrier text logs. */ +@Qualifier +@MustBeDocumented +@Retention(AnnotationRetention.RUNTIME) +annotation class CarrierTextManagerLog 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 9be18ace79fa..66c3c02df1fc 100644 --- a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java +++ b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java @@ -373,6 +373,16 @@ public class LogModule { } /** + * Provides a {@link LogBuffer} for use by {@link com.android.keyguard.KeyguardUpdateMonitor}. + */ + @Provides + @SysUISingleton + @CarrierTextManagerLog + public static LogBuffer provideCarrierTextManagerLog(LogBufferFactory factory) { + return factory.create("CarrierTextManagerLog", 100); + } + + /** * Provides a {@link LogBuffer} for use by {@link com.android.systemui.ScreenDecorations}. */ @Provides diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcher.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcher.kt index eb20bba0d21f..991ff56e683c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcher.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcher.kt @@ -21,6 +21,7 @@ import androidx.annotation.VisibleForTesting import com.android.settingslib.SignalIcon import com.android.settingslib.mobile.MobileMappings import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow +import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.demomode.DemoMode import com.android.systemui.demomode.DemoModeController @@ -62,6 +63,7 @@ import kotlinx.coroutines.flow.stateIn */ @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") @OptIn(ExperimentalCoroutinesApi::class) +@SysUISingleton class MobileRepositorySwitcher @Inject constructor( diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcher.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcher.kt index b1296179d7f7..e96288ab9ef9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcher.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcher.kt @@ -19,6 +19,7 @@ package com.android.systemui.statusbar.pipeline.wifi.data.repository import android.os.Bundle import androidx.annotation.VisibleForTesting import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow +import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.demomode.DemoMode import com.android.systemui.demomode.DemoModeController @@ -54,6 +55,7 @@ import kotlinx.coroutines.flow.stateIn */ @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") @OptIn(ExperimentalCoroutinesApi::class) +@SysUISingleton class WifiRepositorySwitcher @Inject constructor( diff --git a/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextManagerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextManagerTest.java index 5557efa97e3e..0b9ba78229e9 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextManagerTest.java @@ -47,6 +47,7 @@ import android.test.suitebuilder.annotation.SmallTest; import android.testing.AndroidTestingRunner; import android.text.TextUtils; +import com.android.keyguard.logging.CarrierTextManagerLogger; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.keyguard.WakefulnessLifecycle; @@ -96,6 +97,8 @@ public class CarrierTextManagerTest extends SysuiTestCase { @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor; @Mock + private CarrierTextManagerLogger mLogger; + @Mock private PackageManager mPackageManager; @Mock private TelephonyManager mTelephonyManager; @@ -144,7 +147,7 @@ public class CarrierTextManagerTest extends SysuiTestCase { mCarrierTextManager = new CarrierTextManager.Builder( mContext, mContext.getResources(), mWifiRepository, mTelephonyManager, mTelephonyListenerManager, mWakefulnessLifecycle, mMainExecutor, - mBgExecutor, mKeyguardUpdateMonitor) + mBgExecutor, mKeyguardUpdateMonitor, mLogger) .setShowAirplaneMode(true) .setShowMissingSim(true) .build(); |