diff options
author | Kevin Jin <kjin@google.com> | 2014-06-16 16:08:15 -0700 |
---|---|---|
committer | Kevin Jin <kjin@google.com> | 2014-06-16 16:08:15 -0700 |
commit | 988386cd9cc46bf5399846a414c09e0af48b1e5a (patch) | |
tree | 1a51756f2881208340090415fbe8fc0a930385cf /src | |
parent | 74676fdd3c8a9e599eddd13bea56898674d9916a (diff) | |
download | droiddriver-988386cd9cc46bf5399846a414c09e0af48b1e5a.tar.gz |
expose setAccessibilityNodeInfoCacheClearer
Change-Id: I39780422d66133738978b028252c960765490623
Diffstat (limited to 'src')
4 files changed, 36 insertions, 18 deletions
diff --git a/src/com/google/android/droiddriver/base/DroidDriverContext.java b/src/com/google/android/droiddriver/base/DroidDriverContext.java index 045a0b2..a306bc0 100644 --- a/src/com/google/android/droiddriver/base/DroidDriverContext.java +++ b/src/com/google/android/droiddriver/base/DroidDriverContext.java @@ -64,7 +64,7 @@ public class DroidDriverContext<R, E extends BaseUiElement<R, E>> { public E newRootElement(R rawRoot) { clearData(); - return getElement(rawRoot, null /* parent */); + return getElement(rawRoot, null /* parent */); } private void clearData() { @@ -72,8 +72,6 @@ public class DroidDriverContext<R, E extends BaseUiElement<R, E>> { ByXPath.clearData(); } - /** Clears UiElement instances in the context */ - /** * Tries to wait for an idle state on the main thread on best-effort basis up * to {@code timeoutMillis}. The main thread may not enter the idle state when diff --git a/src/com/google/android/droiddriver/uiautomation/UiAutomationContext.java b/src/com/google/android/droiddriver/uiautomation/UiAutomationContext.java index 2cdcedf..253d4e5 100644 --- a/src/com/google/android/droiddriver/uiautomation/UiAutomationContext.java +++ b/src/com/google/android/droiddriver/uiautomation/UiAutomationContext.java @@ -27,7 +27,7 @@ public class UiAutomationContext extends DroidDriverContext<AccessibilityNodeInfo, UiAutomationElement> { private final UiAutomation uiAutomation; - protected UiAutomationContext(Instrumentation instrumentation, UiAutomationDriver driver) { + public UiAutomationContext(Instrumentation instrumentation, UiAutomationDriver driver) { super(instrumentation, driver); this.uiAutomation = instrumentation.getUiAutomation(); } diff --git a/src/com/google/android/droiddriver/uiautomation/UiAutomationDriver.java b/src/com/google/android/droiddriver/uiautomation/UiAutomationDriver.java index f84ab5f..f139a15 100644 --- a/src/com/google/android/droiddriver/uiautomation/UiAutomationDriver.java +++ b/src/com/google/android/droiddriver/uiautomation/UiAutomationDriver.java @@ -46,6 +46,8 @@ public class UiAutomationDriver extends BaseDroidDriver<AccessibilityNodeInfo, U private final UiAutomationContext context; private final InputInjector injector; private final UiAutomationUiDevice uiDevice; + private AccessibilityNodeInfoCacheClearer clearer = + new WindowStateAccessibilityNodeInfoCacheClearer(); public UiAutomationDriver(Instrumentation instrumentation) { context = new UiAutomationContext(instrumentation, this); @@ -112,23 +114,41 @@ public class UiAutomationDriver extends BaseDroidDriver<AccessibilityNodeInfo, U */ public void clearAccessibilityNodeInfoCache() { Logs.call(this, "clearAccessibilityNodeInfoCache"); - uiDevice.sleep(); - uiDevice.wakeUp(); + clearer.clearAccessibilityNodeInfoCache(this); + } + + public interface AccessibilityNodeInfoCacheClearer { + void clearAccessibilityNodeInfoCache(UiAutomationDriver driver); + } + + /** + * Clears AccessibilityNodeInfoCache by turning screen off then on. + */ + public static class ScreenOffAccessibilityNodeInfoCacheClearer implements + AccessibilityNodeInfoCacheClearer { + public void clearAccessibilityNodeInfoCache(UiAutomationDriver driver) { + driver.getUiDevice().sleep(); + driver.getUiDevice().wakeUp(); + } } /** - * {@link #clearAccessibilityNodeInfoCache} causes the screen to blink. This - * method clears the cache without blinking by employing an implementation - * detail of AccessibilityNodeInfoCache. This is a hack; use it at your own - * discretion. + * Clears AccessibilityNodeInfoCache by exploiting an implementation detail of + * AccessibilityNodeInfoCache. This is a hack; use it at your own discretion. */ - public void clearAccessibilityNodeInfoCacheHack() { - Logs.call(this, "clearAccessibilityNodeInfoCacheHack"); - AccessibilityManager accessibilityManager = - (AccessibilityManager) context.getInstrumentation().getTargetContext() - .getSystemService(Context.ACCESSIBILITY_SERVICE); - accessibilityManager.sendAccessibilityEvent(AccessibilityEvent - .obtain(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED)); + public static class WindowStateAccessibilityNodeInfoCacheClearer implements + AccessibilityNodeInfoCacheClearer { + public void clearAccessibilityNodeInfoCache(UiAutomationDriver driver) { + AccessibilityManager accessibilityManager = + (AccessibilityManager) driver.context.getInstrumentation().getTargetContext() + .getSystemService(Context.ACCESSIBILITY_SERVICE); + accessibilityManager.sendAccessibilityEvent(AccessibilityEvent + .obtain(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED)); + } + } + + public void setAccessibilityNodeInfoCacheClearer(AccessibilityNodeInfoCacheClearer clearer) { + this.clearer = clearer; } @Override diff --git a/src/com/google/android/droiddriver/uiautomation/UiAutomationElement.java b/src/com/google/android/droiddriver/uiautomation/UiAutomationElement.java index 3fa8653..e737bc6 100644 --- a/src/com/google/android/droiddriver/uiautomation/UiAutomationElement.java +++ b/src/com/google/android/droiddriver/uiautomation/UiAutomationElement.java @@ -198,7 +198,7 @@ public class UiAutomationElement extends BaseUiElement<AccessibilityNodeInfo, Ui // A legitimate case of no AccessibilityEvent is when scrolling has // reached the end, but we cannot tell whether it's legitimate or the // widget has bugs, so clearAccessibilityNodeInfoCache anyways. - context.getDriver().clearAccessibilityNodeInfoCacheHack(); + context.getDriver().clearAccessibilityNodeInfoCache(); } return null; } |