14b31201b5a2dbf8036da5a8d089a68a39cc1dc44Kevin Jinpackage io.appium.droiddriver.helpers; 27655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin 34b31201b5a2dbf8036da5a8d089a68a39cc1dc44Kevin Jinimport io.appium.droiddriver.DroidDriver; 44b31201b5a2dbf8036da5a8d089a68a39cc1dc44Kevin Jinimport io.appium.droiddriver.Poller.PollingListener; 54b31201b5a2dbf8036da5a8d089a68a39cc1dc44Kevin Jinimport io.appium.droiddriver.exceptions.ElementNotFoundException; 64b31201b5a2dbf8036da5a8d089a68a39cc1dc44Kevin Jinimport io.appium.droiddriver.finders.Finder; 77655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin 87655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin/** 97655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin * Static utility methods to create commonly used PollingListeners. 107655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin */ 117655a5e140a667493d177b3e19d3ee415e97d43bKevin Jinpublic class PollingListeners { 12c91a011bd95b776da769c27e18cfd5b85a818491Kevin Jin /** 13c91a011bd95b776da769c27e18cfd5b85a818491Kevin Jin * Tries to find {@code watchFinder}, and clicks it if found. 14c91a011bd95b776da769c27e18cfd5b85a818491Kevin Jin * 15e66c531bb9bd973a8dfd76cf5c404b5dc03facfeKevin Jin * @param driver a DroidDriver instance 16c91a011bd95b776da769c27e18cfd5b85a818491Kevin Jin * @param watchFinder Identifies the UI component to watch 17c91a011bd95b776da769c27e18cfd5b85a818491Kevin Jin * @return whether {@code watchFinder} is found 18c91a011bd95b776da769c27e18cfd5b85a818491Kevin Jin */ 19c91a011bd95b776da769c27e18cfd5b85a818491Kevin Jin public static boolean tryFindAndClick(DroidDriver driver, Finder watchFinder) { 20df66b27599d3679de93f14ef972a32100d231683Kevin Jin try { 21c91a011bd95b776da769c27e18cfd5b85a818491Kevin Jin driver.find(watchFinder).click(); 22c91a011bd95b776da769c27e18cfd5b85a818491Kevin Jin return true; 23df66b27599d3679de93f14ef972a32100d231683Kevin Jin } catch (ElementNotFoundException enfe) { 24df66b27599d3679de93f14ef972a32100d231683Kevin Jin return false; 257655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin } 267655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin } 277655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin 287655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin /** 297655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin * Returns a new {@code PollingListener} that will look for 307655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin * {@code watchFinder}, then click {@code dismissFinder} to dismiss it. 317655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin * <p> 327655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin * Typically a {@code PollingListener} is used to dismiss "random" dialogs. If 337655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin * you know the certain situation when a dialog is displayed, you should deal 347655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin * with the dialog in the specific situation instead of using a 357655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin * {@code PollingListener} because it is checked in all polling events, which 367655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin * occur frequently. 377655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin * </p> 387655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin * 397655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin * @param watchFinder Identifies the UI component, for example an AlertDialog 407655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin * @param dismissFinder Identifies the UiElement to click on that will dismiss 417655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin * the UI component 427655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin */ 437655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin public static PollingListener newDismissListener(final Finder watchFinder, 447655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin final Finder dismissFinder) { 457655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin return new PollingListener() { 467655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin @Override 477655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin public void onPolling(DroidDriver driver, Finder finder) { 48c91a011bd95b776da769c27e18cfd5b85a818491Kevin Jin if (driver.has(watchFinder)) { 497655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin driver.find(dismissFinder).click(); 507655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin } 517655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin } 527655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin }; 537655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin } 547655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin 557655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin private PollingListeners() {} 567655a5e140a667493d177b3e19d3ee415e97d43bKevin Jin} 57