package com.simpligility.android.morseflash;
import android.app.KeyguardManager;
import android.content.Context;
import android.os.PowerManager;
import android.support.test.runner.AndroidJUnitRunner;
import static android.content.Context.KEYGUARD_SERVICE;
import static android.content.Context.POWER_SERVICE;
import static android.os.PowerManager.ACQUIRE_CAUSES_WAKEUP;
import static android.os.PowerManager.FULL_WAKE_LOCK;
import static android.os.PowerManager.ON_AFTER_RELEASE;
/**
* Instrumentation which unlocks the screen before running any test.
* This needs the following permissions in the <b>application</b> manifest:
*
* <pre>
* <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
* <uses-permission android:name="android.permission.WAKE_LOCK"/>
* </pre>
*
* Adapted from https://github.com/JakeWharton/u2020/blob/master/src/androidTestInternal/java/com/jakewharton/u2020/U2020TestRunner.java.
*/
public final class ScreenUnlockerTestRunner extends AndroidJUnitRunner {
@Override
public void onStart() {
runOnMainSync(new Runnable() {
@SuppressWarnings("deprecation")
// We don't care about deprecation here.
public void run() {
Context app = getTargetContext().getApplicationContext();
String name = ScreenUnlockerTestRunner.class.getSimpleName();
// Unlock the device so that the tests can input keystrokes.
KeyguardManager keyguard = (KeyguardManager) app.getSystemService(KEYGUARD_SERVICE);
keyguard.newKeyguardLock(name).disableKeyguard();
// Wake up the screen.
PowerManager power = (PowerManager) app.getSystemService(POWER_SERVICE);
power.newWakeLock(FULL_WAKE_LOCK | ACQUIRE_CAUSES_WAKEUP | ON_AFTER_RELEASE, name).acquire();
}
});
super.onStart();
}
}