Skip to content Skip to sidebar Skip to footer

Disabling First-run Greeter On Fresh Android Emulator

I am writing a test that requires launching application directly from launcher. Because I can't emulate it correctly by launching through intent. The problem is that when I am runn

Solution 1:

Have you tried using PackageManager.getLaunchIntentForPackage(..)? This will allow you to send the same Intent that the launcher uses to start your app. It should be equivalent to clicking on your application's launcher icon.

If you do need to go through the launcher, you can use a UiWatcher to dismiss the first-run overlay. Whenever UiAutomator can't find an element, it will call the checkForCondition(..) method for each registered UiWatcher and give you a chance to dismiss any overlays or dialogs that are getting in the way.

Solution 2:

Apparently the greeter is called "cling". Searching though (rather old) code I found the following:

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.0.2_r1/com/android/launcher2/Launcher.java#Launcher.isClingsEnabled%28%29

private boolean isClingsEnabled() {
    // TEMPORARY: DISABLE CLINGS ON LARGE UIif (LauncherApplication.isScreenLarge()) returnfalse;
    // disable clings when running in a test harnessif(ActivityManager.isRunningInTestHarness()) returnfalse;
    returntrue;
}

And next stop is isRunningInTestHarness() at http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.2_r1/android/app/ActivityManager.java#ActivityManager.isRunningInTestHarness%28%29

publicstaticbooleanisRunningInTestHarness() {
    returnSystemProperties.getBoolean("ro.test_harness", false);
}

Which in turn leads to adb shell setprop ro.test_harness true. Which just works.

Post a Comment for "Disabling First-run Greeter On Fresh Android Emulator"