Loading packages/SystemUI/res/layout/ongoing_privacy_chip.xml +1 −1 Original line number Diff line number Diff line Loading @@ -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" Loading packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyChip.kt +4 −2 Original line number Diff line number Diff line Loading @@ -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( Loading @@ -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 Loading @@ -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) { Loading packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogControllerV2.kt +10 −7 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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() Loading Loading @@ -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 { Loading @@ -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 } } Loading packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogControllerV2Test.kt +1 −6 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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)) Loading packages/SystemUI/tests/src/com/android/systemui/qs/HeaderPrivacyIconsControllerTest.kt +3 −3 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading Loading
packages/SystemUI/res/layout/ongoing_privacy_chip.xml +1 −1 Original line number Diff line number Diff line Loading @@ -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" Loading
packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyChip.kt +4 −2 Original line number Diff line number Diff line Loading @@ -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( Loading @@ -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 Loading @@ -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) { Loading
packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogControllerV2.kt +10 −7 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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() Loading Loading @@ -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 { Loading @@ -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 } } Loading
packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogControllerV2Test.kt +1 −6 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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)) Loading
packages/SystemUI/tests/src/com/android/systemui/qs/HeaderPrivacyIconsControllerTest.kt +3 −3 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading