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

Commit c9d4fdeb authored by Johannes Gallmann's avatar Johannes Gallmann
Browse files

Fix launch animation for PrivacyDialog and reenable dismiss anim

This CL addresses two problems:
1. The dialog launch animation bounds are fixed
2. The dialog exit animation is reenabled when the chip is still visible

Bug: 291063218
Flag: NONE
Test: atest PrivacyDialogControllerV2Test, Manual, i.e. testing dialog animations on device and analysing frames in screen recording
Change-Id: I5b838b3db342e9d7cd6c911d37375ca7a1e502da
parent 60dc8407
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@
    tools:parentTag="com.android.systemui.privacy.OngoingPrivacyChip">
    >

        <LinearLayout
        <com.android.systemui.animation.view.LaunchableLinearLayout
            android:id="@+id/icons_container"
            android:layout_height="@dimen/ongoing_appops_chip_height"
            android:layout_width="wrap_content"
+4 −2
Original line number Diff line number Diff line
@@ -23,11 +23,11 @@ import android.view.Gravity.END
import android.view.ViewGroup
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.LinearLayout
import com.android.settingslib.Utils
import com.android.systemui.res.R
import com.android.systemui.animation.view.LaunchableFrameLayout
import com.android.systemui.statusbar.events.BackgroundAnimatableView

class OngoingPrivacyChip @JvmOverloads constructor(
@@ -35,7 +35,7 @@ class OngoingPrivacyChip @JvmOverloads constructor(
    attrs: AttributeSet? = null,
    defStyleAttrs: Int = 0,
    defStyleRes: Int = 0
) : LaunchableFrameLayout(context, attrs, defStyleAttrs, defStyleRes), BackgroundAnimatableView {
) : FrameLayout(context, attrs, defStyleAttrs, defStyleRes), BackgroundAnimatableView {

    private var configuration: Configuration
    private var iconMargin = 0
@@ -43,6 +43,8 @@ class OngoingPrivacyChip @JvmOverloads constructor(
    private var iconColor = 0

    private val iconsContainer: LinearLayout
    val launchableContentView
        get() = iconsContainer

    var privacyList = emptyList<PrivacyItem>()
        set(value) {
+10 −7
Original line number Diff line number Diff line
@@ -26,9 +26,9 @@ import android.content.pm.PackageManager
import android.os.UserHandle
import android.permission.PermissionGroupUsage
import android.permission.PermissionManager
import android.view.View
import androidx.annotation.MainThread
import androidx.annotation.WorkerThread
import androidx.core.view.isVisible
import com.android.internal.logging.UiEventLogger
import com.android.systemui.animation.DialogLaunchAnimator
import com.android.systemui.appops.AppOpsController
@@ -214,7 +214,7 @@ class PrivacyDialogControllerV2(
     * @param context A context to use to create the dialog.
     * @see filterAndSelect
     */
    fun showDialog(context: Context, view: View? = null) {
    fun showDialog(context: Context, privacyChip: OngoingPrivacyChip? = null) {
        dismissDialog()
        backgroundExecutor.execute {
            val usage = permGroupUsage()
@@ -277,8 +277,8 @@ class PrivacyDialogControllerV2(
                        )
                    d.setShowForAllUsers(true)
                    d.addOnDismissListener(onDialogDismissed)
                    if (view != null) {
                        val controller = getPrivacyDialogController(view)
                    if (privacyChip != null) {
                        val controller = getPrivacyDialogController(privacyChip)
                        if (controller == null) {
                            d.show()
                        } else {
@@ -296,10 +296,13 @@ class PrivacyDialogControllerV2(
        }
    }

    private fun getPrivacyDialogController(source: View): DialogLaunchAnimator.Controller? {
        val delegate = DialogLaunchAnimator.Controller.fromView(source) ?: return null
    private fun getPrivacyDialogController(
        source: OngoingPrivacyChip
    ): DialogLaunchAnimator.Controller? {
        val delegate =
            DialogLaunchAnimator.Controller.fromView(source.launchableContentView) ?: return null
        return object : DialogLaunchAnimator.Controller by delegate {
            override fun shouldAnimateExit() = false
            override fun shouldAnimateExit() = source.isVisible
        }
    }

+1 −6
Original line number Diff line number Diff line
@@ -30,13 +30,11 @@ import android.os.UserHandle
import android.permission.PermissionGroupUsage
import android.permission.PermissionManager
import android.testing.AndroidTestingRunner
import android.view.View
import android.widget.LinearLayout
import androidx.test.filters.SmallTest
import com.android.internal.logging.UiEventLogger
import com.android.systemui.SysuiTestCase
import com.android.systemui.animation.DialogLaunchAnimator
import com.android.systemui.animation.LaunchableView
import com.android.systemui.appops.AppOpsController
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.privacy.logging.PrivacyLogger
@@ -206,10 +204,7 @@ class PrivacyDialogControllerV2Test : SysuiTestCase() {
    @Test
    fun testShowDialogShowsDialogWithView() {
        val parent = LinearLayout(context)
        val view =
            object : View(context), LaunchableView {
                override fun setShouldBlockVisibilityChanges(block: Boolean) {}
            }
        val view = OngoingPrivacyChip(context)
        parent.addView(view)
        val usage = createMockPermGroupUsage()
        `when`(permissionManager.getIndicatorAppOpUsageData(anyBoolean())).thenReturn(listOf(usage))
+3 −3
Original line number Diff line number Diff line
@@ -173,7 +173,7 @@ class HeaderPrivacyIconsControllerTest : SysuiTestCase() {
        captor.value.onClick(privacyChip)
        verify(privacyDialogController).showDialog(any(Context::class.java))
        verify(privacyDialogControllerV2, never())
            .showDialog(any(Context::class.java), any(View::class.java))
            .showDialog(any(Context::class.java), any(OngoingPrivacyChip::class.java))
    }

    @Test
@@ -186,7 +186,7 @@ class HeaderPrivacyIconsControllerTest : SysuiTestCase() {
        captor.value.onClick(privacyChip)
        verify(privacyDialogController).showDialog(any(Context::class.java))
        verify(privacyDialogControllerV2, never())
                .showDialog(any(Context::class.java), any(View::class.java))
                .showDialog(any(Context::class.java), any(OngoingPrivacyChip::class.java))
    }

    @Test
@@ -207,7 +207,7 @@ class HeaderPrivacyIconsControllerTest : SysuiTestCase() {
        captor.value.onClick(privacyChip)
        verify(privacyDialogController, never()).showDialog(any(Context::class.java))
        verify(privacyDialogControllerV2, never())
            .showDialog(any(Context::class.java), any(View::class.java))
            .showDialog(any(Context::class.java), any(OngoingPrivacyChip::class.java))
    }

    @Test