Merge "[Disable Flags] Add disable flag logging to CollapsedStatusBarFragment." into sc-v2-dev am: 1c3b83a563

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15686519

Change-Id: Id9dcc46c3c09b3ec7eb577a168623257d137d4be
This commit is contained in:
TreeHugger Robot
2021-09-17 06:00:13 +00:00
committed by Automerger Merge Worker
9 changed files with 183 additions and 0 deletions

View File

@@ -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 {
}

View File

@@ -100,6 +100,17 @@ public class LogModule {
return factory.create("PrivacyLog", 100); 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. */ /** Allows logging buffers to be tweaked via adb on debug builds but not on prod builds. */
@Provides @Provides
@SysUISingleton @SysUISingleton

View File

@@ -42,6 +42,7 @@ import com.android.systemui.animation.Interpolators;
import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.DisableFlagsLogger.DisableState;
import com.android.systemui.statusbar.OperatorNameView; import com.android.systemui.statusbar.OperatorNameView;
import com.android.systemui.statusbar.OperatorNameViewController; import com.android.systemui.statusbar.OperatorNameViewController;
import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarState;
@@ -93,6 +94,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
private Lazy<Optional<StatusBar>> mStatusBarOptionalLazy; private Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
private DarkIconManager mDarkIconManager; private DarkIconManager mDarkIconManager;
private final CommandQueue mCommandQueue; private final CommandQueue mCommandQueue;
private final CollapsedStatusBarFragmentLogger mCollapsedStatusBarFragmentLogger;
private final OperatorNameViewController.Factory mOperatorNameViewControllerFactory; private final OperatorNameViewController.Factory mOperatorNameViewControllerFactory;
private final OngoingCallController mOngoingCallController; private final OngoingCallController mOngoingCallController;
private final SystemStatusAnimationScheduler mAnimationScheduler; private final SystemStatusAnimationScheduler mAnimationScheduler;
@@ -131,6 +133,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
NetworkController networkController, NetworkController networkController,
StatusBarStateController statusBarStateController, StatusBarStateController statusBarStateController,
CommandQueue commandQueue, CommandQueue commandQueue,
CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger,
OperatorNameViewController.Factory operatorNameViewControllerFactory OperatorNameViewController.Factory operatorNameViewControllerFactory
) { ) {
mOngoingCallController = ongoingCallController; mOngoingCallController = ongoingCallController;
@@ -144,6 +147,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
mNetworkController = networkController; mNetworkController = networkController;
mStatusBarStateController = statusBarStateController; mStatusBarStateController = statusBarStateController;
mCommandQueue = commandQueue; mCommandQueue = commandQueue;
mCollapsedStatusBarFragmentLogger = collapsedStatusBarFragmentLogger;
mOperatorNameViewControllerFactory = operatorNameViewControllerFactory; mOperatorNameViewControllerFactory = operatorNameViewControllerFactory;
} }
@@ -244,7 +248,14 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
if (displayId != getContext().getDisplayId()) { if (displayId != getContext().getDisplayId()) {
return; return;
} }
int state1BeforeAdjustment = state1;
state1 = adjustDisableFlags(state1); state1 = adjustDisableFlags(state1);
mCollapsedStatusBarFragmentLogger.logDisableFlagChange(
new DisableState(state1BeforeAdjustment, state2),
new DisableState(state1, state2));
final int old1 = mDisabled1; final int old1 = mDisabled1;
final int diff1 = state1 ^ old1; final int diff1 = state1 ^ old1;
final int old2 = mDisabled2; final int old2 = mDisabled2;

View File

@@ -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"

View File

@@ -454,6 +454,7 @@ public class StatusBar extends SystemUI implements
@Nullable @Nullable
protected LockscreenWallpaper mLockscreenWallpaper; protected LockscreenWallpaper mLockscreenWallpaper;
private final AutoHideController mAutoHideController; private final AutoHideController mAutoHideController;
private final CollapsedStatusBarFragmentLogger mCollapsedStatusBarFragmentLogger;
private final Point mCurrentDisplaySize = new Point(); private final Point mCurrentDisplaySize = new Point();
@@ -743,6 +744,7 @@ public class StatusBar extends SystemUI implements
DozeScrimController dozeScrimController, DozeScrimController dozeScrimController,
VolumeComponent volumeComponent, VolumeComponent volumeComponent,
CommandQueue commandQueue, CommandQueue commandQueue,
CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger,
StatusBarComponent.Factory statusBarComponentFactory, StatusBarComponent.Factory statusBarComponentFactory,
PluginManager pluginManager, PluginManager pluginManager,
Optional<LegacySplitScreen> splitScreenOptional, Optional<LegacySplitScreen> splitScreenOptional,
@@ -842,6 +844,7 @@ public class StatusBar extends SystemUI implements
mNotificationShadeDepthControllerLazy = notificationShadeDepthControllerLazy; mNotificationShadeDepthControllerLazy = notificationShadeDepthControllerLazy;
mVolumeComponent = volumeComponent; mVolumeComponent = volumeComponent;
mCommandQueue = commandQueue; mCommandQueue = commandQueue;
mCollapsedStatusBarFragmentLogger = collapsedStatusBarFragmentLogger;
mStatusBarComponentFactory = statusBarComponentFactory; mStatusBarComponentFactory = statusBarComponentFactory;
mPluginManager = pluginManager; mPluginManager = pluginManager;
mSplitScreenOptional = splitScreenOptional; mSplitScreenOptional = splitScreenOptional;
@@ -1216,6 +1219,7 @@ public class StatusBar extends SystemUI implements
mNetworkController, mNetworkController,
mStatusBarStateController, mStatusBarStateController,
mCommandQueue, mCommandQueue,
mCollapsedStatusBarFragmentLogger,
mOperatorNameViewControllerFactory mOperatorNameViewControllerFactory
), ),
CollapsedStatusBarFragment.TAG) CollapsedStatusBarFragment.TAG)

