Skip to content
Snippets Groups Projects
Commit 529466f8 authored by Mohamed Metwalli's avatar Mohamed Metwalli
Browse files

Support cleaning device status bar before taking screenshot

parent 502e6822
No related branches found
No related tags found
No related merge requests found
Showing
with 107 additions and 0 deletions
...@@ -19,6 +19,7 @@ import org.junit.Test ...@@ -19,6 +19,7 @@ import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import testhelpers.BaseUITest import testhelpers.BaseUITest
import testhelpers.Screenshot import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.TestDispatcherProvider import testhelpers.TestDispatcherProvider
import testhelpers.launchFragmentInContainer2 import testhelpers.launchFragmentInContainer2
import tools.fastlane.screengrab.Screengrab import tools.fastlane.screengrab.Screengrab
...@@ -33,6 +34,9 @@ class OnboardingDeltaInteroperabilityFragmentTest : BaseUITest() { ...@@ -33,6 +34,9 @@ class OnboardingDeltaInteroperabilityFragmentTest : BaseUITest() {
@JvmField @JvmField
val localeTestRule = LocaleTestRule() val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
@Before @Before
fun setup() { fun setup() {
MockKAnnotations.init(this, relaxed = true) MockKAnnotations.init(this, relaxed = true)
......
...@@ -18,6 +18,7 @@ import org.junit.Test ...@@ -18,6 +18,7 @@ import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import testhelpers.BaseUITest import testhelpers.BaseUITest
import testhelpers.Screenshot import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.launchFragmentInContainer2 import testhelpers.launchFragmentInContainer2
import tools.fastlane.screengrab.Screengrab import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.locale.LocaleTestRule import tools.fastlane.screengrab.locale.LocaleTestRule
...@@ -29,6 +30,9 @@ class OnboardingFragmentTest : BaseUITest() { ...@@ -29,6 +30,9 @@ class OnboardingFragmentTest : BaseUITest() {
@JvmField @JvmField
val localeTestRule = LocaleTestRule() val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
@Before @Before
fun setUp() { fun setUp() {
setupMockViewModel(object : OnboardingFragmentViewModel.Factory { setupMockViewModel(object : OnboardingFragmentViewModel.Factory {
......
...@@ -16,6 +16,7 @@ import org.junit.Test ...@@ -16,6 +16,7 @@ import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import testhelpers.BaseUITest import testhelpers.BaseUITest
import testhelpers.Screenshot import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.launchFragmentInContainer2 import testhelpers.launchFragmentInContainer2
import tools.fastlane.screengrab.Screengrab import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.locale.LocaleTestRule import tools.fastlane.screengrab.locale.LocaleTestRule
...@@ -27,6 +28,9 @@ class OnboardingNotificationsFragmentTest : BaseUITest() { ...@@ -27,6 +28,9 @@ class OnboardingNotificationsFragmentTest : BaseUITest() {
@JvmField @JvmField
val localeTestRule = LocaleTestRule() val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
@Before @Before
fun setup() { fun setup() {
setupMockViewModel(object : OnboardingNotificationsViewModel.Factory { setupMockViewModel(object : OnboardingNotificationsViewModel.Factory {
......
...@@ -15,6 +15,7 @@ import org.junit.Test ...@@ -15,6 +15,7 @@ import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import testhelpers.BaseUITest import testhelpers.BaseUITest
import testhelpers.Screenshot import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.launchFragmentInContainer2 import testhelpers.launchFragmentInContainer2
import tools.fastlane.screengrab.Screengrab import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.locale.LocaleTestRule import tools.fastlane.screengrab.locale.LocaleTestRule
...@@ -26,6 +27,9 @@ class OnboardingPrivacyFragmentTest : BaseUITest() { ...@@ -26,6 +27,9 @@ class OnboardingPrivacyFragmentTest : BaseUITest() {
@JvmField @JvmField
val localeTestRule = LocaleTestRule() val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
@Before @Before
fun setup() { fun setup() {
setupMockViewModel(object : OnboardingPrivacyViewModel.Factory { setupMockViewModel(object : OnboardingPrivacyViewModel.Factory {
......
...@@ -16,6 +16,7 @@ import org.junit.Test ...@@ -16,6 +16,7 @@ import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import testhelpers.BaseUITest import testhelpers.BaseUITest
import testhelpers.Screenshot import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.launchFragmentInContainer2 import testhelpers.launchFragmentInContainer2
import tools.fastlane.screengrab.Screengrab import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.locale.LocaleTestRule import tools.fastlane.screengrab.locale.LocaleTestRule
...@@ -27,6 +28,9 @@ class OnboardingTestFragmentTest : BaseUITest() { ...@@ -27,6 +28,9 @@ class OnboardingTestFragmentTest : BaseUITest() {
@JvmField @JvmField
val localeTestRule = LocaleTestRule() val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
@Before @Before
fun setup() { fun setup() {
setupMockViewModel(object : OnboardingTestViewModel.Factory { setupMockViewModel(object : OnboardingTestViewModel.Factory {
......
...@@ -24,6 +24,7 @@ import org.junit.Test ...@@ -24,6 +24,7 @@ import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import testhelpers.BaseUITest import testhelpers.BaseUITest
import testhelpers.Screenshot import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.TestDispatcherProvider import testhelpers.TestDispatcherProvider
import testhelpers.launchFragmentInContainer2 import testhelpers.launchFragmentInContainer2
import tools.fastlane.screengrab.Screengrab import tools.fastlane.screengrab.Screengrab
...@@ -39,6 +40,9 @@ class OnboardingTracingFragmentTest : BaseUITest() { ...@@ -39,6 +40,9 @@ class OnboardingTracingFragmentTest : BaseUITest() {
@JvmField @JvmField
val localeTestRule = LocaleTestRule() val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
@Before @Before
fun setup() { fun setup() {
MockKAnnotations.init(this, relaxed = true) MockKAnnotations.init(this, relaxed = true)
......
package testhelpers
import android.os.ParcelFileDescriptor
import androidx.test.platform.app.InstrumentationRegistry
import java.io.BufferedReader
import java.io.InputStreamReader
/**
* System UI Demo Mode helper that uses instrumentation commands to clean device status bar.
* @see <a href="https://android.googlesource.com/platform/frameworks/base/+/master/packages/SystemUI/docs/demo_mode.md" >Demo mode</a>
* @see <a href="https://developer.android.com/studio/debug/dev-options#general" >Dev options</a>
*/
class SystemUIDemoModeHelper {
/**
* Allows System UI demo mode and configure how the status bar should look like
*/
fun enter() {
executeShellCommand("settings put global sysui_demo_allowed 1")
sendCommand("exit")
sendCommand("enter")
sendCommand("notifications", "visible" to "false")
sendCommand("network", "wifi" to "show", "level" to "4", "fully" to "true")
sendCommand("battery", "level" to "100", "plugged" to "false")
sendCommand("clock", "hhmm" to "1000")
}
/**
* Exist system UI demo mode
*/
fun exit() {
sendCommand("exit")
}
private fun sendCommand(command: String, vararg extras: Pair<String, Any>) {
val exec = StringBuilder("am broadcast -a com.android.systemui.demo -e command $command")
for ((key, value) in extras) {
exec.append(" -e $key $value")
}
executeShellCommand(exec.toString())
}
private fun executeShellCommand(command: String) {
waitForCompletion(InstrumentationRegistry.getInstrumentation().uiAutomation.executeShellCommand(command))
}
private fun waitForCompletion(descriptor: ParcelFileDescriptor) {
BufferedReader(
InputStreamReader(
ParcelFileDescriptor.AutoCloseInputStream(descriptor)
)
).use {
it.readText()
}
}
}
package testhelpers
import org.junit.rules.TestRule
import org.junit.runner.Description
import org.junit.runners.model.Statement
/**
* Enters UI demo mode (clean up device status bar)
* before running screenshot tests and exists after it afterwards
*/
class SystemUIDemoModeRule : TestRule {
private val helper = SystemUIDemoModeHelper()
override fun apply(base: Statement, description: Description): Statement =
object : Statement() {
override fun evaluate() {
try {
helper.enter()
base.evaluate()
helper.exit()
} catch (e: Exception) {
e.printStackTrace()
}
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment