diff options
4 files changed, 83 insertions, 14 deletions
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 98b6d70317b8..60192b8c33df 100644 --- a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java +++ b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java @@ -152,6 +152,14 @@ public class LogModule { return factory.create("QSLog", 700 /* maxSize */, false /* systrace */); } + /** Provides a logging buffer for logs related to Quick Settings configuration. */ + @Provides + @SysUISingleton + @QSConfigLog + public static LogBuffer provideQSConfigLogBuffer(LogBufferFactory factory) { + return factory.create("QSConfigLog", 100 /* maxSize */, true /* systrace */); + } + /** Provides a logging buffer for {@link com.android.systemui.broadcast.BroadcastDispatcher} */ @Provides @SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/QSConfigLog.java b/packages/SystemUI/src/com/android/systemui/log/dagger/QSConfigLog.java new file mode 100644 index 000000000000..295bf88d498f --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/log/dagger/QSConfigLog.java @@ -0,0 +1,33 @@ +/* + * 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.systemui.log.dagger; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import com.android.systemui.plugins.log.LogBuffer; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; + +import javax.inject.Qualifier; + +/** A {@link LogBuffer} for QS configuration changed messages. */ +@Qualifier +@Documented +@Retention(RUNTIME) +public @interface QSConfigLog { +} diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java index 2668d2e36731..fdab9b16c7a1 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java @@ -91,16 +91,19 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr new QSPanel.OnConfigurationChangedListener() { @Override public void onConfigurationChange(Configuration newConfig) { - mQSLogger.logOnConfigurationChanged( - /* lastOrientation= */ mLastOrientation, - /* newOrientation= */ newConfig.orientation, - /* containerName= */ mView.getDumpableTag()); - - boolean previousSplitShadeState = mShouldUseSplitNotificationShade; + final boolean previousSplitShadeState = mShouldUseSplitNotificationShade; + final int previousOrientation = mLastOrientation; mShouldUseSplitNotificationShade = - LargeScreenUtils.shouldUseSplitNotificationShade(getResources()); + LargeScreenUtils.shouldUseSplitNotificationShade(getResources()); mLastOrientation = newConfig.orientation; + mQSLogger.logOnConfigurationChanged( + /* oldOrientation= */ previousOrientation, + /* newOrientation= */ mLastOrientation, + /* oldShouldUseSplitShade= */ previousSplitShadeState, + /* newShouldUseSplitShade= */ mShouldUseSplitNotificationShade, + /* containerName= */ mView.getDumpableTag()); + switchTileLayoutIfNeeded(); onConfigurationChanged(); if (previousSplitShadeState != mShouldUseSplitNotificationShade) { diff --git a/packages/SystemUI/src/com/android/systemui/qs/logging/QSLogger.kt b/packages/SystemUI/src/com/android/systemui/qs/logging/QSLogger.kt index 23c41db6d5a6..5b461a6d8bad 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/logging/QSLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/logging/QSLogger.kt @@ -16,8 +16,12 @@ package com.android.systemui.qs.logging +import android.content.res.Configuration.ORIENTATION_LANDSCAPE +import android.content.res.Configuration.ORIENTATION_PORTRAIT +import android.content.res.Configuration.Orientation import android.service.quicksettings.Tile import android.view.View +import com.android.systemui.log.dagger.QSConfigLog import com.android.systemui.log.dagger.QSLog import com.android.systemui.plugins.log.ConstantStringsLogger import com.android.systemui.plugins.log.ConstantStringsLoggerImpl @@ -32,8 +36,12 @@ import javax.inject.Inject private const val TAG = "QSLog" -class QSLogger @Inject constructor(@QSLog private val buffer: LogBuffer) : - ConstantStringsLogger by ConstantStringsLoggerImpl(buffer, TAG) { +class QSLogger +@Inject +constructor( + @QSLog private val buffer: LogBuffer, + @QSConfigLog private val configChangedBuffer: LogBuffer, +) : ConstantStringsLogger by ConstantStringsLoggerImpl(buffer, TAG) { fun logException(@CompileTimeConstant logMsg: String, ex: Exception) { buffer.log(TAG, ERROR, {}, { logMsg }, exception = ex) @@ -264,19 +272,28 @@ class QSLogger @Inject constructor(@QSLog private val buffer: LogBuffer) : } fun logOnConfigurationChanged( - lastOrientation: Int, - newOrientation: Int, + @Orientation oldOrientation: Int, + @Orientation newOrientation: Int, + newShouldUseSplitShade: Boolean, + oldShouldUseSplitShade: Boolean, containerName: String ) { - buffer.log( + configChangedBuffer.log( TAG, DEBUG, { str1 = containerName - int1 = lastOrientation + int1 = oldOrientation int2 = newOrientation + bool1 = oldShouldUseSplitShade + bool2 = newShouldUseSplitShade }, - { "configuration change: $str1 orientation was $int1, now $int2" } + { + "config change: " + + "$str1 orientation=${toOrientationString(int2)} " + + "(was ${toOrientationString(int1)}), " + + "splitShade=$bool2 (was $bool1)" + } ) } @@ -353,3 +370,11 @@ class QSLogger @Inject constructor(@QSLog private val buffer: LogBuffer) : } } } + +private inline fun toOrientationString(@Orientation orientation: Int): String { + return when (orientation) { + ORIENTATION_LANDSCAPE -> "land" + ORIENTATION_PORTRAIT -> "port" + else -> "undefined" + } +} |