diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SysUIComponent.java b/packages/SystemUI/src/com/android/systemui/dagger/SysUIComponent.java index cffb2f79ebfb1..b23569241f598 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/SysUIComponent.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/SysUIComponent.java @@ -28,6 +28,8 @@ import com.android.systemui.media.taptotransfer.receiver.MediaTttChipControllerR import com.android.systemui.media.taptotransfer.sender.MediaTttChipControllerSender; import com.android.systemui.people.PeopleProvider; import com.android.systemui.statusbar.policy.ConfigurationController; +import com.android.systemui.unfold.FoldStateLogger; +import com.android.systemui.unfold.FoldStateLoggingProvider; import com.android.systemui.unfold.SysUIUnfoldComponent; import com.android.systemui.unfold.UnfoldLatencyTracker; import com.android.systemui.unfold.util.NaturalRotationUnfoldProgressProvider; @@ -139,6 +141,8 @@ public interface SysUIComponent { getMediaTttChipControllerReceiver(); getMediaTttCommandLineHelper(); getUnfoldLatencyTracker().init(); + getFoldStateLoggingProvider().ifPresent(FoldStateLoggingProvider::init); + getFoldStateLogger().ifPresent(FoldStateLogger::init); } /** @@ -165,6 +169,18 @@ public interface SysUIComponent { @SysUISingleton UnfoldLatencyTracker getUnfoldLatencyTracker(); + /** + * Creates a FoldStateLoggingProvider. + */ + @SysUISingleton + Optional getFoldStateLoggingProvider(); + + /** + * Creates a FoldStateLogger. + */ + @SysUISingleton + Optional getFoldStateLogger(); + /** * Main dependency providing module. */ diff --git a/packages/SystemUI/src/com/android/systemui/unfold/FoldStateLogger.kt b/packages/SystemUI/src/com/android/systemui/unfold/FoldStateLogger.kt new file mode 100644 index 0000000000000..1451c03fefa09 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/unfold/FoldStateLogger.kt @@ -0,0 +1,36 @@ +/* + * 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.unfold + +import com.android.internal.util.FrameworkStatsLog + +/** Logs fold state changes. */ +class FoldStateLogger(private val foldStateLoggingProvider: FoldStateLoggingProvider) : + FoldStateLoggingProvider.FoldStateLoggingListener { + + fun init() { + foldStateLoggingProvider.addCallback(this) + } + + override fun onFoldUpdate(foldStateUpdate: FoldStateChange) { + FrameworkStatsLog.write( + FrameworkStatsLog.FOLD_STATE_DURATION_REPORTED, + foldStateUpdate.previous, + foldStateUpdate.current, + foldStateUpdate.dtMillis) + } +} diff --git a/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionModule.kt b/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionModule.kt index f2c156108ac6f..c2fd34c719a0d 100644 --- a/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionModule.kt +++ b/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionModule.kt @@ -100,6 +100,15 @@ class UnfoldTransitionModule { FoldStateLoggingProviderImpl(foldStateProvider, SystemClockImpl()) } + @Provides + @Singleton + fun providesFoldStateLogger( + optionalFoldStateLoggingProvider: Optional + ): Optional = + optionalFoldStateLoggingProvider.map { FoldStateLoggingProvider -> + FoldStateLogger(FoldStateLoggingProvider) + } + @Provides @Singleton fun provideUnfoldTransitionConfig(context: Context): UnfoldTransitionConfig =