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 &amp; 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 &amp; 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 &nbsp;r &mdash;
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">&#42; 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 &amp; 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