Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4c6e5423 authored by Anton Potapov's avatar Anton Potapov
Browse files

Use platform WindowMetrics to get window bounds

Getting current insets is a long operation. This is why platform
WindowMetricsController provides WindowMetrics with insetsProvider
instead of resolving those inplace.

AndroidX WindowMetricsCalculator resolves those insets when translates
platform WindowMetrics to their androidX counterpart, which causes a
framedrop.

This change swaps androidX implementation with native one because we
only need screen bounds to determine its size.

Flag: EXEMPT bugfix
Fixes: 363545395
Test: atest VolumePanelScreenshotTest
Test: manual on foldable
Change-Id: Ie1bd7a666097be6714b3a8a0134302e4d59ba58c
parent 5620e115
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -16,15 +16,16 @@

package com.android.compose.windowsizeclass

import android.view.WindowManager
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
import androidx.compose.material3.windowsizeclass.WindowSizeClass
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.compose.ui.graphics.toComposeRect
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.window.layout.WindowMetricsCalculator

val LocalWindowSizeClass =
    staticCompositionLocalOf<WindowSizeClass> {
@@ -41,7 +42,10 @@ fun calculateWindowSizeClass(): WindowSizeClass {
    LocalConfiguration.current
    val density = LocalDensity.current
    val context = LocalContext.current
    val metrics = WindowMetricsCalculator.getOrCreate().computeCurrentWindowMetrics(context)
    val metrics =
        remember(context) {
            context.getSystemService(WindowManager::class.java)!!.currentWindowMetrics
        }
    val size = with(density) { metrics.bounds.toComposeRect().size.toDpSize() }
    return WindowSizeClass.calculateFromSize(size)
}