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

Commit 018b5690 authored by Tianfan Zhang's avatar Tianfan Zhang Committed by Android (Google) Code Review
Browse files

Merge "Add IME visibility state flow." into main

parents b965268f c856457d
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