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

Commit 6783e8f5 authored by Priyanka Advani (xWF)'s avatar Priyanka Advani (xWF) Committed by Android (Google) Code Review
Browse files

Revert "Fix scrim clipping"

This reverts commit 80aa374d.

Reason for revert: Droidmonitor created revert due to b/406795683. Will be verifying through ABTD before submission.

Change-Id: Ib5f5c2e40f64694d04cf90ea845d545e52dbf2c7
parent 80aa374d
Loading
Loading
Loading
Loading
+27 −64
Original line number Original line Diff line number Diff line
@@ -118,7 +118,6 @@ import com.android.systemui.keyboard.shortcut.ui.composable.InteractionsConfig
import com.android.systemui.keyboard.shortcut.ui.composable.ProvideShortcutHelperIndication
import com.android.systemui.keyboard.shortcut.ui.composable.ProvideShortcutHelperIndication
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.lifecycle.setSnapshotBinding
import com.android.systemui.lifecycle.setSnapshotBinding
import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.media.controls.ui.view.MediaHost
import com.android.systemui.media.controls.ui.view.MediaHost
import com.android.systemui.plugins.qs.QS
import com.android.systemui.plugins.qs.QS
import com.android.systemui.plugins.qs.QSContainerController
import com.android.systemui.plugins.qs.QSContainerController
@@ -133,7 +132,6 @@ import com.android.systemui.qs.composefragment.ui.toEditMode
import com.android.systemui.qs.composefragment.viewmodel.QSFragmentComposeViewModel
import com.android.systemui.qs.composefragment.viewmodel.QSFragmentComposeViewModel
import com.android.systemui.qs.flags.QSComposeFragment
import com.android.systemui.qs.flags.QSComposeFragment
import com.android.systemui.qs.footer.ui.compose.FooterActions
import com.android.systemui.qs.footer.ui.compose.FooterActions
import com.android.systemui.qs.panels.shared.model.QSFragmentComposeClippingTableLog
import com.android.systemui.qs.panels.ui.compose.EditMode
import com.android.systemui.qs.panels.ui.compose.EditMode
import com.android.systemui.qs.panels.ui.compose.QuickQuickSettings
import com.android.systemui.qs.panels.ui.compose.QuickQuickSettings
import com.android.systemui.qs.panels.ui.compose.TileGrid
import com.android.systemui.qs.panels.ui.compose.TileGrid
@@ -165,7 +163,6 @@ class QSFragmentCompose
@Inject
@Inject
constructor(
constructor(
    private val qsFragmentComposeViewModelFactory: QSFragmentComposeViewModel.Factory,
    private val qsFragmentComposeViewModelFactory: QSFragmentComposeViewModel.Factory,
    @QSFragmentComposeClippingTableLog private val qsClippingTableLogBuffer: TableLogBuffer,
    private val dumpManager: DumpManager,
    private val dumpManager: DumpManager,
) : LifecycleFragment(), QS, Dumpable {
) : LifecycleFragment(), QS, Dumpable {


@@ -186,12 +183,8 @@ constructor(
    // Inside object for namespacing
    // Inside object for namespacing
    private val notificationScrimClippingParams =
    private val notificationScrimClippingParams =
        object {
        object {
            var clipData by mutableStateOf(false to NotificationScrimClipParams())
            var isEnabled by mutableStateOf(false)
            private val isEnabled
            var params by mutableStateOf(NotificationScrimClipParams())
                get() = clipData.first

            private val params
                get() = clipData.second


            fun dump(pw: IndentingPrintWriter) {
            fun dump(pw: IndentingPrintWriter) {
                pw.printSection("NotificationScrimClippingParams") {
                pw.printSection("NotificationScrimClippingParams") {
@@ -248,12 +241,12 @@ constructor(
        val frame =
        val frame =
            FrameLayoutTouchPassthrough(
            FrameLayoutTouchPassthrough(
                context,
                context,
                snapshotFlow { notificationScrimClippingParams.clipData },
                { notificationScrimClippingParams.isEnabled },
                snapshotFlow { notificationScrimClippingParams.params },
                // Only allow scrolling when we are fully expanded. That way, we don't intercept
                // Only allow scrolling when we are fully expanded. That way, we don't intercept
                // swipes in lockscreen (when somehow QS is receiving touches).
                // swipes in lockscreen (when somehow QS is receiving touches).
                { (scrollState.canScrollForward && viewModel.isQsFullyExpanded) || isCustomizing },
                { (scrollState.canScrollForward && viewModel.isQsFullyExpanded) || isCustomizing },
                viewModel::emitMotionEventForFalsingSwipeNested,
                viewModel::emitMotionEventForFalsingSwipeNested,
                qsClippingTableLogBuffer,
            )
            )
        frame.addView(
        frame.addView(
            composeView,
            composeView,
@@ -527,8 +520,8 @@ constructor(
        visible: Boolean,
        visible: Boolean,
        fullWidth: Boolean,
        fullWidth: Boolean,
    ) {
    ) {
        notificationScrimClippingParams.clipData =
        notificationScrimClippingParams.isEnabled = visible
            visible to
        notificationScrimClippingParams.params =
            NotificationScrimClipParams(
            NotificationScrimClipParams(
                top,
                top,
                bottom,
                bottom,
@@ -1063,15 +1056,17 @@ private const val EDIT_MODE_TIME_MILLIS = 500
 */
 */
private class FrameLayoutTouchPassthrough(
private class FrameLayoutTouchPassthrough(
    context: Context,
    context: Context,
    private val clippingData: Flow<Pair<Boolean, NotificationScrimClipParams>>,
    private val clippingEnabledProvider: () -> Boolean,
    private val clippingParams: Flow<NotificationScrimClipParams>,
    private val canScrollForwardQs: () -> Boolean,
    private val canScrollForwardQs: () -> Boolean,
    private val emitMotionEventForFalsing: () -> Unit,
    private val emitMotionEventForFalsing: () -> Unit,
    private val logBuffer: TableLogBuffer,
) : FrameLayout(context) {
) : FrameLayout(context) {


    init {
    init {
        repeatWhenAttached {
        repeatWhenAttached {
            repeatOnLifecycle(Lifecycle.State.STARTED) { clippingData.collect { clipData = it } }
            repeatOnLifecycle(Lifecycle.State.STARTED) {
                clippingParams.collect { currentClipParams = it }
            }
        }
        }
    }
    }


@@ -1079,53 +1074,33 @@ private class FrameLayoutTouchPassthrough(
    private var lastWidth = -1
    private var lastWidth = -1
        set(value) {
        set(value) {
            if (field != value) {
            if (field != value) {
                logBuffer.logChange(columnName = COL_WIDTH, value = value, isInitial = false)
                field = value
                field = value
                updateClippingPath()
                updateClippingPath()
            }
            }
        }
        }


    // [first] is enabled and [second] is the clipping params
    private var currentClipParams = NotificationScrimClipParams()
    private var clipData = false to NotificationScrimClipParams()
        set(value) {
        set(value) {
            if (field != value) {
            if (field != value) {
                logBuffer.logDiffs(
                    columnPrefix = PREFIX_PARAMS,
                    prevVal = field.second,
                    newVal = value.second,
                )
                if (field.first != value.first) {
                    logBuffer.logChange(
                        columnName = COL_CLIP_ENABLED,
                        value = value.first,
                        isInitial = false,
                    )
                }
                field = value
                field = value
                updateClippingPath()
                updateClippingPath()
            }
            }
        }
        }


    private val clipEnabled
        get() = clipData.first

    private val clipParams
        get() = clipData.second

    private fun updateClippingPath() {
    private fun updateClippingPath() {
        currentClippingPath.rewind()
        currentClippingPath.rewind()
        if (clipEnabled) {
        if (clippingEnabledProvider()) {
            val right = width + clipParams.rightInset
            val right = width + currentClipParams.rightInset
            val left = -clipParams.leftInset
            val left = -currentClipParams.leftInset
            val top = clipParams.top
            val top = currentClipParams.top
            val bottom = clipParams.bottom
            val bottom = currentClipParams.bottom
            currentClippingPath.addRoundRect(
            currentClippingPath.addRoundRect(
                left.toFloat(),
                left.toFloat(),
                top.toFloat(),
                top.toFloat(),
                right.toFloat(),
                right.toFloat(),
                bottom.toFloat(),
                bottom.toFloat(),
                clipParams.radius.toFloat(),
                currentClipParams.radius.toFloat(),
                clipParams.radius.toFloat(),
                currentClipParams.radius.toFloat(),
                Path.Direction.CW,
                Path.Direction.CW,
            )
            )
        }
        }
@@ -1139,12 +1114,7 @@ private class FrameLayoutTouchPassthrough(


    override fun dispatchDraw(canvas: Canvas) {
    override fun dispatchDraw(canvas: Canvas) {
        if (!currentClippingPath.isEmpty) {
        if (!currentClippingPath.isEmpty) {
            logBuffer.logChange(columnName = COL_CLIP_APPLIED, value = true, isInitial = false)
            canvas.translate(0f, -translationY)
            canvas.clipOutPath(currentClippingPath)
            canvas.clipOutPath(currentClippingPath)
            canvas.translate(0f, translationY)
        } else {
            logBuffer.logChange(columnName = COL_CLIP_APPLIED, value = false, isInitial = false)
        }
        }
        super.dispatchDraw(canvas)
        super.dispatchDraw(canvas)
    }
    }
@@ -1155,7 +1125,7 @@ private class FrameLayoutTouchPassthrough(
        child: View?,
        child: View?,
        outLocalPoint: PointF?,
        outLocalPoint: PointF?,
    ): Boolean {
    ): Boolean {
        return if (clipEnabled && y + translationY > clipParams.top) {
        return if (clippingEnabledProvider() && y + translationY > currentClipParams.top) {
            false
            false
        } else {
        } else {
            super.isTransformedTouchPointInView(x, y, child, outLocalPoint)
            super.isTransformedTouchPointInView(x, y, child, outLocalPoint)
@@ -1217,13 +1187,6 @@ private class FrameLayoutTouchPassthrough(
        }
        }
        return super.onInterceptTouchEvent(ev)
        return super.onInterceptTouchEvent(ev)
    }
    }

    private companion object {
        const val COL_CLIP_ENABLED = "enabled"
        const val COL_CLIP_APPLIED = "applied"
        const val COL_WIDTH = "width"
        const val PREFIX_PARAMS = "params"
    }
}
}


private fun Modifier.gesturesDisabled(disabled: Boolean) =
private fun Modifier.gesturesDisabled(disabled: Boolean) =
+1 −38
Original line number Original line Diff line number Diff line
@@ -16,9 +16,6 @@


package com.android.systemui.qs.composefragment.ui
package com.android.systemui.qs.composefragment.ui


import com.android.systemui.log.table.Diffable
import com.android.systemui.log.table.TableRowLogger

/** Params for [notificationScrimClip]. */
/** Params for [notificationScrimClip]. */
data class NotificationScrimClipParams(
data class NotificationScrimClipParams(
    val top: Int = 0,
    val top: Int = 0,
@@ -26,38 +23,4 @@ data class NotificationScrimClipParams(
    val leftInset: Int = 0,
    val leftInset: Int = 0,
    val rightInset: Int = 0,
    val rightInset: Int = 0,
    val radius: Int = 0,
    val radius: Int = 0,
) : Diffable<NotificationScrimClipParams> {
)
    override fun logDiffs(prevVal: NotificationScrimClipParams, row: TableRowLogger) {
        if (top != prevVal.top) {
            row.logChange(Columns.COL_TOP, top)
        }
        if (bottom != prevVal.bottom) {
            row.logChange(Columns.COL_BOTTOM, bottom)
        }
        if (leftInset != prevVal.leftInset) {
            row.logChange(Columns.COL_LEFT_INSET, leftInset)
        }
        if (rightInset != prevVal.rightInset) {
            row.logChange(Columns.COL_RIGHT_INSET, rightInset)
        }
        if (radius != prevVal.radius) {
            row.logChange(Columns.COL_RADIUS, radius)
        }
    }

    override fun logFull(row: TableRowLogger) {
        row.logChange(Columns.COL_TOP, top)
        row.logChange(Columns.COL_BOTTOM, bottom)
        row.logChange(Columns.COL_LEFT_INSET, leftInset)
        row.logChange(Columns.COL_RIGHT_INSET, rightInset)
        row.logChange(Columns.COL_RADIUS, radius)
    }
}

private object Columns {
    const val COL_TOP = "top"
    const val COL_BOTTOM = "bottom"
    const val COL_LEFT_INSET = "left_inset"
    const val COL_RIGHT_INSET = "right_inset"
    const val COL_RADIUS = "radius"
}
+0 −10
Original line number Original line Diff line number Diff line
@@ -20,8 +20,6 @@ import com.android.systemui.CoreStartable
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.LogBufferFactory
import com.android.systemui.log.LogBufferFactory
import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.log.table.TableLogBufferFactory
import com.android.systemui.qs.panels.data.repository.DefaultLargeTilesRepository
import com.android.systemui.qs.panels.data.repository.DefaultLargeTilesRepository
import com.android.systemui.qs.panels.data.repository.DefaultLargeTilesRepositoryImpl
import com.android.systemui.qs.panels.data.repository.DefaultLargeTilesRepositoryImpl
import com.android.systemui.qs.panels.domain.interactor.EditTilesResetInteractor
import com.android.systemui.qs.panels.domain.interactor.EditTilesResetInteractor
@@ -31,7 +29,6 @@ import com.android.systemui.qs.panels.shared.model.GridLayoutType
import com.android.systemui.qs.panels.shared.model.InfiniteGridLayoutType
import com.android.systemui.qs.panels.shared.model.InfiniteGridLayoutType
import com.android.systemui.qs.panels.shared.model.PaginatedGridLayoutType
import com.android.systemui.qs.panels.shared.model.PaginatedGridLayoutType
import com.android.systemui.qs.panels.shared.model.PanelsLog
import com.android.systemui.qs.panels.shared.model.PanelsLog
import com.android.systemui.qs.panels.shared.model.QSFragmentComposeClippingTableLog
import com.android.systemui.qs.panels.ui.compose.GridLayout
import com.android.systemui.qs.panels.ui.compose.GridLayout
import com.android.systemui.qs.panels.ui.compose.PaginatableGridLayout
import com.android.systemui.qs.panels.ui.compose.PaginatableGridLayout
import com.android.systemui.qs.panels.ui.compose.PaginatedGridLayout
import com.android.systemui.qs.panels.ui.compose.PaginatedGridLayout
@@ -77,13 +74,6 @@ interface PanelsModule {
            return factory.create("PanelsLog", 50)
            return factory.create("PanelsLog", 50)
        }
        }


        @Provides
        @SysUISingleton
        @QSFragmentComposeClippingTableLog
        fun providesQSFragmentComposeClippingLog(factory: TableLogBufferFactory): TableLogBuffer {
            return factory.create("QSFragmentComposeClippingTableLog", 100)
        }

        @Provides
        @Provides
        @IntoSet
        @IntoSet
        fun provideGridLayout(gridLayout: InfiniteGridLayout): Pair<GridLayoutType, GridLayout> {
        fun provideGridLayout(gridLayout: InfiniteGridLayout): Pair<GridLayoutType, GridLayout> {
+0 −24
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2025 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.qs.panels.shared.model

import javax.inject.Qualifier

@Qualifier
@MustBeDocumented
@Retention(AnnotationRetention.RUNTIME)
annotation class QSFragmentComposeClippingTableLog