Loading packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarTouchExclusionRegionBinder.kt +30 −4 Original line number Diff line number Diff line Loading @@ -19,9 +19,12 @@ package com.android.systemui.statusbar.pipeline.shared.ui.binder import android.graphics.Rect import android.graphics.Region import android.window.DesktopExperienceFlags import com.android.systemui.common.ui.view.onLayoutChanged import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.lifecycle.setSnapshotBinding import com.android.systemui.statusbar.layout.ui.viewmodel.AppHandlesViewModel import com.android.systemui.statusbar.phone.PhoneStatusBarView import kotlinx.coroutines.DisposableHandle import kotlinx.coroutines.awaitCancellation /** Binds a [PhoneStatusBarView] to [AppHandlesViewModel]'s touch exclusion region. */ Loading @@ -31,16 +34,39 @@ object HomeStatusBarTouchExclusionRegionBinder { * Reports the updated touchable region to the [PhoneStatusBarView] calculated from the touch * exclusion region provided. */ fun bind(view: PhoneStatusBarView, touchExclusionRegion: Region) { fun bind(view: PhoneStatusBarView, appHandlesViewModel: AppHandlesViewModel): DisposableHandle { if (!DesktopExperienceFlags.ENABLE_REMOVE_STATUS_BAR_INPUT_LAYER.isTrue) { return return DisposableHandle {} } // Update touchable regions when touchableExclusionRegion changes view.repeatWhenAttached { view.setSnapshotBinding { view.updateTouchableRegion(calculateTouchableRegion(view, touchExclusionRegion)) view.updateTouchableRegion( calculateTouchableRegion(view, appHandlesViewModel.touchableExclusionRegion) ) } awaitCancellation() } // Update touchable region when status bar bounds change return view.onLayoutChanged { _, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom -> if (top == oldTop && left == oldLeft && right == oldRight && bottom == oldBottom) { return@onLayoutChanged } view.updateTouchableRegion( calculateTouchableRegion(view, appHandlesViewModel.touchableExclusionRegion) ) } } private fun calculateTouchableRegion( Loading @@ -52,7 +78,7 @@ object HomeStatusBarTouchExclusionRegionBinder { val touchableRegion = Region.obtain().apply { set(outBounds) op(touchExclusionRegion, android.graphics.Region.Op.DIFFERENCE) op(touchExclusionRegion, Region.Op.DIFFERENCE) } return touchableRegion } Loading packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StatusBarRoot.kt +8 −4 Original line number Diff line number Diff line Loading @@ -110,6 +110,7 @@ import com.android.systemui.statusbar.systemstatusicons.ui.viewmodel.SystemStatu import com.android.systemui.statusbar.ui.viewmodel.StatusBarRegionSamplingViewModel import javax.inject.Inject import javax.inject.Named import kotlinx.coroutines.DisposableHandle import kotlinx.coroutines.awaitCancellation /** Factory to simplify the dependency management for [StatusBarRoot] */ Loading Loading @@ -209,6 +210,7 @@ fun StatusBarRoot( rememberViewModel("AppHandleBounds") { statusBarViewModel.appHandlesViewModelFactory.create(displayId) } lateinit var touchableExclusionRegionDisposableHandle: DisposableHandle // Let the DesktopStatusBar compose all the UI if [isDesktopStatusBarEnabled] is true. if (StatusBarForDesktop.isEnabled && statusBarViewModel.isDesktopStatusBarEnabled) { Loading Loading @@ -238,9 +240,10 @@ fun StatusBarRoot( ) } touchableExclusionRegionDisposableHandle = HomeStatusBarTouchExclusionRegionBinder.bind( phoneStatusBarView, appHandlesViewModel.touchableExclusionRegion, appHandlesViewModel, ) if (StatusBarChipsModernization.isEnabled) { Loading Loading @@ -361,6 +364,7 @@ fun StatusBarRoot( phoneStatusBarView }, modifier = modifier, onRelease = { touchableExclusionRegionDisposableHandle.dispose() }, ) } Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarTouchExclusionRegionBinder.kt +30 −4 Original line number Diff line number Diff line Loading @@ -19,9 +19,12 @@ package com.android.systemui.statusbar.pipeline.shared.ui.binder import android.graphics.Rect import android.graphics.Region import android.window.DesktopExperienceFlags import com.android.systemui.common.ui.view.onLayoutChanged import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.lifecycle.setSnapshotBinding import com.android.systemui.statusbar.layout.ui.viewmodel.AppHandlesViewModel import com.android.systemui.statusbar.phone.PhoneStatusBarView import kotlinx.coroutines.DisposableHandle import kotlinx.coroutines.awaitCancellation /** Binds a [PhoneStatusBarView] to [AppHandlesViewModel]'s touch exclusion region. */ Loading @@ -31,16 +34,39 @@ object HomeStatusBarTouchExclusionRegionBinder { * Reports the updated touchable region to the [PhoneStatusBarView] calculated from the touch * exclusion region provided. */ fun bind(view: PhoneStatusBarView, touchExclusionRegion: Region) { fun bind(view: PhoneStatusBarView, appHandlesViewModel: AppHandlesViewModel): DisposableHandle { if (!DesktopExperienceFlags.ENABLE_REMOVE_STATUS_BAR_INPUT_LAYER.isTrue) { return return DisposableHandle {} } // Update touchable regions when touchableExclusionRegion changes view.repeatWhenAttached { view.setSnapshotBinding { view.updateTouchableRegion(calculateTouchableRegion(view, touchExclusionRegion)) view.updateTouchableRegion( calculateTouchableRegion(view, appHandlesViewModel.touchableExclusionRegion) ) } awaitCancellation() } // Update touchable region when status bar bounds change return view.onLayoutChanged { _, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom -> if (top == oldTop && left == oldLeft && right == oldRight && bottom == oldBottom) { return@onLayoutChanged } view.updateTouchableRegion( calculateTouchableRegion(view, appHandlesViewModel.touchableExclusionRegion) ) } } private fun calculateTouchableRegion( Loading @@ -52,7 +78,7 @@ object HomeStatusBarTouchExclusionRegionBinder { val touchableRegion = Region.obtain().apply { set(outBounds) op(touchExclusionRegion, android.graphics.Region.Op.DIFFERENCE) op(touchExclusionRegion, Region.Op.DIFFERENCE) } return touchableRegion } Loading
packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StatusBarRoot.kt +8 −4 Original line number Diff line number Diff line Loading @@ -110,6 +110,7 @@ import com.android.systemui.statusbar.systemstatusicons.ui.viewmodel.SystemStatu import com.android.systemui.statusbar.ui.viewmodel.StatusBarRegionSamplingViewModel import javax.inject.Inject import javax.inject.Named import kotlinx.coroutines.DisposableHandle import kotlinx.coroutines.awaitCancellation /** Factory to simplify the dependency management for [StatusBarRoot] */ Loading Loading @@ -209,6 +210,7 @@ fun StatusBarRoot( rememberViewModel("AppHandleBounds") { statusBarViewModel.appHandlesViewModelFactory.create(displayId) } lateinit var touchableExclusionRegionDisposableHandle: DisposableHandle // Let the DesktopStatusBar compose all the UI if [isDesktopStatusBarEnabled] is true. if (StatusBarForDesktop.isEnabled && statusBarViewModel.isDesktopStatusBarEnabled) { Loading Loading @@ -238,9 +240,10 @@ fun StatusBarRoot( ) } touchableExclusionRegionDisposableHandle = HomeStatusBarTouchExclusionRegionBinder.bind( phoneStatusBarView, appHandlesViewModel.touchableExclusionRegion, appHandlesViewModel, ) if (StatusBarChipsModernization.isEnabled) { Loading Loading @@ -361,6 +364,7 @@ fun StatusBarRoot( phoneStatusBarView }, modifier = modifier, onRelease = { touchableExclusionRegionDisposableHandle.dispose() }, ) } Loading