View File

@@ -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.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.phone.AutoHideController; import com.android.systemui.statusbar.phone.AutoHideController;
import com.android.systemui.statusbar.phone.BiometricUnlockController; 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.DozeParameters;
import com.android.systemui.statusbar.phone.DozeScrimController; import com.android.systemui.statusbar.phone.DozeScrimController;
import com.android.systemui.statusbar.phone.DozeServiceHost; import com.android.systemui.statusbar.phone.DozeServiceHost;
@@ -188,6 +189,7 @@ public interface StatusBarPhoneModule {
DozeScrimController dozeScrimController, DozeScrimController dozeScrimController,
VolumeComponent volumeComponent, VolumeComponent volumeComponent,
CommandQueue commandQueue, CommandQueue commandQueue,
CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger,
StatusBarComponent.Factory statusBarComponentFactory, StatusBarComponent.Factory statusBarComponentFactory,
PluginManager pluginManager, PluginManager pluginManager,
Optional<LegacySplitScreen> splitScreenOptional, Optional<LegacySplitScreen> splitScreenOptional,
@@ -284,6 +286,7 @@ public interface StatusBarPhoneModule {
dozeScrimController, dozeScrimController,
volumeComponent, volumeComponent,
commandQueue, commandQueue,
collapsedStatusBarFragmentLogger,
statusBarComponentFactory, statusBarComponentFactory,
pluginManager, pluginManager,
splitScreenOptional, splitScreenOptional,

View File

@@ -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)
}
}

View File

@@ -39,8 +39,11 @@ import androidx.test.filters.SmallTest;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.SysuiBaseFragmentTest; import com.android.systemui.SysuiBaseFragmentTest;
import com.android.systemui.flags.FeatureFlags; 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.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.DisableFlagsLogger;
import com.android.systemui.statusbar.OperatorNameViewController; import com.android.systemui.statusbar.OperatorNameViewController;
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
@@ -263,6 +266,10 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest {
mNetworkController, mNetworkController,
mStatusBarStateController, mStatusBarStateController,
mCommandQueue, mCommandQueue,
new CollapsedStatusBarFragmentLogger(
new LogBuffer("TEST", 1, 1, mock(LogcatEchoTracker.class)),
new DisableFlagsLogger()
),
mOperatorNameViewControllerFactory); mOperatorNameViewControllerFactory);
} }

View File

@@ -233,6 +233,7 @@ public class StatusBarTest extends SysuiTestCase {
@Mock private ViewMediatorCallback mKeyguardVieMediatorCallback; @Mock private ViewMediatorCallback mKeyguardVieMediatorCallback;
@Mock private VolumeComponent mVolumeComponent; @Mock private VolumeComponent mVolumeComponent;
@Mock private CommandQueue mCommandQueue; @Mock private CommandQueue mCommandQueue;
@Mock private CollapsedStatusBarFragmentLogger mCollapsedStatusBarFragmentLogger;
@Mock private StatusBarComponent.Factory mStatusBarComponentFactory; @Mock private StatusBarComponent.Factory mStatusBarComponentFactory;
@Mock private StatusBarComponent mStatusBarComponent; @Mock private StatusBarComponent mStatusBarComponent;
@Mock private PluginManager mPluginManager; @Mock private PluginManager mPluginManager;
@@ -404,6 +405,7 @@ public class StatusBarTest extends SysuiTestCase {
mDozeScrimController, mDozeScrimController,
mVolumeComponent, mVolumeComponent,
mCommandQueue, mCommandQueue,
mCollapsedStatusBarFragmentLogger,
mStatusBarComponentFactory, mStatusBarComponentFactory,
mPluginManager, mPluginManager,
Optional.of(mLegacySplitScreen), Optional.of(mLegacySplitScreen),