From c9d4fdeb53e6ce13bb46c2197c1a57c40498d54b Mon Sep 17 00:00:00 2001 From: Johannes Gallmann Date: Wed, 24 Jan 2024 14:43:07 +0100 Subject: 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 --- packages/SystemUI/res/layout/ongoing_privacy_chip.xml | 2 +- .../com/android/systemui/privacy/OngoingPrivacyChip.kt | 6 ++++-- .../systemui/privacy/PrivacyDialogControllerV2.kt | 17 ++++++++++------- .../systemui/privacy/PrivacyDialogControllerV2Test.kt | 7 +------ .../systemui/qs/HeaderPrivacyIconsControllerTest.kt | 6 +++--- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/SystemUI/res/layout/ongoing_privacy_chip.xml b/packages/SystemUI/res/layout/ongoing_privacy_chip.xml index 2c7467d726b4..fab7840a6a51 100644 --- a/packages/SystemUI/res/layout/ongoing_privacy_chip.xml +++ b/packages/SystemUI/res/layout/ongoing_privacy_chip.xml @@ -27,7 +27,7 @@ tools:parentTag="com.android.systemui.privacy.OngoingPrivacyChip"> > - () set(value) { diff --git a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogControllerV2.kt b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogControllerV2.kt index 76ef8a2b813c..f121630d180e 100644 --- a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogControllerV2.kt +++ b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogControllerV2.kt @@ -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 } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogControllerV2Test.kt b/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogControllerV2Test.kt index e4432f3038bc..0636831c7c66 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogControllerV2Test.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogControllerV2Test.kt @@ -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)) diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/HeaderPrivacyIconsControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/HeaderPrivacyIconsControllerTest.kt index fa02e8cb3e54..f98b68f2309b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/HeaderPrivacyIconsControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/HeaderPrivacyIconsControllerTest.kt @@ -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 -- cgit v1.2.3-59-g8ed1b