From d8b59d873397ef21f89a1f5876e142dcdc5bf485 Mon Sep 17 00:00:00 2001 From: Caitlin Cassidy Date: Thu, 26 Aug 2021 18:44:54 +0000 Subject: [PATCH] [Disable Flags] Add disable flag logging to CollapsedStatusBarFragment. Test: atest and manual Bug: 197851207 Change-Id: I64a65134f48bb2d4a6a4198730aa044d49627273 --- .../log/dagger/CollapsedSbFragmentLog.java | 36 ++++++++++++ .../systemui/log/dagger/LogModule.java | 11 ++++ .../phone/CollapsedStatusBarFragment.java | 11 ++++ .../phone/CollapsedStatusBarFragmentLogger.kt | 54 ++++++++++++++++++ .../systemui/statusbar/phone/StatusBar.java | 4 ++ .../phone/dagger/StatusBarPhoneModule.java | 3 + .../CollapsedStatusBarFragmentLoggerTest.kt | 55 +++++++++++++++++++ .../phone/CollapsedStatusBarFragmentTest.java | 7 +++ .../statusbar/phone/StatusBarTest.java | 2 + 9 files changed, 183 insertions(+) create mode 100644 packages/SystemUI/src/com/android/systemui/log/dagger/CollapsedSbFragmentLog.java create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentLogger.kt create mode 100644 packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentLoggerTest.kt diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/CollapsedSbFragmentLog.java b/packages/SystemUI/src/com/android/systemui/log/dagger/CollapsedSbFragmentLog.java new file mode 100644 index 0000000000000..c8afd72d1dde8 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/log/dagger/CollapsedSbFragmentLog.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2019 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.phone.CollapsedStatusBarFragment}-related messages. + */ +@Qualifier +@Documented +@Retention(RUNTIME) +public @interface CollapsedSbFragmentLog { +} 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 19193f9eceb2d..84c5a571c8570 100644 --- a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java +++ b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java @@ -100,6 +100,17 @@ public class LogModule { return factory.create("PrivacyLog", 100); } + /** + * Provides a logging buffer for + * {@link com.android.systemui.statusbar.phone.CollapsedStatusBarFragment}. + */ + @Provides + @SysUISingleton + @CollapsedSbFragmentLog + public static LogBuffer provideCollapsedSbFragmentLogBuffer(LogBufferFactory factory) { + return factory.create("CollapsedSbFragmentLog", 20); + } + /** Allows logging buffers to be tweaked via adb on debug builds but not on prod builds. */ @Provides @SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java index 96c405866a683..c16cc125aece5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java @@ -42,6 +42,7 @@ import com.android.systemui.animation.Interpolators; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.CommandQueue; +import com.android.systemui.statusbar.DisableFlagsLogger.DisableState; import com.android.systemui.statusbar.OperatorNameView; import com.android.systemui.statusbar.OperatorNameViewController; import com.android.systemui.statusbar.StatusBarState; @@ -93,6 +94,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue private Lazy> mStatusBarOptionalLazy; private DarkIconManager mDarkIconManager; private final CommandQueue mCommandQueue; + private final CollapsedStatusBarFragmentLogger mCollapsedStatusBarFragmentLogger; private final OperatorNameViewController.Factory mOperatorNameViewControllerFactory; private final OngoingCallController mOngoingCallController; private final SystemStatusAnimationScheduler mAnimationScheduler; @@ -131,6 +133,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue NetworkController networkController, StatusBarStateController statusBarStateController, CommandQueue commandQueue, + CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger, OperatorNameViewController.Factory operatorNameViewControllerFactory ) { mOngoingCallController = ongoingCallController; @@ -144,6 +147,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue mNetworkController = networkController; mStatusBarStateController = statusBarStateController; mCommandQueue = commandQueue; + mCollapsedStatusBarFragmentLogger = collapsedStatusBarFragmentLogger; mOperatorNameViewControllerFactory = operatorNameViewControllerFactory; } @@ -244,7 +248,14 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue if (displayId != getContext().getDisplayId()) { return; } + + int state1BeforeAdjustment = state1; state1 = adjustDisableFlags(state1); + + mCollapsedStatusBarFragmentLogger.logDisableFlagChange( + new DisableState(state1BeforeAdjustment, state2), + new DisableState(state1, state2)); + final int old1 = mDisabled1; final int diff1 = state1 ^ old1; final int old2 = mDisabled2; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentLogger.kt new file mode 100644 index 0000000000000..3c2b555eea68f --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentLogger.kt @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2021 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.statusbar.phone + +import com.android.systemui.log.LogBuffer +import com.android.systemui.log.LogLevel +import com.android.systemui.log.dagger.CollapsedSbFragmentLog +import com.android.systemui.statusbar.DisableFlagsLogger +import javax.inject.Inject + +/** Used by [CollapsedStatusBarFragment] to log messages to a [LogBuffer]. */ +class CollapsedStatusBarFragmentLogger @Inject constructor( + @CollapsedSbFragmentLog private val buffer: LogBuffer, + private val disableFlagsLogger: DisableFlagsLogger, +) { + + /** Logs a string representing the old and new disable flag states to [buffer]. */ + fun logDisableFlagChange( + oldState: DisableFlagsLogger.DisableState, + newState: DisableFlagsLogger.DisableState) { + buffer.log( + TAG, + LogLevel.INFO, + { + int1 = oldState.disable1 + int2 = oldState.disable2 + long1 = newState.disable1.toLong() + long2 = newState.disable2.toLong() + }, + { + disableFlagsLogger.getDisableFlagsString( + DisableFlagsLogger.DisableState(int1, int2), + DisableFlagsLogger.DisableState(long1.toInt(), long2.toInt()) + ) + } + ) + } +} + +private const val TAG = "CollapsedSbFragment" \ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 32c4a0d4673bb..f8c6dc4be7217 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -454,6 +454,7 @@ public class StatusBar extends SystemUI implements @Nullable protected LockscreenWallpaper mLockscreenWallpaper; private final AutoHideController mAutoHideController; + private final CollapsedStatusBarFragmentLogger mCollapsedStatusBarFragmentLogger; private final Point mCurrentDisplaySize = new Point(); @@ -743,6 +744,7 @@ public class StatusBar extends SystemUI implements DozeScrimController dozeScrimController, VolumeComponent volumeComponent, CommandQueue commandQueue, + CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger, StatusBarComponent.Factory statusBarComponentFactory, PluginManager pluginManager, Optional splitScreenOptional, @@ -842,6 +844,7 @@ public class StatusBar extends SystemUI implements mNotificationShadeDepthControllerLazy = notificationShadeDepthControllerLazy; mVolumeComponent = volumeComponent; mCommandQueue = commandQueue; + mCollapsedStatusBarFragmentLogger = collapsedStatusBarFragmentLogger; mStatusBarComponentFactory = statusBarComponentFactory; mPluginManager = pluginManager; mSplitScreenOptional = splitScreenOptional; @@ -1215,6 +1218,7 @@ public class StatusBar extends SystemUI implements mNetworkController, mStatusBarStateController, mCommandQueue, + mCollapsedStatusBarFragmentLogger, mOperatorNameViewControllerFactory ), CollapsedStatusBarFragment.TAG) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java index befea41a9919f..c45068e0171b3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java @@ -72,6 +72,7 @@ import com.android.systemui.statusbar.notification.logging.NotificationLogger; import com.android.systemui.statusbar.notification.row.NotificationGutsManager; import com.android.systemui.statusbar.phone.AutoHideController; import com.android.systemui.statusbar.phone.BiometricUnlockController; +import com.android.systemui.statusbar.phone.CollapsedStatusBarFragmentLogger; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.DozeScrimController; import com.android.systemui.statusbar.phone.DozeServiceHost; @@ -188,6 +189,7 @@ public interface StatusBarPhoneModule { DozeScrimController dozeScrimController, VolumeComponent volumeComponent, CommandQueue commandQueue, + CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger, StatusBarComponent.Factory statusBarComponentFactory, PluginManager pluginManager, Optional splitScreenOptional, @@ -284,6 +286,7 @@ public interface StatusBarPhoneModule { dozeScrimController, volumeComponent, commandQueue, + collapsedStatusBarFragmentLogger, statusBarComponentFactory, pluginManager, splitScreenOptional, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentLoggerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentLoggerTest.kt new file mode 100644 index 0000000000000..f3136c7be9675 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentLoggerTest.kt @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2021 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.statusbar.phone + +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import com.android.systemui.dump.DumpManager +import com.android.systemui.log.LogBufferFactory +import com.android.systemui.log.LogcatEchoTracker +import com.android.systemui.statusbar.DisableFlagsLogger +import com.google.common.truth.Truth.assertThat +import org.junit.Test +import org.mockito.Mockito.mock +import java.io.PrintWriter +import java.io.StringWriter + +@SmallTest +class CollapsedStatusBarFragmentLoggerTest : SysuiTestCase() { + + private val buffer = LogBufferFactory(DumpManager(), mock(LogcatEchoTracker::class.java)) + .create("buffer", 10) + private val disableFlagsLogger = DisableFlagsLogger( + listOf(DisableFlagsLogger.DisableFlag(0b001, 'A', 'a')), + listOf(DisableFlagsLogger.DisableFlag(0b001, 'B', 'b')) + ) + private val logger = CollapsedStatusBarFragmentLogger(buffer, disableFlagsLogger) + + @Test + fun logToBuffer_bufferHasStates() { + val state = DisableFlagsLogger.DisableState(0, 1) + + logger.logDisableFlagChange(state, state) + + val stringWriter = StringWriter() + buffer.dump(PrintWriter(stringWriter), tailLength = 0) + val actualString = stringWriter.toString() + val expectedLogString = disableFlagsLogger.getDisableFlagsString(state, state) + + assertThat(actualString).contains(expectedLogString) + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java index 5f4670045ad64..b08dbee687e6a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java @@ -39,8 +39,11 @@ import androidx.test.filters.SmallTest; import com.android.systemui.R; import com.android.systemui.SysuiBaseFragmentTest; import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.log.LogBuffer; +import com.android.systemui.log.LogcatEchoTracker; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.CommandQueue; +import com.android.systemui.statusbar.DisableFlagsLogger; import com.android.systemui.statusbar.OperatorNameViewController; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; @@ -263,6 +266,10 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { mNetworkController, mStatusBarStateController, mCommandQueue, + new CollapsedStatusBarFragmentLogger( + new LogBuffer("TEST", 1, 1, mock(LogcatEchoTracker.class)), + new DisableFlagsLogger() + ), mOperatorNameViewControllerFactory); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java index 3c0382b6efeca..751bc815bdd68 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java @@ -233,6 +233,7 @@ public class StatusBarTest extends SysuiTestCase { @Mock private ViewMediatorCallback mKeyguardVieMediatorCallback; @Mock private VolumeComponent mVolumeComponent; @Mock private CommandQueue mCommandQueue; + @Mock private CollapsedStatusBarFragmentLogger mCollapsedStatusBarFragmentLogger; @Mock private StatusBarComponent.Factory mStatusBarComponentFactory; @Mock private StatusBarComponent mStatusBarComponent; @Mock private PluginManager mPluginManager; @@ -404,6 +405,7 @@ public class StatusBarTest extends SysuiTestCase { mDozeScrimController, mVolumeComponent, mCommandQueue, + mCollapsedStatusBarFragmentLogger, mStatusBarComponentFactory, mPluginManager, Optional.of(mLegacySplitScreen),