1<!DOCTYPE html> 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96<html> 97<head> 98 99 100<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 101<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" /> 102<meta content="IE=edge" http-equiv="X-UA-Compatible"> 103 104<link rel="shortcut icon" type="image/x-icon" href="../../../../../favicon.ico" /> 105<title>UiController | Android Developers</title> 106 107<!-- STYLESHEETS --> 108<link rel="stylesheet" 109href="http://fonts.googleapis.com/css?family=Roboto+Condensed"> 110<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:light,regular,medium,thin,italic,mediumitalic,bold" 111 title="roboto"> 112 113<link href="../../../../../assets/css/default.css?v=7" rel="stylesheet" type="text/css"> 114 115 116<!-- FULLSCREEN STYLESHEET --> 117<link href="../../../../../assets/css/fullscreen.css" rel="stylesheet" class="fullscreen" 118type="text/css"> 119 120 121<!-- JAVASCRIPT --> 122<script src="http://www.google.com/jsapi" type="text/javascript"></script> 123<script src="../../../../../assets/js/android_3p-bundle.js" type="text/javascript"></script> 124<script type="text/javascript"> 125 var toRoot = "../../../../../"; 126 var metaTags = []; 127 var devsite = false; 128</script> 129<script src="../../../../../assets/js/docs.js?v=5" type="text/javascript"></script> 130 131 132 133<script> 134 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 135 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 136 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 137 })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 138 139 ga('create', 'UA-5831155-1', 'android.com'); 140 ga('create', 'UA-49880327-2', 'android.com', {'name': 'universal'}); // New tracker); 141 ga('send', 'pageview'); 142 ga('universal.send', 'pageview'); // Send page view for new tracker. 143</script> 144 145</head> 146 147<body class="gc-documentation 148 develop reference" itemscope itemtype="http://schema.org/Article"> 149 <div id="doc-api-level" class="" style="display:none"></div> 150 <a name="top"></a> 151 152<a name="top"></a> 153 154<!-- dialog to prompt lang pref change when loaded from hardcoded URL 155<div id="langMessage" style="display:none"> 156 <div> 157 <div class="lang en"> 158 <p>You requested a page in English, would you like to proceed with this language setting?</p> 159 </div> 160 <div class="lang es"> 161 <p>You requested a page in Spanish (Español), would you like to proceed with this language setting?</p> 162 </div> 163 <div class="lang ja"> 164 <p>You requested a page in Japanese (日本語), would you like to proceed with this language setting?</p> 165 </div> 166 <div class="lang ko"> 167 <p>You requested a page in Korean (한국어), would you like to proceed with this language setting?</p> 168 </div> 169 <div class="lang ru"> 170 <p>You requested a page in Russian (Русский), would you like to proceed with this language setting?</p> 171 </div> 172 <div class="lang zh-cn"> 173 <p>You requested a page in Simplified Chinese (简体中文), would you like to proceed with this language setting?</p> 174 </div> 175 <div class="lang zh-tw"> 176 <p>You requested a page in Traditional Chinese (繁體中文), would you like to proceed with this language setting?</p> 177 </div> 178 <a href="#" class="button yes" onclick="return false;"> 179 <span class="lang en">Yes</span> 180 <span class="lang es">Sí</span> 181 <span class="lang ja">Yes</span> 182 <span class="lang ko">Yes</span> 183 <span class="lang ru">Yes</span> 184 <span class="lang zh-cn">是的</span> 185 <span class="lang zh-tw">没有</span> 186 </a> 187 <a href="#" class="button" onclick="$('#langMessage').hide();return false;"> 188 <span class="lang en">No</span> 189 <span class="lang es">No</span> 190 <span class="lang ja">No</span> 191 <span class="lang ko">No</span> 192 <span class="lang ru">No</span> 193 <span class="lang zh-cn">没有</span> 194 <span class="lang zh-tw">没有</span> 195 </a> 196 </div> 197</div> --> 198 199 200 <!-- Header --> 201 <div id="header-wrapper"> 202 <div class="dac-header" id="header"> 203 204 205 206 207 <div class="dac-header-inner"> 208 <a class="dac-nav-toggle" data-dac-toggle-nav href="javascript:;" title="Open navigation"> 209 <span class="dac-nav-hamburger"> 210 <span class="dac-nav-hamburger-top"></span> 211 <span class="dac-nav-hamburger-mid"></span> 212 <span class="dac-nav-hamburger-bot"></span> 213 </span> 214 </a> 215 <a class="dac-header-logo" href="../../../../../index.html"> 216 <img class="dac-header-logo-image" src="../../../../../assets/images/android_logo.png" 217 srcset="../../../../../assets/images/android_logo@2x.png 2x" 218 width="32" height="36" alt="Android" /> Developers 219 </a> 220 221 <ul class="dac-header-crumbs"> 222 223 <li class="dac-header-crumbs-item"><span class="dac-header-crumbs-link current ">UiController</a></li> 224 </ul> 225 226 227 228 229 <div class="dac-header-search" id="search-container"> 230 <div class="dac-header-search-inner"> 231 <div class="dac-sprite dac-search dac-header-search-btn" id="search-btn"></div> 232 <form class="dac-header-search-form" onsubmit="return submit_search()"> 233 <input id="search_autocomplete" type="text" value="" autocomplete="off" name="q" 234 onfocus="search_focus_changed(this, true)" onblur="search_focus_changed(this, false)" 235 onkeydown="return search_changed(event, true, '../../../../../')" 236 onkeyup="return search_changed(event, false, '../../../../../')" 237 class="dac-header-search-input" placeholder="Search" /> 238 <a class="dac-header-search-close hide" id="search-close">close</a> 239 </form> 240 </div><!-- end dac-header-search-inner --> 241 </div><!-- end dac-header-search --> 242 243 <div class="search_filtered_wrapper"> 244 <div class="suggest-card reference no-display"> 245 <ul class="search_filtered"> 246 </ul> 247 </div> 248 <div class="suggest-card develop no-display"> 249 <ul class="search_filtered"> 250 </ul> 251 <div class="child-card guides no-display"> 252 </div> 253 <div class="child-card training no-display"> 254 </div> 255 <div class="child-card samples no-display"> 256 </div> 257 </div> 258 <div class="suggest-card design no-display"> 259 <ul class="search_filtered"> 260 </ul> 261 </div> 262 <div class="suggest-card distribute no-display"> 263 <ul class="search_filtered"> 264 </ul> 265 </div> 266 </div> 267 268 269 270 <a class="dac-header-console-btn" href="https://play.google.com/apps/publish/"> 271 <span class="dac-sprite dac-google-play"></span> 272 <span class="dac-visible-desktop-inline">Developer</span> 273 Console 274 </a> 275 276 </div><!-- end header-wrap.wrap --> 277 </div><!-- end header --> 278 279 <div id="searchResults" class="wrap" style="display:none;"> 280 <h2 id="searchTitle">Results</h2> 281 <div id="leftSearchControl" class="search-control">Loading...</div> 282 </div> 283 </div> <!--end header-wrapper --> 284 285 286 <!-- Navigation--> 287 <nav class="dac-nav"> 288 <div class="dac-nav-dimmer" data-dac-toggle-nav></div> 289 290 <ul class="dac-nav-list" data-dac-nav> 291 <li class="dac-nav-item dac-nav-head"> 292 <a class="dac-nav-link dac-nav-logo" data-dac-toggle-nav href="javascript:;" title="Close navigation"> 293 <img class="dac-logo-image" src="../../../../../assets/images/android_logo.png" 294 srcset="../../../../../assets/images/android_logo@2x.png 2x" 295 width="32" height="36" alt="Android" /> Developers 296 </a> 297 </li> 298 <li class="dac-nav-item home"> 299 <a class="dac-nav-link dac-visible-mobile-block" href="../../../../../index.html">Home</a> 300 <ul class="dac-nav-secondary about"> 301 <li class="dac-nav-item about"> 302 <a class="dac-nav-link" href="../../../../../about/index.html">Android</a> 303 </li> 304 <li class="dac-nav-item wear"> 305 <a class="dac-nav-link" href="../../../../../wear/index.html">Wear</a> 306 </li> 307 <li class="dac-nav-item tv"> 308 <a class="dac-nav-link" href="../../../../../tv/index.html">TV</a> 309 </li> 310 <li class="dac-nav-item auto"> 311 <a class="dac-nav-link" href="../../../../../auto/index.html">Auto</a> 312 </li> 313 </ul> 314 </li> 315 <li class="dac-nav-item design"> 316 <a class="dac-nav-link" href="../../../../../design/index.html" 317 zh-tw-lang="設計" 318 zh-cn-lang="设计" 319 ru-lang="Проектирование" 320 ko-lang="디자인" 321 ja-lang="設計" 322 es-lang="Diseñar">Design</a> 323 </li> 324 <li class="dac-nav-item develop"> 325 <a class="dac-nav-link" href="../../../../../develop/index.html" 326 zh-tw-lang="開發" 327 zh-cn-lang="开发" 328 ru-lang="Разработка" 329 ko-lang="개발" 330 ja-lang="開発" 331 es-lang="Desarrollar">Develop</a> 332 <ul class="dac-nav-secondary develop"> 333 <li class="dac-nav-item training"> 334 <a class="dac-nav-link" href="../../../../../training/index.html" 335 zh-tw-lang="訓練課程" 336 zh-cn-lang="培训" 337 ru-lang="Курсы" 338 ko-lang="교육" 339 ja-lang="トレーニング" 340 es-lang="Capacitación">Training</a> 341 </li> 342 <li class="dac-nav-item guide"> 343 <a class="dac-nav-link" href="../../../../../guide/index.html" 344 zh-tw-lang="API 指南" 345 zh-cn-lang="API 指南" 346 ru-lang="Руководства по API" 347 ko-lang="API 가이드" 348 ja-lang="API ガイド" 349 es-lang="Guías de la API">API Guides</a> 350 </li> 351 <li class="dac-nav-item reference"> 352 <a class="dac-nav-link" href="../../../../../reference/packages.html" 353 zh-tw-lang="參考資源" 354 zh-cn-lang="参考" 355 ru-lang="Справочник" 356 ko-lang="참조문서" 357 ja-lang="リファレンス" 358 es-lang="Referencia">Reference</a> 359 </li> 360 <li class="dac-nav-item tools"> 361 <a class="dac-nav-link" href="../../../../../sdk/index.html" 362 zh-tw-lang="相關工具" 363 zh-cn-lang="工具" 364 ru-lang="Инструменты" 365 ko-lang="도구" 366 ja-lang="ツール" 367 es-lang="Herramientas">Tools</a></li> 368 <li class="dac-nav-item google"> 369 <a class="dac-nav-link" href="../../../../../google/index.html">Google Services</a> 370 </li> 371 372 <li class="dac-nav-item preview"> 373 <a class="dac-nav-link" href="../../../../../preview/index.html">Preview</a> 374 </li> 375 </ul> 376 </li> 377 <li class="dac-nav-item distribute"> 378 <a class="dac-nav-link" href="../../../../../distribute/index.html" 379 zh-tw-lang="發佈" 380 zh-cn-lang="分发" 381 ru-lang="Распространение" 382 ko-lang="배포" 383 ja-lang="配布" 384 es-lang="Distribuir">Distribute</a> 385 <ul class="dac-nav-secondary distribute"> 386 <li class="dac-nav-item googleplay"> 387 <a class="dac-nav-link" href="../../../../../distribute/googleplay/index.html">Google Play</a></li> 388 <li class="dac-nav-item essentials"> 389 <a class="dac-nav-link" href="../../../../../distribute/essentials/index.html">Essentials</a></li> 390 <li class="dac-nav-item users"> 391 <a class="dac-nav-link" href="../../../../../distribute/users/index.html">Get Users</a></li> 392 <li class="dac-nav-item engage"> 393 <a class="dac-nav-link" href="../../../../../distribute/engage/index.html">Engage & Retain</a></li> 394 <li class="dac-nav-item monetize"> 395 <a class="dac-nav-link" href="../../../../../distribute/monetize/index.html">Earn</a> 396 </li> 397 <li class="dac-nav-item analyze"> 398 <a class="dac-nav-link" href="../../../../../distribute/analyze/index.html">Analyze</a> 399 </li> 400 <li class="dac-nav-item stories"> 401 <a class="dac-nav-link" href="../../../../../distribute/stories/index.html">Stories</a> 402 </li> 403 </ul> 404 </li> 405 </ul> 406 </nav> 407 <!-- end navigation--> 408 409 410 411 412 413 414 <div class="wrap clearfix" id="body-content"><div class="cols"> 415 <div class="col-4 dac-hidden-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement"> 416 <div id="devdoc-nav"> 417 <div id="api-nav-header"> 418 <div id="api-level-toggle"> 419 <label for="apiLevelCheckbox" class="disabled" 420 title="Select your target API level to dim unavailable APIs">API level: </label> 421 <div class="select-wrapper"> 422 <select id="apiLevelSelector"> 423 <!-- option elements added by buildApiLevelSelector() --> 424 </select> 425 </div> 426 </div><!-- end toggle --> 427 <div id="api-nav-title">Android APIs</div> 428 </div><!-- end nav header --> 429 <script> 430 var SINCE_DATA = [ ]; 431 buildApiLevelSelector(); 432 </script> 433 434 <div id="swapper"> 435 <div id="nav-panels"> 436 <div id="resize-packages-nav"> 437 <div id="packages-nav" class="scroll-pane"> 438 439 <ul> 440 441 <li class="api apilevel-"> 442 <a href="../../../../../reference/android/support/test/package-summary.html">android.support.test</a></li> 443 <li class="api apilevel-"> 444 <a href="../../../../../reference/android/support/test/annotation/package-summary.html">android.support.test.annotation</a></li> 445 <li class="selected api apilevel-"> 446 <a href="../../../../../reference/android/support/test/espresso/package-summary.html">android.support.test.espresso</a></li> 447 <li class="api apilevel-"> 448 <a href="../../../../../reference/android/support/test/espresso/action/package-summary.html">android.support.test.espresso.action</a></li> 449 <li class="api apilevel-"> 450 <a href="../../../../../reference/android/support/test/espresso/assertion/package-summary.html">android.support.test.espresso.assertion</a></li> 451 <li class="api apilevel-"> 452 <a href="../../../../../reference/android/support/test/espresso/base/package-summary.html">android.support.test.espresso.base</a></li> 453 <li class="api apilevel-"> 454 <a href="../../../../../reference/android/support/test/espresso/contrib/package-summary.html">android.support.test.espresso.contrib</a></li> 455 <li class="api apilevel-"> 456 <a href="../../../../../reference/android/support/test/espresso/intent/package-summary.html">android.support.test.espresso.intent</a></li> 457 <li class="api apilevel-"> 458 <a href="../../../../../reference/android/support/test/espresso/intent/matcher/package-summary.html">android.support.test.espresso.intent.matcher</a></li> 459 <li class="api apilevel-"> 460 <a href="../../../../../reference/android/support/test/espresso/intent/rule/package-summary.html">android.support.test.espresso.intent.rule</a></li> 461 <li class="api apilevel-"> 462 <a href="../../../../../reference/android/support/test/espresso/matcher/package-summary.html">android.support.test.espresso.matcher</a></li> 463 <li class="api apilevel-"> 464 <a href="../../../../../reference/android/support/test/espresso/util/package-summary.html">android.support.test.espresso.util</a></li> 465 <li class="api apilevel-"> 466 <a href="../../../../../reference/android/support/test/espresso/web/action/package-summary.html">android.support.test.espresso.web.action</a></li> 467 <li class="api apilevel-"> 468 <a href="../../../../../reference/android/support/test/espresso/web/assertion/package-summary.html">android.support.test.espresso.web.assertion</a></li> 469 <li class="api apilevel-"> 470 <a href="../../../../../reference/android/support/test/espresso/web/bridge/package-summary.html">android.support.test.espresso.web.bridge</a></li> 471 <li class="api apilevel-"> 472 <a href="../../../../../reference/android/support/test/espresso/web/matcher/package-summary.html">android.support.test.espresso.web.matcher</a></li> 473 <li class="api apilevel-"> 474 <a href="../../../../../reference/android/support/test/espresso/web/model/package-summary.html">android.support.test.espresso.web.model</a></li> 475 <li class="api apilevel-"> 476 <a href="../../../../../reference/android/support/test/espresso/web/sugar/package-summary.html">android.support.test.espresso.web.sugar</a></li> 477 <li class="api apilevel-"> 478 <a href="../../../../../reference/android/support/test/espresso/web/webdriver/package-summary.html">android.support.test.espresso.web.webdriver</a></li> 479 <li class="api apilevel-"> 480 <a href="../../../../../reference/android/support/test/filters/package-summary.html">android.support.test.filters</a></li> 481 <li class="api apilevel-"> 482 <a href="../../../../../reference/android/support/test/rule/package-summary.html">android.support.test.rule</a></li> 483 <li class="api apilevel-"> 484 <a href="../../../../../reference/android/support/test/runner/package-summary.html">android.support.test.runner</a></li> 485 <li class="api apilevel-"> 486 <a href="../../../../../reference/android/support/test/runner/intent/package-summary.html">android.support.test.runner.intent</a></li> 487 <li class="api apilevel-"> 488 <a href="../../../../../reference/android/support/test/runner/lifecycle/package-summary.html">android.support.test.runner.lifecycle</a></li> 489 <li class="api apilevel-"> 490 <a href="../../../../../reference/android/support/test/uiautomator/package-summary.html">android.support.test.uiautomator</a></li> 491 </ul><br/> 492 493 </div> <!-- end packages-nav --> 494 </div> <!-- end resize-packages --> 495 <div id="classes-nav" class="scroll-pane"> 496 497 498 499 <ul> 500 501 502 <li><h2>Interfaces</h2> 503 <ul> 504 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/BaseLayerComponent.html">BaseLayerComponent</a></li> 505 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/EspressoException.html">EspressoException</a></li> 506 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/FailureHandler.html">FailureHandler</a></li> 507 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/IdlingResource.html">IdlingResource</a></li> 508 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/IdlingResource.ResourceCallback.html">IdlingResource.ResourceCallback</a></li> 509 <li class="selected api apilevel-"><a href="../../../../../reference/android/support/test/espresso/UiController.html">UiController</a></li> 510 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/ViewAction.html">ViewAction</a></li> 511 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/ViewAssertion.html">ViewAssertion</a></li> 512 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/ViewFinder.html">ViewFinder</a></li> 513 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/ViewInteractionComponent.html">ViewInteractionComponent</a></li> 514 </ul> 515 </li> 516 517 <li><h2>Classes</h2> 518 <ul> 519 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/AmbiguousViewMatcherException.Builder.html">AmbiguousViewMatcherException.Builder</a></li> 520 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/DataInteraction.html">DataInteraction</a></li> 521 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/Espresso.html">Espresso</a></li> 522 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/GraphHolder.html">GraphHolder</a></li> 523 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/IdlingPolicies.html">IdlingPolicies</a></li> 524 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/IdlingPolicy.html">IdlingPolicy</a></li> 525 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/NoMatchingViewException.Builder.html">NoMatchingViewException.Builder</a></li> 526 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/PerformException.Builder.html">PerformException.Builder</a></li> 527 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/Root.html">Root</a></li> 528 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/Root.Builder.html">Root.Builder</a></li> 529 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/ViewInteraction.html">ViewInteraction</a></li> 530 </ul> 531 </li> 532 533 534 <li><h2>Exceptions</h2> 535 <ul> 536 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/AmbiguousViewMatcherException.html">AmbiguousViewMatcherException</a></li> 537 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/AppNotIdleException.html">AppNotIdleException</a></li> 538 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/IdlingResourceTimeoutException.html">IdlingResourceTimeoutException</a></li> 539 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/InjectEventSecurityException.html">InjectEventSecurityException</a></li> 540 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/NoActivityResumedException.html">NoActivityResumedException</a></li> 541 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/NoMatchingRootException.html">NoMatchingRootException</a></li> 542 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/NoMatchingViewException.html">NoMatchingViewException</a></li> 543 <li class="api apilevel-"><a href="../../../../../reference/android/support/test/espresso/PerformException.html">PerformException</a></li> 544 </ul> 545 </li> 546 547 </ul><br/> 548 549 550 </div><!-- end classes --> 551 </div><!-- end nav-panels --> 552 <div id="nav-tree" style="display:none" class="scroll-pane"> 553 <div id="tree-list"></div> 554 </div><!-- end nav-tree --> 555 </div><!-- end swapper --> 556 <div id="nav-swap"> 557 <a class="fullscreen">fullscreen</a> 558 <a href='#' onclick='swapNav();return false;'><span id='tree-link'>Use Tree Navigation</span><span id='panel-link' style='display:none'>Use Panel Navigation</span></a> 559 </div> 560 </div> <!-- end devdoc-nav --> 561 </div> <!-- end side-nav --> 562 <script type="text/javascript"> 563 // init fullscreen based on user pref 564 var fullscreen = readCookie("fullscreen"); 565 if (fullscreen != 0) { 566 if (fullscreen == "false") { 567 toggleFullscreen(false); 568 } else { 569 toggleFullscreen(true); 570 } 571 } 572 // init nav version for mobile 573 if (isMobile) { 574 swapNav(); // tree view should be used on mobile 575 $('#nav-swap').hide(); 576 } else { 577 chooseDefaultNav(); 578 if ($("#nav-tree").is(':visible')) { 579 init_default_navtree("../../../../../"); 580 } 581 } 582 // scroll the selected page into view 583 $(document).ready(function() { 584 scrollIntoView("packages-nav"); 585 scrollIntoView("classes-nav"); 586 }); 587 </script> 588 589 590 591 592 593<div class="col-12" id="doc-col"> 594 595<div id="api-info-block"> 596 597 598 599 600<div class="sum-details-links"> 601 602</div><!-- end sum-details-links --> 603<div class="api-level"> 604 605 606 607 608</div> 609</div><!-- end api-info-block --> 610 611 612<!-- ======== START OF CLASS DATA ======== --> 613 614<div id="jd-header"> 615 public 616 617 618 619 interface 620<h1 itemprop="name">UiController</h1> 621 622 623 624 625 626 627 628 629 630 631 632</div><!-- end header --> 633 634<div id="naMessage"></div> 635 636<div id="jd-content" class="api apilevel-"> 637<table class="jd-inheritance-table"> 638 639 640 <tr> 641 642 <td colspan="1" class="jd-inheritance-class-cell">android.support.test.espresso.UiController</td> 643 </tr> 644 645 646</table> 647 648 649 650 651 652 653 654<div class="jd-descr"> 655 656 657<h2>Class Overview</h2> 658<p itemprop="articleBody">Provides base-level UI operations (such as injection of <code><a href="../../../../../reference/android/view/MotionEvent.html">MotionEvent</a></code>s) that can be used to 659 build user actions such as clicks, scrolls, swipes, etc. This replaces parts of the android 660 Instrumentation class that provides similar functionality. However, it provides a more advanced 661 synchronization mechanism for test actions. The key differentiators are: 662 <ul> 663 <li>test actions are assumed to be called on the main thread 664 <li>after a test action is initiated, execution blocks until all messages in the main message 665 queue have been cleared. 666 </ul> 667</p> 668 669 670 671 672 673</div><!-- jd-descr --> 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690<div class="jd-descr"> 691 692 693<h2>Summary</h2> 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721<!-- ========== METHOD SUMMARY =========== --> 722<table id="pubmethods" class="jd-sumtable"><tr><th colspan="12">Public Methods</th></tr> 723 724 725 726 727 <tr class="alt-color api apilevel-" > 728 <td class="jd-typecol"><nobr> 729 abstract 730 731 732 733 734 boolean</nobr> 735 </td> 736 <td class="jd-linkcol" width="100%"><nobr> 737 <span class="sympad"><a href="../../../../../reference/android/support/test/espresso/UiController.html#injectKeyEvent(android.view.KeyEvent)">injectKeyEvent</a></span>(KeyEvent event)</nobr> 738 739 <div class="jd-descrdiv"> 740 Injects a key event into the application. 741 742 743 744 </div> 745 746 </td></tr> 747 748 749 750 <tr class=" api apilevel-" > 751 <td class="jd-typecol"><nobr> 752 abstract 753 754 755 756 757 boolean</nobr> 758 </td> 759 <td class="jd-linkcol" width="100%"><nobr> 760 <span class="sympad"><a href="../../../../../reference/android/support/test/espresso/UiController.html#injectMotionEvent(android.view.MotionEvent)">injectMotionEvent</a></span>(MotionEvent event)</nobr> 761 762 <div class="jd-descrdiv"> 763 Injects a motion event into the application. 764 765 766 767 </div> 768 769 </td></tr> 770 771 772 773 <tr class="alt-color api apilevel-" > 774 <td class="jd-typecol"><nobr> 775 abstract 776 777 778 779 780 boolean</nobr> 781 </td> 782 <td class="jd-linkcol" width="100%"><nobr> 783 <span class="sympad"><a href="../../../../../reference/android/support/test/espresso/UiController.html#injectString(java.lang.String)">injectString</a></span>(String str)</nobr> 784 785 <div class="jd-descrdiv"> 786 Types a string into the application using series of <code><a href="../../../../../reference/android/view/KeyEvent.html">KeyEvent</a></code>s. 787 788 789 790 </div> 791 792 </td></tr> 793 794 795 796 <tr class=" api apilevel-" > 797 <td class="jd-typecol"><nobr> 798 abstract 799 800 801 802 803 void</nobr> 804 </td> 805 <td class="jd-linkcol" width="100%"><nobr> 806 <span class="sympad"><a href="../../../../../reference/android/support/test/espresso/UiController.html#loopMainThreadForAtLeast(long)">loopMainThreadForAtLeast</a></span>(long millisDelay)</nobr> 807 808 <div class="jd-descrdiv"> 809 Loops the main thread for a specified period of time. 810 811 812 813 </div> 814 815 </td></tr> 816 817 818 819 <tr class="alt-color api apilevel-" > 820 <td class="jd-typecol"><nobr> 821 abstract 822 823 824 825 826 void</nobr> 827 </td> 828 <td class="jd-linkcol" width="100%"><nobr> 829 <span class="sympad"><a href="../../../../../reference/android/support/test/espresso/UiController.html#loopMainThreadUntilIdle()">loopMainThreadUntilIdle</a></span>()</nobr> 830 831 <div class="jd-descrdiv"> 832 Loops the main thread until the application goes idle. 833 834 835 836 </div> 837 838 </td></tr> 839 840 841 842</table> 843 844 845 846 847 848 849 850</div><!-- jd-descr (summary) --> 851 852<!-- Details --> 853 854 855 856 857 858 859 860 861<!-- XML Attributes --> 862 863 864<!-- Enum Values --> 865 866 867<!-- Constants --> 868 869 870<!-- Fields --> 871 872 873<!-- Public ctors --> 874 875 876 877<!-- ========= CONSTRUCTOR DETAIL ======== --> 878<!-- Protected ctors --> 879 880 881 882<!-- ========= METHOD DETAIL ======== --> 883<!-- Public methdos --> 884 885<h2>Public Methods</h2> 886 887 888 889<A NAME="injectKeyEvent(android.view.KeyEvent)"></A> 890 891<div class="jd-details api apilevel-"> 892 <h4 class="jd-details-title"> 893 <span class="normal"> 894 public 895 896 897 abstract 898 899 boolean 900 </span> 901 <span class="sympad">injectKeyEvent</span> 902 <span class="normal">(KeyEvent event)</span> 903 </h4> 904 <div class="api-level"> 905 <div></div> 906 907 908 909 </div> 910 <div class="jd-details-descr"> 911 912 913 914 915 <div class="jd-tagdata jd-tagdescr"><p>Injects a key event into the application.</p></div> 916 <div class="jd-tagdata"> 917 <h5 class="jd-tagtitle">Parameters</h5> 918 <table class="jd-tagtable"> 919 <tr> 920 <th>event</td> 921 <td>the (non-null!) event to inject</td> 922 </tr> 923 </table> 924 </div> 925 <div class="jd-tagdata"> 926 <h5 class="jd-tagtitle">Returns</h5> 927 <ul class="nolist"><li>true if the event was injected, false otherwise</li></ul> 928 </div> 929 <div class="jd-tagdata"> 930 <h5 class="jd-tagtitle">Throws</h5> 931 <table class="jd-tagtable"> 932 <tr> 933 <th><a href="../../../../../reference/android/support/test/espresso/InjectEventSecurityException.html">InjectEventSecurityException</a></td> 934 <td>if the event couldn't be injected because it would 935 interact with another application. 936</td> 937 </tr> 938 </table> 939 </div> 940 941 </div> 942</div> 943 944 945<A NAME="injectMotionEvent(android.view.MotionEvent)"></A> 946 947<div class="jd-details api apilevel-"> 948 <h4 class="jd-details-title"> 949 <span class="normal"> 950 public 951 952 953 abstract 954 955 boolean 956 </span> 957 <span class="sympad">injectMotionEvent</span> 958 <span class="normal">(MotionEvent event)</span> 959 </h4> 960 <div class="api-level"> 961 <div></div> 962 963 964 965 </div> 966 <div class="jd-details-descr"> 967 968 969 970 971 <div class="jd-tagdata jd-tagdescr"><p>Injects a motion event into the application.</p></div> 972 <div class="jd-tagdata"> 973 <h5 class="jd-tagtitle">Parameters</h5> 974 <table class="jd-tagtable"> 975 <tr> 976 <th>event</td> 977 <td>the (non-null!) event to inject</td> 978 </tr> 979 </table> 980 </div> 981 <div class="jd-tagdata"> 982 <h5 class="jd-tagtitle">Returns</h5> 983 <ul class="nolist"><li>true if the event was injected, false otherwise</li></ul> 984 </div> 985 <div class="jd-tagdata"> 986 <h5 class="jd-tagtitle">Throws</h5> 987 <table class="jd-tagtable"> 988 <tr> 989 <th><a href="../../../../../reference/android/support/test/espresso/InjectEventSecurityException.html">InjectEventSecurityException</a></td> 990 <td>if the event couldn't be injected because it would 991 interact with another application. 992</td> 993 </tr> 994 </table> 995 </div> 996 997 </div> 998</div> 999 1000 1001<A NAME="injectString(java.lang.String)"></A> 1002 1003<div class="jd-details api apilevel-"> 1004 <h4 class="jd-details-title"> 1005 <span class="normal"> 1006 public 1007 1008 1009 abstract 1010 1011 boolean 1012 </span> 1013 <span class="sympad">injectString</span> 1014 <span class="normal">(String str)</span> 1015 </h4> 1016 <div class="api-level"> 1017 <div></div> 1018 1019 1020 1021 </div> 1022 <div class="jd-details-descr"> 1023 1024 1025 1026 1027 <div class="jd-tagdata jd-tagdescr"><p>Types a string into the application using series of <code><a href="../../../../../reference/android/view/KeyEvent.html">KeyEvent</a></code>s. It is up to the 1028 implementor to decide how to map the string to <code><a href="../../../../../reference/android/view/KeyEvent.html">KeyEvent</a></code> objects. if you need specific 1029 control over the key events generated use <code><a href="../../../../../reference/android/support/test/espresso/UiController.html#injectKeyEvent(android.view.KeyEvent)">injectKeyEvent(KeyEvent)</a></code>.</p></div> 1030 <div class="jd-tagdata"> 1031 <h5 class="jd-tagtitle">Parameters</h5> 1032 <table class="jd-tagtable"> 1033 <tr> 1034 <th>str</td> 1035 <td>the (non-null!) string to type</td> 1036 </tr> 1037 </table> 1038 </div> 1039 <div class="jd-tagdata"> 1040 <h5 class="jd-tagtitle">Returns</h5> 1041 <ul class="nolist"><li>true if the string was injected, false otherwise</li></ul> 1042 </div> 1043 <div class="jd-tagdata"> 1044 <h5 class="jd-tagtitle">Throws</h5> 1045 <table class="jd-tagtable"> 1046 <tr> 1047 <th><a href="../../../../../reference/android/support/test/espresso/InjectEventSecurityException.html">InjectEventSecurityException</a></td> 1048 <td>if the events couldn't be injected because it would 1049 interact with another application. 1050</td> 1051 </tr> 1052 </table> 1053 </div> 1054 1055 </div> 1056</div> 1057 1058 1059<A NAME="loopMainThreadForAtLeast(long)"></A> 1060 1061<div class="jd-details api apilevel-"> 1062 <h4 class="jd-details-title"> 1063 <span class="normal"> 1064 public 1065 1066 1067 abstract 1068 1069 void 1070 </span> 1071 <span class="sympad">loopMainThreadForAtLeast</span> 1072 <span class="normal">(long millisDelay)</span> 1073 </h4> 1074 <div class="api-level"> 1075 <div></div> 1076 1077 1078 1079 </div> 1080 <div class="jd-details-descr"> 1081 1082 1083 1084 1085 <div class="jd-tagdata jd-tagdescr"><p>Loops the main thread for a specified period of time. 1086 1087 Control may not return immediately, instead it'll return after the time has passed and the 1088 queue is in an idle state again.</p></div> 1089 <div class="jd-tagdata"> 1090 <h5 class="jd-tagtitle">Parameters</h5> 1091 <table class="jd-tagtable"> 1092 <tr> 1093 <th>millisDelay</td> 1094 <td>time to spend in looping the main thread 1095</td> 1096 </tr> 1097 </table> 1098 </div> 1099 1100 </div> 1101</div> 1102 1103 1104<A NAME="loopMainThreadUntilIdle()"></A> 1105 1106<div class="jd-details api apilevel-"> 1107 <h4 class="jd-details-title"> 1108 <span class="normal"> 1109 public 1110 1111 1112 abstract 1113 1114 void 1115 </span> 1116 <span class="sympad">loopMainThreadUntilIdle</span> 1117 <span class="normal">()</span> 1118 </h4> 1119 <div class="api-level"> 1120 <div></div> 1121 1122 1123 1124 </div> 1125 <div class="jd-details-descr"> 1126 1127 1128 1129 1130 <div class="jd-tagdata jd-tagdescr"><p>Loops the main thread until the application goes idle. 1131 1132 An empty task is immediately inserted into the task queue to ensure that if we're idle at this 1133 moment we'll return instantly. 1134</p></div> 1135 1136 </div> 1137</div> 1138 1139 1140 1141 1142 1143<!-- ========= METHOD DETAIL ======== --> 1144 1145 1146 1147<!-- ========= END OF CLASS DATA ========= --> 1148<A NAME="navbar_top"></A> 1149</div> <!-- jd-content --> 1150 1151<div class="wrap"> 1152 <div class="dac-footer"> 1153 <div class="cols dac-footer-main"> 1154 <div class="col-1of2"> 1155 <a class="dac-footer-getnews" data-modal-toggle="newsletter" href="javascript:;">Get news & tips <span 1156 class="dac-fab dac-primary"><i class="dac-sprite dac-mail"></i></span></a> 1157 </div> 1158 <div class="col-1of2 dac-footer-reachout"> 1159 <div class="dac-footer-contact"> 1160 <a class="dac-footer-contact-link" href="http://android-developers.blogspot.com/">Blog</a> 1161 <a class="dac-footer-contact-link" href="/support.html">Support</a> 1162 </div> 1163 <div class="dac-footer-social"> 1164 <a class="dac-fab dac-footer-social-link" href="https://www.youtube.com/user/androiddevelopers"><i class="dac-sprite dac-youtube"></i></a> 1165 <a class="dac-fab dac-footer-social-link" href="https://plus.google.com/+AndroidDevelopers"><i class="dac-sprite dac-gplus"></i></a> 1166 <a class="dac-fab dac-footer-social-link" href="https://twitter.com/AndroidDev"><i class="dac-sprite dac-twitter"></i></a> 1167 </div> 1168 </div> 1169 </div> 1170 1171 <hr class="dac-footer-separator"/> 1172 1173 1174 <p class="dac-footer-copyright"> 1175 1176 Except as noted, this content is licensed under <a 1177 href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a>. 1178 For details and restrictions, see the <a href="../../../../../license.html"> 1179 Content License</a>. 1180 </p> 1181 <p class="dac-footer-build"> 1182 1183 Android r — 1184<script src="../../../../../timestamp.js" type="text/javascript"></script> 1185<script>document.write(BUILD_TIMESTAMP)</script> 1186 1187 </p> 1188 1189 1190 <p class="dac-footer-links"> 1191 <a href="/about/index.html">About Android</a> 1192 <a href="/auto/index.html">Auto</a> 1193 <a href="/tv/index.html">TV</a> 1194 <a href="/wear/index.html">Wear</a> 1195 <a href="/legal.html">Legal</a> 1196 1197 <span id="language" class="locales"> 1198 <select name="language" onchange="changeLangPref(this.value, true)"> 1199 <option value="en" selected="selected">English</option> 1200 <option value="es">Español</option> 1201 <option value="ja">日本語</option> 1202 <option value="ko">한국어</option> 1203 <option value="ru">Русский</option> 1204 <option value="zh-cn">中文(简体)</option> 1205 <option value="zh-tw">中文(繁體)</option> 1206 </select> 1207 </span> 1208 </p> 1209 </div> 1210</div> <!-- end footer --> 1211 1212<div data-modal="newsletter" data-newsletter data-swap class="dac-modal newsletter"> 1213 <div class="dac-modal-container"> 1214 <div class="dac-modal-window"> 1215 <header class="dac-modal-header"> 1216 <button class="dac-modal-header-close" data-modal-toggle><i class="dac-sprite dac-close"></i></button> 1217 <div class="dac-swap" data-swap-container> 1218 <section class="dac-swap-section dac-active dac-down"> 1219 <h2 class="norule dac-modal-header-title">Get the latest Android developer news and tips that will help you find success on Google Play.</h2> 1220 <p class="dac-modal-header-subtitle">* Required Fields</p> 1221 </section> 1222 <section class="dac-swap-section dac-up"> 1223 <h2 class="norule dac-modal-header-title">Hooray!</h2> 1224 </section> 1225 </div> 1226 </header> 1227 <div class="dac-swap" data-swap-container> 1228 <section class="dac-swap-section dac-active dac-left"> 1229 <form action="https://docs.google.com/forms/d/1QgnkzbEJIDu9lMEea0mxqWrXUJu0oBCLD7ar23V0Yys/formResponse" class="dac-form" method="post" target="dac-newsletter-iframe"> 1230 <section class="dac-modal-content"> 1231 <fieldset class="dac-form-fieldset"> 1232 <div class="cols"> 1233 <div class="col-1of2 newsletter-leftCol"> 1234 <div class="dac-form-input-group"> 1235 <label for="newsletter-full-name" class="dac-form-floatlabel">Full name</label> 1236 <input type="text" class="dac-form-input" name="entry.1357890476" id="newsletter-full-name" required> 1237 <span class="dac-form-required">*</span> 1238 </div> 1239 <div class="dac-form-input-group"> 1240 <label for="newsletter-email" class="dac-form-floatlabel">Email address</label> 1241 <input type="email" class="dac-form-input" name="entry.472100832" id="newsletter-email" required> 1242 <span class="dac-form-required">*</span> 1243 </div> 1244 </div> 1245 <div class="col-1of2 newsletter-rightCol"> 1246 <div class="dac-form-input-group"> 1247 <label for="newsletter-company" class="dac-form-floatlabel">Company / developer name</label> 1248 <input type="text" class="dac-form-input" name="entry.1664780309" id="newsletter-company"> 1249 </div> 1250 <div class="dac-form-input-group"> 1251 <label for="newsletter-play-store" class="dac-form-floatlabel">One of your Play Store app URLs</label> 1252 <input type="url" class="dac-form-input" name="entry.47013838" id="newsletter-play-store" required> 1253 <span class="dac-form-required">*</span> 1254 </div> 1255 </div> 1256 </div> 1257 </fieldset> 1258 <fieldset class="dac-form-fieldset"> 1259 <div class="cols"> 1260 <div class="col-1of2 newsletter-leftCol"> 1261 <legend class="dac-form-legend">Which best describes your business:<span class="dac-form-required">*</span> 1262 </legend> 1263 <div class="dac-form-radio-group"> 1264 <input type="radio" value="Apps" class="dac-form-radio" name="entry.1796324055" id="newsletter-business-type-app" required> 1265 <label for="newsletter-business-type-app" class="dac-form-radio-button"></label> 1266 <label for="newsletter-business-type-app" class="dac-form-label">Apps</label> 1267 </div> 1268 <div class="dac-form-radio-group"> 1269 <input type="radio" value="Games" class="dac-form-radio" name="entry.1796324055" id="newsletter-business-type-games" required> 1270 <label for="newsletter-business-type-games" class="dac-form-radio-button"></label> 1271 <label for="newsletter-business-type-games" class="dac-form-label">Games</label> 1272 </div> 1273 <div class="dac-form-radio-group"> 1274 <input type="radio" value="Apps and Games" class="dac-form-radio" name="entry.1796324055" id="newsletter-business-type-appsgames" required> 1275 <label for="newsletter-business-type-appsgames" class="dac-form-radio-button"></label> 1276 <label for="newsletter-business-type-appsgames" class="dac-form-label">Apps & Games</label> 1277 </div> 1278 </div> 1279 <div class="col-1of2 newsletter-rightCol newsletter-checkboxes"> 1280 <div class="dac-form-radio-group"> 1281 <div class="dac-media"> 1282 <div class="dac-media-figure"> 1283 <input type="checkbox" class="dac-form-checkbox" name="entry.732309842" id="newsletter-add" required value="Add me to the mailing list for the monthly newsletter and occasional emails about development and Google Play opportunities."> 1284 <label for="newsletter-add" class="dac-form-checkbox-button"></label> 1285 </div> 1286 <div class="dac-media-body"> 1287 <label for="newsletter-add" class="dac-form-label dac-form-aside">Add me to the mailing list for the monthly newsletter and occasional emails about development and Google Play opportunities.<span class="dac-form-required">*</span></label> 1288 </div> 1289 </div> 1290 </div> 1291 <div class="dac-form-radio-group"> 1292 <div class="dac-media"> 1293 <div class="dac-media-figure"> 1294 <input type="checkbox" class="dac-form-checkbox" name="entry.2045036090" id="newsletter-terms" required value="I acknowledge that the information provided in this form will be subject to Google's privacy policy (https://www.google.com/policies/privacy/)."> 1295 <label for="newsletter-terms" class="dac-form-checkbox-button"></label> 1296 </div> 1297 <div class="dac-media-body"> 1298 <label for="newsletter-terms" class="dac-form-label dac-form-aside">I acknowledge that the information provided in this form will be subject to <a href="https://www.google.com/policies/privacy/">Google's privacy policy</a>.<span class="dac-form-required">*</span></label> 1299 </div> 1300 </div> 1301 </div> 1302 </div> 1303 </div> 1304 </fieldset> 1305 </section> 1306 <footer class="dac-modal-footer"> 1307 <div class="cols"> 1308 <div class="col-2of5"> 1309 </div> 1310 </div> 1311 <button type="submit" value="Submit" class="dac-fab dac-primary dac-large dac-modal-action"><i class="dac-sprite dac-arrow-right"></i></button> 1312 </footer> 1313 </form> 1314 </section> 1315 <section class="dac-swap-section dac-right"> 1316 <div class="dac-modal-content"> 1317 <p class="newsletter-success-message"> 1318 You have successfully signed up for the latest Android developer news and tips. 1319 </p> 1320 </div> 1321 </section> 1322 </div> 1323 </div> 1324 </div> 1325</div> <!-- end footer --> 1326 1327</div><!-- end doc-content --> 1328 1329</div> <!-- end .cols --> 1330</div> <!-- end body-content --> 1331 1332 1333 1334 1335 1336 1337</body> 1338</html> 1339