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

Commit c856457d authored by Tianfan Zhang's avatar Tianfan Zhang
Browse files

Add IME visibility state flow.

Bug: 415914052
Bug: 403422950
Test: atest AmbientCueInteractorTest
Flag: com.android.systemui.enable_underlay
Change-Id: Icfb5eb6061e13ea729eeb78280b3216ef8a5b7ad
parent 08d2f088
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -73,4 +73,20 @@ class AmbientCueInteractorTest : SysuiTestCase() {
            ambientCueRepository.fake.setActions(testActions)
            assertThat(actions).isEqualTo(testActions)
        }

    @Test
    fun isImeVisible_setTrue_true() =
        kosmos.runTest {
            val isImeVisible by collectLastValue(ambientCueInteractor.isImeVisible)
            ambientCueInteractor.setIsImeVisible(true)
            assertThat(isImeVisible).isTrue()
        }

    @Test
    fun isImeVisible_setFalse_false() =
        kosmos.runTest {
            val isImeVisible by collectLastValue(ambientCueInteractor.isImeVisible)
            ambientCueInteractor.setIsImeVisible(false)
            assertThat(isImeVisible).isFalse()
        }
}
+5 −0
Original line number Diff line number Diff line
@@ -46,6 +46,9 @@ interface AmbientCueRepository {

    /** If hint (or chips list) should be visible. */
    val isVisible: MutableStateFlow<Boolean>

    /** If IME is visible or not. */
    val isImeVisible: MutableStateFlow<Boolean>
}

@SysUISingleton
@@ -110,6 +113,8 @@ constructor(

    override val isVisible: MutableStateFlow<Boolean> = MutableStateFlow(false)

    override val isImeVisible: MutableStateFlow<Boolean> = MutableStateFlow(false)

    companion object {
        // Privately defined card type, exclusive for ambient actions
        @VisibleForTesting const val AMBIENT_ACTION_FEATURE = 72
+5 −0
Original line number Diff line number Diff line
@@ -25,8 +25,13 @@ import kotlinx.coroutines.flow.update
class AmbientCueInteractor @Inject constructor(private val repository: AmbientCueRepository) {
    val isVisible: StateFlow<Boolean> = repository.isVisible
    val actions: StateFlow<List<ActionModel>> = repository.actions
    val isImeVisible: StateFlow<Boolean> = repository.isImeVisible

    fun setIsVisible(visible: Boolean) {
        repository.isVisible.update { visible }
    }

    fun setIsImeVisible(visible: Boolean) {
        repository.isImeVisible.update { visible }
    }
}
+7 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.ambientcue.ui.startable

import android.util.Log
import android.view.WindowInsets.Type.ime
import android.view.WindowManager
import com.android.systemui.CoreStartable
import com.android.systemui.ambientcue.domain.interactor.AmbientCueInteractor
@@ -62,6 +63,12 @@ constructor(
                }
            }
        }

        ambientCueWindowRootView.setOnApplyWindowInsetsListener { _, insets ->
            val imeVisible = insets.isVisible(ime())
            ambientCueInteractor.setIsImeVisible(imeVisible)
            insets
        }
    }

    private fun createAmbientCueView() {
+1 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ object AmbientCueUtils {
                if (spyTouches) {
                    inputFeatures = inputFeatures or LayoutParams.INPUT_FEATURE_SPY
                }
                receiveInsetsIgnoringZOrder = true
            }
    }
}
Loading