Merge "Specify the parent viewgroup that should hide controls" into tm-qpr-dev

This commit is contained in:
Fabian Kozynski
2023-02-16 14:50:53 +00:00
committed by Android (Google) Code Review
4 changed files with 54 additions and 15 deletions

View File

@@ -134,7 +134,8 @@ class ControlsActivity @Inject constructor(
super.onStop()
mExitToDream = false
uiController.hide()
// parent is set in onStart, so the field is initialized when we get here
uiController.hide(parent)
controlsSettingsDialogManager.closeDialog()
}

View File

@@ -31,7 +31,13 @@ interface ControlsUiController {
}
fun show(parent: ViewGroup, onDismiss: Runnable, activityContext: Context)
fun hide()
/**
* Hide the controls content if it's attached to this parent.
*/
fun hide(parent: ViewGroup)
val isShowing: Boolean
/**
* Returns the preferred activity to start, depending on if the user has favorited any

View File

@@ -168,6 +168,9 @@ class ControlsUiControllerImpl @Inject constructor (
private lateinit var activityContext: Context
private lateinit var listingCallback: ControlsListingController.ControlsListingCallback
override val isShowing: Boolean
get() = !hidden
init {
dumpManager.registerDumpable(javaClass.name, this)
}
@@ -727,21 +730,27 @@ class ControlsUiControllerImpl @Inject constructor (
controlActionCoordinator.closeDialogs()
}
override fun hide() {
hidden = true
override fun hide(parent: ViewGroup) {
// We need to check for the parent because it's possible that we have started showing in a
// different activity. In that case, make sure to only clear things associated with the
// passed parent
if (parent == this.parent) {
Log.d(ControlsUiController.TAG, "hide()")
hidden = true
closeDialogs(true)
controlsController.get().unsubscribe()
taskViewController?.dismiss()
taskViewController = null
closeDialogs(true)
controlsController.get().unsubscribe()
taskViewController?.dismiss()
taskViewController = null
controlsById.clear()
controlViewsById.clear()
controlsListingController.get().removeCallback(listingCallback)
if (!retainCache) RenderInfo.clearCache()
}
parent.removeAllViews()
controlsById.clear()
controlViewsById.clear()
controlsListingController.get().removeCallback(listingCallback)
if (!retainCache) RenderInfo.clearCache()
}
override fun onRefreshState(componentName: ComponentName, controls: List<Control>) {

View File

@@ -29,6 +29,7 @@ import android.testing.TestableLooper
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.test.filters.SmallTest
import com.android.systemui.R
@@ -328,7 +329,7 @@ class ControlsUiControllerImplTest : SysuiTestCase() {
)
.isTrue()
underTest.hide()
underTest.hide(parent)
clearInvocations(controlsListingController, taskViewFactory)
controlsSettingsRepository.setAllowActionOnTrivialControlsInLockscreen(false)
@@ -387,6 +388,28 @@ class ControlsUiControllerImplTest : SysuiTestCase() {
assertThat(underTest.resolveActivity()).isEqualTo(ControlsActivity::class.java)
}
@Test
fun testRemoveViewsOnlyForParentPassedInHide() {
underTest.show(parent, {}, context)
parent.addView(View(context))
val mockParent: ViewGroup = mock()
underTest.hide(mockParent)
verify(mockParent).removeAllViews()
assertThat(parent.childCount).isGreaterThan(0)
}
@Test
fun testHideDifferentParentDoesntCancelListeners() {
underTest.show(parent, {}, context)
underTest.hide(mock())
verify(controlsController, never()).unsubscribe()
verify(controlsListingController, never()).removeCallback(any())
}
private fun setUpPanel(panel: SelectedItem.PanelItem): ControlsServiceInfo {
val activity = ComponentName("pkg", "activity")
sharedPreferences