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

Commit 26878a91 authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Merge "Add dialog test util to ViewScreenshotTestRule" into tm-qpr-dev...

Merge "Merge "Add dialog test util to ViewScreenshotTestRule" into tm-qpr-dev am: a891b177" into tm-qpr-dev-plus-aosp am: eab55378

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19053840



Change-Id: I48ba2243cb25825177939f237bcdc7ea987be2ad
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 3a793517 eab55378
Loading
Loading
Loading
Loading
+33 −4
Original line number Diff line number Diff line
package com.android.systemui.testing.screenshot

import android.app.Activity
import android.app.Dialog
import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.LayoutParams
@@ -23,20 +24,20 @@ class ViewScreenshotTestRule(testSpec: ScreenshotTestSpec) : TestRule {
    }

    /**
     * Compare the content of [view] with the golden image identified by [goldenIdentifier] in the
     * context of [testSpec].
     * Compare the content of the view provided by [viewProvider] with the golden image identified
     * by [goldenIdentifier] in the context of [testSpec].
     */
    fun screenshotTest(
        goldenIdentifier: String,
        layoutParams: LayoutParams =
            LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT),
        view: (Activity) -> View,
        viewProvider: (Activity) -> View,
    ) {
        activityRule.scenario.onActivity { activity ->
            // Make sure that the activity draws full screen and fits the whole display instead of
            // the system bars.
            activity.window.setDecorFitsSystemWindows(false)
            activity.setContentView(view(activity), layoutParams)
            activity.setContentView(viewProvider(activity), layoutParams)
        }

        // We call onActivity again because it will make sure that our Activity is done measuring,
@@ -48,4 +49,32 @@ class ViewScreenshotTestRule(testSpec: ScreenshotTestSpec) : TestRule {
            screenshotRule.screenshotTest(goldenIdentifier, content.getChildAt(0))
        }
    }

    /**
     * Compare the content of the dialog provided by [dialogProvider] with the golden image
     * identified by [goldenIdentifier] in the context of [testSpec].
     */
    fun dialogScreenshotTest(
        goldenIdentifier: String,
        dialogProvider: (Activity) -> Dialog,
    ) {
        var dialog: Dialog? = null
        activityRule.scenario.onActivity { activity ->
            // Make sure that the dialog draws full screen and fits the whole display instead of the
            // system bars.
            dialog =
                dialogProvider(activity).apply {
                    window.setDecorFitsSystemWindows(false)
                    show()
                }
        }

        // We call onActivity again because it will make sure that our Dialog is done measuring,
        // laying out and drawing its content (that we set in the previous onActivity lambda).
        activityRule.scenario.onActivity {
            // Check that the content is what we expected.
            val dialog = dialog ?: error("dialog is null")
            screenshotRule.screenshotTest(goldenIdentifier, dialog.window.decorView)
        }
    }
}