luma_third_party: Add AndroidViewClient.

Used to connect to Android devices/emulators and extract view
hierarchies.

Change-Id: I67ed2aee9d7630ec5bcd2e0cfc9aaf4cbdc28602
diff --git a/AndroidViewClient/.gitignore b/AndroidViewClient/.gitignore
new file mode 100755
index 0000000..455e397
--- /dev/null
+++ b/AndroidViewClient/.gitignore
@@ -0,0 +1,25 @@
+# Compiled classes #
+####################
+*$py.class
+*.pyc
+
+# Mac files #
+#############
+.DS_Store
+
+# vi files #
+############
+.*.swp
+
+# other files #
+###############
+*~
+build/
+dist/
+**/*.egg-info/
+
+# idea #
+########
+*.iws
+**/.idea/workspace.xml
+**/.idea/tasks.xml
diff --git a/AndroidViewClient/.idea/.name b/AndroidViewClient/.idea/.name
new file mode 100755
index 0000000..0bef555
--- /dev/null
+++ b/AndroidViewClient/.idea/.name
@@ -0,0 +1 @@
+AndroidViewClient
\ No newline at end of file
diff --git a/AndroidViewClient/.idea/AndroidViewClient.iml b/AndroidViewClient/.idea/AndroidViewClient.iml
new file mode 100755
index 0000000..a0052f3
--- /dev/null
+++ b/AndroidViewClient/.idea/AndroidViewClient.iml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="PYTHON_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="jdk" jdkName="Python 2.7.6 (/usr/bin/python2.7)" jdkType="Python SDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/AndroidViewClient/.idea/encodings.xml b/AndroidViewClient/.idea/encodings.xml
new file mode 100755
index 0000000..f758959
--- /dev/null
+++ b/AndroidViewClient/.idea/encodings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false">
+    <file url="PROJECT" charset="UTF-8" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/AndroidViewClient/.idea/misc.xml b/AndroidViewClient/.idea/misc.xml
new file mode 100755
index 0000000..cd9d35b
--- /dev/null
+++ b/AndroidViewClient/.idea/misc.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectLevelVcsManager" settingsEditedManually="false">
+    <OptionsSetting value="true" id="Add" />
+    <OptionsSetting value="true" id="Remove" />
+    <OptionsSetting value="true" id="Checkout" />
+    <OptionsSetting value="true" id="Update" />
+    <OptionsSetting value="true" id="Status" />
+    <OptionsSetting value="true" id="Edit" />
+    <ConfirmationsSetting value="0" id="Add" />
+    <ConfirmationsSetting value="0" id="Remove" />
+  </component>
+  <component name="ProjectRootManager" version="2" project-jdk-name="Python 2.7.6 (/usr/bin/python2.7)" project-jdk-type="Python SDK" />
+</project>
\ No newline at end of file
diff --git a/AndroidViewClient/.idea/modules.xml b/AndroidViewClient/.idea/modules.xml
new file mode 100755
index 0000000..c1ab586
--- /dev/null
+++ b/AndroidViewClient/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/AndroidViewClient.iml" filepath="$PROJECT_DIR$/.idea/AndroidViewClient.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/AndroidViewClient/.idea/scopes/scope_settings.xml b/AndroidViewClient/.idea/scopes/scope_settings.xml
new file mode 100755
index 0000000..922003b
--- /dev/null
+++ b/AndroidViewClient/.idea/scopes/scope_settings.xml
@@ -0,0 +1,5 @@
+<component name="DependencyValidationManager">
+  <state>
+    <option name="SKIP_IMPORT_STATEMENTS" value="false" />
+  </state>
+</component>
\ No newline at end of file
diff --git a/AndroidViewClient/.idea/vcs.xml b/AndroidViewClient/.idea/vcs.xml
new file mode 100755
index 0000000..94a25f7
--- /dev/null
+++ b/AndroidViewClient/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/AndroidViewClient/.project b/AndroidViewClient/.project
new file mode 100755
index 0000000..3f13051
--- /dev/null
+++ b/AndroidViewClient/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>AndroidViewClient</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.python.pydev.PyDevBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.python.pydev.pythonNature</nature>
+	</natures>
+</projectDescription>
diff --git a/AndroidViewClient/.pydevproject b/AndroidViewClient/.pydevproject
new file mode 100755
index 0000000..85f5914
--- /dev/null
+++ b/AndroidViewClient/.pydevproject
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?eclipse-pydev version="1.0"?><pydev_project>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">python 2.7</pydev_property>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
+<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
+<path>/AndroidViewClient/src</path>
+<path>/AndroidViewClient/examples</path>
+</pydev_pathproperty>
+
+</pydev_project>
diff --git a/AndroidViewClient/.settings/org.eclipse.core.resources.prefs b/AndroidViewClient/.settings/org.eclipse.core.resources.prefs
new file mode 100755
index 0000000..d0203b2
--- /dev/null
+++ b/AndroidViewClient/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+encoding//src/com/dtmilano/android/common.py=utf-8
+encoding//src/com/dtmilano/android/controlpanel.py=utf-8
+encoding//src/com/dtmilano/android/culebron.py=utf-8
+encoding//src/com/dtmilano/android/viewclient.py=utf-8
+encoding//src/com/dtmilano/android/window.py=utf-8
+encoding//tests/com/dtmilano/android/mocks.py=utf-8
+encoding//tests/com/dtmilano/android/viewclienttests.py=utf-8
+encoding//tools/culebra=utf-8
diff --git a/AndroidViewClient/.settings/org.eclipse.ltk.core.refactoring.prefs b/AndroidViewClient/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100755
index 0000000..b196c64
--- /dev/null
+++ b/AndroidViewClient/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/AndroidViewClient/LICENSE b/AndroidViewClient/LICENSE
new file mode 100755
index 0000000..d645695
--- /dev/null
+++ b/AndroidViewClient/LICENSE
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/AndroidViewClient/README.google b/AndroidViewClient/README.google
new file mode 100644
index 0000000..cf06533
--- /dev/null
+++ b/AndroidViewClient/README.google
@@ -0,0 +1,10 @@
+URL: https://github.com/dtmilano/AndroidViewClient
+Version: 30e48e27f194f607817747710d83c884b7f74f73
+License: Apache License, Version 2.0
+License File: LICENSE
+
+Description:
+Android ViewServer client
+
+Local Modifications:
+No modifications
\ No newline at end of file
diff --git a/AndroidViewClient/README.md b/AndroidViewClient/README.md
new file mode 100755
index 0000000..74ad248
--- /dev/null
+++ b/AndroidViewClient/README.md
@@ -0,0 +1,25 @@
+AndroidViewClient
+=================
+<a href="#"><img src="https://github.com/dtmilano/AndroidViewClient/wiki/images/culebra-logo-transparent-204x209-rb-border.png" align="left" hspace="0" vspace="6"></a>
+**AndroidViewClient** was originally conceived as an extension to [monkeyrunner](http://developer.android.com/tools/help/monkeyrunner_concepts.html) but lately evolved
+as a pure python tool that automates or simplifies test script creation.
+It is a test framework for Android applications that:
+<ul><ul>
+    <li>Automates driving Android applications</li>
+    <li><b>Generates</b> re-usable scripts</li>
+    <li>Provides view-based <i>device independent</i> UI interaction</li>
+    <li>Uses 'logical' screen comparison (UI Automator Hierarchy based) over image comparison (Avoiding extraneous 
+    detail issues, such as time or data changes)</li>
+    <li>Supports running on multiple devices</li>
+    <li>Provides simple control for high level operations like language change and activity start</li>
+    <li>Supports all Android APIs</li>
+    <li>Is written in python</li>
+</ul></ul>
+
+:rage: **NOTE**: Pypi statistics are broken see [here](https://github.com/aclark4life/vanity/issues/22). This does not reflect the number of downloads.
+
+[![Downloads](https://img.shields.io/pypi/dm/androidviewclient.svg)](https://pypi.python.org/pypi/androidviewclient/)
+[![Latest Version](https://img.shields.io/pypi/v/androidviewclient.svg)](https://pypi.python.org/pypi/androidviewclient/)
+
+Want to learn more? Detailed information can be found in the [AndroidViewClient/culebra wiki](https://github.com/dtmilano/AndroidViewClient/wiki)
+
diff --git a/AndroidViewClient/avc-version b/AndroidViewClient/avc-version
new file mode 100755
index 0000000..06e6b9f
--- /dev/null
+++ b/AndroidViewClient/avc-version
@@ -0,0 +1,73 @@
+#! /bin/bash
+
+usage()
+{
+    echo "usage: $0 {get | set <version>}"
+    exit 1
+}
+
+
+set +x
+if [[ $# < 1 ]]
+then
+    usage
+fi
+
+version_str='__version__ ='
+
+case "$1" in
+    get)
+        (
+        for f in $(find src tools -type f -exec grep -l "$version_str" {} \;)
+        do
+            echo -n "$f: "
+            grep "$version_str" $f
+        done
+        echo -n "setup.py: "
+        grep version setup.py
+        ) | awk "
+            BEGIN { FS = \"[=:]+\"; max=-1 };
+            { gsub(/[,' ]+/, \"\", \$NF); files[NR]=\$1; v=\$NF; versions[NR]=v; if (v > max) max=v;}
+            END {
+                for (i in files) {
+                    if (versions[i] == max) {
+                        s=\" MAX\"
+                    } else {
+                        s = \"\"};
+                    printf(\"%-45s: %s%s\\n\", files[i], versions[i], s)};
+            }
+            "
+        ;;
+
+    set)
+        if [[ $# != 2 ]]
+        then
+            usage
+        fi
+        version="$2"
+        for f in $(find src tools -type f -exec grep -l "$version_str" {} \;)
+        do
+            echo "<<< $f >>>"
+            case "$(uname)" in
+                Darwin)
+                    sed -E -i '' -e "s@$version_str \'[0-9r.]+\'@$version_str \'$version\'@" $f
+                    ;;
+
+                Linux)
+                    sed -E -i -e "s@$version_str '[0-9r.]+'@$version_str '$version'@" $f
+                    ;;
+            esac
+        done
+
+        echo "<<< setup.py >>>"
+        case "$(uname)" in
+            Darwin)
+                sed -E -i '' -e "s@version='[0-9r.]+'@version='$version'@" setup.py
+                ;;
+
+            Linux)
+                sed -E -i -e "s@version='[0-9r.]+'@version='$version'@" setup.py
+                ;;
+        esac
+        ;;
+ esac
diff --git a/AndroidViewClient/build.xml b/AndroidViewClient/build.xml
new file mode 100755
index 0000000..504f101
--- /dev/null
+++ b/AndroidViewClient/build.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="Culebra" default="deprecated">
+	<property file="ant.properties" />
+	<loadproperties srcFile="project.properties" />
+
+    <target name="deprecated">
+        <echo message="NOTICE:" />
+		<echo message="Jar file and monkeyrunner use are deprecated as of AndroidViewClient >= 4.0.0" />
+    </target>
+
+	<property name="versionRE" value="^\s*__version__\s*=\s*'(.*)'\s*$" />
+	<loadfile srcfile="src/com/dtmilano/android/viewclient.py"
+		property="avc.version">
+		<filterchain>
+			<linecontainsregexp>
+				<regexp pattern="${versionRE}" />
+			</linecontainsregexp>
+			<tokenfilter>
+				<replaceregex pattern="${versionRE}" replace="\1" />
+			</tokenfilter>
+			<striplinebreaks />
+		</filterchain>
+	</loadfile>
+
+	<property name="avc.jar" value="bin/${avc.jarname}-${avc.version}.jar" />
+	<target name="jar" depends="compile">
+		<echo message="Creating ${avc.jarname} ${avc.version} jar ..." />
+		<jar destfile="${avc.jar}">
+			<fileset dir="src/" excludes="**/*.java" />
+			<fileset dir="." includes="tools/*" />
+			<fileset dir="bin/classes" />
+			<manifest>
+				<attribute name="Main-Class"
+					value="com.dtmilano.android.viewclient.ViewClient" />
+			</manifest>
+		</jar>
+	</target>
+
+	<target name="clean">
+		<delete dir="bin" />
+	</target>
+
+	<target name="compile">
+		<mkdir dir="bin/classes" />
+		<javac srcdir="src" destdir="bin/classes" />
+	</target>
+
+    <target name="install" depends="jar,doc-jar">
+        <mkdir dir="${gdrive.bin.dest.dir}" />
+        <copy file="${avc.jar}" todir="${gdrive.bin.dest.dir}" />
+        <mkdir dir="${gdrive.doc.dest.dir}" />
+        <copy file="${avc.doc.jar}" todir="${gdrive.doc.dest.dir}" />
+    </target>
+
+    <target name="doc" >
+        <mkdir dir="doc" />
+        <exec executable="epydoc">
+            <arg value="--config=viewclient.epydoc" />
+        </exec>
+    </target>
+
+	<property name="avc.doc.jar" value="bin/${avc.doc.jarname}-${avc.version}.jar" />
+    <target name="doc-jar" depends="doc">
+		<echo message="Creating ${avc.doc.jarname} ${avc.version} jar ..." />
+		<jar destfile="${avc.doc.jar}">
+            <fileset dir="doc/" />
+        </jar>
+    </target>
+</project>
diff --git a/AndroidViewClient/doc/api-objects.txt b/AndroidViewClient/doc/api-objects.txt
new file mode 100755
index 0000000..e655627
--- /dev/null
+++ b/AndroidViewClient/doc/api-objects.txt
@@ -0,0 +1,346 @@
+com.dtmilano.android	com.dtmilano.android-module.html
+com.dtmilano.android.__package__	com.dtmilano.android-module.html#__package__
+com.dtmilano.android.adb	com.dtmilano.android.adb-module.html
+com.dtmilano.android.adb.__package__	com.dtmilano.android.adb-module.html#__package__
+com.dtmilano.android.adb.adbclient	com.dtmilano.android.adb.adbclient-module.html
+com.dtmilano.android.adb.adbclient.DOWN	com.dtmilano.android.adb.adbclient-module.html#DOWN
+com.dtmilano.android.adb.adbclient.DEBUG	com.dtmilano.android.adb.adbclient-module.html#DEBUG
+com.dtmilano.android.adb.adbclient.TIMEOUT	com.dtmilano.android.adb.adbclient-module.html#TIMEOUT
+com.dtmilano.android.adb.adbclient.PORT	com.dtmilano.android.adb.adbclient-module.html#PORT
+com.dtmilano.android.adb.adbclient.VERSION_RELEASE_PROPERTY	com.dtmilano.android.adb.adbclient-module.html#VERSION_RELEASE_PROPERTY
+com.dtmilano.android.adb.adbclient.DOWN_AND_UP	com.dtmilano.android.adb.adbclient-module.html#DOWN_AND_UP
+com.dtmilano.android.adb.adbclient.__package__	com.dtmilano.android.adb.adbclient-module.html#__package__
+com.dtmilano.android.adb.adbclient.OKAY	com.dtmilano.android.adb.adbclient-module.html#OKAY
+com.dtmilano.android.adb.adbclient.FAIL	com.dtmilano.android.adb.adbclient-module.html#FAIL
+com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY	com.dtmilano.android.adb.adbclient-module.html#VERSION_SDK_PROPERTY
+com.dtmilano.android.adb.adbclient.HOSTNAME	com.dtmilano.android.adb.adbclient-module.html#HOSTNAME
+com.dtmilano.android.adb.adbclient.UP	com.dtmilano.android.adb.adbclient-module.html#UP
+com.dtmilano.android.viewclient	com.dtmilano.android.viewclient-module.html
+com.dtmilano.android.viewclient.HEIGHT_PROPERTY	com.dtmilano.android.viewclient-module.html#HEIGHT_PROPERTY
+com.dtmilano.android.viewclient.GONE	com.dtmilano.android.viewclient-module.html#GONE
+com.dtmilano.android.viewclient.LEFT_PROPERTY_API_8	com.dtmilano.android.viewclient-module.html#LEFT_PROPERTY_API_8
+com.dtmilano.android.viewclient.TEXT_PROPERTY	com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY
+com.dtmilano.android.viewclient.WIDTH_PROPERTY_API_8	com.dtmilano.android.viewclient-module.html#WIDTH_PROPERTY_API_8
+com.dtmilano.android.viewclient.TEXT_PROPERTY_API_10	com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY_API_10
+com.dtmilano.android.viewclient._nd	com.dtmilano.android.viewclient-module.html#_nd
+com.dtmilano.android.viewclient.SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED	com.dtmilano.android.viewclient-module.html#SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED
+com.dtmilano.android.viewclient.DEBUG_COORDS	com.dtmilano.android.viewclient-module.html#DEBUG_COORDS
+com.dtmilano.android.viewclient.HEIGHT_PROPERTY_API_8	com.dtmilano.android.viewclient-module.html#HEIGHT_PROPERTY_API_8
+com.dtmilano.android.viewclient.__package__	com.dtmilano.android.viewclient-module.html#__package__
+com.dtmilano.android.viewclient.DEBUG_DEVICE	com.dtmilano.android.viewclient-module.html#DEBUG_DEVICE
+com.dtmilano.android.viewclient.DEBUG_GETATTR	com.dtmilano.android.viewclient-module.html#DEBUG_GETATTR
+com.dtmilano.android.viewclient.VERSION_RELEASE_PROPERTY	com.dtmilano.android.viewclient-module.html#VERSION_RELEASE_PROPERTY
+com.dtmilano.android.viewclient.ID_PROPERTY_UI_AUTOMATOR	com.dtmilano.android.viewclient-module.html#ID_PROPERTY_UI_AUTOMATOR
+com.dtmilano.android.viewclient._ns	com.dtmilano.android.viewclient-module.html#_ns
+com.dtmilano.android.viewclient.ID_PROPERTY	com.dtmilano.android.viewclient-module.html#ID_PROPERTY
+com.dtmilano.android.viewclient.VIEW_SERVER_PORT	com.dtmilano.android.viewclient-module.html#VIEW_SERVER_PORT
+com.dtmilano.android.viewclient._nh	com.dtmilano.android.viewclient-module.html#_nh
+com.dtmilano.android.viewclient.LAYOUT_TOP_MARGIN_PROPERTY	com.dtmilano.android.viewclient-module.html#LAYOUT_TOP_MARGIN_PROPERTY
+com.dtmilano.android.viewclient.VISIBLE	com.dtmilano.android.viewclient-module.html#VISIBLE
+com.dtmilano.android.viewclient.DEBUG_CALL	com.dtmilano.android.viewclient-module.html#DEBUG_CALL
+com.dtmilano.android.viewclient.USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES	com.dtmilano.android.viewclient-module.html#USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES
+com.dtmilano.android.viewclient.INVISIBLE	com.dtmilano.android.viewclient-module.html#INVISIBLE
+com.dtmilano.android.viewclient.DEBUG_TREE	com.dtmilano.android.viewclient-module.html#DEBUG_TREE
+com.dtmilano.android.viewclient.ID_RE	com.dtmilano.android.viewclient-module.html#ID_RE
+com.dtmilano.android.viewclient.DEBUG_DISTANCE	com.dtmilano.android.viewclient-module.html#DEBUG_DISTANCE
+com.dtmilano.android.viewclient.TOP_PROPERTY	com.dtmilano.android.viewclient-module.html#TOP_PROPERTY
+com.dtmilano.android.viewclient.TEXT_PROPERTY_UI_AUTOMATOR	com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY_UI_AUTOMATOR
+com.dtmilano.android.viewclient.WARNINGS	com.dtmilano.android.viewclient-module.html#WARNINGS
+com.dtmilano.android.viewclient.IP_RE	com.dtmilano.android.viewclient-module.html#IP_RE
+com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY	com.dtmilano.android.viewclient-module.html#GET_VISIBILITY_PROPERTY
+com.dtmilano.android.viewclient.ADB_DEFAULT_PORT	com.dtmilano.android.viewclient-module.html#ADB_DEFAULT_PORT
+com.dtmilano.android.viewclient.DEBUG_STATUSBAR	com.dtmilano.android.viewclient-module.html#DEBUG_STATUSBAR
+com.dtmilano.android.viewclient.OFFSET	com.dtmilano.android.viewclient-module.html#OFFSET
+com.dtmilano.android.viewclient.DEBUG	com.dtmilano.android.viewclient-module.html#DEBUG
+com.dtmilano.android.viewclient.DEBUG_WINDOWS	com.dtmilano.android.viewclient-module.html#DEBUG_WINDOWS
+com.dtmilano.android.viewclient.TOP_PROPERTY_API_8	com.dtmilano.android.viewclient-module.html#TOP_PROPERTY_API_8
+com.dtmilano.android.viewclient.VIEW_SERVER_HOST	com.dtmilano.android.viewclient-module.html#VIEW_SERVER_HOST
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY	com.dtmilano.android.viewclient-module.html#VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.LEFT_PROPERTY	com.dtmilano.android.viewclient-module.html#LEFT_PROPERTY
+com.dtmilano.android.viewclient.VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED	com.dtmilano.android.viewclient-module.html#VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED
+com.dtmilano.android.viewclient.WIDTH_PROPERTY	com.dtmilano.android.viewclient-module.html#WIDTH_PROPERTY
+com.dtmilano.android.viewclient.DEBUG_RECEIVED	com.dtmilano.android.viewclient-module.html#DEBUG_RECEIVED
+com.dtmilano.android.viewclient.WS	com.dtmilano.android.viewclient-module.html#WS
+com.dtmilano.android.viewclient.DEBUG_BOUNDS	com.dtmilano.android.viewclient-module.html#DEBUG_BOUNDS
+com.dtmilano.android.viewclient.DEBUG_TOUCH	com.dtmilano.android.viewclient-module.html#DEBUG_TOUCH
+com.dtmilano.android.adb.adbclient.AdbClient	com.dtmilano.android.adb.adbclient.AdbClient-class.html
+com.dtmilano.android.adb.adbclient.AdbClient.__getProp	com.dtmilano.android.adb.adbclient.AdbClient-class.html#__getProp
+com.dtmilano.android.adb.adbclient.AdbClient.checkVersion	com.dtmilano.android.adb.adbclient.AdbClient-class.html#checkVersion
+com.dtmilano.android.adb.adbclient.AdbClient.sameAs	com.dtmilano.android.adb.adbclient.AdbClient-class.html#sameAs
+com.dtmilano.android.adb.adbclient.AdbClient.unlock	com.dtmilano.android.adb.adbclient.AdbClient-class.html#unlock
+com.dtmilano.android.adb.adbclient.AdbClient.percentSame	com.dtmilano.android.adb.adbclient.AdbClient-class.html#percentSame
+com.dtmilano.android.adb.adbclient.AdbClient.close	com.dtmilano.android.adb.adbclient.AdbClient-class.html#close
+com.dtmilano.android.adb.adbclient.AdbClient.touch	com.dtmilano.android.adb.adbclient.AdbClient-class.html#touch
+com.dtmilano.android.adb.adbclient.AdbClient.getSystemProperty	com.dtmilano.android.adb.adbclient.AdbClient-class.html#getSystemProperty
+com.dtmilano.android.adb.adbclient.AdbClient.__init__	com.dtmilano.android.adb.adbclient.AdbClient-class.html#__init__
+com.dtmilano.android.adb.adbclient.AdbClient.startActivity	com.dtmilano.android.adb.adbclient.AdbClient-class.html#startActivity
+com.dtmilano.android.adb.adbclient.AdbClient.__receive	com.dtmilano.android.adb.adbclient.AdbClient-class.html#__receive
+com.dtmilano.android.adb.adbclient.AdbClient.setSerialno	com.dtmilano.android.adb.adbclient.AdbClient-class.html#setSerialno
+com.dtmilano.android.adb.adbclient.AdbClient.isLocked	com.dtmilano.android.adb.adbclient.AdbClient-class.html#isLocked
+com.dtmilano.android.adb.adbclient.AdbClient.build	com.dtmilano.android.adb.adbclient.AdbClient-class.html#build
+com.dtmilano.android.adb.adbclient.AdbClient.type	com.dtmilano.android.adb.adbclient.AdbClient-class.html#type
+com.dtmilano.android.adb.adbclient.AdbClient.__getDisplayWidth	com.dtmilano.android.adb.adbclient.AdbClient-class.html#__getDisplayWidth
+com.dtmilano.android.adb.adbclient.AdbClient.getRestrictedScreen	com.dtmilano.android.adb.adbclient.AdbClient-class.html#getRestrictedScreen
+com.dtmilano.android.adb.adbclient.AdbClient.shell	com.dtmilano.android.adb.adbclient.AdbClient-class.html#shell
+com.dtmilano.android.adb.adbclient.AdbClient.longPress	com.dtmilano.android.adb.adbclient.AdbClient-class.html#longPress
+com.dtmilano.android.adb.adbclient.AdbClient.setAlarm	com.dtmilano.android.adb.adbclient.AdbClient-class.html#setAlarm
+com.dtmilano.android.adb.adbclient.AdbClient.__del__	com.dtmilano.android.adb.adbclient.AdbClient-class.html#__del__
+com.dtmilano.android.adb.adbclient.AdbClient.drag	com.dtmilano.android.adb.adbclient.AdbClient-class.html#drag
+com.dtmilano.android.adb.adbclient.AdbClient.__getDisplayHeight	com.dtmilano.android.adb.adbclient.AdbClient-class.html#__getDisplayHeight
+com.dtmilano.android.adb.adbclient.AdbClient.wake	com.dtmilano.android.adb.adbclient.AdbClient-class.html#wake
+com.dtmilano.android.adb.adbclient.AdbClient.__connect	com.dtmilano.android.adb.adbclient.AdbClient-class.html#__connect
+com.dtmilano.android.adb.adbclient.AdbClient.__setTransport	com.dtmilano.android.adb.adbclient.AdbClient-class.html#__setTransport
+com.dtmilano.android.adb.adbclient.AdbClient.press	com.dtmilano.android.adb.adbclient.AdbClient-class.html#press
+com.dtmilano.android.adb.adbclient.AdbClient.getSdkVersion	com.dtmilano.android.adb.adbclient.AdbClient-class.html#getSdkVersion
+com.dtmilano.android.adb.adbclient.AdbClient.checkConnected	com.dtmilano.android.adb.adbclient.AdbClient-class.html#checkConnected
+com.dtmilano.android.adb.adbclient.AdbClient.takeSnapshot	com.dtmilano.android.adb.adbclient.AdbClient-class.html#takeSnapshot
+com.dtmilano.android.adb.adbclient.AdbClient.__send	com.dtmilano.android.adb.adbclient.AdbClient-class.html#__send
+com.dtmilano.android.adb.adbclient.AdbClient.getProperty	com.dtmilano.android.adb.adbclient.AdbClient-class.html#getProperty
+com.dtmilano.android.adb.adbclient.AdbClient.__checkOk	com.dtmilano.android.adb.adbclient.AdbClient-class.html#__checkOk
+com.dtmilano.android.adb.adbclient.AdbClient.isScreenOn	com.dtmilano.android.adb.adbclient.AdbClient-class.html#isScreenOn
+com.dtmilano.android.adb.adbclient.AdbClient.getDevices	com.dtmilano.android.adb.adbclient.AdbClient-class.html#getDevices
+com.dtmilano.android.adb.adbclient.AdbClient.setReconnect	com.dtmilano.android.adb.adbclient.AdbClient-class.html#setReconnect
+com.dtmilano.android.adb.adbclient.Device	com.dtmilano.android.adb.adbclient.Device-class.html
+com.dtmilano.android.adb.adbclient.Device.__str__	com.dtmilano.android.adb.adbclient.Device-class.html#__str__
+com.dtmilano.android.adb.adbclient.Device.factory	com.dtmilano.android.adb.adbclient.Device-class.html#factory
+com.dtmilano.android.adb.adbclient.Device.__init__	com.dtmilano.android.adb.adbclient.Device-class.html#__init__
+com.dtmilano.android.viewclient.EditText	com.dtmilano.android.viewclient.EditText-class.html
+com.dtmilano.android.viewclient.View.getPositionAndSize	com.dtmilano.android.viewclient.View-class.html#getPositionAndSize
+com.dtmilano.android.viewclient.View.getClass	com.dtmilano.android.viewclient.View-class.html#getClass
+com.dtmilano.android.viewclient.View.getCoords	com.dtmilano.android.viewclient.View-class.html#getCoords
+com.dtmilano.android.viewclient.View.__str__	com.dtmilano.android.viewclient.View-class.html#__str__
+com.dtmilano.android.viewclient.View.currentFocus	com.dtmilano.android.viewclient.View-class.html#currentFocus
+com.dtmilano.android.viewclient.View.getText	com.dtmilano.android.viewclient.View-class.html#getText
+com.dtmilano.android.viewclient.View.getWidth	com.dtmilano.android.viewclient.View-class.html#getWidth
+com.dtmilano.android.viewclient.View.getY	com.dtmilano.android.viewclient.View-class.html#getY
+com.dtmilano.android.viewclient.View.widthProperty	com.dtmilano.android.viewclient.View-class.html#widthProperty
+com.dtmilano.android.viewclient.View.variableNameFromId	com.dtmilano.android.viewclient.View-class.html#variableNameFromId
+com.dtmilano.android.viewclient.View.getId	com.dtmilano.android.viewclient.View-class.html#getId
+com.dtmilano.android.viewclient.View.touch	com.dtmilano.android.viewclient.View-class.html#touch
+com.dtmilano.android.viewclient.View.writeImageToFile	com.dtmilano.android.viewclient.View-class.html#writeImageToFile
+com.dtmilano.android.viewclient.View.idProperty	com.dtmilano.android.viewclient.View-class.html#idProperty
+com.dtmilano.android.viewclient.View.children	com.dtmilano.android.viewclient.View-class.html#children
+com.dtmilano.android.viewclient.View.__init__	com.dtmilano.android.viewclient.View-class.html#__init__
+com.dtmilano.android.viewclient.View.getUniqueId	com.dtmilano.android.viewclient.View-class.html#getUniqueId
+com.dtmilano.android.viewclient.View.isClickable	com.dtmilano.android.viewclient.View-class.html#isClickable
+com.dtmilano.android.viewclient.View.__getitem__	com.dtmilano.android.viewclient.View-class.html#__getitem__
+com.dtmilano.android.viewclient.View.forceviewserveruse	com.dtmilano.android.viewclient.View-class.html#forceviewserveruse
+com.dtmilano.android.viewclient.View.getHeight	com.dtmilano.android.viewclient.View-class.html#getHeight
+com.dtmilano.android.viewclient.View.factory	com.dtmilano.android.viewclient.View-class.html#factory
+com.dtmilano.android.viewclient.View.__getattr__	com.dtmilano.android.viewclient.View-class.html#__getattr__
+com.dtmilano.android.viewclient.View.add	com.dtmilano.android.viewclient.View-class.html#add
+com.dtmilano.android.viewclient.View.version	com.dtmilano.android.viewclient.View-class.html#version
+com.dtmilano.android.viewclient.EditText.backspace	com.dtmilano.android.viewclient.EditText-class.html#backspace
+com.dtmilano.android.viewclient.View.build	com.dtmilano.android.viewclient.View-class.html#build
+com.dtmilano.android.viewclient.View.__call__	com.dtmilano.android.viewclient.View-class.html#__call__
+com.dtmilano.android.viewclient.EditText.type	com.dtmilano.android.viewclient.EditText-class.html#type
+com.dtmilano.android.viewclient.View.__smallStr__	com.dtmilano.android.viewclient.View-class.html#__smallStr__
+com.dtmilano.android.viewclient.View.allPossibleNamesWithColon	com.dtmilano.android.viewclient.View-class.html#allPossibleNamesWithColon
+com.dtmilano.android.viewclient.View.map	com.dtmilano.android.viewclient.View-class.html#map
+com.dtmilano.android.viewclient.View.parent	com.dtmilano.android.viewclient.View-class.html#parent
+com.dtmilano.android.viewclient.View.getContentDescription	com.dtmilano.android.viewclient.View-class.html#getContentDescription
+com.dtmilano.android.viewclient.View.topProperty	com.dtmilano.android.viewclient.View-class.html#topProperty
+com.dtmilano.android.viewclient.View.getCenter	com.dtmilano.android.viewclient.View-class.html#getCenter
+com.dtmilano.android.viewclient.View.textProperty	com.dtmilano.android.viewclient.View-class.html#textProperty
+com.dtmilano.android.viewclient.View.device	com.dtmilano.android.viewclient.View-class.html#device
+com.dtmilano.android.viewclient.View.intersection	com.dtmilano.android.viewclient.View-class.html#intersection
+com.dtmilano.android.viewclient.View.__microStr__	com.dtmilano.android.viewclient.View-class.html#__microStr__
+com.dtmilano.android.viewclient.View.getXY	com.dtmilano.android.viewclient.View-class.html#getXY
+com.dtmilano.android.viewclient.View.getX	com.dtmilano.android.viewclient.View-class.html#getX
+com.dtmilano.android.viewclient.View.getParent	com.dtmilano.android.viewclient.View-class.html#getParent
+com.dtmilano.android.viewclient.View.heightProperty	com.dtmilano.android.viewclient.View-class.html#heightProperty
+com.dtmilano.android.viewclient.View.leftProperty	com.dtmilano.android.viewclient.View-class.html#leftProperty
+com.dtmilano.android.viewclient.View.__tinyStr__	com.dtmilano.android.viewclient.View-class.html#__tinyStr__
+com.dtmilano.android.viewclient.View.useUiAutomator	com.dtmilano.android.viewclient.View-class.html#useUiAutomator
+com.dtmilano.android.viewclient.View.containsPoint	com.dtmilano.android.viewclient.View-class.html#containsPoint
+com.dtmilano.android.viewclient.View.getVisibility	com.dtmilano.android.viewclient.View-class.html#getVisibility
+com.dtmilano.android.viewclient.Excerpt2Code	com.dtmilano.android.viewclient.Excerpt2Code-class.html
+com.dtmilano.android.viewclient.Excerpt2Code.CharacterData	com.dtmilano.android.viewclient.Excerpt2Code-class.html#CharacterData
+com.dtmilano.android.viewclient.Excerpt2Code.StartElement	com.dtmilano.android.viewclient.Excerpt2Code-class.html#StartElement
+com.dtmilano.android.viewclient.Excerpt2Code.__init__	com.dtmilano.android.viewclient.Excerpt2Code-class.html#__init__
+com.dtmilano.android.viewclient.Excerpt2Code.Parse	com.dtmilano.android.viewclient.Excerpt2Code-class.html#Parse
+com.dtmilano.android.viewclient.Excerpt2Code.EndElement	com.dtmilano.android.viewclient.Excerpt2Code-class.html#EndElement
+com.dtmilano.android.viewclient.TextView	com.dtmilano.android.viewclient.TextView-class.html
+com.dtmilano.android.viewclient.View.getPositionAndSize	com.dtmilano.android.viewclient.View-class.html#getPositionAndSize
+com.dtmilano.android.viewclient.View.getClass	com.dtmilano.android.viewclient.View-class.html#getClass
+com.dtmilano.android.viewclient.View.getCoords	com.dtmilano.android.viewclient.View-class.html#getCoords
+com.dtmilano.android.viewclient.View.__str__	com.dtmilano.android.viewclient.View-class.html#__str__
+com.dtmilano.android.viewclient.View.currentFocus	com.dtmilano.android.viewclient.View-class.html#currentFocus
+com.dtmilano.android.viewclient.View.getText	com.dtmilano.android.viewclient.View-class.html#getText
+com.dtmilano.android.viewclient.View.getWidth	com.dtmilano.android.viewclient.View-class.html#getWidth
+com.dtmilano.android.viewclient.View.getY	com.dtmilano.android.viewclient.View-class.html#getY
+com.dtmilano.android.viewclient.View.widthProperty	com.dtmilano.android.viewclient.View-class.html#widthProperty
+com.dtmilano.android.viewclient.View.variableNameFromId	com.dtmilano.android.viewclient.View-class.html#variableNameFromId
+com.dtmilano.android.viewclient.View.getId	com.dtmilano.android.viewclient.View-class.html#getId
+com.dtmilano.android.viewclient.View.touch	com.dtmilano.android.viewclient.View-class.html#touch
+com.dtmilano.android.viewclient.View.writeImageToFile	com.dtmilano.android.viewclient.View-class.html#writeImageToFile
+com.dtmilano.android.viewclient.View.idProperty	com.dtmilano.android.viewclient.View-class.html#idProperty
+com.dtmilano.android.viewclient.View.children	com.dtmilano.android.viewclient.View-class.html#children
+com.dtmilano.android.viewclient.View.__init__	com.dtmilano.android.viewclient.View-class.html#__init__
+com.dtmilano.android.viewclient.View.getUniqueId	com.dtmilano.android.viewclient.View-class.html#getUniqueId
+com.dtmilano.android.viewclient.View.isClickable	com.dtmilano.android.viewclient.View-class.html#isClickable
+com.dtmilano.android.viewclient.View.__getitem__	com.dtmilano.android.viewclient.View-class.html#__getitem__
+com.dtmilano.android.viewclient.View.forceviewserveruse	com.dtmilano.android.viewclient.View-class.html#forceviewserveruse
+com.dtmilano.android.viewclient.View.getHeight	com.dtmilano.android.viewclient.View-class.html#getHeight
+com.dtmilano.android.viewclient.View.factory	com.dtmilano.android.viewclient.View-class.html#factory
+com.dtmilano.android.viewclient.View.__getattr__	com.dtmilano.android.viewclient.View-class.html#__getattr__
+com.dtmilano.android.viewclient.View.add	com.dtmilano.android.viewclient.View-class.html#add
+com.dtmilano.android.viewclient.View.version	com.dtmilano.android.viewclient.View-class.html#version
+com.dtmilano.android.viewclient.View.build	com.dtmilano.android.viewclient.View-class.html#build
+com.dtmilano.android.viewclient.View.__call__	com.dtmilano.android.viewclient.View-class.html#__call__
+com.dtmilano.android.viewclient.View.__smallStr__	com.dtmilano.android.viewclient.View-class.html#__smallStr__
+com.dtmilano.android.viewclient.View.allPossibleNamesWithColon	com.dtmilano.android.viewclient.View-class.html#allPossibleNamesWithColon
+com.dtmilano.android.viewclient.View.map	com.dtmilano.android.viewclient.View-class.html#map
+com.dtmilano.android.viewclient.View.parent	com.dtmilano.android.viewclient.View-class.html#parent
+com.dtmilano.android.viewclient.View.getContentDescription	com.dtmilano.android.viewclient.View-class.html#getContentDescription
+com.dtmilano.android.viewclient.View.topProperty	com.dtmilano.android.viewclient.View-class.html#topProperty
+com.dtmilano.android.viewclient.View.getCenter	com.dtmilano.android.viewclient.View-class.html#getCenter
+com.dtmilano.android.viewclient.View.textProperty	com.dtmilano.android.viewclient.View-class.html#textProperty
+com.dtmilano.android.viewclient.View.device	com.dtmilano.android.viewclient.View-class.html#device
+com.dtmilano.android.viewclient.View.intersection	com.dtmilano.android.viewclient.View-class.html#intersection
+com.dtmilano.android.viewclient.View.__microStr__	com.dtmilano.android.viewclient.View-class.html#__microStr__
+com.dtmilano.android.viewclient.View.getXY	com.dtmilano.android.viewclient.View-class.html#getXY
+com.dtmilano.android.viewclient.View.getX	com.dtmilano.android.viewclient.View-class.html#getX
+com.dtmilano.android.viewclient.View.getParent	com.dtmilano.android.viewclient.View-class.html#getParent
+com.dtmilano.android.viewclient.View.heightProperty	com.dtmilano.android.viewclient.View-class.html#heightProperty
+com.dtmilano.android.viewclient.View.leftProperty	com.dtmilano.android.viewclient.View-class.html#leftProperty
+com.dtmilano.android.viewclient.View.__tinyStr__	com.dtmilano.android.viewclient.View-class.html#__tinyStr__
+com.dtmilano.android.viewclient.View.useUiAutomator	com.dtmilano.android.viewclient.View-class.html#useUiAutomator
+com.dtmilano.android.viewclient.View.containsPoint	com.dtmilano.android.viewclient.View-class.html#containsPoint
+com.dtmilano.android.viewclient.View.getVisibility	com.dtmilano.android.viewclient.View-class.html#getVisibility
+com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient	com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html
+com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.CharacterData	com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#CharacterData
+com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.StartElement	com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#StartElement
+com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.__init__	com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#__init__
+com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.Parse	com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#Parse
+com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.EndElement	com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#EndElement
+com.dtmilano.android.viewclient.View	com.dtmilano.android.viewclient.View-class.html
+com.dtmilano.android.viewclient.View.getPositionAndSize	com.dtmilano.android.viewclient.View-class.html#getPositionAndSize
+com.dtmilano.android.viewclient.View.getClass	com.dtmilano.android.viewclient.View-class.html#getClass
+com.dtmilano.android.viewclient.View.version	com.dtmilano.android.viewclient.View-class.html#version
+com.dtmilano.android.viewclient.View.__obtainVwVh	com.dtmilano.android.viewclient.View-class.html#__obtainVwVh
+com.dtmilano.android.viewclient.View.getCoords	com.dtmilano.android.viewclient.View-class.html#getCoords
+com.dtmilano.android.viewclient.View.__str__	com.dtmilano.android.viewclient.View-class.html#__str__
+com.dtmilano.android.viewclient.View.currentFocus	com.dtmilano.android.viewclient.View-class.html#currentFocus
+com.dtmilano.android.viewclient.View.getText	com.dtmilano.android.viewclient.View-class.html#getText
+com.dtmilano.android.viewclient.View.getWidth	com.dtmilano.android.viewclient.View-class.html#getWidth
+com.dtmilano.android.viewclient.View.getY	com.dtmilano.android.viewclient.View-class.html#getY
+com.dtmilano.android.viewclient.View.widthProperty	com.dtmilano.android.viewclient.View-class.html#widthProperty
+com.dtmilano.android.viewclient.View.variableNameFromId	com.dtmilano.android.viewclient.View-class.html#variableNameFromId
+com.dtmilano.android.viewclient.View.__getattr__	com.dtmilano.android.viewclient.View-class.html#__getattr__
+com.dtmilano.android.viewclient.View.touch	com.dtmilano.android.viewclient.View-class.html#touch
+com.dtmilano.android.viewclient.View.writeImageToFile	com.dtmilano.android.viewclient.View-class.html#writeImageToFile
+com.dtmilano.android.viewclient.View.idProperty	com.dtmilano.android.viewclient.View-class.html#idProperty
+com.dtmilano.android.viewclient.View.children	com.dtmilano.android.viewclient.View-class.html#children
+com.dtmilano.android.viewclient.View.__init__	com.dtmilano.android.viewclient.View-class.html#__init__
+com.dtmilano.android.viewclient.View.getUniqueId	com.dtmilano.android.viewclient.View-class.html#getUniqueId
+com.dtmilano.android.viewclient.View.isClickable	com.dtmilano.android.viewclient.View-class.html#isClickable
+com.dtmilano.android.viewclient.View.__obtainVxVy	com.dtmilano.android.viewclient.View-class.html#__obtainVxVy
+com.dtmilano.android.viewclient.View.parent	com.dtmilano.android.viewclient.View-class.html#parent
+com.dtmilano.android.viewclient.View.forceviewserveruse	com.dtmilano.android.viewclient.View-class.html#forceviewserveruse
+com.dtmilano.android.viewclient.View.getHeight	com.dtmilano.android.viewclient.View-class.html#getHeight
+com.dtmilano.android.viewclient.View.factory	com.dtmilano.android.viewclient.View-class.html#factory
+com.dtmilano.android.viewclient.View.getId	com.dtmilano.android.viewclient.View-class.html#getId
+com.dtmilano.android.viewclient.View.__copy	com.dtmilano.android.viewclient.View-class.html#__copy
+com.dtmilano.android.viewclient.View.add	com.dtmilano.android.viewclient.View-class.html#add
+com.dtmilano.android.viewclient.View.__dumpWindowsInformation	com.dtmilano.android.viewclient.View-class.html#__dumpWindowsInformation
+com.dtmilano.android.viewclient.View.__obtainPxPy	com.dtmilano.android.viewclient.View-class.html#__obtainPxPy
+com.dtmilano.android.viewclient.View.build	com.dtmilano.android.viewclient.View-class.html#build
+com.dtmilano.android.viewclient.View.__call__	com.dtmilano.android.viewclient.View-class.html#__call__
+com.dtmilano.android.viewclient.View.__smallStr__	com.dtmilano.android.viewclient.View-class.html#__smallStr__
+com.dtmilano.android.viewclient.View.allPossibleNamesWithColon	com.dtmilano.android.viewclient.View-class.html#allPossibleNamesWithColon
+com.dtmilano.android.viewclient.View.map	com.dtmilano.android.viewclient.View-class.html#map
+com.dtmilano.android.viewclient.View.__getitem__	com.dtmilano.android.viewclient.View-class.html#__getitem__
+com.dtmilano.android.viewclient.View.getContentDescription	com.dtmilano.android.viewclient.View-class.html#getContentDescription
+com.dtmilano.android.viewclient.View.topProperty	com.dtmilano.android.viewclient.View-class.html#topProperty
+com.dtmilano.android.viewclient.View.getCenter	com.dtmilano.android.viewclient.View-class.html#getCenter
+com.dtmilano.android.viewclient.View.textProperty	com.dtmilano.android.viewclient.View-class.html#textProperty
+com.dtmilano.android.viewclient.View.device	com.dtmilano.android.viewclient.View-class.html#device
+com.dtmilano.android.viewclient.View.intersection	com.dtmilano.android.viewclient.View-class.html#intersection
+com.dtmilano.android.viewclient.View.__microStr__	com.dtmilano.android.viewclient.View-class.html#__microStr__
+com.dtmilano.android.viewclient.View.getXY	com.dtmilano.android.viewclient.View-class.html#getXY
+com.dtmilano.android.viewclient.View.getX	com.dtmilano.android.viewclient.View-class.html#getX
+com.dtmilano.android.viewclient.View.getParent	com.dtmilano.android.viewclient.View-class.html#getParent
+com.dtmilano.android.viewclient.View.heightProperty	com.dtmilano.android.viewclient.View-class.html#heightProperty
+com.dtmilano.android.viewclient.View.leftProperty	com.dtmilano.android.viewclient.View-class.html#leftProperty
+com.dtmilano.android.viewclient.View.__obtainStatusBarDimensionsIfVisible	com.dtmilano.android.viewclient.View-class.html#__obtainStatusBarDimensionsIfVisible
+com.dtmilano.android.viewclient.View.__tinyStr__	com.dtmilano.android.viewclient.View-class.html#__tinyStr__
+com.dtmilano.android.viewclient.View.useUiAutomator	com.dtmilano.android.viewclient.View-class.html#useUiAutomator
+com.dtmilano.android.viewclient.View.containsPoint	com.dtmilano.android.viewclient.View-class.html#containsPoint
+com.dtmilano.android.viewclient.View.getVisibility	com.dtmilano.android.viewclient.View-class.html#getVisibility
+com.dtmilano.android.viewclient.ViewClient	com.dtmilano.android.viewclient.ViewClient-class.html
+com.dtmilano.android.viewclient.ViewClient.__pickleable	com.dtmilano.android.viewclient.ViewClient-class.html#__pickleable
+com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTree	com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTree
+com.dtmilano.android.viewclient.ViewClient.traverse	com.dtmilano.android.viewclient.ViewClient-class.html#traverse
+com.dtmilano.android.viewclient.ViewClient.TRAVERSE_CIT	com.dtmilano.android.viewclient.ViewClient-class.html#TRAVERSE_CIT
+com.dtmilano.android.viewclient.ViewClient.dump	com.dtmilano.android.viewclient.ViewClient-class.html#dump
+com.dtmilano.android.viewclient.ViewClient.findViewWithAttribute	com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttribute
+com.dtmilano.android.viewclient.ViewClient.excerpt	com.dtmilano.android.viewclient.ViewClient-class.html#excerpt
+com.dtmilano.android.viewclient.ViewClient.findViewByTag	com.dtmilano.android.viewclient.ViewClient-class.html#findViewByTag
+com.dtmilano.android.viewclient.ViewClient.ignoreUiAutomatorKilled	com.dtmilano.android.viewclient.ViewClient-class.html#ignoreUiAutomatorKilled
+com.dtmilano.android.viewclient.ViewClient.adb	com.dtmilano.android.viewclient.ViewClient-class.html#adb
+com.dtmilano.android.viewclient.ViewClient.findViewByTagOrRaise	com.dtmilano.android.viewclient.ViewClient-class.html#findViewByTagOrRaise
+com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextAndCenter	com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndCenter
+com.dtmilano.android.viewclient.ViewClient.sleep	com.dtmilano.android.viewclient.ViewClient-class.html#sleep
+com.dtmilano.android.viewclient.ViewClient.findViewByIdOrRaise	com.dtmilano.android.viewclient.ViewClient-class.html#findViewByIdOrRaise
+com.dtmilano.android.viewclient.ViewClient.writeImageToFile	com.dtmilano.android.viewclient.ViewClient-class.html#writeImageToFile
+com.dtmilano.android.viewclient.ViewClient.TRAVERSE_CITUI	com.dtmilano.android.viewclient.ViewClient-class.html#TRAVERSE_CITUI
+com.dtmilano.android.viewclient.ViewClient.views	com.dtmilano.android.viewclient.ViewClient-class.html#views
+com.dtmilano.android.viewclient.ViewClient.__init__	com.dtmilano.android.viewclient.ViewClient-class.html#__init__
+com.dtmilano.android.viewclient.ViewClient.findViewWithTextOrRaise	com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithTextOrRaise
+com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextPositionAndSize	com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextPositionAndSize
+com.dtmilano.android.viewclient.ViewClient.TRAVERSE_CITC	com.dtmilano.android.viewclient.ViewClient-class.html#TRAVERSE_CITC
+com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTreeThatMatches	com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTreeThatMatches
+com.dtmilano.android.viewclient.ViewClient.__traverse	com.dtmilano.android.viewclient.ViewClient-class.html#__traverse
+com.dtmilano.android.viewclient.ViewClient.setViewsFromUiAutomatorDump	com.dtmilano.android.viewclient.ViewClient-class.html#setViewsFromUiAutomatorDump
+com.dtmilano.android.viewclient.ViewClient.TRAVERSE_CITPS	com.dtmilano.android.viewclient.ViewClient-class.html#TRAVERSE_CITPS
+com.dtmilano.android.viewclient.ViewClient.hammingDistance	com.dtmilano.android.viewclient.ViewClient-class.html#hammingDistance
+com.dtmilano.android.viewclient.ViewClient.display	com.dtmilano.android.viewclient.ViewClient-class.html#display
+com.dtmilano.android.viewclient.ViewClient.isKeyboardShown	com.dtmilano.android.viewclient.ViewClient-class.html#isKeyboardShown
+com.dtmilano.android.viewclient.ViewClient.__obtainAdbPath	com.dtmilano.android.viewclient.ViewClient-class.html#__obtainAdbPath
+com.dtmilano.android.viewclient.ViewClient.findViewWithContentDescriptionOrRaise	com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithContentDescriptionOrRaise
+com.dtmilano.android.viewclient.ViewClient.build	com.dtmilano.android.viewclient.ViewClient-class.html#build
+com.dtmilano.android.viewclient.ViewClient.__levenshteinDistance	com.dtmilano.android.viewclient.ViewClient-class.html#__levenshteinDistance
+com.dtmilano.android.viewclient.ViewClient.__parseTreeFromUiAutomatorDump	com.dtmilano.android.viewclient.ViewClient-class.html#__parseTreeFromUiAutomatorDump
+com.dtmilano.android.viewclient.ViewClient.ro	com.dtmilano.android.viewclient.ViewClient-class.html#ro
+com.dtmilano.android.viewclient.ViewClient.TRAVERSE_CITCD	com.dtmilano.android.viewclient.ViewClient-class.html#TRAVERSE_CITCD
+com.dtmilano.android.viewclient.ViewClient.__splitAttrs	com.dtmilano.android.viewclient.ViewClient-class.html#__splitAttrs
+com.dtmilano.android.viewclient.ViewClient.assertServiceResponse	com.dtmilano.android.viewclient.ViewClient-class.html#assertServiceResponse
+com.dtmilano.android.viewclient.ViewClient.findViewWithText	com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithText
+com.dtmilano.android.viewclient.ViewClient.__getFocusedWindowPosition	com.dtmilano.android.viewclient.ViewClient-class.html#__getFocusedWindowPosition
+com.dtmilano.android.viewclient.ViewClient.setAlarm	com.dtmilano.android.viewclient.ViewClient-class.html#setAlarm
+com.dtmilano.android.viewclient.ViewClient.__del__	com.dtmilano.android.viewclient.ViewClient-class.html#__del__
+com.dtmilano.android.viewclient.ViewClient.serialno	com.dtmilano.android.viewclient.ViewClient-class.html#serialno
+com.dtmilano.android.viewclient.ViewClient.forceViewServerUse	com.dtmilano.android.viewclient.ViewClient-class.html#forceViewServerUse
+com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextAndUniqueId	com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndUniqueId
+com.dtmilano.android.viewclient.ViewClient.findViewById	com.dtmilano.android.viewclient.ViewClient-class.html#findViewById
+com.dtmilano.android.viewclient.ViewClient.findViewsContainingPoint	com.dtmilano.android.viewclient.ViewClient-class.html#findViewsContainingPoint
+com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTreeOrRaise	com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTreeOrRaise
+com.dtmilano.android.viewclient.ViewClient.__parseTree	com.dtmilano.android.viewclient.ViewClient-class.html#__parseTree
+com.dtmilano.android.viewclient.ViewClient.levenshteinDistance	com.dtmilano.android.viewclient.ViewClient-class.html#levenshteinDistance
+com.dtmilano.android.viewclient.ViewClient.device	com.dtmilano.android.viewclient.ViewClient-class.html#device
+com.dtmilano.android.viewclient.ViewClient.getSdkVersion	com.dtmilano.android.viewclient.ViewClient-class.html#getSdkVersion
+com.dtmilano.android.viewclient.ViewClient.findViewWithAttributeOrRaise	com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttributeOrRaise
+com.dtmilano.android.viewclient.ViewClient.__mapSerialNo	com.dtmilano.android.viewclient.ViewClient-class.html#__mapSerialNo
+com.dtmilano.android.viewclient.ViewClient.connectToDeviceOrExit	com.dtmilano.android.viewclient.ViewClient-class.html#connectToDeviceOrExit
+com.dtmilano.android.viewclient.ViewClient.serviceResponse	com.dtmilano.android.viewclient.ViewClient-class.html#serviceResponse
+com.dtmilano.android.viewclient.ViewClient.distance	com.dtmilano.android.viewclient.ViewClient-class.html#distance
+com.dtmilano.android.viewclient.ViewClient.getRoot	com.dtmilano.android.viewclient.ViewClient-class.html#getRoot
+com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdAndText	com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdAndText
+com.dtmilano.android.viewclient.ViewClient.windows	com.dtmilano.android.viewclient.ViewClient-class.html#windows
+com.dtmilano.android.viewclient.ViewClient.getViewIds	com.dtmilano.android.viewclient.ViewClient-class.html#getViewIds
+com.dtmilano.android.viewclient.ViewClient.__obtainDeviceSerialNumber	com.dtmilano.android.viewclient.ViewClient-class.html#__obtainDeviceSerialNumber
+com.dtmilano.android.viewclient.ViewClient.list	com.dtmilano.android.viewclient.ViewClient-class.html#list
+com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextAndContentDescription	com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndContentDescription
+com.dtmilano.android.viewclient.ViewClient.findViewWithContentDescription	com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithContentDescription
+com.dtmilano.android.viewclient.ViewClient.findViewWithAttributeThatMatches	com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttributeThatMatches
+com.dtmilano.android.viewclient.ViewClient.viewsById	com.dtmilano.android.viewclient.ViewClient-class.html#viewsById
+com.dtmilano.android.viewclient.ViewClient.root	com.dtmilano.android.viewclient.ViewClient-class.html#root
+com.dtmilano.android.viewclient.ViewClient.setViews	com.dtmilano.android.viewclient.ViewClient-class.html#setViews
+com.dtmilano.android.viewclient.ViewClient.getViewsById	com.dtmilano.android.viewclient.ViewClient-class.html#getViewsById
+com.dtmilano.android.viewclient.ViewClient.__hammingDistance	com.dtmilano.android.viewclient.ViewClient-class.html#__hammingDistance
+com.dtmilano.android.viewclient.ViewNotFoundException	com.dtmilano.android.viewclient.ViewNotFoundException-class.html
+com.dtmilano.android.viewclient.ViewNotFoundException.__init__	com.dtmilano.android.viewclient.ViewNotFoundException-class.html#__init__
+com.dtmilano.android.viewclient.Window	com.dtmilano.android.viewclient.Window-class.html
+com.dtmilano.android.viewclient.Window.__str__	com.dtmilano.android.viewclient.Window-class.html#__str__
+com.dtmilano.android.viewclient.Window.__init__	com.dtmilano.android.viewclient.Window-class.html#__init__
diff --git a/AndroidViewClient/doc/class-tree.html b/AndroidViewClient/doc/class-tree.html
new file mode 100755
index 0000000..39a4370
--- /dev/null
+++ b/AndroidViewClient/doc/class-tree.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>Class Hierarchy</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">&nbsp;</td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="class-tree.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<center><b>
+ [ <a href="module-tree.html">Module Hierarchy</a>
+ | <a href="class-tree.html">Class Hierarchy</a> ]
+</b></center><br />
+<h1 class="epydoc">Class Hierarchy</h1>
+<ul class="nomargin-top">
+    <li> <strong class="uidlink"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">com.dtmilano.android.adb.adbclient.AdbClient</a></strong>
+    </li>
+    <li> <strong class="uidlink"><a href="com.dtmilano.android.adb.adbclient.Device-class.html">com.dtmilano.android.adb.adbclient.Device</a></strong>
+    </li>
+    <li> <strong class="uidlink"><a href="com.dtmilano.android.viewclient.Excerpt2Code-class.html">com.dtmilano.android.viewclient.Excerpt2Code</a></strong>:
+      <em class="summary">Excerpt XML to code</em>
+    </li>
+    <li> <strong class="uidlink"><a href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html">com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient</a></strong>:
+      <em class="summary">UiAutomator XML to AndroidViewClient</em>
+    </li>
+    <li> <strong class="uidlink"><a href="com.dtmilano.android.viewclient.View-class.html">com.dtmilano.android.viewclient.View</a></strong>:
+      <em class="summary">View class</em>
+    <ul>
+    <li> <strong class="uidlink"><a href="com.dtmilano.android.viewclient.TextView-class.html">com.dtmilano.android.viewclient.TextView</a></strong>:
+      <em class="summary">TextView class.</em>
+    <ul>
+    <li> <strong class="uidlink"><a href="com.dtmilano.android.viewclient.EditText-class.html">com.dtmilano.android.viewclient.EditText</a></strong>:
+      <em class="summary">EditText class.</em>
+    </li>
+    </ul>
+    </li>
+    </ul>
+    </li>
+    <li> <strong class="uidlink"><a href="com.dtmilano.android.viewclient.ViewClient-class.html">com.dtmilano.android.viewclient.ViewClient</a></strong>:
+      <em class="summary">ViewClient is a <i>ViewServer</i> client.</em>
+    </li>
+    <li> <strong class="uidlink"><a href="com.dtmilano.android.viewclient.Window-class.html">com.dtmilano.android.viewclient.Window</a></strong>:
+      <em class="summary">Window class</em>
+    </li>
+    <li> <strong class="uidlink">object</strong>:
+      <em class="summary">The most base type</em>
+    <ul>
+    <li> <strong class="uidlink">exceptions.BaseException</strong>:
+      <em class="summary">Common base class for all exceptions</em>
+    <ul>
+    <li> <strong class="uidlink">exceptions.Exception</strong>:
+      <em class="summary">Common base class for all non-exit exceptions.</em>
+    <ul>
+    <li> <strong class="uidlink"><a href="com.dtmilano.android.viewclient.ViewNotFoundException-class.html">com.dtmilano.android.viewclient.ViewNotFoundException</a></strong>:
+      <em class="summary">ViewNotFoundException is raised when a View is not found.</em>
+    </li>
+    </ul>
+    </li>
+    </ul>
+    </li>
+    </ul>
+    </li>
+</ul>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:35:57 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android-module.html b/AndroidViewClient/doc/com.dtmilano.android-module.html
new file mode 100755
index 0000000..cbbd60d
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android-module.html
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        Package&nbsp;android
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android-module.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== PACKAGE DESCRIPTION ==================== -->
+<h1 class="epydoc">Package android</h1><p class="nomargin-top"><span class="codelink"><a href="com.dtmilano.android-pysrc.html">source&nbsp;code</a></span></p>
+<!-- ==================== SUBMODULES ==================== -->
+<a name="section-Submodules"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Submodules</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Submodules"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr><td class="summary">
+  <ul class="nomargin">
+    <li> <strong class="uidlink"><a href="com.dtmilano.android.adb-module.html">com.dtmilano.android.adb</a></strong>
+    <ul>
+    <li> <strong class="uidlink"><a href="com.dtmilano.android.adb.adbclient-module.html">com.dtmilano.android.adb.adbclient</a></strong>: <em class="summary">Copyright (C) 2012-2013  Diego Torres Milano
+Created on Dec 1, 2012</em>    </li>
+    </ul>
+    </li>
+    <li> <strong class="uidlink"><a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a></strong>: <em class="summary">Copyright (C) 2012-2014  Diego Torres Milano
+Created on Feb 2, 2012</em>    </li>
+  </ul></td></tr>
+</table>
+
+<br />
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Variables</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Variables"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="None">None</code>
+    </td>
+  </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:35:58 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android-pysrc.html b/AndroidViewClient/doc/com.dtmilano.android-pysrc.html
new file mode 100755
index 0000000..c0ed412
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android-pysrc.html
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        Package&nbsp;android
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android-pysrc.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="com.dtmilano.android-module.html">Package com.dtmilano.android</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno">1</tt>  <tt class="py-line"> </tt>
+<a name="L2"></a><tt class="py-lineno">2</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:36:02 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android.adb-module.html b/AndroidViewClient/doc/com.dtmilano.android.adb-module.html
new file mode 100755
index 0000000..7586057
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android.adb-module.html
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android.adb</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        Package&nbsp;adb
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android.adb-module.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== PACKAGE DESCRIPTION ==================== -->
+<h1 class="epydoc">Package adb</h1><p class="nomargin-top"><span class="codelink"><a href="com.dtmilano.android.adb-pysrc.html">source&nbsp;code</a></span></p>
+<!-- ==================== SUBMODULES ==================== -->
+<a name="section-Submodules"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Submodules</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Submodules"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr><td class="summary">
+  <ul class="nomargin">
+    <li> <strong class="uidlink"><a href="com.dtmilano.android.adb.adbclient-module.html">com.dtmilano.android.adb.adbclient</a></strong>: <em class="summary">Copyright (C) 2012-2013  Diego Torres Milano
+Created on Dec 1, 2012</em>    </li>
+  </ul></td></tr>
+</table>
+
+<br />
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Variables</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Variables"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="None">None</code>
+    </td>
+  </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:35:58 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android.adb-pysrc.html b/AndroidViewClient/doc/com.dtmilano.android.adb-pysrc.html
new file mode 100755
index 0000000..7e204aa
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android.adb-pysrc.html
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android.adb</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        Package&nbsp;adb
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android.adb-pysrc.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="com.dtmilano.android.adb-module.html">Package com.dtmilano.android.adb</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno">1</tt>  <tt class="py-line"> </tt>
+<a name="L2"></a><tt class="py-lineno">2</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:36:02 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android.adb.adbclient-module.html b/AndroidViewClient/doc/com.dtmilano.android.adb.adbclient-module.html
new file mode 100755
index 0000000..ade1048
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android.adb.adbclient-module.html
@@ -0,0 +1,276 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android.adb.adbclient</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="com.dtmilano.android.adb-module.html">Package&nbsp;adb</a> ::
+        Module&nbsp;adbclient
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android.adb.adbclient-module.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module adbclient</h1><p class="nomargin-top"><span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html">source&nbsp;code</a></span></p>
+<pre class="literalblock">
+
+Copyright (C) 2012-2013  Diego Torres Milano
+Created on Dec 1, 2012
+
+Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+@author: Diego Torres Milano
+
+</pre>
+
+<hr />
+<div class="fields">      <p><strong>Version:</strong>
+        5.7.0
+      </p>
+</div><!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Classes</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Classes"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="com.dtmilano.android.adb.adbclient.Device-class.html" class="summary-name">Device</a>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html" class="summary-name">AdbClient</a>
+    </td>
+  </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Variables</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Variables"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG"></a><span class="summary-name">DEBUG</span> = <code title="False">False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="HOSTNAME"></a><span class="summary-name">HOSTNAME</span> = <code title="'localhost'"><code class="variable-quote">'</code><code class="variable-string">localhost</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="PORT"></a><span class="summary-name">PORT</span> = <code title="5037">5037</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="OKAY"></a><span class="summary-name">OKAY</span> = <code title="'OKAY'"><code class="variable-quote">'</code><code class="variable-string">OKAY</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="FAIL"></a><span class="summary-name">FAIL</span> = <code title="'FAIL'"><code class="variable-quote">'</code><code class="variable-string">FAIL</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="UP"></a><span class="summary-name">UP</span> = <code title="0">0</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DOWN"></a><span class="summary-name">DOWN</span> = <code title="1">1</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DOWN_AND_UP"></a><span class="summary-name">DOWN_AND_UP</span> = <code title="2">2</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="TIMEOUT"></a><span class="summary-name">TIMEOUT</span> = <code title="15">15</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="VERSION_SDK_PROPERTY"></a><span class="summary-name">VERSION_SDK_PROPERTY</span> = <code title="'ro.build.version.sdk'"><code class="variable-quote">'</code><code class="variable-string">ro.build.version.sdk</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="VERSION_RELEASE_PROPERTY"></a><span class="summary-name">VERSION_RELEASE_PROPERTY</span> = <code title="'ro.build.version.release'"><code class="variable-quote">'</code><code class="variable-string">ro.build.version.release</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'com.dtmilano.android.adb'"><code class="variable-quote">'</code><code class="variable-string">com.dtmilano.android.adb</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:35:58 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android.adb.adbclient-pysrc.html b/AndroidViewClient/doc/com.dtmilano.android.adb.adbclient-pysrc.html
new file mode 100755
index 0000000..02eccaa
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android.adb.adbclient-pysrc.html
@@ -0,0 +1,717 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android.adb.adbclient</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="com.dtmilano.android.adb-module.html">Package&nbsp;adb</a> ::
+        Module&nbsp;adbclient
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android.adb.adbclient-pysrc.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="com.dtmilano.android.adb.adbclient-module.html">Module com.dtmilano.android.adb.adbclient</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno">  1</tt>  <tt class="py-line"><tt class="py-docstring">'''</tt> </tt>
+<a name="L2"></a><tt class="py-lineno">  2</tt>  <tt class="py-line"><tt class="py-docstring">Copyright (C) 2012-2013  Diego Torres Milano</tt> </tt>
+<a name="L3"></a><tt class="py-lineno">  3</tt>  <tt class="py-line"><tt class="py-docstring">Created on Dec 1, 2012</tt> </tt>
+<a name="L4"></a><tt class="py-lineno">  4</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L5"></a><tt class="py-lineno">  5</tt>  <tt class="py-line"><tt class="py-docstring">Licensed under the Apache License, Version 2.0 (the "License");</tt> </tt>
+<a name="L6"></a><tt class="py-lineno">  6</tt>  <tt class="py-line"><tt class="py-docstring">you may not use this file except in compliance with the License.</tt> </tt>
+<a name="L7"></a><tt class="py-lineno">  7</tt>  <tt class="py-line"><tt class="py-docstring">You may obtain a copy of the License at</tt> </tt>
+<a name="L8"></a><tt class="py-lineno">  8</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L9"></a><tt class="py-lineno">  9</tt>  <tt class="py-line"><tt class="py-docstring">       http://www.apache.org/licenses/LICENSE-2.0</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt>  <tt class="py-line"><tt class="py-docstring">Unless required by applicable law or agreed to in writing, software</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt>  <tt class="py-line"><tt class="py-docstring">distributed under the License is distributed on an "AS IS" BASIS,</tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt>  <tt class="py-line"><tt class="py-docstring">WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt>  <tt class="py-line"><tt class="py-docstring">See the License for the specific language governing permissions and</tt> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt>  <tt class="py-line"><tt class="py-docstring">limitations under the License.</tt> </tt>
+<a name="L16"></a><tt class="py-lineno"> 16</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt>  <tt class="py-line"><tt class="py-docstring">@author: Diego Torres Milano</tt> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt>  <tt class="py-line"><tt class="py-docstring">'''</tt> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt>  <tt class="py-line"> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt>  <tt class="py-line"><tt class="py-name">__version__</tt> <tt class="py-op">=</tt> <tt class="py-string">'5.7.0'</tt> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt>  <tt class="py-line"> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">warnings</tt> </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">executable</tt><tt class="py-op">:</tt> </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'monkeyrunner'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">executable</tt><tt class="py-op">:</tt> </tt>
+<a name="L26"></a><tt class="py-lineno"> 26</tt>  <tt class="py-line">        <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt> </tt>
+<a name="L27"></a><tt class="py-lineno"> 27</tt>  <tt class="py-line">    <tt class="py-string">'''</tt> </tt>
+<a name="L28"></a><tt class="py-lineno"> 28</tt>  <tt class="py-line"><tt class="py-string"></tt> </tt>
+<a name="L29"></a><tt class="py-lineno"> 29</tt>  <tt class="py-line"><tt class="py-string">    You should use a 'python' interpreter, not 'monkeyrunner' for this module</tt> </tt>
+<a name="L30"></a><tt class="py-lineno"> 30</tt>  <tt class="py-line"><tt class="py-string"></tt> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt>  <tt class="py-line"><tt class="py-string">    '''</tt><tt class="py-op">,</tt> <tt class="py-name">RuntimeWarning</tt><tt class="py-op">)</tt> </tt>
+<a name="L32"></a><tt class="py-lineno"> 32</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">socket</tt> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">time</tt> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">re</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">signal</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">types</tt> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">platform</tt> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line"> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable com.dtmilano.android.adb.adbclient.DEBUG=com.dtmilano.android.adb.adbclient-module.html#DEBUG,Variable com.dtmilano.android.viewclient.DEBUG=com.dtmilano.android.viewclient-module.html#DEBUG"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-0', 'DEBUG', 'link-0');">DEBUG</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt>  <tt class="py-line"> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt>  <tt class="py-line"><tt id="link-1" class="py-name" targets="Variable com.dtmilano.android.adb.adbclient.HOSTNAME=com.dtmilano.android.adb.adbclient-module.html#HOSTNAME"><a title="com.dtmilano.android.adb.adbclient.HOSTNAME" class="py-name" href="#" onclick="return doclink('link-1', 'HOSTNAME', 'link-1');">HOSTNAME</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'localhost'</tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt>  <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line">    <tt id="link-2" class="py-name" targets="Variable com.dtmilano.android.adb.adbclient.PORT=com.dtmilano.android.adb.adbclient-module.html#PORT"><a title="com.dtmilano.android.adb.adbclient.PORT" class="py-name" href="#" onclick="return doclink('link-2', 'PORT', 'link-2');">PORT</a></tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">[</tt><tt class="py-string">'ANDROID_ADB_SERVER_PORT'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line"><tt class="py-keyword">except</tt> <tt class="py-name">KeyError</tt><tt class="py-op">:</tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line">    <tt id="link-3" class="py-name"><a title="com.dtmilano.android.adb.adbclient.PORT" class="py-name" href="#" onclick="return doclink('link-3', 'PORT', 'link-2');">PORT</a></tt> <tt class="py-op">=</tt> <tt class="py-number">5037</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt>  <tt class="py-line"> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable com.dtmilano.android.adb.adbclient.OKAY=com.dtmilano.android.adb.adbclient-module.html#OKAY"><a title="com.dtmilano.android.adb.adbclient.OKAY" class="py-name" href="#" onclick="return doclink('link-4', 'OKAY', 'link-4');">OKAY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'OKAY'</tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line"><tt id="link-5" class="py-name" targets="Variable com.dtmilano.android.adb.adbclient.FAIL=com.dtmilano.android.adb.adbclient-module.html#FAIL"><a title="com.dtmilano.android.adb.adbclient.FAIL" class="py-name" href="#" onclick="return doclink('link-5', 'FAIL', 'link-5');">FAIL</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'FAIL'</tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line"> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line"><tt id="link-6" class="py-name" targets="Variable com.dtmilano.android.adb.adbclient.UP=com.dtmilano.android.adb.adbclient-module.html#UP"><a title="com.dtmilano.android.adb.adbclient.UP" class="py-name" href="#" onclick="return doclink('link-6', 'UP', 'link-6');">UP</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line"><tt id="link-7" class="py-name" targets="Variable com.dtmilano.android.adb.adbclient.DOWN=com.dtmilano.android.adb.adbclient-module.html#DOWN"><a title="com.dtmilano.android.adb.adbclient.DOWN" class="py-name" href="#" onclick="return doclink('link-7', 'DOWN', 'link-7');">DOWN</a></tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line"><tt id="link-8" class="py-name" targets="Variable com.dtmilano.android.adb.adbclient.DOWN_AND_UP=com.dtmilano.android.adb.adbclient-module.html#DOWN_AND_UP"><a title="com.dtmilano.android.adb.adbclient.DOWN_AND_UP" class="py-name" href="#" onclick="return doclink('link-8', 'DOWN_AND_UP', 'link-8');">DOWN_AND_UP</a></tt> <tt class="py-op">=</tt> <tt class="py-number">2</tt> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt>  <tt class="py-line"> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line"><tt id="link-9" class="py-name" targets="Variable com.dtmilano.android.adb.adbclient.TIMEOUT=com.dtmilano.android.adb.adbclient-module.html#TIMEOUT"><a title="com.dtmilano.android.adb.adbclient.TIMEOUT" class="py-name" href="#" onclick="return doclink('link-9', 'TIMEOUT', 'link-9');">TIMEOUT</a></tt> <tt class="py-op">=</tt> <tt class="py-number">15</tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line"> </tt>
+<a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line"><tt class="py-comment"># some device properties</tt> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line"><tt id="link-10" class="py-name" targets="Variable com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY=com.dtmilano.android.adb.adbclient-module.html#VERSION_SDK_PROPERTY,Variable com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY=com.dtmilano.android.viewclient-module.html#VERSION_SDK_PROPERTY"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-10', 'VERSION_SDK_PROPERTY', 'link-10');">VERSION_SDK_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'ro.build.version.sdk'</tt> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line"><tt id="link-11" class="py-name" targets="Variable com.dtmilano.android.adb.adbclient.VERSION_RELEASE_PROPERTY=com.dtmilano.android.adb.adbclient-module.html#VERSION_RELEASE_PROPERTY,Variable com.dtmilano.android.viewclient.VERSION_RELEASE_PROPERTY=com.dtmilano.android.viewclient-module.html#VERSION_RELEASE_PROPERTY"><a title="com.dtmilano.android.adb.adbclient.VERSION_RELEASE_PROPERTY
+com.dtmilano.android.viewclient.VERSION_RELEASE_PROPERTY" class="py-name" href="#" onclick="return doclink('link-11', 'VERSION_RELEASE_PROPERTY', 'link-11');">VERSION_RELEASE_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'ro.build.version.release'</tt> </tt>
+<a name="Device"></a><div id="Device-def"><a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line"> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line"> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt> <a class="py-toggle" href="#" id="Device-toggle" onclick="return toggle('Device');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.Device-class.html">Device</a><tt class="py-op">:</tt> </tt>
+</div><div id="Device-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Device-expanded"><a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="Device.factory"></a><div id="Device.factory-def"><a name="L64"></a><tt class="py-lineno"> 64</tt> <a class="py-toggle" href="#" id="Device.factory-toggle" onclick="return toggle('Device.factory');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.Device-class.html#factory">factory</a><tt class="py-op">(</tt><tt class="py-param">_str</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Device.factory-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Device.factory-expanded"><a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-12" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-12', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"Device.factory("</tt><tt class="py-op">,</tt> <tt class="py-name">_str</tt><tt class="py-op">,</tt> <tt class="py-string">")"</tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line">        <tt class="py-name">values</tt> <tt class="py-op">=</tt> <tt class="py-name">_str</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-13" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-13', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"values="</tt><tt class="py-op">,</tt> <tt class="py-name">values</tt> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-14" class="py-name" targets="Class com.dtmilano.android.adb.adbclient.Device=com.dtmilano.android.adb.adbclient.Device-class.html"><a title="com.dtmilano.android.adb.adbclient.Device" class="py-name" href="#" onclick="return doclink('link-14', 'Device', 'link-14');">Device</a></tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">values</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line"> </tt>
+<a name="Device.__init__"></a><div id="Device.__init__-def"><a name="L72"></a><tt class="py-lineno"> 72</tt> <a class="py-toggle" href="#" id="Device.__init__-toggle" onclick="return toggle('Device.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.Device-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">serialno</tt><tt class="py-op">,</tt> <tt class="py-param">status</tt><tt class="py-op">,</tt> <tt class="py-param">qualifiers</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Device.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Device.__init__-expanded"><a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">serialno</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">=</tt> <tt class="py-name">status</tt> </tt>
+<a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">qualifiers</tt> <tt class="py-op">=</tt> <tt class="py-name">qualifiers</tt> </tt>
+</div><a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line"> </tt>
+<a name="Device.__str__"></a><div id="Device.__str__-def"><a name="L77"></a><tt class="py-lineno"> 77</tt> <a class="py-toggle" href="#" id="Device.__str__-toggle" onclick="return toggle('Device.__str__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.Device-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Device.__str__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Device.__str__-expanded"><a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-string">"&lt;&lt;&lt;"</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt> <tt class="py-op">+</tt> <tt class="py-string">", "</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">+</tt> <tt class="py-string">", %s&gt;&gt;&gt;"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">qualifiers</tt> </tt>
+</div></div><a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient"></a><div id="AdbClient-def"><a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line"> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt> <a class="py-toggle" href="#" id="AdbClient-toggle" onclick="return toggle('AdbClient');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="AdbClient-expanded"><a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.__init__"></a><div id="AdbClient.__init__-def"><a name="L83"></a><tt class="py-lineno"> 83</tt> <a class="py-toggle" href="#" id="AdbClient.__init__-toggle" onclick="return toggle('AdbClient.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">serialno</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">hostname</tt><tt class="py-op">=</tt><tt id="link-15" class="py-name"><a title="com.dtmilano.android.adb.adbclient.HOSTNAME" class="py-name" href="#" onclick="return doclink('link-15', 'HOSTNAME', 'link-1');">HOSTNAME</a></tt><tt class="py-op">,</tt> <tt class="py-param">port</tt><tt class="py-op">=</tt><tt id="link-16" class="py-name"><a title="com.dtmilano.android.adb.adbclient.PORT" class="py-name" href="#" onclick="return doclink('link-16', 'PORT', 'link-2');">PORT</a></tt><tt class="py-op">,</tt> <tt class="py-param">settransport</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-param">reconnect</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.__init__-expanded"><a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">serialno</tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">hostname</tt> <tt class="py-op">=</tt> <tt class="py-name">hostname</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">port</tt> <tt class="py-op">=</tt> <tt class="py-name">port</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line"> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reconnect</tt> <tt class="py-op">=</tt> <tt class="py-name">reconnect</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-17" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.__connect()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#__connect"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__connect" class="py-name" href="#" onclick="return doclink('link-17', '__connect', 'link-17');">__connect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line"> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-18" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.checkVersion()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#checkVersion"><a title="com.dtmilano.android.adb.adbclient.AdbClient.checkVersion" class="py-name" href="#" onclick="return doclink('link-18', 'checkVersion', 'link-18');">checkVersion</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line"> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line">        <tt class="py-string">''' Build properties '''</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line"> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">isTransportSet</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">settransport</tt> <tt class="py-keyword">and</tt> <tt class="py-name">serialno</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.__setTransport()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#__setTransport"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__setTransport" class="py-name" href="#" onclick="return doclink('link-19', '__setTransport', 'link-19');">__setTransport</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-20" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-20', 'VERSION_SDK_PROPERTY', 'link-10');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-21" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.__getProp()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#__getProp"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__getProp" class="py-name" href="#" onclick="return doclink('link-21', '__getProp', 'link-21');">__getProp</a></tt><tt class="py-op">(</tt><tt id="link-22" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-22', 'VERSION_SDK_PROPERTY', 'link-10');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line"> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line"> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="AdbClient.setAlarm"></a><div id="AdbClient.setAlarm-def"><a name="L103"></a><tt class="py-lineno">103</tt> <a class="py-toggle" href="#" id="AdbClient.setAlarm-toggle" onclick="return toggle('AdbClient.setAlarm');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#setAlarm">setAlarm</a><tt class="py-op">(</tt><tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.setAlarm-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.setAlarm-expanded"><a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line">        <tt class="py-name">osName</tt> <tt class="py-op">=</tt> <tt class="py-name">platform</tt><tt class="py-op">.</tt><tt class="py-name">system</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">osName</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'Windows'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt>  <tt class="py-comment"># alarm is not implemented in Windows</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-23" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-23', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"setAlarm(%d)"</tt> <tt class="py-op">%</tt> <tt class="py-name">timeout</tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line">        <tt class="py-name">signal</tt><tt class="py-op">.</tt><tt class="py-name">alarm</tt><tt class="py-op">(</tt><tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.setSerialno"></a><div id="AdbClient.setSerialno-def"><a name="L111"></a><tt class="py-lineno">111</tt> <a class="py-toggle" href="#" id="AdbClient.setSerialno-toggle" onclick="return toggle('AdbClient.setSerialno');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#setSerialno">setSerialno</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">serialno</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.setSerialno-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.setSerialno-expanded"><a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">isTransportSet</tt><tt class="py-op">:</tt> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"Transport is already set, serialno cannot be set once this is done."</tt><tt class="py-op">)</tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">serialno</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-24" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__setTransport" class="py-name" href="#" onclick="return doclink('link-24', '__setTransport', 'link-19');">__setTransport</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-25" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-25', 'VERSION_SDK_PROPERTY', 'link-10');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__getProp" class="py-name" href="#" onclick="return doclink('link-26', '__getProp', 'link-21');">__getProp</a></tt><tt class="py-op">(</tt><tt id="link-27" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-27', 'VERSION_SDK_PROPERTY', 'link-10');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line">         </tt>
+<a name="AdbClient.setReconnect"></a><div id="AdbClient.setReconnect-def"><a name="L118"></a><tt class="py-lineno">118</tt> <a class="py-toggle" href="#" id="AdbClient.setReconnect-toggle" onclick="return toggle('AdbClient.setReconnect');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#setReconnect">setReconnect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.setReconnect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.setReconnect-expanded"><a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reconnect</tt> <tt class="py-op">=</tt> <tt class="py-name">val</tt> </tt>
+</div><a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.__connect"></a><div id="AdbClient.__connect-def"><a name="L121"></a><tt class="py-lineno">121</tt> <a class="py-toggle" href="#" id="AdbClient.__connect-toggle" onclick="return toggle('AdbClient.__connect');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__connect">__connect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.__connect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.__connect-expanded"><a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-28" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-28', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__connect()"</tt> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt> <tt class="py-op">=</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">(</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">AF_INET</tt><tt class="py-op">,</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">SOCK_STREAM</tt><tt class="py-op">)</tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">settimeout</tt><tt class="py-op">(</tt><tt id="link-29" class="py-name"><a title="com.dtmilano.android.adb.adbclient.TIMEOUT" class="py-name" href="#" onclick="return doclink('link-29', 'TIMEOUT', 'link-9');">TIMEOUT</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">connect</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">hostname</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">port</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">:</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"ERROR: Connecting to %s:%d: %s.\nIs adb running on your computer?"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">port</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.close"></a><div id="AdbClient.close-def"><a name="L131"></a><tt class="py-lineno">131</tt> <a class="py-toggle" href="#" id="AdbClient.close-toggle" onclick="return toggle('AdbClient.close');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#close">close</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.close-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.close-expanded"><a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-30" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-30', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"Closing socket..."</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt> </tt>
+<a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">:</tt> </tt>
+<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.close()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#close"><a title="com.dtmilano.android.adb.adbclient.AdbClient.close" class="py-name" href="#" onclick="return doclink('link-31', 'close', 'link-31');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.__del__"></a><div id="AdbClient.__del__-def"><a name="L137"></a><tt class="py-lineno">137</tt> <a class="py-toggle" href="#" id="AdbClient.__del__-toggle" onclick="return toggle('AdbClient.__del__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__del__">__del__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.__del__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.__del__-expanded"><a name="L138"></a><tt class="py-lineno">138</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L139"></a><tt class="py-lineno">139</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.close" class="py-name" href="#" onclick="return doclink('link-32', 'close', 'link-31');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L140"></a><tt class="py-lineno">140</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L141"></a><tt class="py-lineno">141</tt>  <tt class="py-line">            <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.__send"></a><div id="AdbClient.__send-def"><a name="L143"></a><tt class="py-lineno">143</tt> <a class="py-toggle" href="#" id="AdbClient.__send-toggle" onclick="return toggle('AdbClient.__send');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__send">__send</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">msg</tt><tt class="py-op">,</tt> <tt class="py-param">checkok</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-param">reconnect</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.__send-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.__send-expanded"><a name="L144"></a><tt class="py-lineno">144</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-33" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-33', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__send(%s, checkok=%s, reconnect=%s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">,</tt> <tt class="py-name">checkok</tt><tt class="py-op">,</tt> <tt class="py-name">reconnect</tt><tt class="py-op">)</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-string">'^host:'</tt><tt class="py-op">,</tt> <tt class="py-name">msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">isTransportSet</tt><tt class="py-op">:</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-34" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__setTransport" class="py-name" href="#" onclick="return doclink('link-34', '__setTransport', 'link-19');">__setTransport</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L150"></a><tt class="py-lineno">150</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-35" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.checkConnected()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#checkConnected"><a title="com.dtmilano.android.adb.adbclient.AdbClient.checkConnected" class="py-name" href="#" onclick="return doclink('link-35', 'checkConnected', 'link-35');">checkConnected</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L151"></a><tt class="py-lineno">151</tt>  <tt class="py-line">        <tt class="py-name">b</tt> <tt class="py-op">=</tt> <tt class="py-name">bytearray</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">,</tt> <tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L152"></a><tt class="py-lineno">152</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">send</tt><tt class="py-op">(</tt><tt class="py-string">'%04X%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">b</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">b</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L153"></a><tt class="py-lineno">153</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">checkok</tt><tt class="py-op">:</tt> </tt>
+<a name="L154"></a><tt class="py-lineno">154</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.__checkOk()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#__checkOk"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__checkOk" class="py-name" href="#" onclick="return doclink('link-36', '__checkOk', 'link-36');">__checkOk</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L155"></a><tt class="py-lineno">155</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">reconnect</tt><tt class="py-op">:</tt> </tt>
+<a name="L156"></a><tt class="py-lineno">156</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-37" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-37', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    __send: reconnecting"</tt> </tt>
+<a name="L158"></a><tt class="py-lineno">158</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-38" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__connect" class="py-name" href="#" onclick="return doclink('link-38', '__connect', 'link-17');">__connect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L159"></a><tt class="py-lineno">159</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__setTransport" class="py-name" href="#" onclick="return doclink('link-39', '__setTransport', 'link-19');">__setTransport</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L160"></a><tt class="py-lineno">160</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.__receive"></a><div id="AdbClient.__receive-def"><a name="L161"></a><tt class="py-lineno">161</tt> <a class="py-toggle" href="#" id="AdbClient.__receive-toggle" onclick="return toggle('AdbClient.__receive');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__receive">__receive</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nob</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.__receive-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.__receive-expanded"><a name="L162"></a><tt class="py-lineno">162</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-40" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-40', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__receive()"</tt> </tt>
+<a name="L164"></a><tt class="py-lineno">164</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.checkConnected" class="py-name" href="#" onclick="return doclink('link-41', 'checkConnected', 'link-35');">checkConnected</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L165"></a><tt class="py-lineno">165</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">nob</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L166"></a><tt class="py-lineno">166</tt>  <tt class="py-line">            <tt class="py-name">nob</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">recv</tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-42" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-42', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    __receive: receiving"</tt><tt class="py-op">,</tt> <tt class="py-name">nob</tt><tt class="py-op">,</tt> <tt class="py-string">"bytes"</tt> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt>  <tt class="py-line">        <tt class="py-name">recv</tt> <tt class="py-op">=</tt> <tt class="py-name">bytearray</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L170"></a><tt class="py-lineno">170</tt>  <tt class="py-line">        <tt class="py-name">nr</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L171"></a><tt class="py-lineno">171</tt>  <tt class="py-line">        <tt class="py-keyword">while</tt> <tt class="py-name">nr</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">nob</tt><tt class="py-op">:</tt> </tt>
+<a name="L172"></a><tt class="py-lineno">172</tt>  <tt class="py-line">            <tt class="py-name">chunk</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">recv</tt><tt class="py-op">(</tt><tt class="py-name">min</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">nob</tt> <tt class="py-op">-</tt> <tt class="py-name">nr</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-number">4096</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L173"></a><tt class="py-lineno">173</tt>  <tt class="py-line">            <tt class="py-name">recv</tt><tt class="py-op">.</tt><tt class="py-name">extend</tt><tt class="py-op">(</tt><tt class="py-name">chunk</tt><tt class="py-op">)</tt> </tt>
+<a name="L174"></a><tt class="py-lineno">174</tt>  <tt class="py-line">            <tt class="py-name">nr</tt> <tt class="py-op">+=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">chunk</tt><tt class="py-op">)</tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-43" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-43', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L176"></a><tt class="py-lineno">176</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    __receive: returning len="</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">recv</tt><tt class="py-op">)</tt> </tt>
+<a name="L177"></a><tt class="py-lineno">177</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">recv</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L178"></a><tt class="py-lineno">178</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.__checkOk"></a><div id="AdbClient.__checkOk-def"><a name="L179"></a><tt class="py-lineno">179</tt> <a class="py-toggle" href="#" id="AdbClient.__checkOk-toggle" onclick="return toggle('AdbClient.__checkOk');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__checkOk">__checkOk</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.__checkOk-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.__checkOk-expanded"><a name="L180"></a><tt class="py-lineno">180</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-44" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-44', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L181"></a><tt class="py-lineno">181</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__checkOk()"</tt> </tt>
+<a name="L182"></a><tt class="py-lineno">182</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-45" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.checkConnected" class="py-name" href="#" onclick="return doclink('link-45', 'checkConnected', 'link-35');">checkConnected</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L183"></a><tt class="py-lineno">183</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name" targets="Static Method com.dtmilano.android.adb.adbclient.AdbClient.setAlarm()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#setAlarm,Static Method com.dtmilano.android.viewclient.ViewClient.setAlarm()=com.dtmilano.android.viewclient.ViewClient-class.html#setAlarm"><a title="com.dtmilano.android.adb.adbclient.AdbClient.setAlarm
+com.dtmilano.android.viewclient.ViewClient.setAlarm" class="py-name" href="#" onclick="return doclink('link-46', 'setAlarm', 'link-46');">setAlarm</a></tt><tt class="py-op">(</tt><tt id="link-47" class="py-name"><a title="com.dtmilano.android.adb.adbclient.TIMEOUT" class="py-name" href="#" onclick="return doclink('link-47', 'TIMEOUT', 'link-9');">TIMEOUT</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L184"></a><tt class="py-lineno">184</tt>  <tt class="py-line">        <tt class="py-name">recv</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">recv</tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-48" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-48', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    __checkOk: recv="</tt><tt class="py-op">,</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">recv</tt><tt class="py-op">)</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L188"></a><tt class="py-lineno">188</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">recv</tt> <tt class="py-op">!=</tt> <tt id="link-49" class="py-name"><a title="com.dtmilano.android.adb.adbclient.OKAY" class="py-name" href="#" onclick="return doclink('link-49', 'OKAY', 'link-4');">OKAY</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L189"></a><tt class="py-lineno">189</tt>  <tt class="py-line">                <tt class="py-name">error</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">recv</tt><tt class="py-op">(</tt><tt class="py-number">1024</tt><tt class="py-op">)</tt> </tt>
+<a name="L190"></a><tt class="py-lineno">190</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"ERROR: %s %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">recv</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">error</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L191"></a><tt class="py-lineno">191</tt>  <tt class="py-line">        <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-50" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.setAlarm
+com.dtmilano.android.viewclient.ViewClient.setAlarm" class="py-name" href="#" onclick="return doclink('link-50', 'setAlarm', 'link-46');">setAlarm</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-51" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-51', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    __checkOk: returning True"</tt> </tt>
+<a name="L195"></a><tt class="py-lineno">195</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+</div><a name="L196"></a><tt class="py-lineno">196</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.checkConnected"></a><div id="AdbClient.checkConnected-def"><a name="L197"></a><tt class="py-lineno">197</tt> <a class="py-toggle" href="#" id="AdbClient.checkConnected-toggle" onclick="return toggle('AdbClient.checkConnected');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#checkConnected">checkConnected</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.checkConnected-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.checkConnected-expanded"><a name="L198"></a><tt class="py-lineno">198</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-52" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-52', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L199"></a><tt class="py-lineno">199</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"checkConnected()"</tt> </tt>
+<a name="L200"></a><tt class="py-lineno">200</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">:</tt> </tt>
+<a name="L201"></a><tt class="py-lineno">201</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"ERROR: Not connected"</tt><tt class="py-op">)</tt> </tt>
+<a name="L202"></a><tt class="py-lineno">202</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-53" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-53', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L203"></a><tt class="py-lineno">203</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    checkConnected: returning True"</tt> </tt>
+<a name="L204"></a><tt class="py-lineno">204</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+</div><a name="L205"></a><tt class="py-lineno">205</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.checkVersion"></a><div id="AdbClient.checkVersion-def"><a name="L206"></a><tt class="py-lineno">206</tt> <a class="py-toggle" href="#" id="AdbClient.checkVersion-toggle" onclick="return toggle('AdbClient.checkVersion');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#checkVersion">checkVersion</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">reconnect</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.checkVersion-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.checkVersion-expanded"><a name="L207"></a><tt class="py-lineno">207</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-54" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-54', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L208"></a><tt class="py-lineno">208</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"checkVersion(reconnect=%s)"</tt> <tt class="py-op">%</tt> <tt class="py-name">reconnect</tt> </tt>
+<a name="L209"></a><tt class="py-lineno">209</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-55" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.__send()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#__send"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__send" class="py-name" href="#" onclick="return doclink('link-55', '__send', 'link-55');">__send</a></tt><tt class="py-op">(</tt><tt class="py-string">'host:version'</tt><tt class="py-op">,</tt> <tt class="py-name">reconnect</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L210"></a><tt class="py-lineno">210</tt>  <tt class="py-line">        <tt class="py-name">version</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">recv</tt><tt class="py-op">(</tt><tt class="py-number">8</tt><tt class="py-op">)</tt> </tt>
+<a name="L211"></a><tt class="py-lineno">211</tt>  <tt class="py-line">        <tt class="py-name">VERSION</tt> <tt class="py-op">=</tt> <tt class="py-string">'0004001f'</tt> </tt>
+<a name="L212"></a><tt class="py-lineno">212</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">version</tt> <tt class="py-op">!=</tt> <tt class="py-name">VERSION</tt><tt class="py-op">:</tt> </tt>
+<a name="L213"></a><tt class="py-lineno">213</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"ERROR: Incorrect ADB server version %s (expecting %s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">version</tt><tt class="py-op">,</tt> <tt class="py-name">VERSION</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L214"></a><tt class="py-lineno">214</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">reconnect</tt><tt class="py-op">:</tt> </tt>
+<a name="L215"></a><tt class="py-lineno">215</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__connect" class="py-name" href="#" onclick="return doclink('link-56', '__connect', 'link-17');">__connect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L216"></a><tt class="py-lineno">216</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.__setTransport"></a><div id="AdbClient.__setTransport-def"><a name="L217"></a><tt class="py-lineno">217</tt> <a class="py-toggle" href="#" id="AdbClient.__setTransport-toggle" onclick="return toggle('AdbClient.__setTransport');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__setTransport">__setTransport</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.__setTransport-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.__setTransport-expanded"><a name="L218"></a><tt class="py-lineno">218</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-57" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-57', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L219"></a><tt class="py-lineno">219</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__setTransport()"</tt> </tt>
+<a name="L220"></a><tt class="py-lineno">220</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt><tt class="py-op">:</tt> </tt>
+<a name="L221"></a><tt class="py-lineno">221</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"serialno not set, empty or None"</tt><tt class="py-op">)</tt> </tt>
+<a name="L222"></a><tt class="py-lineno">222</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-58" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.checkConnected" class="py-name" href="#" onclick="return doclink('link-58', 'checkConnected', 'link-35');">checkConnected</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L223"></a><tt class="py-lineno">223</tt>  <tt class="py-line">        <tt class="py-name">serialnoRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt><tt class="py-op">)</tt> </tt>
+<a name="L224"></a><tt class="py-lineno">224</tt>  <tt class="py-line">        <tt class="py-name">found</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L225"></a><tt class="py-lineno">225</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">device</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-59" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.getDevices()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#getDevices"><a title="com.dtmilano.android.adb.adbclient.AdbClient.getDevices" class="py-name" href="#" onclick="return doclink('link-59', 'getDevices', 'link-59');">getDevices</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L226"></a><tt class="py-lineno">226</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">serialnoRE</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L227"></a><tt class="py-lineno">227</tt>  <tt class="py-line">                <tt class="py-name">found</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L228"></a><tt class="py-lineno">228</tt>  <tt class="py-line">                <tt class="py-keyword">break</tt> </tt>
+<a name="L229"></a><tt class="py-lineno">229</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">found</tt><tt class="py-op">:</tt> </tt>
+<a name="L230"></a><tt class="py-lineno">230</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"ERROR: couldn't find device that matches '%s'"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt><tt class="py-op">)</tt> </tt>
+<a name="L231"></a><tt class="py-lineno">231</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt> </tt>
+<a name="L232"></a><tt class="py-lineno">232</tt>  <tt class="py-line">        <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-string">'host:transport:%s'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt> </tt>
+<a name="L233"></a><tt class="py-lineno">233</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-60" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-60', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L234"></a><tt class="py-lineno">234</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    __setTransport: msg="</tt><tt class="py-op">,</tt> <tt class="py-name">msg</tt> </tt>
+<a name="L235"></a><tt class="py-lineno">235</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-61" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__send" class="py-name" href="#" onclick="return doclink('link-61', '__send', 'link-55');">__send</a></tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">,</tt> <tt class="py-name">reconnect</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L236"></a><tt class="py-lineno">236</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">isTransportSet</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+</div><a name="L237"></a><tt class="py-lineno">237</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.getDevices"></a><div id="AdbClient.getDevices-def"><a name="L238"></a><tt class="py-lineno">238</tt> <a class="py-toggle" href="#" id="AdbClient.getDevices-toggle" onclick="return toggle('AdbClient.getDevices');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#getDevices">getDevices</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.getDevices-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.getDevices-expanded"><a name="L239"></a><tt class="py-lineno">239</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-62" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-62', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L240"></a><tt class="py-lineno">240</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"getDevices()"</tt> </tt>
+<a name="L241"></a><tt class="py-lineno">241</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__send" class="py-name" href="#" onclick="return doclink('link-63', '__send', 'link-55');">__send</a></tt><tt class="py-op">(</tt><tt class="py-string">'host:devices-l'</tt><tt class="py-op">,</tt> <tt class="py-name">checkok</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L242"></a><tt class="py-lineno">242</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L243"></a><tt class="py-lineno">243</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-64" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__checkOk" class="py-name" href="#" onclick="return doclink('link-64', '__checkOk', 'link-36');">__checkOk</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L244"></a><tt class="py-lineno">244</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">:</tt> </tt>
+<a name="L245"></a><tt class="py-lineno">245</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"**ERROR:"</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt> </tt>
+<a name="L246"></a><tt class="py-lineno">246</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L247"></a><tt class="py-lineno">247</tt>  <tt class="py-line">        <tt class="py-name">devices</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L248"></a><tt class="py-lineno">248</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-65" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.__receive()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#__receive"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__receive" class="py-name" href="#" onclick="return doclink('link-65', '__receive', 'link-65');">__receive</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">splitlines</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L249"></a><tt class="py-lineno">249</tt>  <tt class="py-line">            <tt class="py-name">devices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-66" class="py-name"><a title="com.dtmilano.android.adb.adbclient.Device" class="py-name" href="#" onclick="return doclink('link-66', 'Device', 'link-14');">Device</a></tt><tt class="py-op">.</tt><tt id="link-67" class="py-name" targets="Static Method com.dtmilano.android.adb.adbclient.Device.factory()=com.dtmilano.android.adb.adbclient.Device-class.html#factory,Static Method com.dtmilano.android.viewclient.View.factory()=com.dtmilano.android.viewclient.View-class.html#factory"><a title="com.dtmilano.android.adb.adbclient.Device.factory
+com.dtmilano.android.viewclient.View.factory" class="py-name" href="#" onclick="return doclink('link-67', 'factory', 'link-67');">factory</a></tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L250"></a><tt class="py-lineno">250</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__connect" class="py-name" href="#" onclick="return doclink('link-68', '__connect', 'link-17');">__connect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L251"></a><tt class="py-lineno">251</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">devices</tt> </tt>
+</div><a name="L252"></a><tt class="py-lineno">252</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.shell"></a><div id="AdbClient.shell-def"><a name="L253"></a><tt class="py-lineno">253</tt> <a class="py-toggle" href="#" id="AdbClient.shell-toggle" onclick="return toggle('AdbClient.shell');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#shell">shell</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">cmd</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.shell-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.shell-expanded"><a name="L254"></a><tt class="py-lineno">254</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-69" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-69', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L255"></a><tt class="py-lineno">255</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"shell(cmd=%s)"</tt> <tt class="py-op">%</tt> <tt class="py-name">cmd</tt> </tt>
+<a name="L256"></a><tt class="py-lineno">256</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">cmd</tt><tt class="py-op">:</tt> </tt>
+<a name="L257"></a><tt class="py-lineno">257</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__send" class="py-name" href="#" onclick="return doclink('link-70', '__send', 'link-55');">__send</a></tt><tt class="py-op">(</tt><tt class="py-string">'shell:%s'</tt> <tt class="py-op">%</tt> <tt class="py-name">cmd</tt><tt class="py-op">,</tt> <tt class="py-name">checkok</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-name">reconnect</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L258"></a><tt class="py-lineno">258</tt>  <tt class="py-line">            <tt class="py-name">out</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L259"></a><tt class="py-lineno">259</tt>  <tt class="py-line">            <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
+<a name="L260"></a><tt class="py-lineno">260</tt>  <tt class="py-line">                <tt class="py-name">_str</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L261"></a><tt class="py-lineno">261</tt>  <tt class="py-line">                <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L262"></a><tt class="py-lineno">262</tt>  <tt class="py-line">                    <tt class="py-name">_str</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">recv</tt><tt class="py-op">(</tt><tt class="py-number">4096</tt><tt class="py-op">)</tt> </tt>
+<a name="L263"></a><tt class="py-lineno">263</tt>  <tt class="py-line">                <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">:</tt> </tt>
+<a name="L264"></a><tt class="py-lineno">264</tt>  <tt class="py-line">                    <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR:"</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt> </tt>
+<a name="L265"></a><tt class="py-lineno">265</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">_str</tt><tt class="py-op">:</tt> </tt>
+<a name="L266"></a><tt class="py-lineno">266</tt>  <tt class="py-line">                    <tt class="py-keyword">break</tt> </tt>
+<a name="L267"></a><tt class="py-lineno">267</tt>  <tt class="py-line">                <tt class="py-name">out</tt> <tt class="py-op">+=</tt> <tt class="py-name">_str</tt> </tt>
+<a name="L268"></a><tt class="py-lineno">268</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reconnect</tt><tt class="py-op">:</tt> </tt>
+<a name="L269"></a><tt class="py-lineno">269</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-71" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-71', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L270"></a><tt class="py-lineno">270</tt>  <tt class="py-line">                    <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"Reconnecting..."</tt> </tt>
+<a name="L271"></a><tt class="py-lineno">271</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.close" class="py-name" href="#" onclick="return doclink('link-72', 'close', 'link-31');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L272"></a><tt class="py-lineno">272</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-73" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__connect" class="py-name" href="#" onclick="return doclink('link-73', '__connect', 'link-17');">__connect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L273"></a><tt class="py-lineno">273</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-74" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__setTransport" class="py-name" href="#" onclick="return doclink('link-74', '__setTransport', 'link-19');">__setTransport</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L274"></a><tt class="py-lineno">274</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">out</tt> </tt>
+<a name="L275"></a><tt class="py-lineno">275</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L276"></a><tt class="py-lineno">276</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-75" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__send" class="py-name" href="#" onclick="return doclink('link-75', '__send', 'link-55');">__send</a></tt><tt class="py-op">(</tt><tt class="py-string">'shell:'</tt><tt class="py-op">)</tt> </tt>
+<a name="L277"></a><tt class="py-lineno">277</tt>  <tt class="py-line">            <tt class="py-comment"># sin = self.socket.makefile("rw")</tt> </tt>
+<a name="L278"></a><tt class="py-lineno">278</tt>  <tt class="py-line">            <tt class="py-comment"># sout = self.socket.makefile("r")</tt> </tt>
+<a name="L279"></a><tt class="py-lineno">279</tt>  <tt class="py-line">            <tt class="py-comment"># return (sin, sin)</tt> </tt>
+<a name="L280"></a><tt class="py-lineno">280</tt>  <tt class="py-line">            <tt class="py-name">sout</tt> <tt class="py-op">=</tt> <tt class="py-name">adbClient</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">makefile</tt><tt class="py-op">(</tt><tt class="py-string">"r"</tt><tt class="py-op">)</tt> </tt>
+<a name="L281"></a><tt class="py-lineno">281</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">sout</tt> </tt>
+</div><a name="L282"></a><tt class="py-lineno">282</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.getRestrictedScreen"></a><div id="AdbClient.getRestrictedScreen-def"><a name="L283"></a><tt class="py-lineno">283</tt> <a class="py-toggle" href="#" id="AdbClient.getRestrictedScreen-toggle" onclick="return toggle('AdbClient.getRestrictedScreen');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#getRestrictedScreen">getRestrictedScreen</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.getRestrictedScreen-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.getRestrictedScreen-expanded"><a name="L284"></a><tt class="py-lineno">284</tt>  <tt class="py-line">        <tt class="py-docstring">''' Gets C{mRestrictedScreen} values from dumpsys. This is a method to obtain display dimensions '''</tt> </tt>
+<a name="L285"></a><tt class="py-lineno">285</tt>  <tt class="py-line"> </tt>
+<a name="L286"></a><tt class="py-lineno">286</tt>  <tt class="py-line">        <tt class="py-name">rsRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'\s*mRestrictedScreen=\((?P&lt;x&gt;\d+),(?P&lt;y&gt;\d+)\) (?P&lt;w&gt;\d+)x(?P&lt;h&gt;\d+)'</tt><tt class="py-op">)</tt> </tt>
+<a name="L287"></a><tt class="py-lineno">287</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-76" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.shell()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#shell"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-76', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'dumpsys window'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">splitlines</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L288"></a><tt class="py-lineno">288</tt>  <tt class="py-line">            <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">rsRE</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt> </tt>
+<a name="L289"></a><tt class="py-lineno">289</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L290"></a><tt class="py-lineno">290</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">groups</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L291"></a><tt class="py-lineno">291</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"Couldn't find mRestrictedScreen in dumpsys"</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L292"></a><tt class="py-lineno">292</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.__getProp"></a><div id="AdbClient.__getProp-def"><a name="L293"></a><tt class="py-lineno">293</tt> <a class="py-toggle" href="#" id="AdbClient.__getProp-toggle" onclick="return toggle('AdbClient.__getProp');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__getProp">__getProp</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">,</tt> <tt class="py-param">strip</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.__getProp-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.__getProp-expanded"><a name="L294"></a><tt class="py-lineno">294</tt>  <tt class="py-line">        <tt class="py-name">prop</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-77" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-77', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'getprop %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">key</tt><tt class="py-op">)</tt> </tt>
+<a name="L295"></a><tt class="py-lineno">295</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">strip</tt><tt class="py-op">:</tt> </tt>
+<a name="L296"></a><tt class="py-lineno">296</tt>  <tt class="py-line">            <tt class="py-name">prop</tt> <tt class="py-op">=</tt> <tt class="py-name">prop</tt><tt class="py-op">.</tt><tt class="py-name">rstrip</tt><tt class="py-op">(</tt><tt class="py-string">'\r\n'</tt><tt class="py-op">)</tt> </tt>
+<a name="L297"></a><tt class="py-lineno">297</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">prop</tt> </tt>
+</div><a name="L298"></a><tt class="py-lineno">298</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.__getDisplayWidth"></a><div id="AdbClient.__getDisplayWidth-def"><a name="L299"></a><tt class="py-lineno">299</tt> <a class="py-toggle" href="#" id="AdbClient.__getDisplayWidth-toggle" onclick="return toggle('AdbClient.__getDisplayWidth');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__getDisplayWidth">__getDisplayWidth</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">,</tt> <tt class="py-param">strip</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.__getDisplayWidth-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.__getDisplayWidth-expanded"><a name="L300"></a><tt class="py-lineno">300</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">,</tt> <tt class="py-name">w</tt><tt class="py-op">,</tt> <tt class="py-name">h</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.getRestrictedScreen()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#getRestrictedScreen"><a title="com.dtmilano.android.adb.adbclient.AdbClient.getRestrictedScreen" class="py-name" href="#" onclick="return doclink('link-78', 'getRestrictedScreen', 'link-78');">getRestrictedScreen</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L301"></a><tt class="py-lineno">301</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">w</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L302"></a><tt class="py-lineno">302</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.__getDisplayHeight"></a><div id="AdbClient.__getDisplayHeight-def"><a name="L303"></a><tt class="py-lineno">303</tt> <a class="py-toggle" href="#" id="AdbClient.__getDisplayHeight-toggle" onclick="return toggle('AdbClient.__getDisplayHeight');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__getDisplayHeight">__getDisplayHeight</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">,</tt> <tt class="py-param">strip</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.__getDisplayHeight-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.__getDisplayHeight-expanded"><a name="L304"></a><tt class="py-lineno">304</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">,</tt> <tt class="py-name">w</tt><tt class="py-op">,</tt> <tt class="py-name">h</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-79" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.getRestrictedScreen" class="py-name" href="#" onclick="return doclink('link-79', 'getRestrictedScreen', 'link-78');">getRestrictedScreen</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L305"></a><tt class="py-lineno">305</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">h</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L306"></a><tt class="py-lineno">306</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.getSystemProperty"></a><div id="AdbClient.getSystemProperty-def"><a name="L307"></a><tt class="py-lineno">307</tt> <a class="py-toggle" href="#" id="AdbClient.getSystemProperty-toggle" onclick="return toggle('AdbClient.getSystemProperty');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#getSystemProperty">getSystemProperty</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">,</tt> <tt class="py-param">strip</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.getSystemProperty-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.getSystemProperty-expanded"><a name="L308"></a><tt class="py-lineno">308</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-80" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.getProperty()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#getProperty"><a title="com.dtmilano.android.adb.adbclient.AdbClient.getProperty" class="py-name" href="#" onclick="return doclink('link-80', 'getProperty', 'link-80');">getProperty</a></tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">strip</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L309"></a><tt class="py-lineno">309</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.getProperty"></a><div id="AdbClient.getProperty-def"><a name="L310"></a><tt class="py-lineno">310</tt> <a class="py-toggle" href="#" id="AdbClient.getProperty-toggle" onclick="return toggle('AdbClient.getProperty');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#getProperty">getProperty</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">,</tt> <tt class="py-param">strip</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.getProperty-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.getProperty-expanded"><a name="L311"></a><tt class="py-lineno">311</tt>  <tt class="py-line">        <tt class="py-docstring">''' Gets the property value for key '''</tt> </tt>
+<a name="L312"></a><tt class="py-lineno">312</tt>  <tt class="py-line"> </tt>
+<a name="L313"></a><tt class="py-lineno">313</tt>  <tt class="py-line">        <tt class="py-keyword">import</tt> <tt class="py-name">collections</tt> </tt>
+<a name="L314"></a><tt class="py-lineno">314</tt>  <tt class="py-line">        <tt class="py-name">MAP_KEYS</tt> <tt class="py-op">=</tt> <tt class="py-name">collections</tt><tt class="py-op">.</tt><tt class="py-name">OrderedDict</tt><tt class="py-op">(</tt><tt class="py-op">[</tt> </tt>
+<a name="L315"></a><tt class="py-lineno">315</tt>  <tt class="py-line">                          <tt class="py-op">(</tt><tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'display.width'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-81" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.__getDisplayWidth()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#__getDisplayWidth"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__getDisplayWidth" class="py-name" href="#" onclick="return doclink('link-81', '__getDisplayWidth', 'link-81');">__getDisplayWidth</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L316"></a><tt class="py-lineno">316</tt>  <tt class="py-line">                          <tt class="py-op">(</tt><tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'display.height'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-82" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.__getDisplayHeight()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#__getDisplayHeight"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__getDisplayHeight" class="py-name" href="#" onclick="return doclink('link-82', '__getDisplayHeight', 'link-82');">__getDisplayHeight</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L317"></a><tt class="py-lineno">317</tt>  <tt class="py-line">                          <tt class="py-op">(</tt><tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'.*'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__getProp" class="py-name" href="#" onclick="return doclink('link-83', '__getProp', 'link-21');">__getProp</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L318"></a><tt class="py-lineno">318</tt>  <tt class="py-line">                          <tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L319"></a><tt class="py-lineno">319</tt>  <tt class="py-line">        <tt class="py-string">'''Maps properties key values (as regexps) to instance methods to obtain its values.'''</tt> </tt>
+<a name="L320"></a><tt class="py-lineno">320</tt>  <tt class="py-line"> </tt>
+<a name="L321"></a><tt class="py-lineno">321</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">kre</tt> <tt class="py-keyword">in</tt> <tt class="py-name">MAP_KEYS</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L322"></a><tt class="py-lineno">322</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">kre</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L323"></a><tt class="py-lineno">323</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">MAP_KEYS</tt><tt class="py-op">[</tt><tt class="py-name">kre</tt><tt class="py-op">]</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">=</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">strip</tt><tt class="py-op">=</tt><tt class="py-name">strip</tt><tt class="py-op">)</tt> </tt>
+<a name="L324"></a><tt class="py-lineno">324</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"key='%s' does not match any map entry"</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L325"></a><tt class="py-lineno">325</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.getSdkVersion"></a><div id="AdbClient.getSdkVersion-def"><a name="L326"></a><tt class="py-lineno">326</tt> <a class="py-toggle" href="#" id="AdbClient.getSdkVersion-toggle" onclick="return toggle('AdbClient.getSdkVersion');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#getSdkVersion">getSdkVersion</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.getSdkVersion-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.getSdkVersion-expanded"><a name="L327"></a><tt class="py-lineno">327</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L328"></a><tt class="py-lineno">328</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the SDK version.</tt> </tt>
+<a name="L329"></a><tt class="py-lineno">329</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L330"></a><tt class="py-lineno">330</tt>  <tt class="py-line"> </tt>
+<a name="L331"></a><tt class="py-lineno">331</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-84" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-84', 'VERSION_SDK_PROPERTY', 'link-10');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> </tt>
+</div><a name="L332"></a><tt class="py-lineno">332</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.press"></a><div id="AdbClient.press-def"><a name="L333"></a><tt class="py-lineno">333</tt> <a class="py-toggle" href="#" id="AdbClient.press-toggle" onclick="return toggle('AdbClient.press');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#press">press</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">eventType</tt><tt class="py-op">=</tt><tt id="link-85" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DOWN_AND_UP" class="py-name" href="#" onclick="return doclink('link-85', 'DOWN_AND_UP', 'link-8');">DOWN_AND_UP</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.press-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.press-expanded"><a name="L334"></a><tt class="py-lineno">334</tt>  <tt class="py-line">        <tt class="py-name">cmd</tt> <tt class="py-op">=</tt> <tt class="py-string">'input keyevent %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">name</tt> </tt>
+<a name="L335"></a><tt class="py-lineno">335</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-86" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-86', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L336"></a><tt class="py-lineno">336</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"press(%s)"</tt> <tt class="py-op">%</tt> <tt class="py-name">cmd</tt> </tt>
+<a name="L337"></a><tt class="py-lineno">337</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-87" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-87', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-name">cmd</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L338"></a><tt class="py-lineno">338</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.longPress"></a><div id="AdbClient.longPress-def"><a name="L339"></a><tt class="py-lineno">339</tt> <a class="py-toggle" href="#" id="AdbClient.longPress-toggle" onclick="return toggle('AdbClient.longPress');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#longPress">longPress</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.longPress-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.longPress-expanded"><a name="L340"></a><tt class="py-lineno">340</tt>  <tt class="py-line">        <tt class="py-comment"># WORKAROUND:</tt> </tt>
+<a name="L341"></a><tt class="py-lineno">341</tt>  <tt class="py-line">        <tt class="py-comment"># Using 'input keyevent --longpress POWER' does not work correctly in</tt> </tt>
+<a name="L342"></a><tt class="py-lineno">342</tt>  <tt class="py-line">        <tt class="py-comment"># KitKat (API 19), it sends a short instead of a long press.</tt> </tt>
+<a name="L343"></a><tt class="py-lineno">343</tt>  <tt class="py-line">        <tt class="py-comment"># This uses the events instead, but it may vary from device to device.</tt> </tt>
+<a name="L344"></a><tt class="py-lineno">344</tt>  <tt class="py-line">        <tt class="py-comment"># The events sent are device dependent and may not work on other devices.</tt> </tt>
+<a name="L345"></a><tt class="py-lineno">345</tt>  <tt class="py-line">        <tt class="py-comment"># If this does not work on your device please do:</tt> </tt>
+<a name="L346"></a><tt class="py-lineno">346</tt>  <tt class="py-line">        <tt class="py-comment">#     $ adb shell getevent -l</tt> </tt>
+<a name="L347"></a><tt class="py-lineno">347</tt>  <tt class="py-line">        <tt class="py-comment"># and post the output to https://github.com/dtmilano/AndroidViewClient/issues</tt> </tt>
+<a name="L348"></a><tt class="py-lineno">348</tt>  <tt class="py-line">        <tt class="py-comment"># specifying the device and API level.</tt> </tt>
+<a name="L349"></a><tt class="py-lineno">349</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-op">==</tt> <tt class="py-string">'POWER'</tt> <tt class="py-keyword">or</tt> <tt class="py-name">name</tt> <tt class="py-op">==</tt> <tt class="py-string">'KEY_POWER'</tt><tt class="py-op">:</tt> </tt>
+<a name="L350"></a><tt class="py-lineno">350</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-88" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-88', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'sendevent /dev/input/event0 1 116 1'</tt><tt class="py-op">)</tt> </tt>
+<a name="L351"></a><tt class="py-lineno">351</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-89" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-89', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'sendevent /dev/input/event0 0 0 0'</tt><tt class="py-op">)</tt> </tt>
+<a name="L352"></a><tt class="py-lineno">352</tt>  <tt class="py-line">            <tt class="py-name">time</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name" targets="Static Method com.dtmilano.android.viewclient.ViewClient.sleep()=com.dtmilano.android.viewclient.ViewClient-class.html#sleep"><a title="com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-90', 'sleep', 'link-90');">sleep</a></tt><tt class="py-op">(</tt><tt class="py-number">0.5</tt><tt class="py-op">)</tt> </tt>
+<a name="L353"></a><tt class="py-lineno">353</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-91', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'sendevent /dev/input/event0 1 116 0'</tt><tt class="py-op">)</tt> </tt>
+<a name="L354"></a><tt class="py-lineno">354</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-92" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-92', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'sendevent /dev/input/event0 0 0 0'</tt><tt class="py-op">)</tt> </tt>
+<a name="L355"></a><tt class="py-lineno">355</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> </tt>
+<a name="L356"></a><tt class="py-lineno">356</tt>  <tt class="py-line"> </tt>
+<a name="L357"></a><tt class="py-lineno">357</tt>  <tt class="py-line">        <tt class="py-name">version</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.getSdkVersion()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#getSdkVersion,Method com.dtmilano.android.viewclient.ViewClient.getSdkVersion()=com.dtmilano.android.viewclient.ViewClient-class.html#getSdkVersion"><a title="com.dtmilano.android.adb.adbclient.AdbClient.getSdkVersion
+com.dtmilano.android.viewclient.ViewClient.getSdkVersion" class="py-name" href="#" onclick="return doclink('link-93', 'getSdkVersion', 'link-93');">getSdkVersion</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L358"></a><tt class="py-lineno">358</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">version</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">19</tt><tt class="py-op">:</tt> </tt>
+<a name="L359"></a><tt class="py-lineno">359</tt>  <tt class="py-line">            <tt class="py-name">cmd</tt> <tt class="py-op">=</tt> <tt class="py-string">'input keyevent --longpress %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">name</tt> </tt>
+<a name="L360"></a><tt class="py-lineno">360</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-94" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-94', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L361"></a><tt class="py-lineno">361</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"longPress(%s)"</tt> <tt class="py-op">%</tt> <tt class="py-name">cmd</tt> </tt>
+<a name="L362"></a><tt class="py-lineno">362</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-95" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-95', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-name">cmd</tt><tt class="py-op">)</tt> </tt>
+<a name="L363"></a><tt class="py-lineno">363</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L364"></a><tt class="py-lineno">364</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"longpress: not supported for API &lt; 19 (version=%d)"</tt> <tt class="py-op">%</tt> <tt class="py-name">version</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L365"></a><tt class="py-lineno">365</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.startActivity"></a><div id="AdbClient.startActivity-def"><a name="L366"></a><tt class="py-lineno">366</tt> <a class="py-toggle" href="#" id="AdbClient.startActivity-toggle" onclick="return toggle('AdbClient.startActivity');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#startActivity">startActivity</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">component</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">flags</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">uri</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.startActivity-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.startActivity-expanded"><a name="L367"></a><tt class="py-lineno">367</tt>  <tt class="py-line">        <tt class="py-name">cmd</tt> <tt class="py-op">=</tt> <tt class="py-string">'am start'</tt> </tt>
+<a name="L368"></a><tt class="py-lineno">368</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">component</tt><tt class="py-op">:</tt> </tt>
+<a name="L369"></a><tt class="py-lineno">369</tt>  <tt class="py-line">            <tt class="py-name">cmd</tt> <tt class="py-op">+=</tt> <tt class="py-string">' -n %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">component</tt> </tt>
+<a name="L370"></a><tt class="py-lineno">370</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">flags</tt><tt class="py-op">:</tt> </tt>
+<a name="L371"></a><tt class="py-lineno">371</tt>  <tt class="py-line">            <tt class="py-name">cmd</tt> <tt class="py-op">+=</tt> <tt class="py-string">' -f %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">flags</tt> </tt>
+<a name="L372"></a><tt class="py-lineno">372</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">uri</tt><tt class="py-op">:</tt> </tt>
+<a name="L373"></a><tt class="py-lineno">373</tt>  <tt class="py-line">            <tt class="py-name">cmd</tt> <tt class="py-op">+=</tt> <tt class="py-string">' %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">uri</tt> </tt>
+<a name="L374"></a><tt class="py-lineno">374</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-96" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-96', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L375"></a><tt class="py-lineno">375</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"Starting activity: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">cmd</tt> </tt>
+<a name="L376"></a><tt class="py-lineno">376</tt>  <tt class="py-line">        <tt class="py-name">out</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-97" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-97', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-name">cmd</tt><tt class="py-op">)</tt> </tt>
+<a name="L377"></a><tt class="py-lineno">377</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-string">r"(Error type)|(Error: )|(Cannot find 'App')"</tt><tt class="py-op">,</tt> <tt class="py-name">out</tt><tt class="py-op">,</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">IGNORECASE</tt> <tt class="py-op">|</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">MULTILINE</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L378"></a><tt class="py-lineno">378</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-name">out</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L379"></a><tt class="py-lineno">379</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.takeSnapshot"></a><div id="AdbClient.takeSnapshot-def"><a name="L380"></a><tt class="py-lineno">380</tt> <a class="py-toggle" href="#" id="AdbClient.takeSnapshot-toggle" onclick="return toggle('AdbClient.takeSnapshot');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#takeSnapshot">takeSnapshot</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">reconnect</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.takeSnapshot-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.takeSnapshot-expanded"><a name="L381"></a><tt class="py-lineno">381</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L382"></a><tt class="py-lineno">382</tt>  <tt class="py-line"><tt class="py-docstring">        Takes a snapshot of the device and return it as a PIL Image.</tt> </tt>
+<a name="L383"></a><tt class="py-lineno">383</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L384"></a><tt class="py-lineno">384</tt>  <tt class="py-line"> </tt>
+<a name="L385"></a><tt class="py-lineno">385</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L386"></a><tt class="py-lineno">386</tt>  <tt class="py-line">            <tt class="py-keyword">from</tt> <tt class="py-name">PIL</tt> <tt class="py-keyword">import</tt> <tt class="py-name">Image</tt> </tt>
+<a name="L387"></a><tt class="py-lineno">387</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L388"></a><tt class="py-lineno">388</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">"You have to install PIL to use takeSnapshot()"</tt><tt class="py-op">)</tt> </tt>
+<a name="L389"></a><tt class="py-lineno">389</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-98" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__send" class="py-name" href="#" onclick="return doclink('link-98', '__send', 'link-55');">__send</a></tt><tt class="py-op">(</tt><tt class="py-string">'framebuffer:'</tt><tt class="py-op">,</tt> <tt class="py-name">checkok</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-name">reconnect</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L390"></a><tt class="py-lineno">390</tt>  <tt class="py-line">        <tt class="py-keyword">import</tt> <tt class="py-name">struct</tt> </tt>
+<a name="L391"></a><tt class="py-lineno">391</tt>  <tt class="py-line">        <tt class="py-comment"># case 1: // version</tt> </tt>
+<a name="L392"></a><tt class="py-lineno">392</tt>  <tt class="py-line">        <tt class="py-comment">#           return 12; // bpp, size, width, height, 4*(length, offset)</tt> </tt>
+<a name="L393"></a><tt class="py-lineno">393</tt>  <tt class="py-line">        <tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-99" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__receive" class="py-name" href="#" onclick="return doclink('link-99', '__receive', 'link-65');">__receive</a></tt><tt class="py-op">(</tt><tt class="py-number">1</tt> <tt class="py-op">*</tt> <tt class="py-number">4</tt> <tt class="py-op">+</tt> <tt class="py-number">12</tt> <tt class="py-op">*</tt> <tt class="py-number">4</tt><tt class="py-op">)</tt> </tt>
+<a name="L394"></a><tt class="py-lineno">394</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">version</tt><tt class="py-op">,</tt> <tt class="py-name">bpp</tt><tt class="py-op">,</tt> <tt class="py-name">size</tt><tt class="py-op">,</tt> <tt class="py-name">width</tt><tt class="py-op">,</tt> <tt class="py-name">height</tt><tt class="py-op">,</tt> <tt class="py-name">roffset</tt><tt class="py-op">,</tt> <tt class="py-name">rlen</tt><tt class="py-op">,</tt> <tt class="py-name">boffset</tt><tt class="py-op">,</tt> <tt class="py-name">blen</tt><tt class="py-op">,</tt> <tt class="py-name">goffset</tt><tt class="py-op">,</tt> <tt class="py-name">glen</tt><tt class="py-op">,</tt> <tt class="py-name">aoffset</tt><tt class="py-op">,</tt> <tt class="py-name">alen</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">struct</tt><tt class="py-op">.</tt><tt class="py-name">unpack</tt><tt class="py-op">(</tt><tt class="py-string">'&lt;'</tt> <tt class="py-op">+</tt> <tt class="py-string">'L'</tt> <tt class="py-op">*</tt> <tt class="py-number">13</tt><tt class="py-op">,</tt> <tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L395"></a><tt class="py-lineno">395</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-100" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-100', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L396"></a><tt class="py-lineno">396</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    takeSnapshot:"</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">version</tt><tt class="py-op">,</tt> <tt class="py-name">bpp</tt><tt class="py-op">,</tt> <tt class="py-name">size</tt><tt class="py-op">,</tt> <tt class="py-name">width</tt><tt class="py-op">,</tt> <tt class="py-name">height</tt><tt class="py-op">,</tt> <tt class="py-name">roffset</tt><tt class="py-op">,</tt> <tt class="py-name">rlen</tt><tt class="py-op">,</tt> <tt class="py-name">boffset</tt><tt class="py-op">,</tt> <tt class="py-name">blen</tt><tt class="py-op">,</tt> <tt class="py-name">goffset</tt><tt class="py-op">,</tt> <tt class="py-name">glen</tt><tt class="py-op">,</tt> <tt class="py-name">aoffset</tt><tt class="py-op">,</tt> <tt class="py-name">alen</tt><tt class="py-op">)</tt> </tt>
+<a name="L397"></a><tt class="py-lineno">397</tt>  <tt class="py-line">        <tt class="py-name">offsets</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-name">roffset</tt><tt class="py-op">:</tt><tt class="py-string">'R'</tt><tt class="py-op">,</tt> <tt class="py-name">goffset</tt><tt class="py-op">:</tt><tt class="py-string">'G'</tt><tt class="py-op">,</tt> <tt class="py-name">boffset</tt><tt class="py-op">:</tt><tt class="py-string">'B'</tt><tt class="py-op">}</tt> </tt>
+<a name="L398"></a><tt class="py-lineno">398</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">bpp</tt> <tt class="py-op">==</tt> <tt class="py-number">32</tt><tt class="py-op">:</tt> </tt>
+<a name="L399"></a><tt class="py-lineno">399</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">alen</tt> <tt class="py-op">!=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L400"></a><tt class="py-lineno">400</tt>  <tt class="py-line">                <tt class="py-name">offsets</tt><tt class="py-op">[</tt><tt class="py-name">aoffset</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'A'</tt> </tt>
+<a name="L401"></a><tt class="py-lineno">401</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L402"></a><tt class="py-lineno">402</tt>  <tt class="py-line">                <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">'''framebuffer is specified as 32bpp but alpha length is 0'''</tt><tt class="py-op">)</tt> </tt>
+<a name="L403"></a><tt class="py-lineno">403</tt>  <tt class="py-line">        <tt class="py-name">argMode</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">offsets</tt><tt class="py-op">[</tt><tt class="py-name">o</tt><tt class="py-op">]</tt> <tt class="py-keyword">for</tt> <tt class="py-name">o</tt> <tt class="py-keyword">in</tt> <tt class="py-name">sorted</tt><tt class="py-op">(</tt><tt class="py-name">offsets</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L404"></a><tt class="py-lineno">404</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-101" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-101', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L405"></a><tt class="py-lineno">405</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    takeSnapshot:"</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">version</tt><tt class="py-op">,</tt> <tt class="py-name">bpp</tt><tt class="py-op">,</tt> <tt class="py-name">size</tt><tt class="py-op">,</tt> <tt class="py-name">width</tt><tt class="py-op">,</tt> <tt class="py-name">height</tt><tt class="py-op">,</tt> <tt class="py-name">roffset</tt><tt class="py-op">,</tt> <tt class="py-name">rlen</tt><tt class="py-op">,</tt> <tt class="py-name">boffset</tt><tt class="py-op">,</tt> <tt class="py-name">blen</tt><tt class="py-op">,</tt> <tt class="py-name">goffset</tt><tt class="py-op">,</tt> <tt class="py-name">blen</tt><tt class="py-op">,</tt> <tt class="py-name">aoffset</tt><tt class="py-op">,</tt> <tt class="py-name">alen</tt><tt class="py-op">,</tt> <tt class="py-name">argMode</tt><tt class="py-op">)</tt> </tt>
+<a name="L406"></a><tt class="py-lineno">406</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">argMode</tt> <tt class="py-op">==</tt> <tt class="py-string">'BGRA'</tt><tt class="py-op">:</tt> </tt>
+<a name="L407"></a><tt class="py-lineno">407</tt>  <tt class="py-line">            <tt class="py-name">argMode</tt> <tt class="py-op">=</tt> <tt class="py-string">'RGBA'</tt> </tt>
+<a name="L408"></a><tt class="py-lineno">408</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">bpp</tt> <tt class="py-op">==</tt> <tt class="py-number">16</tt><tt class="py-op">:</tt> </tt>
+<a name="L409"></a><tt class="py-lineno">409</tt>  <tt class="py-line">            <tt class="py-name">mode</tt> <tt class="py-op">=</tt> <tt class="py-string">'RGB'</tt> </tt>
+<a name="L410"></a><tt class="py-lineno">410</tt>  <tt class="py-line">            <tt class="py-name">argMode</tt> <tt class="py-op">+=</tt> <tt class="py-string">';16'</tt> </tt>
+<a name="L411"></a><tt class="py-lineno">411</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L412"></a><tt class="py-lineno">412</tt>  <tt class="py-line">            <tt class="py-name">mode</tt> <tt class="py-op">=</tt> <tt class="py-name">argMode</tt> </tt>
+<a name="L413"></a><tt class="py-lineno">413</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-102" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__send" class="py-name" href="#" onclick="return doclink('link-102', '__send', 'link-55');">__send</a></tt><tt class="py-op">(</tt><tt class="py-string">'\0'</tt><tt class="py-op">,</tt> <tt class="py-name">checkok</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-name">reconnect</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L414"></a><tt class="py-lineno">414</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-103" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-103', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L415"></a><tt class="py-lineno">415</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    takeSnapshot: reading %d bytes"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">size</tt><tt class="py-op">)</tt> </tt>
+<a name="L416"></a><tt class="py-lineno">416</tt>  <tt class="py-line">        <tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-104" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__receive" class="py-name" href="#" onclick="return doclink('link-104', '__receive', 'link-65');">__receive</a></tt><tt class="py-op">(</tt><tt class="py-name">size</tt><tt class="py-op">)</tt> </tt>
+<a name="L417"></a><tt class="py-lineno">417</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">reconnect</tt><tt class="py-op">:</tt> </tt>
+<a name="L418"></a><tt class="py-lineno">418</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-105" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__connect" class="py-name" href="#" onclick="return doclink('link-105', '__connect', 'link-17');">__connect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L419"></a><tt class="py-lineno">419</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-106" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__setTransport" class="py-name" href="#" onclick="return doclink('link-106', '__setTransport', 'link-19');">__setTransport</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L420"></a><tt class="py-lineno">420</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-107" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-107', 'DEBUG', 'link-0');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L421"></a><tt class="py-lineno">421</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    takeSnapshot: Image.frombuffer(%s, %s, %s, %s, %s, %s, %s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">mode</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">width</tt><tt class="py-op">,</tt> <tt class="py-name">height</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">'data'</tt><tt class="py-op">,</tt> <tt class="py-string">'raw'</tt><tt class="py-op">,</tt> <tt class="py-name">argMode</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L422"></a><tt class="py-lineno">422</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">Image</tt><tt class="py-op">.</tt><tt class="py-name">frombuffer</tt><tt class="py-op">(</tt><tt class="py-name">mode</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">width</tt><tt class="py-op">,</tt> <tt class="py-name">height</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">received</tt><tt class="py-op">,</tt> <tt class="py-string">'raw'</tt><tt class="py-op">,</tt> <tt class="py-name">argMode</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L423"></a><tt class="py-lineno">423</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.touch"></a><div id="AdbClient.touch-def"><a name="L424"></a><tt class="py-lineno">424</tt> <a class="py-toggle" href="#" id="AdbClient.touch-toggle" onclick="return toggle('AdbClient.touch');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#touch">touch</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">x</tt><tt class="py-op">,</tt> <tt class="py-param">y</tt><tt class="py-op">,</tt> <tt class="py-param">eventType</tt><tt class="py-op">=</tt><tt id="link-108" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DOWN_AND_UP" class="py-name" href="#" onclick="return doclink('link-108', 'DOWN_AND_UP', 'link-8');">DOWN_AND_UP</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.touch-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.touch-expanded"><a name="L425"></a><tt class="py-lineno">425</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-109" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-109', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'input tap %d %d'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L426"></a><tt class="py-lineno">426</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.drag"></a><div id="AdbClient.drag-def"><a name="L427"></a><tt class="py-lineno">427</tt> <a class="py-toggle" href="#" id="AdbClient.drag-toggle" onclick="return toggle('AdbClient.drag');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#drag">drag</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-param">x0</tt><tt class="py-op">,</tt> <tt class="py-param">y0</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-param">x1</tt><tt class="py-op">,</tt> <tt class="py-param">y1</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-param">duration</tt><tt class="py-op">,</tt> <tt class="py-param">steps</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.drag-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.drag-expanded"><a name="L428"></a><tt class="py-lineno">428</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L429"></a><tt class="py-lineno">429</tt>  <tt class="py-line"><tt class="py-docstring">        Sends drag event (actually it's using C{input swipe} command.</tt> </tt>
+<a name="L430"></a><tt class="py-lineno">430</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L431"></a><tt class="py-lineno">431</tt>  <tt class="py-line"><tt class="py-docstring">        @param (x0, y0): starting point</tt> </tt>
+<a name="L432"></a><tt class="py-lineno">432</tt>  <tt class="py-line"><tt class="py-docstring">        @param (x1, y1): ending point</tt> </tt>
+<a name="L433"></a><tt class="py-lineno">433</tt>  <tt class="py-line"><tt class="py-docstring">        @param duration: duration of the event in ms</tt> </tt>
+<a name="L434"></a><tt class="py-lineno">434</tt>  <tt class="py-line"><tt class="py-docstring">        @param steps: number of steps (currently ignored by @{input swipe}</tt> </tt>
+<a name="L435"></a><tt class="py-lineno">435</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L436"></a><tt class="py-lineno">436</tt>  <tt class="py-line"> </tt>
+<a name="L437"></a><tt class="py-lineno">437</tt>  <tt class="py-line">        <tt class="py-name">version</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-110" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.getSdkVersion
+com.dtmilano.android.viewclient.ViewClient.getSdkVersion" class="py-name" href="#" onclick="return doclink('link-110', 'getSdkVersion', 'link-93');">getSdkVersion</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L438"></a><tt class="py-lineno">438</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">version</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">15</tt><tt class="py-op">:</tt> </tt>
+<a name="L439"></a><tt class="py-lineno">439</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">'drag: API &lt;= 15 not supported (version=%d)'</tt> <tt class="py-op">%</tt> <tt class="py-name">version</tt><tt class="py-op">)</tt> </tt>
+<a name="L440"></a><tt class="py-lineno">440</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">version</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">17</tt><tt class="py-op">:</tt> </tt>
+<a name="L441"></a><tt class="py-lineno">441</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-111" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-111', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'input swipe %d %d %d %d'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">x0</tt><tt class="py-op">,</tt> <tt class="py-name">y0</tt><tt class="py-op">,</tt> <tt class="py-name">x1</tt><tt class="py-op">,</tt> <tt class="py-name">y1</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L442"></a><tt class="py-lineno">442</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L443"></a><tt class="py-lineno">443</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-112', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'input swipe %d %d %d %d %d'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">x0</tt><tt class="py-op">,</tt> <tt class="py-name">y0</tt><tt class="py-op">,</tt> <tt class="py-name">x1</tt><tt class="py-op">,</tt> <tt class="py-name">y1</tt><tt class="py-op">,</tt> <tt class="py-name">duration</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L444"></a><tt class="py-lineno">444</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.type"></a><div id="AdbClient.type-def"><a name="L445"></a><tt class="py-lineno">445</tt> <a class="py-toggle" href="#" id="AdbClient.type-toggle" onclick="return toggle('AdbClient.type');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#type">type</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">text</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.type-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.type-expanded"><a name="L446"></a><tt class="py-lineno">446</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-113" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-113', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">u'input text "%s"'</tt> <tt class="py-op">%</tt> <tt class="py-name">text</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L447"></a><tt class="py-lineno">447</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.wake"></a><div id="AdbClient.wake-def"><a name="L448"></a><tt class="py-lineno">448</tt> <a class="py-toggle" href="#" id="AdbClient.wake-toggle" onclick="return toggle('AdbClient.wake');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#wake">wake</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.wake-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.wake-expanded"><a name="L449"></a><tt class="py-lineno">449</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-114" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.isScreenOn()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#isScreenOn"><a title="com.dtmilano.android.adb.adbclient.AdbClient.isScreenOn" class="py-name" href="#" onclick="return doclink('link-114', 'isScreenOn', 'link-114');">isScreenOn</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L450"></a><tt class="py-lineno">450</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-115" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-115', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'input keyevent POWER'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L451"></a><tt class="py-lineno">451</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.isLocked"></a><div id="AdbClient.isLocked-def"><a name="L452"></a><tt class="py-lineno">452</tt> <a class="py-toggle" href="#" id="AdbClient.isLocked-toggle" onclick="return toggle('AdbClient.isLocked');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#isLocked">isLocked</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.isLocked-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.isLocked-expanded"><a name="L453"></a><tt class="py-lineno">453</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L454"></a><tt class="py-lineno">454</tt>  <tt class="py-line"><tt class="py-docstring">        Checks if the device screen is locked.</tt> </tt>
+<a name="L455"></a><tt class="py-lineno">455</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L456"></a><tt class="py-lineno">456</tt>  <tt class="py-line"><tt class="py-docstring">        @return True if the device screen is locked</tt> </tt>
+<a name="L457"></a><tt class="py-lineno">457</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L458"></a><tt class="py-lineno">458</tt>  <tt class="py-line"> </tt>
+<a name="L459"></a><tt class="py-lineno">459</tt>  <tt class="py-line">        <tt class="py-name">lockScreenRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'mShowingLockscreen=(true|false)'</tt><tt class="py-op">)</tt> </tt>
+<a name="L460"></a><tt class="py-lineno">460</tt>  <tt class="py-line">        <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">lockScreenRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-116" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-116', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'dumpsys window policy'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L461"></a><tt class="py-lineno">461</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L462"></a><tt class="py-lineno">462</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'true'</tt><tt class="py-op">)</tt> </tt>
+<a name="L463"></a><tt class="py-lineno">463</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"Couldn't determine screen lock state"</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L464"></a><tt class="py-lineno">464</tt>  <tt class="py-line"> </tt>
+<a name="AdbClient.isScreenOn"></a><div id="AdbClient.isScreenOn-def"><a name="L465"></a><tt class="py-lineno">465</tt> <a class="py-toggle" href="#" id="AdbClient.isScreenOn-toggle" onclick="return toggle('AdbClient.isScreenOn');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#isScreenOn">isScreenOn</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.isScreenOn-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.isScreenOn-expanded"><a name="L466"></a><tt class="py-lineno">466</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L467"></a><tt class="py-lineno">467</tt>  <tt class="py-line"><tt class="py-docstring">        Checks if the screen is ON.</tt> </tt>
+<a name="L468"></a><tt class="py-lineno">468</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L469"></a><tt class="py-lineno">469</tt>  <tt class="py-line"><tt class="py-docstring">        @return True if the device screen is ON</tt> </tt>
+<a name="L470"></a><tt class="py-lineno">470</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L471"></a><tt class="py-lineno">471</tt>  <tt class="py-line"> </tt>
+<a name="L472"></a><tt class="py-lineno">472</tt>  <tt class="py-line">        <tt class="py-name">screenOnRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'mScreenOnFully=(true|false)'</tt><tt class="py-op">)</tt> </tt>
+<a name="L473"></a><tt class="py-lineno">473</tt>  <tt class="py-line">        <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">screenOnRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-117" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-117', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'dumpsys window policy'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L474"></a><tt class="py-lineno">474</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L475"></a><tt class="py-lineno">475</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'true'</tt><tt class="py-op">)</tt> </tt>
+<a name="L476"></a><tt class="py-lineno">476</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"Couldn't determine screen ON state"</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L477"></a><tt class="py-lineno">477</tt>  <tt class="py-line">         </tt>
+<a name="AdbClient.unlock"></a><div id="AdbClient.unlock-def"><a name="L478"></a><tt class="py-lineno">478</tt> <a class="py-toggle" href="#" id="AdbClient.unlock-toggle" onclick="return toggle('AdbClient.unlock');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#unlock">unlock</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.unlock-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.unlock-expanded"><a name="L479"></a><tt class="py-lineno">479</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L480"></a><tt class="py-lineno">480</tt>  <tt class="py-line"><tt class="py-docstring">        Unlocks the screen of the device.</tt> </tt>
+<a name="L481"></a><tt class="py-lineno">481</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L482"></a><tt class="py-lineno">482</tt>  <tt class="py-line"> </tt>
+<a name="L483"></a><tt class="py-lineno">483</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-118" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-118', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'input keyevent MENU'</tt><tt class="py-op">)</tt> </tt>
+<a name="L484"></a><tt class="py-lineno">484</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-119" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-119', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'input keyevent BACK'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L485"></a><tt class="py-lineno">485</tt>  <tt class="py-line"> </tt>
+<a name="L486"></a><tt class="py-lineno">486</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="AdbClient.percentSame"></a><div id="AdbClient.percentSame-def"><a name="L487"></a><tt class="py-lineno">487</tt> <a class="py-toggle" href="#" id="AdbClient.percentSame-toggle" onclick="return toggle('AdbClient.percentSame');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#percentSame">percentSame</a><tt class="py-op">(</tt><tt class="py-param">image1</tt><tt class="py-op">,</tt> <tt class="py-param">image2</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.percentSame-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.percentSame-expanded"><a name="L488"></a><tt class="py-lineno">488</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L489"></a><tt class="py-lineno">489</tt>  <tt class="py-line"><tt class="py-docstring">        Returns the percent of pixels that are equal</tt> </tt>
+<a name="L490"></a><tt class="py-lineno">490</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L491"></a><tt class="py-lineno">491</tt>  <tt class="py-line"><tt class="py-docstring">        @author: catshoes</tt> </tt>
+<a name="L492"></a><tt class="py-lineno">492</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L493"></a><tt class="py-lineno">493</tt>  <tt class="py-line"> </tt>
+<a name="L494"></a><tt class="py-lineno">494</tt>  <tt class="py-line">        <tt class="py-comment"># If the images differ in size, return 0% same.</tt> </tt>
+<a name="L495"></a><tt class="py-lineno">495</tt>  <tt class="py-line">        <tt class="py-name">size_x1</tt><tt class="py-op">,</tt> <tt class="py-name">size_y1</tt> <tt class="py-op">=</tt> <tt class="py-name">image1</tt><tt class="py-op">.</tt><tt class="py-name">size</tt> </tt>
+<a name="L496"></a><tt class="py-lineno">496</tt>  <tt class="py-line">        <tt class="py-name">size_x2</tt><tt class="py-op">,</tt> <tt class="py-name">size_y2</tt> <tt class="py-op">=</tt> <tt class="py-name">image2</tt><tt class="py-op">.</tt><tt class="py-name">size</tt> </tt>
+<a name="L497"></a><tt class="py-lineno">497</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">size_x1</tt> <tt class="py-op">!=</tt> <tt class="py-name">size_x2</tt> <tt class="py-keyword">or</tt> </tt>
+<a name="L498"></a><tt class="py-lineno">498</tt>  <tt class="py-line">            <tt class="py-name">size_y1</tt> <tt class="py-op">!=</tt> <tt class="py-name">size_y2</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L499"></a><tt class="py-lineno">499</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-number">0</tt> </tt>
+<a name="L500"></a><tt class="py-lineno">500</tt>  <tt class="py-line"> </tt>
+<a name="L501"></a><tt class="py-lineno">501</tt>  <tt class="py-line">        <tt class="py-comment"># Images are the same size</tt> </tt>
+<a name="L502"></a><tt class="py-lineno">502</tt>  <tt class="py-line">        <tt class="py-comment"># Return the percent of pixels that are equal.</tt> </tt>
+<a name="L503"></a><tt class="py-lineno">503</tt>  <tt class="py-line">        <tt class="py-name">numPixelsSame</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L504"></a><tt class="py-lineno">504</tt>  <tt class="py-line">        <tt class="py-name">numPixelsTotal</tt> <tt class="py-op">=</tt> <tt class="py-name">size_x1</tt> <tt class="py-op">*</tt> <tt class="py-name">size_y1</tt> </tt>
+<a name="L505"></a><tt class="py-lineno">505</tt>  <tt class="py-line">        <tt class="py-name">image1Pixels</tt> <tt class="py-op">=</tt> <tt class="py-name">image1</tt><tt class="py-op">.</tt><tt class="py-name">load</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L506"></a><tt class="py-lineno">506</tt>  <tt class="py-line">        <tt class="py-name">image2Pixels</tt> <tt class="py-op">=</tt> <tt class="py-name">image2</tt><tt class="py-op">.</tt><tt class="py-name">load</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L507"></a><tt class="py-lineno">507</tt>  <tt class="py-line"> </tt>
+<a name="L508"></a><tt class="py-lineno">508</tt>  <tt class="py-line">        <tt class="py-comment"># Loop over all pixels, comparing pixel in image1 to image2</tt> </tt>
+<a name="L509"></a><tt class="py-lineno">509</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">x</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">size_x1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L510"></a><tt class="py-lineno">510</tt>  <tt class="py-line">            <tt class="py-keyword">for</tt> <tt class="py-name">y</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">size_y1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L511"></a><tt class="py-lineno">511</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">image1Pixels</tt><tt class="py-op">[</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-name">image2Pixels</tt><tt class="py-op">[</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L512"></a><tt class="py-lineno">512</tt>  <tt class="py-line">                    <tt class="py-name">numPixelsSame</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L513"></a><tt class="py-lineno">513</tt>  <tt class="py-line"> </tt>
+<a name="L514"></a><tt class="py-lineno">514</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">numPixelsSame</tt> <tt class="py-op">/</tt> <tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">numPixelsTotal</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L515"></a><tt class="py-lineno">515</tt>  <tt class="py-line"> </tt>
+<a name="L516"></a><tt class="py-lineno">516</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="AdbClient.sameAs"></a><div id="AdbClient.sameAs-def"><a name="L517"></a><tt class="py-lineno">517</tt> <a class="py-toggle" href="#" id="AdbClient.sameAs-toggle" onclick="return toggle('AdbClient.sameAs');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#sameAs">sameAs</a><tt class="py-op">(</tt><tt class="py-param">image1</tt><tt class="py-op">,</tt> <tt class="py-param">image2</tt><tt class="py-op">,</tt> <tt class="py-param">percent</tt><tt class="py-op">=</tt><tt class="py-number">1.0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AdbClient.sameAs-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AdbClient.sameAs-expanded"><a name="L518"></a><tt class="py-lineno">518</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L519"></a><tt class="py-lineno">519</tt>  <tt class="py-line"><tt class="py-docstring">        Compares 2 images</tt> </tt>
+<a name="L520"></a><tt class="py-lineno">520</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L521"></a><tt class="py-lineno">521</tt>  <tt class="py-line"><tt class="py-docstring">        @author: catshoes</tt> </tt>
+<a name="L522"></a><tt class="py-lineno">522</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L523"></a><tt class="py-lineno">523</tt>  <tt class="py-line"> </tt>
+<a name="L524"></a><tt class="py-lineno">524</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt id="link-120" class="py-name" targets="Class com.dtmilano.android.adb.adbclient.AdbClient=com.dtmilano.android.adb.adbclient.AdbClient-class.html"><a title="com.dtmilano.android.adb.adbclient.AdbClient" class="py-name" href="#" onclick="return doclink('link-120', 'AdbClient', 'link-120');">AdbClient</a></tt><tt class="py-op">.</tt><tt id="link-121" class="py-name" targets="Static Method com.dtmilano.android.adb.adbclient.AdbClient.percentSame()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#percentSame"><a title="com.dtmilano.android.adb.adbclient.AdbClient.percentSame" class="py-name" href="#" onclick="return doclink('link-121', 'percentSame', 'link-121');">percentSame</a></tt><tt class="py-op">(</tt><tt class="py-name">image1</tt><tt class="py-op">,</tt> <tt class="py-name">image2</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">percent</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L525"></a><tt class="py-lineno">525</tt>  <tt class="py-line"> </tt>
+<a name="L526"></a><tt class="py-lineno">526</tt>  <tt class="py-line"> </tt>
+<a name="L527"></a><tt class="py-lineno">527</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">'__main__'</tt><tt class="py-op">:</tt> </tt>
+<a name="L528"></a><tt class="py-lineno">528</tt>  <tt class="py-line">    <tt class="py-name">adbClient</tt> <tt class="py-op">=</tt> <tt id="link-122" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient" class="py-name" href="#" onclick="return doclink('link-122', 'AdbClient', 'link-120');">AdbClient</a></tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">[</tt><tt class="py-string">'ANDROID_SERIAL'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L529"></a><tt class="py-lineno">529</tt>  <tt class="py-line">    <tt class="py-name">INTERACTIVE</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L530"></a><tt class="py-lineno">530</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">INTERACTIVE</tt><tt class="py-op">:</tt> </tt>
+<a name="L531"></a><tt class="py-lineno">531</tt>  <tt class="py-line">        <tt class="py-name">sout</tt> <tt class="py-op">=</tt> <tt class="py-name">adbClient</tt><tt class="py-op">.</tt><tt id="link-123" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-123', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L532"></a><tt class="py-lineno">532</tt>  <tt class="py-line">        <tt class="py-name">prompt</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">".+@android:(.*) [$#] \r\r\n"</tt><tt class="py-op">)</tt> </tt>
+<a name="L533"></a><tt class="py-lineno">533</tt>  <tt class="py-line">        <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
+<a name="L534"></a><tt class="py-lineno">534</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L535"></a><tt class="py-lineno">535</tt>  <tt class="py-line">                <tt class="py-name">cmd</tt> <tt class="py-op">=</tt> <tt class="py-name">raw_input</tt><tt class="py-op">(</tt><tt class="py-string">'adb $ '</tt><tt class="py-op">)</tt> </tt>
+<a name="L536"></a><tt class="py-lineno">536</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt> <tt class="py-name">EOFError</tt><tt class="py-op">:</tt> </tt>
+<a name="L537"></a><tt class="py-lineno">537</tt>  <tt class="py-line">                <tt class="py-keyword">break</tt> </tt>
+<a name="L538"></a><tt class="py-lineno">538</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">cmd</tt> <tt class="py-op">==</tt> <tt class="py-string">'exit'</tt><tt class="py-op">:</tt> </tt>
+<a name="L539"></a><tt class="py-lineno">539</tt>  <tt class="py-line">                <tt class="py-keyword">break</tt> </tt>
+<a name="L540"></a><tt class="py-lineno">540</tt>  <tt class="py-line">            <tt class="py-name">adbClient</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt id="link-124" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__send" class="py-name" href="#" onclick="return doclink('link-124', '__send', 'link-55');">__send</a></tt><tt class="py-op">(</tt><tt class="py-name">cmd</tt> <tt class="py-op">+</tt> <tt class="py-string">"\r\n"</tt><tt class="py-op">)</tt> </tt>
+<a name="L541"></a><tt class="py-lineno">541</tt>  <tt class="py-line">            <tt class="py-name">sout</tt><tt class="py-op">.</tt><tt class="py-name">readline</tt><tt class="py-op">(</tt><tt class="py-number">4096</tt><tt class="py-op">)</tt>  <tt class="py-comment"># eat first line, which is the command</tt> </tt>
+<a name="L542"></a><tt class="py-lineno">542</tt>  <tt class="py-line">            <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
+<a name="L543"></a><tt class="py-lineno">543</tt>  <tt class="py-line">                <tt class="py-name">line</tt> <tt class="py-op">=</tt> <tt class="py-name">sout</tt><tt class="py-op">.</tt><tt class="py-name">readline</tt><tt class="py-op">(</tt><tt class="py-number">4096</tt><tt class="py-op">)</tt> </tt>
+<a name="L544"></a><tt class="py-lineno">544</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">prompt</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L545"></a><tt class="py-lineno">545</tt>  <tt class="py-line">                    <tt class="py-keyword">break</tt> </tt>
+<a name="L546"></a><tt class="py-lineno">546</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-name">line</tt><tt class="py-op">,</tt> </tt>
+<a name="L547"></a><tt class="py-lineno">547</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">line</tt><tt class="py-op">:</tt> </tt>
+<a name="L548"></a><tt class="py-lineno">548</tt>  <tt class="py-line">                    <tt class="py-keyword">break</tt> </tt>
+<a name="L549"></a><tt class="py-lineno">549</tt>  <tt class="py-line"> </tt>
+<a name="L550"></a><tt class="py-lineno">550</tt>  <tt class="py-line">        <tt class="py-keyword">print</tt> <tt class="py-string">"\nBye"</tt> </tt>
+<a name="L551"></a><tt class="py-lineno">551</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L552"></a><tt class="py-lineno">552</tt>  <tt class="py-line">        <tt class="py-keyword">print</tt> <tt class="py-string">'date:'</tt><tt class="py-op">,</tt> <tt class="py-name">adbClient</tt><tt class="py-op">.</tt><tt id="link-125" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-125', 'shell', 'link-76');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'date'</tt><tt class="py-op">)</tt> </tt>
+<a name="L553"></a><tt class="py-lineno">553</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:36:02 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android.adb.adbclient.AdbClient-class.html b/AndroidViewClient/doc/com.dtmilano.android.adb.adbclient.AdbClient-class.html
new file mode 100755
index 0000000..3add511
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android.adb.adbclient.AdbClient-class.html
@@ -0,0 +1,951 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android.adb.adbclient.AdbClient</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="com.dtmilano.android.adb-module.html">Package&nbsp;adb</a> ::
+        <a href="com.dtmilano.android.adb.adbclient-module.html">Module&nbsp;adbclient</a> ::
+        Class&nbsp;AdbClient
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class AdbClient</h1><p class="nomargin-top"><span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient">source&nbsp;code</a></span></p>
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__init__"></a><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">serialno</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">hostname</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">localhost</code><code class="variable-quote">'</code></span>,
+        <span class="summary-sig-arg">port</span>=<span class="summary-sig-default">5037</span>,
+        <span class="summary-sig-arg">settransport</span>=<span class="summary-sig-default">True</span>,
+        <span class="summary-sig-arg">reconnect</span>=<span class="summary-sig-default">True</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.__init__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="setSerialno"></a><span class="summary-sig-name">setSerialno</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">serialno</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.setSerialno">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="setReconnect"></a><span class="summary-sig-name">setReconnect</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">val</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.setReconnect">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__connect"></a><span class="summary-sig-name">__connect</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.__connect">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="close"></a><span class="summary-sig-name">close</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.close">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__del__"></a><span class="summary-sig-name">__del__</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.__del__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__send"></a><span class="summary-sig-name">__send</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">msg</span>,
+        <span class="summary-sig-arg">checkok</span>=<span class="summary-sig-default">True</span>,
+        <span class="summary-sig-arg">reconnect</span>=<span class="summary-sig-default">False</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.__send">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__receive"></a><span class="summary-sig-name">__receive</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">nob</span>=<span class="summary-sig-default">None</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.__receive">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__checkOk"></a><span class="summary-sig-name">__checkOk</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.__checkOk">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="checkConnected"></a><span class="summary-sig-name">checkConnected</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.checkConnected">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="checkVersion"></a><span class="summary-sig-name">checkVersion</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">reconnect</span>=<span class="summary-sig-default">True</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.checkVersion">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__setTransport"></a><span class="summary-sig-name">__setTransport</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.__setTransport">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getDevices"></a><span class="summary-sig-name">getDevices</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.getDevices">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="shell"></a><span class="summary-sig-name">shell</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">cmd</span>=<span class="summary-sig-default">None</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.shell">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#getRestrictedScreen" class="summary-sig-name">getRestrictedScreen</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets <code>mRestrictedScreen</code> values from dumpsys.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.getRestrictedScreen">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__getProp"></a><span class="summary-sig-name">__getProp</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">key</span>,
+        <span class="summary-sig-arg">strip</span>=<span class="summary-sig-default">True</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.__getProp">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__getDisplayWidth"></a><span class="summary-sig-name">__getDisplayWidth</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">key</span>,
+        <span class="summary-sig-arg">strip</span>=<span class="summary-sig-default">True</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.__getDisplayWidth">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__getDisplayHeight"></a><span class="summary-sig-name">__getDisplayHeight</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">key</span>,
+        <span class="summary-sig-arg">strip</span>=<span class="summary-sig-default">True</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.__getDisplayHeight">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getSystemProperty"></a><span class="summary-sig-name">getSystemProperty</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">key</span>,
+        <span class="summary-sig-arg">strip</span>=<span class="summary-sig-default">True</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.getSystemProperty">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getProperty"></a><span class="summary-sig-name">getProperty</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">key</span>,
+        <span class="summary-sig-arg">strip</span>=<span class="summary-sig-default">True</span>)</span><br />
+      Gets the property value for key</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.getProperty">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getSdkVersion"></a><span class="summary-sig-name">getSdkVersion</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the SDK version.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.getSdkVersion">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="press"></a><span class="summary-sig-name">press</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>,
+        <span class="summary-sig-arg">eventType</span>=<span class="summary-sig-default">2</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.press">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="longPress"></a><span class="summary-sig-name">longPress</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.longPress">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="startActivity"></a><span class="summary-sig-name">startActivity</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">component</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">flags</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">uri</span>=<span class="summary-sig-default">None</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.startActivity">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="takeSnapshot"></a><span class="summary-sig-name">takeSnapshot</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">reconnect</span>=<span class="summary-sig-default">False</span>)</span><br />
+      Takes a snapshot of the device and return it as a PIL Image.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.takeSnapshot">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="touch"></a><span class="summary-sig-name">touch</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">x</span>,
+        <span class="summary-sig-arg">y</span>,
+        <span class="summary-sig-arg">eventType</span>=<span class="summary-sig-default">2</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.touch">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#drag" class="summary-sig-name">drag</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">(x0, y0)</span>,
+        <span class="summary-sig-arg">(x1, y1)</span>,
+        <span class="summary-sig-arg">duration</span>,
+        <span class="summary-sig-arg">steps</span>=<span class="summary-sig-default">1</span>)</span><br />
+      Sends drag event (actually it's using <code>input swipe</code> 
+      command.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.drag">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="type"></a><span class="summary-sig-name">type</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">text</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.type">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="wake"></a><span class="summary-sig-name">wake</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.wake">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#isLocked" class="summary-sig-name">isLocked</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Checks if the device screen is locked.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.isLocked">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#isScreenOn" class="summary-sig-name">isScreenOn</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Checks if the screen is ON.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.isScreenOn">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="unlock"></a><span class="summary-sig-name">unlock</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Unlocks the screen of the device.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.unlock">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== STATIC METHODS ==================== -->
+<a name="section-StaticMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Static Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-StaticMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="setAlarm"></a><span class="summary-sig-name">setAlarm</span>(<span class="summary-sig-arg">timeout</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.setAlarm">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#percentSame" class="summary-sig-name">percentSame</a>(<span class="summary-sig-arg">image1</span>,
+        <span class="summary-sig-arg">image2</span>)</span><br />
+      Returns the percent of pixels that are equal</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.percentSame">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#sameAs" class="summary-sig-name">sameAs</a>(<span class="summary-sig-arg">image1</span>,
+        <span class="summary-sig-arg">image2</span>,
+        <span class="summary-sig-arg">percent</span>=<span class="summary-sig-default">1.0</span>)</span><br />
+      Compares 2 images</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.sameAs">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== INSTANCE VARIABLES ==================== -->
+<a name="section-InstanceVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Variables</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceVariables"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="build"></a><span class="summary-name">build</span><br />
+      Build properties
+    </td>
+  </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Method Details</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-MethodDetails"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+</table>
+<a name="getRestrictedScreen"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getRestrictedScreen</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.getRestrictedScreen">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Gets <code>mRestrictedScreen</code> values from dumpsys. This is a 
+  method to obtain display dimensions</p>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="drag"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">drag</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">(x0, y0)</span>,
+        <span class="sig-arg">(x1, y1)</span>,
+        <span class="sig-arg">duration</span>,
+        <span class="sig-arg">steps</span>=<span class="sig-default">1</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.drag">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Sends drag event (actually it's using <code>input swipe</code> 
+  command.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>(x0</code></strong>, <strong class="pname"><code>y0)</code></strong> - starting point</li>
+        <li><strong class="pname"><code>(x1</code></strong>, <strong class="pname"><code>y1)</code></strong> - ending point</li>
+        <li><strong class="pname"><code>duration</code></strong> - duration of the event in ms</li>
+        <li><strong class="pname"><code>steps</code></strong> - number of steps (currently ignored by @{input swipe}</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="isLocked"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">isLocked</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.isLocked">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Checks if the device screen is locked.</p>
+  <p>@return True if the device screen is locked</p>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="isScreenOn"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">isScreenOn</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.isScreenOn">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Checks if the screen is ON.</p>
+  <p>@return True if the device screen is ON</p>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="percentSame"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">percentSame</span>(<span class="sig-arg">image1</span>,
+        <span class="sig-arg">image2</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.percentSame">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Returns the percent of pixels that are equal</p>
+  <dl class="fields">
+  </dl>
+<div class="fields">      <p><strong>Author:</strong>
+        catshoes
+      </p>
+</div></td></tr></table>
+</div>
+<a name="sameAs"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">sameAs</span>(<span class="sig-arg">image1</span>,
+        <span class="sig-arg">image2</span>,
+        <span class="sig-arg">percent</span>=<span class="sig-default">1.0</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#AdbClient.sameAs">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Compares 2 images</p>
+  <dl class="fields">
+  </dl>
+<div class="fields">      <p><strong>Author:</strong>
+        catshoes
+      </p>
+</div></td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:35:58 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android.adb.adbclient.Device-class.html b/AndroidViewClient/doc/com.dtmilano.android.adb.adbclient.Device-class.html
new file mode 100755
index 0000000..b294dee
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android.adb.adbclient.Device-class.html
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android.adb.adbclient.Device</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="com.dtmilano.android.adb-module.html">Package&nbsp;adb</a> ::
+        <a href="com.dtmilano.android.adb.adbclient-module.html">Module&nbsp;adbclient</a> ::
+        Class&nbsp;Device
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android.adb.adbclient.Device-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Device</h1><p class="nomargin-top"><span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#Device">source&nbsp;code</a></span></p>
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__init__"></a><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">serialno</span>,
+        <span class="summary-sig-arg">status</span>,
+        <span class="summary-sig-arg">qualifiers</span>=<span class="summary-sig-default">None</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#Device.__init__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__str__"></a><span class="summary-sig-name">__str__</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#Device.__str__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== STATIC METHODS ==================== -->
+<a name="section-StaticMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Static Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-StaticMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="factory"></a><span class="summary-sig-name">factory</span>(<span class="summary-sig-arg">_str</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.adb.adbclient-pysrc.html#Device.factory">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:35:58 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android.viewclient-module.html b/AndroidViewClient/doc/com.dtmilano.android.viewclient-module.html
new file mode 100755
index 0000000..ab2043d
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android.viewclient-module.html
@@ -0,0 +1,799 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android.viewclient</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        Module&nbsp;viewclient
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android.viewclient-module.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module viewclient</h1><p class="nomargin-top"><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html">source&nbsp;code</a></span></p>
+<pre class="literalblock">
+
+Copyright (C) 2012-2014  Diego Torres Milano
+Created on Feb 2, 2012
+
+Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+@author: Diego Torres Milano
+
+</pre>
+
+<hr />
+<div class="fields">      <p><strong>Version:</strong>
+        5.6.3
+      </p>
+</div><!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Classes</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Classes"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="com.dtmilano.android.viewclient.Window-class.html" class="summary-name">Window</a><br />
+      Window class
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="com.dtmilano.android.viewclient.ViewNotFoundException-class.html" class="summary-name">ViewNotFoundException</a><br />
+      ViewNotFoundException is raised when a View is not found.
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="com.dtmilano.android.viewclient.View-class.html" class="summary-name">View</a><br />
+      View class
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="com.dtmilano.android.viewclient.TextView-class.html" class="summary-name">TextView</a><br />
+      TextView class.
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="com.dtmilano.android.viewclient.EditText-class.html" class="summary-name">EditText</a><br />
+      EditText class.
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html" class="summary-name">UiAutomator2AndroidViewClient</a><br />
+      UiAutomator XML to AndroidViewClient
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="com.dtmilano.android.viewclient.Excerpt2Code-class.html" class="summary-name">Excerpt2Code</a><br />
+      Excerpt XML to code
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="com.dtmilano.android.viewclient.ViewClient-class.html" class="summary-name">ViewClient</a><br />
+      ViewClient is a <i>ViewServer</i> client.
+    </td>
+  </tr>
+</table>
+<!-- ==================== FUNCTIONS ==================== -->
+<a name="section-Functions"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Functions</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Functions"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient-module.html#_nd" class="summary-sig-name" onclick="show_private();">_nd</a>(<span class="summary-sig-arg">name</span>)</span><br />
+      Returns:
+      Returns a named decimal regex</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#_nd">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient-module.html#_nh" class="summary-sig-name" onclick="show_private();">_nh</a>(<span class="summary-sig-arg">name</span>)</span><br />
+      Returns:
+      Returns a named hex regex</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#_nh">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient-module.html#_ns" class="summary-sig-name" onclick="show_private();">_ns</a>(<span class="summary-sig-arg">name</span>,
+        <span class="summary-sig-arg">greedy</span>=<span class="summary-sig-default">False</span>)</span><br />
+      NOTICE: this is using a non-greedy (or minimal) regex</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#_ns">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Variables</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Variables"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG"></a><span class="summary-name">DEBUG</span> = <code title="False">False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_DEVICE"></a><span class="summary-name">DEBUG_DEVICE</span> = <code title="False">False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_RECEIVED"></a><span class="summary-name">DEBUG_RECEIVED</span> = <code title="False">False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_TREE"></a><span class="summary-name">DEBUG_TREE</span> = <code title="False">False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_GETATTR"></a><span class="summary-name">DEBUG_GETATTR</span> = <code title="False">False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_CALL"></a><span class="summary-name">DEBUG_CALL</span> = <code title="False">False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_COORDS"></a><span class="summary-name">DEBUG_COORDS</span> = <code title="False">False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_TOUCH"></a><span class="summary-name">DEBUG_TOUCH</span> = <code title="False">False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_STATUSBAR"></a><span class="summary-name">DEBUG_STATUSBAR</span> = <code title="False">False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_WINDOWS"></a><span class="summary-name">DEBUG_WINDOWS</span> = <code title="False">False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_BOUNDS"></a><span class="summary-name">DEBUG_BOUNDS</span> = <code title="False">False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_DISTANCE"></a><span class="summary-name">DEBUG_DISTANCE</span> = <code title="False">False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="WARNINGS"></a><span class="summary-name">WARNINGS</span> = <code title="False">False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="VIEW_SERVER_HOST"></a><span class="summary-name">VIEW_SERVER_HOST</span> = <code title="'localhost'"><code class="variable-quote">'</code><code class="variable-string">localhost</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="VIEW_SERVER_PORT"></a><span class="summary-name">VIEW_SERVER_PORT</span> = <code title="4939">4939</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="ADB_DEFAULT_PORT"></a><span class="summary-name">ADB_DEFAULT_PORT</span> = <code title="5555">5555</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="OFFSET"></a><span class="summary-name">OFFSET</span> = <code title="25">25</code><br />
+      This assumes the smallest touchable view on the screen is 
+      approximately 50px x 50px and touches it at <i 
+      class="math">(x+OFFSET, y+OFFSET)</i>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="com.dtmilano.android.viewclient-module.html#USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES" class="summary-name">USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES</a> = <code title="True">True</code><br />
+      Use <code>AdbClient</code> to obtain the needed properties.
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="com.dtmilano.android.viewclient-module.html#SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED" class="summary-name">SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED</a> = <code title="False">False</code><br />
+      Skips some classes related with the Action Bar and the 
+      PhoneWindow$DecorView in the coordinates calculation
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="com.dtmilano.android.viewclient-module.html#VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED" class="summary-name">VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED</a> = <code title="False">False</code><br />
+      Under some conditions the touch event should be longer [t(DOWN) 
+      &lt;&lt; t(UP)].
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="VERSION_SDK_PROPERTY"></a><span class="summary-name">VERSION_SDK_PROPERTY</span> = <code title="'ro.build.version.sdk'"><code class="variable-quote">'</code><code class="variable-string">ro.build.version.sdk</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="VERSION_RELEASE_PROPERTY"></a><span class="summary-name">VERSION_RELEASE_PROPERTY</span> = <code title="'ro.build.version.release'"><code class="variable-quote">'</code><code class="variable-string">ro.build.version.release</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="ID_PROPERTY"></a><span class="summary-name">ID_PROPERTY</span> = <code title="'mID'"><code class="variable-quote">'</code><code class="variable-string">mID</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="ID_PROPERTY_UI_AUTOMATOR"></a><span class="summary-name">ID_PROPERTY_UI_AUTOMATOR</span> = <code title="'uniqueId'"><code class="variable-quote">'</code><code class="variable-string">uniqueId</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="TEXT_PROPERTY"></a><span class="summary-name">TEXT_PROPERTY</span> = <code title="'text:mText'"><code class="variable-quote">'</code><code class="variable-string">text:mText</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="TEXT_PROPERTY_API_10"></a><span class="summary-name">TEXT_PROPERTY_API_10</span> = <code title="'mText'"><code class="variable-quote">'</code><code class="variable-string">mText</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="TEXT_PROPERTY_UI_AUTOMATOR"></a><span class="summary-name">TEXT_PROPERTY_UI_AUTOMATOR</span> = <code title="'text'"><code class="variable-quote">'</code><code class="variable-string">text</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="WS"></a><span class="summary-name">WS</span> = <code title="'\xfe'"><code class="variable-quote">'</code><code class="variable-string">\xfe</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="LEFT_PROPERTY"></a><span class="summary-name">LEFT_PROPERTY</span> = <code title="'layout:mLeft'"><code class="variable-quote">'</code><code class="variable-string">layout:mLeft</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="LEFT_PROPERTY_API_8"></a><span class="summary-name">LEFT_PROPERTY_API_8</span> = <code title="'mLeft'"><code class="variable-quote">'</code><code class="variable-string">mLeft</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="TOP_PROPERTY"></a><span class="summary-name">TOP_PROPERTY</span> = <code title="'layout:mTop'"><code class="variable-quote">'</code><code class="variable-string">layout:mTop</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="TOP_PROPERTY_API_8"></a><span class="summary-name">TOP_PROPERTY_API_8</span> = <code title="'mTop'"><code class="variable-quote">'</code><code class="variable-string">mTop</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="WIDTH_PROPERTY"></a><span class="summary-name">WIDTH_PROPERTY</span> = <code title="'layout:getWidth()'"><code class="variable-quote">'</code><code class="variable-string">layout:getWidth()</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="WIDTH_PROPERTY_API_8"></a><span class="summary-name">WIDTH_PROPERTY_API_8</span> = <code title="'getWidth()'"><code class="variable-quote">'</code><code class="variable-string">getWidth()</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="HEIGHT_PROPERTY"></a><span class="summary-name">HEIGHT_PROPERTY</span> = <code title="'layout:getHeight()'"><code class="variable-quote">'</code><code class="variable-string">layout:getHeight()</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="HEIGHT_PROPERTY_API_8"></a><span class="summary-name">HEIGHT_PROPERTY_API_8</span> = <code title="'getHeight()'"><code class="variable-quote">'</code><code class="variable-string">getHeight()</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="GET_VISIBILITY_PROPERTY"></a><span class="summary-name">GET_VISIBILITY_PROPERTY</span> = <code title="'getVisibility()'"><code class="variable-quote">'</code><code class="variable-string">getVisibility()</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="LAYOUT_TOP_MARGIN_PROPERTY"></a><span class="summary-name">LAYOUT_TOP_MARGIN_PROPERTY</span> = <code title="'layout:layout_topMargin'"><code class="variable-quote">'</code><code class="variable-string">layout:layout_topMargin</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="VISIBLE"></a><span class="summary-name">VISIBLE</span> = <code title="0">0</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="INVISIBLE"></a><span class="summary-name">INVISIBLE</span> = <code title="4">4</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="GONE"></a><span class="summary-name">GONE</span> = <code title="8">8</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="IP_RE"></a><span class="summary-name">IP_RE</span> = <code title="re.compile(r'^(\d{1,3}\.){3}\d{1,3}$')">re.compile(r'^<code class="re-group">(</code>\d<code class="re-op">{1,3}</code>\.<code class="re-group">)</code><code class="re-op">{3}</code>\d<code class="re-op">{1,3}</code>$')</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="ID_RE"></a><span class="summary-name">ID_RE</span> = <code title="re.compile(r'id/([^/]*)(/(\d+))?')">re.compile(r'id/<code class="re-group">(</code><code class="re-group">[^</code>/<code class="re-group">]</code><code class="re-op">*</code><code class="re-group">)</code><code class="re-group">(</code>/<code class="re-group">(</code>\d<code class="re-op">+</code><code class="re-group">)</code><code class="re-group">)</code><code class="re-op">?</code>')</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'com.dtmilano.android'"><code class="variable-quote">'</code><code class="variable-string">com.dtmilano.android</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+</table>
+<!-- ==================== FUNCTION DETAILS ==================== -->
+<a name="section-FunctionDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Function Details</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-FunctionDetails"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+</table>
+<a name="_nd"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">_nd</span>(<span class="sig-arg">name</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#_nd">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>Returns a named decimal regex</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="_nh"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">_nh</span>(<span class="sig-arg">name</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#_nh">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>Returns a named hex regex</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="_ns"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">_ns</span>(<span class="sig-arg">name</span>,
+        <span class="sig-arg">greedy</span>=<span class="sig-default">False</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#_ns">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>NOTICE: this is using a non-greedy (or minimal) regex</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>name</code></strong> (str) - the name used to tag the expression</li>
+        <li><strong class="pname"><code>greedy</code></strong> (bool) - Whether the regex is greedy or not</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>Returns a named string regex (only non-whitespace characters 
+          allowed)</dd>
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Variables Details</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-VariablesDetails"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+</table>
+<a name="USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES</h3>
+  <p>Use <code>AdbClient</code> to obtain the needed properties. If this is
+  <code>False</code> then <code>adb shell getprop</code> is used</p>
+  <dl class="fields">
+  </dl>
+  <dl class="fields">
+    <dt>Value:</dt>
+      <dd><table><tr><td><pre class="variable">
+True
+</pre></td></tr></table>
+</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED</h3>
+  <p>Skips some classes related with the Action Bar and the 
+  PhoneWindow$DecorView in the coordinates calculation</p>
+  <dl class="fields">
+  </dl>
+<div class="fields">      <p><strong>See Also:</strong>
+        <a href="com.dtmilano.android.viewclient.View-class.html#getXY" 
+        class="link">View.getXY()</a>
+      </p>
+</div>  <dl class="fields">
+    <dt>Value:</dt>
+      <dd><table><tr><td><pre class="variable">
+False
+</pre></td></tr></table>
+</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED</h3>
+  <p>Under some conditions the touch event should be longer [t(DOWN) 
+  &lt;&lt; t(UP)]. <code>True</code> enables a workaround to delay the 
+  events.</p>
+  <dl class="fields">
+  </dl>
+  <dl class="fields">
+    <dt>Value:</dt>
+      <dd><table><tr><td><pre class="variable">
+False
+</pre></td></tr></table>
+</dd>
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:35:58 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android.viewclient-pysrc.html b/AndroidViewClient/doc/com.dtmilano.android.viewclient-pysrc.html
new file mode 100755
index 0000000..3831274
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android.viewclient-pysrc.html
@@ -0,0 +1,2742 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android.viewclient</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        Module&nbsp;viewclient
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android.viewclient-pysrc.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="com.dtmilano.android.viewclient-module.html">Module com.dtmilano.android.viewclient</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno">   1</tt>  <tt class="py-line"><tt class="py-comment"># -*- coding: utf-8 -*-</tt> </tt>
+<a name="L2"></a><tt class="py-lineno">   2</tt>  <tt class="py-line"><tt class="py-docstring">'''</tt> </tt>
+<a name="L3"></a><tt class="py-lineno">   3</tt>  <tt class="py-line"><tt class="py-docstring">Copyright (C) 2012-2014  Diego Torres Milano</tt> </tt>
+<a name="L4"></a><tt class="py-lineno">   4</tt>  <tt class="py-line"><tt class="py-docstring">Created on Feb 2, 2012</tt> </tt>
+<a name="L5"></a><tt class="py-lineno">   5</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L6"></a><tt class="py-lineno">   6</tt>  <tt class="py-line"><tt class="py-docstring">Licensed under the Apache License, Version 2.0 (the "License");</tt> </tt>
+<a name="L7"></a><tt class="py-lineno">   7</tt>  <tt class="py-line"><tt class="py-docstring">you may not use this file except in compliance with the License.</tt> </tt>
+<a name="L8"></a><tt class="py-lineno">   8</tt>  <tt class="py-line"><tt class="py-docstring">You may obtain a copy of the License at</tt> </tt>
+<a name="L9"></a><tt class="py-lineno">   9</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L10"></a><tt class="py-lineno">  10</tt>  <tt class="py-line"><tt class="py-docstring">       http://www.apache.org/licenses/LICENSE-2.0</tt> </tt>
+<a name="L11"></a><tt class="py-lineno">  11</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L12"></a><tt class="py-lineno">  12</tt>  <tt class="py-line"><tt class="py-docstring">Unless required by applicable law or agreed to in writing, software</tt> </tt>
+<a name="L13"></a><tt class="py-lineno">  13</tt>  <tt class="py-line"><tt class="py-docstring">distributed under the License is distributed on an "AS IS" BASIS,</tt> </tt>
+<a name="L14"></a><tt class="py-lineno">  14</tt>  <tt class="py-line"><tt class="py-docstring">WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</tt> </tt>
+<a name="L15"></a><tt class="py-lineno">  15</tt>  <tt class="py-line"><tt class="py-docstring">See the License for the specific language governing permissions and</tt> </tt>
+<a name="L16"></a><tt class="py-lineno">  16</tt>  <tt class="py-line"><tt class="py-docstring">limitations under the License.</tt> </tt>
+<a name="L17"></a><tt class="py-lineno">  17</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L18"></a><tt class="py-lineno">  18</tt>  <tt class="py-line"><tt class="py-docstring">@author: Diego Torres Milano</tt> </tt>
+<a name="L19"></a><tt class="py-lineno">  19</tt>  <tt class="py-line"><tt class="py-docstring">'''</tt> </tt>
+<a name="L20"></a><tt class="py-lineno">  20</tt>  <tt class="py-line"> </tt>
+<a name="L21"></a><tt class="py-lineno">  21</tt>  <tt class="py-line"><tt class="py-name">__version__</tt> <tt class="py-op">=</tt> <tt class="py-string">'5.6.3'</tt> </tt>
+<a name="L22"></a><tt class="py-lineno">  22</tt>  <tt class="py-line"> </tt>
+<a name="L23"></a><tt class="py-lineno">  23</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> </tt>
+<a name="L24"></a><tt class="py-lineno">  24</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">warnings</tt> </tt>
+<a name="L25"></a><tt class="py-lineno">  25</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">executable</tt><tt class="py-op">:</tt> </tt>
+<a name="L26"></a><tt class="py-lineno">  26</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'monkeyrunner'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">executable</tt><tt class="py-op">:</tt> </tt>
+<a name="L27"></a><tt class="py-lineno">  27</tt>  <tt class="py-line">        <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt> </tt>
+<a name="L28"></a><tt class="py-lineno">  28</tt>  <tt class="py-line">    <tt class="py-string">'''</tt> </tt>
+<a name="L29"></a><tt class="py-lineno">  29</tt>  <tt class="py-line"><tt class="py-string"></tt> </tt>
+<a name="L30"></a><tt class="py-lineno">  30</tt>  <tt class="py-line"><tt class="py-string">    You should use a 'python' interpreter, not 'monkeyrunner' for this module</tt> </tt>
+<a name="L31"></a><tt class="py-lineno">  31</tt>  <tt class="py-line"><tt class="py-string"></tt> </tt>
+<a name="L32"></a><tt class="py-lineno">  32</tt>  <tt class="py-line"><tt class="py-string">    '''</tt><tt class="py-op">,</tt> <tt class="py-name">RuntimeWarning</tt><tt class="py-op">)</tt> </tt>
+<a name="L33"></a><tt class="py-lineno">  33</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">subprocess</tt> </tt>
+<a name="L34"></a><tt class="py-lineno">  34</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">re</tt> </tt>
+<a name="L35"></a><tt class="py-lineno">  35</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">socket</tt> </tt>
+<a name="L36"></a><tt class="py-lineno">  36</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
+<a name="L37"></a><tt class="py-lineno">  37</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">types</tt> </tt>
+<a name="L38"></a><tt class="py-lineno">  38</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">time</tt> </tt>
+<a name="L39"></a><tt class="py-lineno">  39</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">signal</tt> </tt>
+<a name="L40"></a><tt class="py-lineno">  40</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">copy</tt> </tt>
+<a name="L41"></a><tt class="py-lineno">  41</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">pickle</tt> </tt>
+<a name="L42"></a><tt class="py-lineno">  42</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">platform</tt> </tt>
+<a name="L43"></a><tt class="py-lineno">  43</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">xml</tt><tt class="py-op">.</tt><tt class="py-name">parsers</tt><tt class="py-op">.</tt><tt class="py-name">expat</tt> </tt>
+<a name="L44"></a><tt class="py-lineno">  44</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">com</tt><tt class="py-op">.</tt><tt class="py-name">dtmilano</tt><tt class="py-op">.</tt><tt id="link-0" class="py-name" targets="Package com.dtmilano.android=com.dtmilano.android-module.html"><a title="com.dtmilano.android" class="py-name" href="#" onclick="return doclink('link-0', 'android', 'link-0');">android</a></tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Package com.dtmilano.android.adb=com.dtmilano.android.adb-module.html"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-1', 'adb', 'link-1');">adb</a></tt> <tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Module com.dtmilano.android.adb.adbclient=com.dtmilano.android.adb.adbclient-module.html"><a title="com.dtmilano.android.adb.adbclient" class="py-name" href="#" onclick="return doclink('link-2', 'adbclient', 'link-2');">adbclient</a></tt> </tt>
+<a name="L45"></a><tt class="py-lineno">  45</tt>  <tt class="py-line"> </tt>
+<a name="L46"></a><tt class="py-lineno">  46</tt>  <tt class="py-line"><tt id="link-3" class="py-name" targets="Variable com.dtmilano.android.adb.adbclient.DEBUG=com.dtmilano.android.adb.adbclient-module.html#DEBUG,Variable com.dtmilano.android.viewclient.DEBUG=com.dtmilano.android.viewclient-module.html#DEBUG"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-3', 'DEBUG', 'link-3');">DEBUG</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L47"></a><tt class="py-lineno">  47</tt>  <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable com.dtmilano.android.viewclient.DEBUG_DEVICE=com.dtmilano.android.viewclient-module.html#DEBUG_DEVICE"><a title="com.dtmilano.android.viewclient.DEBUG_DEVICE" class="py-name" href="#" onclick="return doclink('link-4', 'DEBUG_DEVICE', 'link-4');">DEBUG_DEVICE</a></tt> <tt class="py-op">=</tt> <tt id="link-5" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-5', 'DEBUG', 'link-3');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L48"></a><tt class="py-lineno">  48</tt>  <tt class="py-line"><tt id="link-6" class="py-name" targets="Variable com.dtmilano.android.viewclient.DEBUG_RECEIVED=com.dtmilano.android.viewclient-module.html#DEBUG_RECEIVED"><a title="com.dtmilano.android.viewclient.DEBUG_RECEIVED" class="py-name" href="#" onclick="return doclink('link-6', 'DEBUG_RECEIVED', 'link-6');">DEBUG_RECEIVED</a></tt> <tt class="py-op">=</tt> <tt id="link-7" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-7', 'DEBUG', 'link-3');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L49"></a><tt class="py-lineno">  49</tt>  <tt class="py-line"><tt id="link-8" class="py-name" targets="Variable com.dtmilano.android.viewclient.DEBUG_TREE=com.dtmilano.android.viewclient-module.html#DEBUG_TREE"><a title="com.dtmilano.android.viewclient.DEBUG_TREE" class="py-name" href="#" onclick="return doclink('link-8', 'DEBUG_TREE', 'link-8');">DEBUG_TREE</a></tt> <tt class="py-op">=</tt> <tt id="link-9" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-9', 'DEBUG', 'link-3');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L50"></a><tt class="py-lineno">  50</tt>  <tt class="py-line"><tt id="link-10" class="py-name" targets="Variable com.dtmilano.android.viewclient.DEBUG_GETATTR=com.dtmilano.android.viewclient-module.html#DEBUG_GETATTR"><a title="com.dtmilano.android.viewclient.DEBUG_GETATTR" class="py-name" href="#" onclick="return doclink('link-10', 'DEBUG_GETATTR', 'link-10');">DEBUG_GETATTR</a></tt> <tt class="py-op">=</tt> <tt id="link-11" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-11', 'DEBUG', 'link-3');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L51"></a><tt class="py-lineno">  51</tt>  <tt class="py-line"><tt id="link-12" class="py-name" targets="Variable com.dtmilano.android.viewclient.DEBUG_CALL=com.dtmilano.android.viewclient-module.html#DEBUG_CALL"><a title="com.dtmilano.android.viewclient.DEBUG_CALL" class="py-name" href="#" onclick="return doclink('link-12', 'DEBUG_CALL', 'link-12');">DEBUG_CALL</a></tt> <tt class="py-op">=</tt> <tt id="link-13" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-13', 'DEBUG', 'link-3');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L52"></a><tt class="py-lineno">  52</tt>  <tt class="py-line"><tt id="link-14" class="py-name" targets="Variable com.dtmilano.android.viewclient.DEBUG_COORDS=com.dtmilano.android.viewclient-module.html#DEBUG_COORDS"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-14', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt> <tt class="py-op">=</tt> <tt id="link-15" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-15', 'DEBUG', 'link-3');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L53"></a><tt class="py-lineno">  53</tt>  <tt class="py-line"><tt id="link-16" class="py-name" targets="Variable com.dtmilano.android.viewclient.DEBUG_TOUCH=com.dtmilano.android.viewclient-module.html#DEBUG_TOUCH"><a title="com.dtmilano.android.viewclient.DEBUG_TOUCH" class="py-name" href="#" onclick="return doclink('link-16', 'DEBUG_TOUCH', 'link-16');">DEBUG_TOUCH</a></tt> <tt class="py-op">=</tt> <tt id="link-17" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-17', 'DEBUG', 'link-3');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L54"></a><tt class="py-lineno">  54</tt>  <tt class="py-line"><tt id="link-18" class="py-name" targets="Variable com.dtmilano.android.viewclient.DEBUG_STATUSBAR=com.dtmilano.android.viewclient-module.html#DEBUG_STATUSBAR"><a title="com.dtmilano.android.viewclient.DEBUG_STATUSBAR" class="py-name" href="#" onclick="return doclink('link-18', 'DEBUG_STATUSBAR', 'link-18');">DEBUG_STATUSBAR</a></tt> <tt class="py-op">=</tt> <tt id="link-19" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-19', 'DEBUG', 'link-3');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L55"></a><tt class="py-lineno">  55</tt>  <tt class="py-line"><tt id="link-20" class="py-name" targets="Variable com.dtmilano.android.viewclient.DEBUG_WINDOWS=com.dtmilano.android.viewclient-module.html#DEBUG_WINDOWS"><a title="com.dtmilano.android.viewclient.DEBUG_WINDOWS" class="py-name" href="#" onclick="return doclink('link-20', 'DEBUG_WINDOWS', 'link-20');">DEBUG_WINDOWS</a></tt> <tt class="py-op">=</tt> <tt id="link-21" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-21', 'DEBUG', 'link-3');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L56"></a><tt class="py-lineno">  56</tt>  <tt class="py-line"><tt id="link-22" class="py-name" targets="Variable com.dtmilano.android.viewclient.DEBUG_BOUNDS=com.dtmilano.android.viewclient-module.html#DEBUG_BOUNDS"><a title="com.dtmilano.android.viewclient.DEBUG_BOUNDS" class="py-name" href="#" onclick="return doclink('link-22', 'DEBUG_BOUNDS', 'link-22');">DEBUG_BOUNDS</a></tt> <tt class="py-op">=</tt> <tt id="link-23" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-23', 'DEBUG', 'link-3');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L57"></a><tt class="py-lineno">  57</tt>  <tt class="py-line"><tt id="link-24" class="py-name" targets="Variable com.dtmilano.android.viewclient.DEBUG_DISTANCE=com.dtmilano.android.viewclient-module.html#DEBUG_DISTANCE"><a title="com.dtmilano.android.viewclient.DEBUG_DISTANCE" class="py-name" href="#" onclick="return doclink('link-24', 'DEBUG_DISTANCE', 'link-24');">DEBUG_DISTANCE</a></tt> <tt class="py-op">=</tt> <tt id="link-25" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-25', 'DEBUG', 'link-3');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L58"></a><tt class="py-lineno">  58</tt>  <tt class="py-line"> </tt>
+<a name="L59"></a><tt class="py-lineno">  59</tt>  <tt class="py-line"><tt id="link-26" class="py-name" targets="Variable com.dtmilano.android.viewclient.WARNINGS=com.dtmilano.android.viewclient-module.html#WARNINGS"><a title="com.dtmilano.android.viewclient.WARNINGS" class="py-name" href="#" onclick="return doclink('link-26', 'WARNINGS', 'link-26');">WARNINGS</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L60"></a><tt class="py-lineno">  60</tt>  <tt class="py-line"> </tt>
+<a name="L61"></a><tt class="py-lineno">  61</tt>  <tt class="py-line"><tt id="link-27" class="py-name" targets="Variable com.dtmilano.android.viewclient.VIEW_SERVER_HOST=com.dtmilano.android.viewclient-module.html#VIEW_SERVER_HOST"><a title="com.dtmilano.android.viewclient.VIEW_SERVER_HOST" class="py-name" href="#" onclick="return doclink('link-27', 'VIEW_SERVER_HOST', 'link-27');">VIEW_SERVER_HOST</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'localhost'</tt> </tt>
+<a name="L62"></a><tt class="py-lineno">  62</tt>  <tt class="py-line"><tt id="link-28" class="py-name" targets="Variable com.dtmilano.android.viewclient.VIEW_SERVER_PORT=com.dtmilano.android.viewclient-module.html#VIEW_SERVER_PORT"><a title="com.dtmilano.android.viewclient.VIEW_SERVER_PORT" class="py-name" href="#" onclick="return doclink('link-28', 'VIEW_SERVER_PORT', 'link-28');">VIEW_SERVER_PORT</a></tt> <tt class="py-op">=</tt> <tt class="py-number">4939</tt> </tt>
+<a name="L63"></a><tt class="py-lineno">  63</tt>  <tt class="py-line"> </tt>
+<a name="L64"></a><tt class="py-lineno">  64</tt>  <tt class="py-line"><tt id="link-29" class="py-name" targets="Variable com.dtmilano.android.viewclient.ADB_DEFAULT_PORT=com.dtmilano.android.viewclient-module.html#ADB_DEFAULT_PORT"><a title="com.dtmilano.android.viewclient.ADB_DEFAULT_PORT" class="py-name" href="#" onclick="return doclink('link-29', 'ADB_DEFAULT_PORT', 'link-29');">ADB_DEFAULT_PORT</a></tt> <tt class="py-op">=</tt> <tt class="py-number">5555</tt> </tt>
+<a name="L65"></a><tt class="py-lineno">  65</tt>  <tt class="py-line"> </tt>
+<a name="L66"></a><tt class="py-lineno">  66</tt>  <tt class="py-line"><tt id="link-30" class="py-name" targets="Variable com.dtmilano.android.viewclient.OFFSET=com.dtmilano.android.viewclient-module.html#OFFSET"><a title="com.dtmilano.android.viewclient.OFFSET" class="py-name" href="#" onclick="return doclink('link-30', 'OFFSET', 'link-30');">OFFSET</a></tt> <tt class="py-op">=</tt> <tt class="py-number">25</tt> </tt>
+<a name="L67"></a><tt class="py-lineno">  67</tt>  <tt class="py-line"><tt class="py-string">''' This assumes the smallest touchable view on the screen is approximately 50px x 50px</tt> </tt>
+<a name="L68"></a><tt class="py-lineno">  68</tt>  <tt class="py-line"><tt class="py-string">    and touches it at M{(x+OFFSET, y+OFFSET)} '''</tt> </tt>
+<a name="L69"></a><tt class="py-lineno">  69</tt>  <tt class="py-line"> </tt>
+<a name="L70"></a><tt class="py-lineno">  70</tt>  <tt class="py-line"><tt id="link-31" class="py-name" targets="Variable com.dtmilano.android.viewclient.USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES=com.dtmilano.android.viewclient-module.html#USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES"><a title="com.dtmilano.android.viewclient.USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES" class="py-name" href="#" onclick="return doclink('link-31', 'USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES', 'link-31');">USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES</a></tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L71"></a><tt class="py-lineno">  71</tt>  <tt class="py-line"><tt class="py-string">''' Use C{AdbClient} to obtain the needed properties. If this is</tt> </tt>
+<a name="L72"></a><tt class="py-lineno">  72</tt>  <tt class="py-line"><tt class="py-string">    C{False} then C{adb shell getprop} is used '''</tt> </tt>
+<a name="L73"></a><tt class="py-lineno">  73</tt>  <tt class="py-line"> </tt>
+<a name="L74"></a><tt class="py-lineno">  74</tt>  <tt class="py-line"><tt id="link-32" class="py-name" targets="Variable com.dtmilano.android.viewclient.SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED=com.dtmilano.android.viewclient-module.html#SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED"><a title="com.dtmilano.android.viewclient.SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED" class="py-name" href="#" onclick="return doclink('link-32', 'SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED', 'link-32');">SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L75"></a><tt class="py-lineno">  75</tt>  <tt class="py-line"><tt class="py-string">''' Skips some classes related with the Action Bar and the PhoneWindow$DecorView in the</tt> </tt>
+<a name="L76"></a><tt class="py-lineno">  76</tt>  <tt class="py-line"><tt class="py-string">    coordinates calculation</tt> </tt>
+<a name="L77"></a><tt class="py-lineno">  77</tt>  <tt class="py-line"><tt class="py-string">    @see: L{View.getXY()} '''</tt> </tt>
+<a name="L78"></a><tt class="py-lineno">  78</tt>  <tt class="py-line"> </tt>
+<a name="L79"></a><tt class="py-lineno">  79</tt>  <tt class="py-line"><tt id="link-33" class="py-name" targets="Variable com.dtmilano.android.viewclient.VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED=com.dtmilano.android.viewclient-module.html#VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED"><a title="com.dtmilano.android.viewclient.VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED" class="py-name" href="#" onclick="return doclink('link-33', 'VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED', 'link-33');">VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L80"></a><tt class="py-lineno">  80</tt>  <tt class="py-line"><tt class="py-string">''' Under some conditions the touch event should be longer [t(DOWN) &lt;&lt; t(UP)]. C{True} enables a</tt> </tt>
+<a name="L81"></a><tt class="py-lineno">  81</tt>  <tt class="py-line"><tt class="py-string">    workaround to delay the events.'''</tt> </tt>
+<a name="L82"></a><tt class="py-lineno">  82</tt>  <tt class="py-line"> </tt>
+<a name="L83"></a><tt class="py-lineno">  83</tt>  <tt class="py-line"><tt class="py-comment"># some device properties</tt> </tt>
+<a name="L84"></a><tt class="py-lineno">  84</tt>  <tt class="py-line"><tt id="link-34" class="py-name" targets="Variable com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY=com.dtmilano.android.adb.adbclient-module.html#VERSION_SDK_PROPERTY,Variable com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY=com.dtmilano.android.viewclient-module.html#VERSION_SDK_PROPERTY"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-34', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'ro.build.version.sdk'</tt> </tt>
+<a name="L85"></a><tt class="py-lineno">  85</tt>  <tt class="py-line"><tt id="link-35" class="py-name" targets="Variable com.dtmilano.android.adb.adbclient.VERSION_RELEASE_PROPERTY=com.dtmilano.android.adb.adbclient-module.html#VERSION_RELEASE_PROPERTY,Variable com.dtmilano.android.viewclient.VERSION_RELEASE_PROPERTY=com.dtmilano.android.viewclient-module.html#VERSION_RELEASE_PROPERTY"><a title="com.dtmilano.android.adb.adbclient.VERSION_RELEASE_PROPERTY
+com.dtmilano.android.viewclient.VERSION_RELEASE_PROPERTY" class="py-name" href="#" onclick="return doclink('link-35', 'VERSION_RELEASE_PROPERTY', 'link-35');">VERSION_RELEASE_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'ro.build.version.release'</tt> </tt>
+<a name="L86"></a><tt class="py-lineno">  86</tt>  <tt class="py-line"> </tt>
+<a name="L87"></a><tt class="py-lineno">  87</tt>  <tt class="py-line"><tt class="py-comment"># some constants for the attributes</tt> </tt>
+<a name="L88"></a><tt class="py-lineno">  88</tt>  <tt class="py-line"><tt id="link-36" class="py-name" targets="Variable com.dtmilano.android.viewclient.ID_PROPERTY=com.dtmilano.android.viewclient-module.html#ID_PROPERTY"><a title="com.dtmilano.android.viewclient.ID_PROPERTY" class="py-name" href="#" onclick="return doclink('link-36', 'ID_PROPERTY', 'link-36');">ID_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'mID'</tt> </tt>
+<a name="L89"></a><tt class="py-lineno">  89</tt>  <tt class="py-line"><tt id="link-37" class="py-name" targets="Variable com.dtmilano.android.viewclient.ID_PROPERTY_UI_AUTOMATOR=com.dtmilano.android.viewclient-module.html#ID_PROPERTY_UI_AUTOMATOR"><a title="com.dtmilano.android.viewclient.ID_PROPERTY_UI_AUTOMATOR" class="py-name" href="#" onclick="return doclink('link-37', 'ID_PROPERTY_UI_AUTOMATOR', 'link-37');">ID_PROPERTY_UI_AUTOMATOR</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'uniqueId'</tt> </tt>
+<a name="L90"></a><tt class="py-lineno">  90</tt>  <tt class="py-line"><tt id="link-38" class="py-name" targets="Variable com.dtmilano.android.viewclient.TEXT_PROPERTY=com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY"><a title="com.dtmilano.android.viewclient.TEXT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-38', 'TEXT_PROPERTY', 'link-38');">TEXT_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'text:mText'</tt> </tt>
+<a name="L91"></a><tt class="py-lineno">  91</tt>  <tt class="py-line"><tt id="link-39" class="py-name" targets="Variable com.dtmilano.android.viewclient.TEXT_PROPERTY_API_10=com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY_API_10"><a title="com.dtmilano.android.viewclient.TEXT_PROPERTY_API_10" class="py-name" href="#" onclick="return doclink('link-39', 'TEXT_PROPERTY_API_10', 'link-39');">TEXT_PROPERTY_API_10</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'mText'</tt> </tt>
+<a name="L92"></a><tt class="py-lineno">  92</tt>  <tt class="py-line"><tt id="link-40" class="py-name" targets="Variable com.dtmilano.android.viewclient.TEXT_PROPERTY_UI_AUTOMATOR=com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY_UI_AUTOMATOR"><a title="com.dtmilano.android.viewclient.TEXT_PROPERTY_UI_AUTOMATOR" class="py-name" href="#" onclick="return doclink('link-40', 'TEXT_PROPERTY_UI_AUTOMATOR', 'link-40');">TEXT_PROPERTY_UI_AUTOMATOR</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'text'</tt> </tt>
+<a name="L93"></a><tt class="py-lineno">  93</tt>  <tt class="py-line"><tt id="link-41" class="py-name" targets="Variable com.dtmilano.android.viewclient.WS=com.dtmilano.android.viewclient-module.html#WS"><a title="com.dtmilano.android.viewclient.WS" class="py-name" href="#" onclick="return doclink('link-41', 'WS', 'link-41');">WS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"\xfe"</tt> <tt class="py-comment"># the whitespace replacement char for TEXT_PROPERTY</tt> </tt>
+<a name="L94"></a><tt class="py-lineno">  94</tt>  <tt class="py-line"><tt id="link-42" class="py-name" targets="Variable com.dtmilano.android.viewclient.LEFT_PROPERTY=com.dtmilano.android.viewclient-module.html#LEFT_PROPERTY"><a title="com.dtmilano.android.viewclient.LEFT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-42', 'LEFT_PROPERTY', 'link-42');">LEFT_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'layout:mLeft'</tt> </tt>
+<a name="L95"></a><tt class="py-lineno">  95</tt>  <tt class="py-line"><tt id="link-43" class="py-name" targets="Variable com.dtmilano.android.viewclient.LEFT_PROPERTY_API_8=com.dtmilano.android.viewclient-module.html#LEFT_PROPERTY_API_8"><a title="com.dtmilano.android.viewclient.LEFT_PROPERTY_API_8" class="py-name" href="#" onclick="return doclink('link-43', 'LEFT_PROPERTY_API_8', 'link-43');">LEFT_PROPERTY_API_8</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'mLeft'</tt> </tt>
+<a name="L96"></a><tt class="py-lineno">  96</tt>  <tt class="py-line"><tt id="link-44" class="py-name" targets="Variable com.dtmilano.android.viewclient.TOP_PROPERTY=com.dtmilano.android.viewclient-module.html#TOP_PROPERTY"><a title="com.dtmilano.android.viewclient.TOP_PROPERTY" class="py-name" href="#" onclick="return doclink('link-44', 'TOP_PROPERTY', 'link-44');">TOP_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'layout:mTop'</tt> </tt>
+<a name="L97"></a><tt class="py-lineno">  97</tt>  <tt class="py-line"><tt id="link-45" class="py-name" targets="Variable com.dtmilano.android.viewclient.TOP_PROPERTY_API_8=com.dtmilano.android.viewclient-module.html#TOP_PROPERTY_API_8"><a title="com.dtmilano.android.viewclient.TOP_PROPERTY_API_8" class="py-name" href="#" onclick="return doclink('link-45', 'TOP_PROPERTY_API_8', 'link-45');">TOP_PROPERTY_API_8</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'mTop'</tt> </tt>
+<a name="L98"></a><tt class="py-lineno">  98</tt>  <tt class="py-line"><tt id="link-46" class="py-name" targets="Variable com.dtmilano.android.viewclient.WIDTH_PROPERTY=com.dtmilano.android.viewclient-module.html#WIDTH_PROPERTY"><a title="com.dtmilano.android.viewclient.WIDTH_PROPERTY" class="py-name" href="#" onclick="return doclink('link-46', 'WIDTH_PROPERTY', 'link-46');">WIDTH_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'layout:getWidth()'</tt> </tt>
+<a name="L99"></a><tt class="py-lineno">  99</tt>  <tt class="py-line"><tt id="link-47" class="py-name" targets="Variable com.dtmilano.android.viewclient.WIDTH_PROPERTY_API_8=com.dtmilano.android.viewclient-module.html#WIDTH_PROPERTY_API_8"><a title="com.dtmilano.android.viewclient.WIDTH_PROPERTY_API_8" class="py-name" href="#" onclick="return doclink('link-47', 'WIDTH_PROPERTY_API_8', 'link-47');">WIDTH_PROPERTY_API_8</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'getWidth()'</tt> </tt>
+<a name="L100"></a><tt class="py-lineno"> 100</tt>  <tt class="py-line"><tt id="link-48" class="py-name" targets="Variable com.dtmilano.android.viewclient.HEIGHT_PROPERTY=com.dtmilano.android.viewclient-module.html#HEIGHT_PROPERTY"><a title="com.dtmilano.android.viewclient.HEIGHT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-48', 'HEIGHT_PROPERTY', 'link-48');">HEIGHT_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'layout:getHeight()'</tt> </tt>
+<a name="L101"></a><tt class="py-lineno"> 101</tt>  <tt class="py-line"><tt id="link-49" class="py-name" targets="Variable com.dtmilano.android.viewclient.HEIGHT_PROPERTY_API_8=com.dtmilano.android.viewclient-module.html#HEIGHT_PROPERTY_API_8"><a title="com.dtmilano.android.viewclient.HEIGHT_PROPERTY_API_8" class="py-name" href="#" onclick="return doclink('link-49', 'HEIGHT_PROPERTY_API_8', 'link-49');">HEIGHT_PROPERTY_API_8</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'getHeight()'</tt> </tt>
+<a name="L102"></a><tt class="py-lineno"> 102</tt>  <tt class="py-line"><tt id="link-50" class="py-name" targets="Variable com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY=com.dtmilano.android.viewclient-module.html#GET_VISIBILITY_PROPERTY"><a title="com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY" class="py-name" href="#" onclick="return doclink('link-50', 'GET_VISIBILITY_PROPERTY', 'link-50');">GET_VISIBILITY_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'getVisibility()'</tt> </tt>
+<a name="L103"></a><tt class="py-lineno"> 103</tt>  <tt class="py-line"><tt id="link-51" class="py-name" targets="Variable com.dtmilano.android.viewclient.LAYOUT_TOP_MARGIN_PROPERTY=com.dtmilano.android.viewclient-module.html#LAYOUT_TOP_MARGIN_PROPERTY"><a title="com.dtmilano.android.viewclient.LAYOUT_TOP_MARGIN_PROPERTY" class="py-name" href="#" onclick="return doclink('link-51', 'LAYOUT_TOP_MARGIN_PROPERTY', 'link-51');">LAYOUT_TOP_MARGIN_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'layout:layout_topMargin'</tt> </tt>
+<a name="L104"></a><tt class="py-lineno"> 104</tt>  <tt class="py-line"> </tt>
+<a name="L105"></a><tt class="py-lineno"> 105</tt>  <tt class="py-line"><tt class="py-comment"># visibility</tt> </tt>
+<a name="L106"></a><tt class="py-lineno"> 106</tt>  <tt class="py-line"><tt id="link-52" class="py-name" targets="Variable com.dtmilano.android.viewclient.VISIBLE=com.dtmilano.android.viewclient-module.html#VISIBLE"><a title="com.dtmilano.android.viewclient.VISIBLE" class="py-name" href="#" onclick="return doclink('link-52', 'VISIBLE', 'link-52');">VISIBLE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0x0</tt> </tt>
+<a name="L107"></a><tt class="py-lineno"> 107</tt>  <tt class="py-line"><tt id="link-53" class="py-name" targets="Variable com.dtmilano.android.viewclient.INVISIBLE=com.dtmilano.android.viewclient-module.html#INVISIBLE"><a title="com.dtmilano.android.viewclient.INVISIBLE" class="py-name" href="#" onclick="return doclink('link-53', 'INVISIBLE', 'link-53');">INVISIBLE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0x4</tt> </tt>
+<a name="L108"></a><tt class="py-lineno"> 108</tt>  <tt class="py-line"><tt id="link-54" class="py-name" targets="Variable com.dtmilano.android.viewclient.GONE=com.dtmilano.android.viewclient-module.html#GONE"><a title="com.dtmilano.android.viewclient.GONE" class="py-name" href="#" onclick="return doclink('link-54', 'GONE', 'link-54');">GONE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0x8</tt> </tt>
+<a name="L109"></a><tt class="py-lineno"> 109</tt>  <tt class="py-line"> </tt>
+<a name="L110"></a><tt class="py-lineno"> 110</tt>  <tt class="py-line"><tt class="py-name">RegexType</tt> <tt class="py-op">=</tt> <tt id="link-55" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.type()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#type,Method com.dtmilano.android.viewclient.EditText.type()=com.dtmilano.android.viewclient.EditText-class.html#type"><a title="com.dtmilano.android.adb.adbclient.AdbClient.type
+com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-55', 'type', 'link-55');">type</a></tt><tt class="py-op">(</tt><tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L111"></a><tt class="py-lineno"> 111</tt>  <tt class="py-line"><tt id="link-56" class="py-name" targets="Variable com.dtmilano.android.viewclient.IP_RE=com.dtmilano.android.viewclient-module.html#IP_RE"><a title="com.dtmilano.android.viewclient.IP_RE" class="py-name" href="#" onclick="return doclink('link-56', 'IP_RE', 'link-56');">IP_RE</a></tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'^(\d{1,3}\.){3}\d{1,3}$'</tt><tt class="py-op">)</tt> </tt>
+<a name="L112"></a><tt class="py-lineno"> 112</tt>  <tt class="py-line"><tt id="link-57" class="py-name" targets="Variable com.dtmilano.android.viewclient.ID_RE=com.dtmilano.android.viewclient-module.html#ID_RE"><a title="com.dtmilano.android.viewclient.ID_RE" class="py-name" href="#" onclick="return doclink('link-57', 'ID_RE', 'link-57');">ID_RE</a></tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'id/([^/]*)(/(\d+))?'</tt><tt class="py-op">)</tt> </tt>
+<a name="_nd"></a><div id="_nd-def"><a name="L113"></a><tt class="py-lineno"> 113</tt>  <tt class="py-line"> </tt>
+<a name="L114"></a><tt class="py-lineno"> 114</tt> <a class="py-toggle" href="#" id="_nd-toggle" onclick="return toggle('_nd');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient-module.html#_nd">_nd</a><tt class="py-op">(</tt><tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_nd-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_nd-expanded"><a name="L115"></a><tt class="py-lineno"> 115</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L116"></a><tt class="py-lineno"> 116</tt>  <tt class="py-line"><tt class="py-docstring">    @return: Returns a named decimal regex</tt> </tt>
+<a name="L117"></a><tt class="py-lineno"> 117</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L118"></a><tt class="py-lineno"> 118</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">'(?P&lt;%s&gt;\d+)'</tt> <tt class="py-op">%</tt> <tt class="py-name">name</tt> </tt>
+</div><a name="L119"></a><tt class="py-lineno"> 119</tt>  <tt class="py-line"> </tt>
+<a name="_nh"></a><div id="_nh-def"><a name="L120"></a><tt class="py-lineno"> 120</tt> <a class="py-toggle" href="#" id="_nh-toggle" onclick="return toggle('_nh');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient-module.html#_nh">_nh</a><tt class="py-op">(</tt><tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_nh-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_nh-expanded"><a name="L121"></a><tt class="py-lineno"> 121</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L122"></a><tt class="py-lineno"> 122</tt>  <tt class="py-line"><tt class="py-docstring">    @return: Returns a named hex regex</tt> </tt>
+<a name="L123"></a><tt class="py-lineno"> 123</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L124"></a><tt class="py-lineno"> 124</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">'(?P&lt;%s&gt;[0-9a-f]+)'</tt> <tt class="py-op">%</tt> <tt class="py-name">name</tt> </tt>
+</div><a name="L125"></a><tt class="py-lineno"> 125</tt>  <tt class="py-line"> </tt>
+<a name="_ns"></a><div id="_ns-def"><a name="L126"></a><tt class="py-lineno"> 126</tt> <a class="py-toggle" href="#" id="_ns-toggle" onclick="return toggle('_ns');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient-module.html#_ns">_ns</a><tt class="py-op">(</tt><tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">greedy</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_ns-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_ns-expanded"><a name="L127"></a><tt class="py-lineno"> 127</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L128"></a><tt class="py-lineno"> 128</tt>  <tt class="py-line"><tt class="py-docstring">    NOTICE: this is using a non-greedy (or minimal) regex</tt> </tt>
+<a name="L129"></a><tt class="py-lineno"> 129</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L130"></a><tt class="py-lineno"> 130</tt>  <tt class="py-line"><tt class="py-docstring">    @type name: str</tt> </tt>
+<a name="L131"></a><tt class="py-lineno"> 131</tt>  <tt class="py-line"><tt class="py-docstring">    @param name: the name used to tag the expression</tt> </tt>
+<a name="L132"></a><tt class="py-lineno"> 132</tt>  <tt class="py-line"><tt class="py-docstring">    @type greedy: bool</tt> </tt>
+<a name="L133"></a><tt class="py-lineno"> 133</tt>  <tt class="py-line"><tt class="py-docstring">    @param greedy: Whether the regex is greedy or not</tt> </tt>
+<a name="L134"></a><tt class="py-lineno"> 134</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L135"></a><tt class="py-lineno"> 135</tt>  <tt class="py-line"><tt class="py-docstring">    @return: Returns a named string regex (only non-whitespace characters allowed)</tt> </tt>
+<a name="L136"></a><tt class="py-lineno"> 136</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L137"></a><tt class="py-lineno"> 137</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">'(?P&lt;%s&gt;\S+%s)'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt> <tt class="py-keyword">if</tt> <tt class="py-name">greedy</tt> <tt class="py-keyword">else</tt> <tt class="py-string">'?'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L138"></a><tt class="py-lineno"> 138</tt>  <tt class="py-line"> </tt>
+<a name="Window"></a><div id="Window-def"><a name="L139"></a><tt class="py-lineno"> 139</tt>  <tt class="py-line"> </tt>
+<a name="L140"></a><tt class="py-lineno"> 140</tt> <a class="py-toggle" href="#" id="Window-toggle" onclick="return toggle('Window');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.Window-class.html">Window</a><tt class="py-op">:</tt> </tt>
+</div><div id="Window-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Window-expanded"><a name="L141"></a><tt class="py-lineno"> 141</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L142"></a><tt class="py-lineno"> 142</tt>  <tt class="py-line"><tt class="py-docstring">    Window class</tt> </tt>
+<a name="L143"></a><tt class="py-lineno"> 143</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L144"></a><tt class="py-lineno"> 144</tt>  <tt class="py-line"> </tt>
+<a name="Window.__init__"></a><div id="Window.__init__-def"><a name="L145"></a><tt class="py-lineno"> 145</tt> <a class="py-toggle" href="#" id="Window.__init__-toggle" onclick="return toggle('Window.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.Window-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">num</tt><tt class="py-op">,</tt> <tt class="py-param">winId</tt><tt class="py-op">,</tt> <tt class="py-param">activity</tt><tt class="py-op">,</tt> <tt class="py-param">wvx</tt><tt class="py-op">,</tt> <tt class="py-param">wvy</tt><tt class="py-op">,</tt> <tt class="py-param">wvw</tt><tt class="py-op">,</tt> <tt class="py-param">wvh</tt><tt class="py-op">,</tt> <tt class="py-param">px</tt><tt class="py-op">,</tt> <tt class="py-param">py</tt><tt class="py-op">,</tt> <tt class="py-param">visibility</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Window.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Window.__init__-expanded"><a name="L146"></a><tt class="py-lineno"> 146</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L147"></a><tt class="py-lineno"> 147</tt>  <tt class="py-line"><tt class="py-docstring">        Constructor</tt> </tt>
+<a name="L148"></a><tt class="py-lineno"> 148</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L149"></a><tt class="py-lineno"> 149</tt>  <tt class="py-line"><tt class="py-docstring">        @type num: int</tt> </tt>
+<a name="L150"></a><tt class="py-lineno"> 150</tt>  <tt class="py-line"><tt class="py-docstring">        @param num: Ordering number in Window Manager</tt> </tt>
+<a name="L151"></a><tt class="py-lineno"> 151</tt>  <tt class="py-line"><tt class="py-docstring">        @type winId: str</tt> </tt>
+<a name="L152"></a><tt class="py-lineno"> 152</tt>  <tt class="py-line"><tt class="py-docstring">        @param winId: the window ID</tt> </tt>
+<a name="L153"></a><tt class="py-lineno"> 153</tt>  <tt class="py-line"><tt class="py-docstring">        @type activity: str</tt> </tt>
+<a name="L154"></a><tt class="py-lineno"> 154</tt>  <tt class="py-line"><tt class="py-docstring">        @param activity: the activity (or sometimes other component) owning the window</tt> </tt>
+<a name="L155"></a><tt class="py-lineno"> 155</tt>  <tt class="py-line"><tt class="py-docstring">        @type wvx: int</tt> </tt>
+<a name="L156"></a><tt class="py-lineno"> 156</tt>  <tt class="py-line"><tt class="py-docstring">        @param wvx: window's virtual X</tt> </tt>
+<a name="L157"></a><tt class="py-lineno"> 157</tt>  <tt class="py-line"><tt class="py-docstring">        @type wvy: int</tt> </tt>
+<a name="L158"></a><tt class="py-lineno"> 158</tt>  <tt class="py-line"><tt class="py-docstring">        @param wvy: window's virtual Y</tt> </tt>
+<a name="L159"></a><tt class="py-lineno"> 159</tt>  <tt class="py-line"><tt class="py-docstring">        @type wvw: int</tt> </tt>
+<a name="L160"></a><tt class="py-lineno"> 160</tt>  <tt class="py-line"><tt class="py-docstring">        @param wvw: window's virtual width</tt> </tt>
+<a name="L161"></a><tt class="py-lineno"> 161</tt>  <tt class="py-line"><tt class="py-docstring">        @type wvh: int</tt> </tt>
+<a name="L162"></a><tt class="py-lineno"> 162</tt>  <tt class="py-line"><tt class="py-docstring">        @param wvh: window's virtual height</tt> </tt>
+<a name="L163"></a><tt class="py-lineno"> 163</tt>  <tt class="py-line"><tt class="py-docstring">        @type px: int</tt> </tt>
+<a name="L164"></a><tt class="py-lineno"> 164</tt>  <tt class="py-line"><tt class="py-docstring">        @param px: parent's X</tt> </tt>
+<a name="L165"></a><tt class="py-lineno"> 165</tt>  <tt class="py-line"><tt class="py-docstring">        @type py: int</tt> </tt>
+<a name="L166"></a><tt class="py-lineno"> 166</tt>  <tt class="py-line"><tt class="py-docstring">        @param py: parent's Y</tt> </tt>
+<a name="L167"></a><tt class="py-lineno"> 167</tt>  <tt class="py-line"><tt class="py-docstring">        @type visibility: int</tt> </tt>
+<a name="L168"></a><tt class="py-lineno"> 168</tt>  <tt class="py-line"><tt class="py-docstring">        @param visibility: visibility of the window</tt> </tt>
+<a name="L169"></a><tt class="py-lineno"> 169</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L170"></a><tt class="py-lineno"> 170</tt>  <tt class="py-line"> </tt>
+<a name="L171"></a><tt class="py-lineno"> 171</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-58" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-58', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"Window(%d, %s, %s, %d, %d, %d, %d, %d, %d, %d)"</tt> <tt class="py-op">%</tt> \ </tt>
+<a name="L172"></a><tt class="py-lineno"> 172</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">num</tt><tt class="py-op">,</tt> <tt class="py-name">winId</tt><tt class="py-op">,</tt> <tt class="py-name">activity</tt><tt class="py-op">,</tt> <tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt><tt class="py-op">,</tt> <tt class="py-name">wvw</tt><tt class="py-op">,</tt> <tt class="py-name">wvh</tt><tt class="py-op">,</tt> <tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">py</tt><tt class="py-op">,</tt> <tt class="py-name">visibility</tt><tt class="py-op">)</tt> </tt>
+<a name="L173"></a><tt class="py-lineno"> 173</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">num</tt> <tt class="py-op">=</tt> <tt class="py-name">num</tt> </tt>
+<a name="L174"></a><tt class="py-lineno"> 174</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">winId</tt> <tt class="py-op">=</tt> <tt class="py-name">winId</tt> </tt>
+<a name="L175"></a><tt class="py-lineno"> 175</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">activity</tt> <tt class="py-op">=</tt> <tt class="py-name">activity</tt> </tt>
+<a name="L176"></a><tt class="py-lineno"> 176</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wvx</tt> <tt class="py-op">=</tt> <tt class="py-name">wvx</tt> </tt>
+<a name="L177"></a><tt class="py-lineno"> 177</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt> <tt class="py-op">=</tt> <tt class="py-name">wvy</tt> </tt>
+<a name="L178"></a><tt class="py-lineno"> 178</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wvw</tt> <tt class="py-op">=</tt> <tt class="py-name">wvw</tt> </tt>
+<a name="L179"></a><tt class="py-lineno"> 179</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wvh</tt> <tt class="py-op">=</tt> <tt class="py-name">wvh</tt> </tt>
+<a name="L180"></a><tt class="py-lineno"> 180</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">px</tt> <tt class="py-op">=</tt> <tt class="py-name">px</tt> </tt>
+<a name="L181"></a><tt class="py-lineno"> 181</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">py</tt> <tt class="py-op">=</tt> <tt class="py-name">py</tt> </tt>
+<a name="L182"></a><tt class="py-lineno"> 182</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">visibility</tt> <tt class="py-op">=</tt> <tt class="py-name">visibility</tt> </tt>
+</div><a name="L183"></a><tt class="py-lineno"> 183</tt>  <tt class="py-line"> </tt>
+<a name="Window.__str__"></a><div id="Window.__str__-def"><a name="L184"></a><tt class="py-lineno"> 184</tt> <a class="py-toggle" href="#" id="Window.__str__-toggle" onclick="return toggle('Window.__str__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.Window-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Window.__str__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Window.__str__-expanded"><a name="L185"></a><tt class="py-lineno"> 185</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-string">"Window(%d, wid=%s, a=%s, x=%d, y=%d, w=%d, h=%d, px=%d, py=%d, v=%d)"</tt> <tt class="py-op">%</tt> \ </tt>
+<a name="L186"></a><tt class="py-lineno"> 186</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">num</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">winId</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">activity</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wvw</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wvh</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">py</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">visibility</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L187"></a><tt class="py-lineno"> 187</tt>  <tt class="py-line"> </tt>
+<a name="ViewNotFoundException"></a><div id="ViewNotFoundException-def"><a name="L188"></a><tt class="py-lineno"> 188</tt>  <tt class="py-line"> </tt>
+<a name="L189"></a><tt class="py-lineno"> 189</tt> <a class="py-toggle" href="#" id="ViewNotFoundException-toggle" onclick="return toggle('ViewNotFoundException');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewNotFoundException-class.html">ViewNotFoundException</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewNotFoundException-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ViewNotFoundException-expanded"><a name="L190"></a><tt class="py-lineno"> 190</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L191"></a><tt class="py-lineno"> 191</tt>  <tt class="py-line"><tt class="py-docstring">    ViewNotFoundException is raised when a View is not found.</tt> </tt>
+<a name="L192"></a><tt class="py-lineno"> 192</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L193"></a><tt class="py-lineno"> 193</tt>  <tt class="py-line"> </tt>
+<a name="ViewNotFoundException.__init__"></a><div id="ViewNotFoundException.__init__-def"><a name="L194"></a><tt class="py-lineno"> 194</tt> <a class="py-toggle" href="#" id="ViewNotFoundException.__init__-toggle" onclick="return toggle('ViewNotFoundException.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewNotFoundException-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewNotFoundException.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewNotFoundException.__init__-expanded"><a name="L195"></a><tt class="py-lineno"> 195</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">RegexType</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L196"></a><tt class="py-lineno"> 196</tt>  <tt class="py-line">            <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-string">"Couldn't find View with %s that matches '%s' in tree with root=%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">.</tt><tt class="py-name">pattern</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L197"></a><tt class="py-lineno"> 197</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L198"></a><tt class="py-lineno"> 198</tt>  <tt class="py-line">            <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-string">"Couldn't find View with %s='%s' in tree with root=%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L199"></a><tt class="py-lineno"> 199</tt>  <tt class="py-line">        <tt class="py-name">super</tt><tt class="py-op">(</tt><tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-59" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.__init__()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#__init__,Method com.dtmilano.android.adb.adbclient.Device.__init__()=com.dtmilano.android.adb.adbclient.Device-class.html#__init__,Method com.dtmilano.android.viewclient.Excerpt2Code.__init__()=com.dtmilano.android.viewclient.Excerpt2Code-class.html#__init__,Method com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.__init__()=com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#__init__,Method com.dtmilano.android.viewclient.View.__init__()=com.dtmilano.android.viewclient.View-class.html#__init__,Method com.dtmilano.android.viewclient.ViewClient.__init__()=com.dtmilano.android.viewclient.ViewClient-class.html#__init__,Method com.dtmilano.android.viewclient.ViewNotFoundException.__init__()=com.dtmilano.android.viewclient.ViewNotFoundException-class.html#__init__,Method com.dtmilano.android.viewclient.Window.__init__()=com.dtmilano.android.viewclient.Window-class.html#__init__"><a title="com.dtmilano.android.adb.adbclient.AdbClient.__init__
+com.dtmilano.android.adb.adbclient.Device.__init__
+com.dtmilano.android.viewclient.Excerpt2Code.__init__
+com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.__init__
+com.dtmilano.android.viewclient.View.__init__
+com.dtmilano.android.viewclient.ViewClient.__init__
+com.dtmilano.android.viewclient.ViewNotFoundException.__init__
+com.dtmilano.android.viewclient.Window.__init__" class="py-name" href="#" onclick="return doclink('link-59', '__init__', 'link-59');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L200"></a><tt class="py-lineno"> 200</tt>  <tt class="py-line"> </tt>
+<a name="View"></a><div id="View-def"><a name="L201"></a><tt class="py-lineno"> 201</tt> <a class="py-toggle" href="#" id="View-toggle" onclick="return toggle('View');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html">View</a><tt class="py-op">:</tt> </tt>
+</div><div id="View-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="View-expanded"><a name="L202"></a><tt class="py-lineno"> 202</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L203"></a><tt class="py-lineno"> 203</tt>  <tt class="py-line"><tt class="py-docstring">    View class</tt> </tt>
+<a name="L204"></a><tt class="py-lineno"> 204</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L205"></a><tt class="py-lineno"> 205</tt>  <tt class="py-line"> </tt>
+<a name="L206"></a><tt class="py-lineno"> 206</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="View.factory"></a><div id="View.factory-def"><a name="L207"></a><tt class="py-lineno"> 207</tt> <a class="py-toggle" href="#" id="View.factory-toggle" onclick="return toggle('View.factory');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#factory">factory</a><tt class="py-op">(</tt><tt class="py-param">arg1</tt><tt class="py-op">,</tt> <tt class="py-param">arg2</tt><tt class="py-op">,</tt> <tt class="py-param">version</tt><tt class="py-op">=</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-param">forceviewserveruse</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.factory-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.factory-expanded"><a name="L208"></a><tt class="py-lineno"> 208</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L209"></a><tt class="py-lineno"> 209</tt>  <tt class="py-line"><tt class="py-docstring">        View factory</tt> </tt>
+<a name="L210"></a><tt class="py-lineno"> 210</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L211"></a><tt class="py-lineno"> 211</tt>  <tt class="py-line"><tt class="py-docstring">        @type arg1: ClassType or dict</tt> </tt>
+<a name="L212"></a><tt class="py-lineno"> 212</tt>  <tt class="py-line"><tt class="py-docstring">        @type arg2: View instance or AdbClient</tt> </tt>
+<a name="L213"></a><tt class="py-lineno"> 213</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L214"></a><tt class="py-lineno"> 214</tt>  <tt class="py-line"> </tt>
+<a name="L215"></a><tt class="py-lineno"> 215</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-60" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.type
+com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-60', 'type', 'link-55');">type</a></tt><tt class="py-op">(</tt><tt class="py-name">arg1</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">types</tt><tt class="py-op">.</tt><tt class="py-name">ClassType</tt><tt class="py-op">:</tt> </tt>
+<a name="L216"></a><tt class="py-lineno"> 216</tt>  <tt class="py-line">            <tt class="py-name">cls</tt> <tt class="py-op">=</tt> <tt class="py-name">arg1</tt> </tt>
+<a name="L217"></a><tt class="py-lineno"> 217</tt>  <tt class="py-line">            <tt class="py-name">attrs</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L218"></a><tt class="py-lineno"> 218</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L219"></a><tt class="py-lineno"> 219</tt>  <tt class="py-line">            <tt class="py-name">cls</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L220"></a><tt class="py-lineno"> 220</tt>  <tt class="py-line">            <tt class="py-name">attrs</tt> <tt class="py-op">=</tt> <tt class="py-name">arg1</tt> </tt>
+<a name="L221"></a><tt class="py-lineno"> 221</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">arg2</tt><tt class="py-op">,</tt> <tt id="link-61" class="py-name" targets="Class com.dtmilano.android.viewclient.View=com.dtmilano.android.viewclient.View-class.html"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-61', 'View', 'link-61');">View</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L222"></a><tt class="py-lineno"> 222</tt>  <tt class="py-line">            <tt class="py-name">view</tt> <tt class="py-op">=</tt> <tt class="py-name">arg2</tt> </tt>
+<a name="L223"></a><tt class="py-lineno"> 223</tt>  <tt class="py-line">            <tt class="py-name">device</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L224"></a><tt class="py-lineno"> 224</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L225"></a><tt class="py-lineno"> 225</tt>  <tt class="py-line">            <tt class="py-name">device</tt> <tt class="py-op">=</tt> <tt class="py-name">arg2</tt> </tt>
+<a name="L226"></a><tt class="py-lineno"> 226</tt>  <tt class="py-line">            <tt class="py-name">view</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L227"></a><tt class="py-lineno"> 227</tt>  <tt class="py-line"> </tt>
+<a name="L228"></a><tt class="py-lineno"> 228</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">attrs</tt> <tt class="py-keyword">and</tt> <tt class="py-name">attrs</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'class'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L229"></a><tt class="py-lineno"> 229</tt>  <tt class="py-line">            <tt class="py-name">clazz</tt> <tt class="py-op">=</tt> <tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-string">'class'</tt><tt class="py-op">]</tt> </tt>
+<a name="L230"></a><tt class="py-lineno"> 230</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">clazz</tt> <tt class="py-op">==</tt> <tt class="py-string">'android.widget.TextView'</tt><tt class="py-op">:</tt> </tt>
+<a name="L231"></a><tt class="py-lineno"> 231</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt id="link-62" class="py-name" targets="Class com.dtmilano.android.viewclient.TextView=com.dtmilano.android.viewclient.TextView-class.html"><a title="com.dtmilano.android.viewclient.TextView" class="py-name" href="#" onclick="return doclink('link-62', 'TextView', 'link-62');">TextView</a></tt><tt class="py-op">(</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">version</tt><tt class="py-op">,</tt> <tt class="py-name">forceviewserveruse</tt><tt class="py-op">)</tt> </tt>
+<a name="L232"></a><tt class="py-lineno"> 232</tt>  <tt class="py-line">            <tt class="py-keyword">elif</tt> <tt class="py-name">clazz</tt> <tt class="py-op">==</tt> <tt class="py-string">'android.widget.EditText'</tt><tt class="py-op">:</tt> </tt>
+<a name="L233"></a><tt class="py-lineno"> 233</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt id="link-63" class="py-name" targets="Class com.dtmilano.android.viewclient.EditText=com.dtmilano.android.viewclient.EditText-class.html"><a title="com.dtmilano.android.viewclient.EditText" class="py-name" href="#" onclick="return doclink('link-63', 'EditText', 'link-63');">EditText</a></tt><tt class="py-op">(</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">version</tt><tt class="py-op">,</tt> <tt class="py-name">forceviewserveruse</tt><tt class="py-op">)</tt> </tt>
+<a name="L234"></a><tt class="py-lineno"> 234</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L235"></a><tt class="py-lineno"> 235</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt id="link-64" class="py-name"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-64', 'View', 'link-61');">View</a></tt><tt class="py-op">(</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">version</tt><tt class="py-op">,</tt> <tt class="py-name">forceviewserveruse</tt><tt class="py-op">)</tt> </tt>
+<a name="L236"></a><tt class="py-lineno"> 236</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">cls</tt><tt class="py-op">:</tt> </tt>
+<a name="L237"></a><tt class="py-lineno"> 237</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">view</tt><tt class="py-op">:</tt> </tt>
+<a name="L238"></a><tt class="py-lineno"> 238</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">cls</tt><tt class="py-op">.</tt><tt id="link-65" class="py-name" targets="Class Method com.dtmilano.android.viewclient.View.__copy()=com.dtmilano.android.viewclient.View-class.html#__copy"><a title="com.dtmilano.android.viewclient.View.__copy" class="py-name" href="#" onclick="return doclink('link-65', '__copy', 'link-65');">__copy</a></tt><tt class="py-op">(</tt><tt class="py-name">view</tt><tt class="py-op">)</tt> </tt>
+<a name="L239"></a><tt class="py-lineno"> 239</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L240"></a><tt class="py-lineno"> 240</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">cls</tt><tt class="py-op">(</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">version</tt><tt class="py-op">,</tt> <tt class="py-name">forceviewserveruse</tt><tt class="py-op">)</tt> </tt>
+<a name="L241"></a><tt class="py-lineno"> 241</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">view</tt><tt class="py-op">:</tt> </tt>
+<a name="L242"></a><tt class="py-lineno"> 242</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">view</tt><tt class="py-op">)</tt> </tt>
+<a name="L243"></a><tt class="py-lineno"> 243</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L244"></a><tt class="py-lineno"> 244</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt id="link-66" class="py-name"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-66', 'View', 'link-61');">View</a></tt><tt class="py-op">(</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">version</tt><tt class="py-op">,</tt> <tt class="py-name">forceviewserveruse</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L245"></a><tt class="py-lineno"> 245</tt>  <tt class="py-line"> </tt>
+<a name="L246"></a><tt class="py-lineno"> 246</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
+<a name="View.__copy"></a><div id="View.__copy-def"><a name="L247"></a><tt class="py-lineno"> 247</tt> <a class="py-toggle" href="#" id="View.__copy-toggle" onclick="return toggle('View.__copy');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#__copy">__copy</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">view</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__copy-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__copy-expanded"><a name="L248"></a><tt class="py-lineno"> 248</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L249"></a><tt class="py-lineno"> 249</tt>  <tt class="py-line"><tt class="py-docstring">        Copy constructor</tt> </tt>
+<a name="L250"></a><tt class="py-lineno"> 250</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L251"></a><tt class="py-lineno"> 251</tt>  <tt class="py-line"> </tt>
+<a name="L252"></a><tt class="py-lineno"> 252</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">cls</tt><tt class="py-op">(</tt><tt class="py-name">view</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">,</tt> <tt class="py-name">view</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">view</tt><tt class="py-op">.</tt><tt class="py-name">version</tt><tt class="py-op">,</tt> <tt class="py-name">view</tt><tt class="py-op">.</tt><tt class="py-name">forceviewserveruse</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L253"></a><tt class="py-lineno"> 253</tt>  <tt class="py-line"> </tt>
+<a name="View.__init__"></a><div id="View.__init__-def"><a name="L254"></a><tt class="py-lineno"> 254</tt> <a class="py-toggle" href="#" id="View.__init__-toggle" onclick="return toggle('View.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">map</tt><tt class="py-op">,</tt> <tt class="py-param">device</tt><tt class="py-op">,</tt> <tt class="py-param">version</tt><tt class="py-op">=</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-param">forceviewserveruse</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__init__-expanded"><a name="L255"></a><tt class="py-lineno"> 255</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L256"></a><tt class="py-lineno"> 256</tt>  <tt class="py-line"><tt class="py-docstring">        Constructor</tt> </tt>
+<a name="L257"></a><tt class="py-lineno"> 257</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L258"></a><tt class="py-lineno"> 258</tt>  <tt class="py-line"><tt class="py-docstring">        @type map: map</tt> </tt>
+<a name="L259"></a><tt class="py-lineno"> 259</tt>  <tt class="py-line"><tt class="py-docstring">        @param map: the map containing the (attribute, value) pairs</tt> </tt>
+<a name="L260"></a><tt class="py-lineno"> 260</tt>  <tt class="py-line"><tt class="py-docstring">        @type device: MonkeyDevice</tt> </tt>
+<a name="L261"></a><tt class="py-lineno"> 261</tt>  <tt class="py-line"><tt class="py-docstring">        @param device: the device containing this View</tt> </tt>
+<a name="L262"></a><tt class="py-lineno"> 262</tt>  <tt class="py-line"><tt class="py-docstring">        @type version: int</tt> </tt>
+<a name="L263"></a><tt class="py-lineno"> 263</tt>  <tt class="py-line"><tt class="py-docstring">        @param version: the Android SDK version number of the platform where this View belongs. If</tt> </tt>
+<a name="L264"></a><tt class="py-lineno"> 264</tt>  <tt class="py-line"><tt class="py-docstring">                        this is C{-1} then the Android SDK version will be obtained in this</tt> </tt>
+<a name="L265"></a><tt class="py-lineno"> 265</tt>  <tt class="py-line"><tt class="py-docstring">                        constructor.</tt> </tt>
+<a name="L266"></a><tt class="py-lineno"> 266</tt>  <tt class="py-line"><tt class="py-docstring">        @type forceviewserveruse: boolean</tt> </tt>
+<a name="L267"></a><tt class="py-lineno"> 267</tt>  <tt class="py-line"><tt class="py-docstring">        @param forceviewserveruse: Force the use of C{ViewServer} even if the conditions were given</tt> </tt>
+<a name="L268"></a><tt class="py-lineno"> 268</tt>  <tt class="py-line"><tt class="py-docstring">                        to use C{UiAutomator}.</tt> </tt>
+<a name="L269"></a><tt class="py-lineno"> 269</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L270"></a><tt class="py-lineno"> 270</tt>  <tt class="py-line"> </tt>
+<a name="L271"></a><tt class="py-lineno"> 271</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt> <tt class="py-op">=</tt> <tt class="py-name">map</tt> </tt>
+<a name="L272"></a><tt class="py-lineno"> 272</tt>  <tt class="py-line">        <tt class="py-string">''' The map that contains the C{attr},C{value} pairs '''</tt> </tt>
+<a name="L273"></a><tt class="py-lineno"> 273</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt> </tt>
+<a name="L274"></a><tt class="py-lineno"> 274</tt>  <tt class="py-line">        <tt class="py-string">''' The MonkeyDevice '''</tt> </tt>
+<a name="L275"></a><tt class="py-lineno"> 275</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">children</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L276"></a><tt class="py-lineno"> 276</tt>  <tt class="py-line">        <tt class="py-string">''' The children of this View '''</tt> </tt>
+<a name="L277"></a><tt class="py-lineno"> 277</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L278"></a><tt class="py-lineno"> 278</tt>  <tt class="py-line">        <tt class="py-string">''' The parent of this View '''</tt> </tt>
+<a name="L279"></a><tt class="py-lineno"> 279</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L280"></a><tt class="py-lineno"> 280</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L281"></a><tt class="py-lineno"> 281</tt>  <tt class="py-line">        <tt class="py-string">''' The current focus '''</tt> </tt>
+<a name="L282"></a><tt class="py-lineno"> 282</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L283"></a><tt class="py-lineno"> 283</tt>  <tt class="py-line">        <tt class="py-string">''' Build properties '''</tt> </tt>
+<a name="L284"></a><tt class="py-lineno"> 284</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">version</tt> <tt class="py-op">=</tt> <tt class="py-name">version</tt> </tt>
+<a name="L285"></a><tt class="py-lineno"> 285</tt>  <tt class="py-line">        <tt class="py-string">''' API version number '''</tt> </tt>
+<a name="L286"></a><tt class="py-lineno"> 286</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">forceviewserveruse</tt> <tt class="py-op">=</tt> <tt class="py-name">forceviewserveruse</tt> </tt>
+<a name="L287"></a><tt class="py-lineno"> 287</tt>  <tt class="py-line">        <tt class="py-string">''' Force ViewServer use '''</tt> </tt>
+<a name="L288"></a><tt class="py-lineno"> 288</tt>  <tt class="py-line"> </tt>
+<a name="L289"></a><tt class="py-lineno"> 289</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">version</tt> <tt class="py-op">!=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L290"></a><tt class="py-lineno"> 290</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-67" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-67', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">version</tt> </tt>
+<a name="L291"></a><tt class="py-lineno"> 291</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L292"></a><tt class="py-lineno"> 292</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L293"></a><tt class="py-lineno"> 293</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-68" class="py-name"><a title="com.dtmilano.android.viewclient.USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES" class="py-name" href="#" onclick="return doclink('link-68', 'USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES', 'link-31');">USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L294"></a><tt class="py-lineno"> 294</tt>  <tt class="py-line">                    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-69" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-69', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.getProperty()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#getProperty"><a title="com.dtmilano.android.adb.adbclient.AdbClient.getProperty" class="py-name" href="#" onclick="return doclink('link-70', 'getProperty', 'link-70');">getProperty</a></tt><tt class="py-op">(</tt><tt id="link-71" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-71', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L295"></a><tt class="py-lineno"> 295</tt>  <tt class="py-line">                <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L296"></a><tt class="py-lineno"> 296</tt>  <tt class="py-line">                    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-72" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-72', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-73" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.shell()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#shell"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-73', 'shell', 'link-73');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'getprop '</tt> <tt class="py-op">+</tt> <tt id="link-74" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-74', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L297"></a><tt class="py-lineno"> 297</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L298"></a><tt class="py-lineno"> 298</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-75" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-75', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L299"></a><tt class="py-lineno"> 299</tt>  <tt class="py-line"> </tt>
+<a name="L300"></a><tt class="py-lineno"> 300</tt>  <tt class="py-line">        <tt class="py-name">version</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-76" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-76', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> </tt>
+<a name="L301"></a><tt class="py-lineno"> 301</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">version</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">forceviewserveruse</tt> </tt>
+<a name="L302"></a><tt class="py-lineno"> 302</tt>  <tt class="py-line">        <tt class="py-string">''' Whether to use UIAutomator or ViewServer '''</tt> </tt>
+<a name="L303"></a><tt class="py-lineno"> 303</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L304"></a><tt class="py-lineno"> 304</tt>  <tt class="py-line">        <tt class="py-string">''' The id property depending on the View attribute format '''</tt> </tt>
+<a name="L305"></a><tt class="py-lineno"> 305</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L306"></a><tt class="py-lineno"> 306</tt>  <tt class="py-line">        <tt class="py-string">''' The text property depending on the View attribute format '''</tt> </tt>
+<a name="L307"></a><tt class="py-lineno"> 307</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L308"></a><tt class="py-lineno"> 308</tt>  <tt class="py-line">        <tt class="py-string">''' The left property depending on the View attribute format '''</tt> </tt>
+<a name="L309"></a><tt class="py-lineno"> 309</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L310"></a><tt class="py-lineno"> 310</tt>  <tt class="py-line">        <tt class="py-string">''' The top property depending on the View attribute format '''</tt> </tt>
+<a name="L311"></a><tt class="py-lineno"> 311</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L312"></a><tt class="py-lineno"> 312</tt>  <tt class="py-line">        <tt class="py-string">''' The width property depending on the View attribute format '''</tt> </tt>
+<a name="L313"></a><tt class="py-lineno"> 313</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L314"></a><tt class="py-lineno"> 314</tt>  <tt class="py-line">        <tt class="py-string">''' The height property depending on the View attribute format '''</tt> </tt>
+<a name="L315"></a><tt class="py-lineno"> 315</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">version</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">16</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L316"></a><tt class="py-lineno"> 316</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt> <tt class="py-op">=</tt> <tt id="link-77" class="py-name"><a title="com.dtmilano.android.viewclient.ID_PROPERTY_UI_AUTOMATOR" class="py-name" href="#" onclick="return doclink('link-77', 'ID_PROPERTY_UI_AUTOMATOR', 'link-37');">ID_PROPERTY_UI_AUTOMATOR</a></tt> </tt>
+<a name="L317"></a><tt class="py-lineno"> 317</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-78" class="py-name"><a title="com.dtmilano.android.viewclient.TEXT_PROPERTY_UI_AUTOMATOR" class="py-name" href="#" onclick="return doclink('link-78', 'TEXT_PROPERTY_UI_AUTOMATOR', 'link-40');">TEXT_PROPERTY_UI_AUTOMATOR</a></tt> </tt>
+<a name="L318"></a><tt class="py-lineno"> 318</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt> <tt class="py-op">=</tt> <tt id="link-79" class="py-name"><a title="com.dtmilano.android.viewclient.LEFT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-79', 'LEFT_PROPERTY', 'link-42');">LEFT_PROPERTY</a></tt> </tt>
+<a name="L319"></a><tt class="py-lineno"> 319</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt> <tt class="py-op">=</tt> <tt id="link-80" class="py-name"><a title="com.dtmilano.android.viewclient.TOP_PROPERTY" class="py-name" href="#" onclick="return doclink('link-80', 'TOP_PROPERTY', 'link-44');">TOP_PROPERTY</a></tt> </tt>
+<a name="L320"></a><tt class="py-lineno"> 320</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt> <tt class="py-op">=</tt> <tt id="link-81" class="py-name"><a title="com.dtmilano.android.viewclient.WIDTH_PROPERTY" class="py-name" href="#" onclick="return doclink('link-81', 'WIDTH_PROPERTY', 'link-46');">WIDTH_PROPERTY</a></tt> </tt>
+<a name="L321"></a><tt class="py-lineno"> 321</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt> <tt class="py-op">=</tt> <tt id="link-82" class="py-name"><a title="com.dtmilano.android.viewclient.HEIGHT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-82', 'HEIGHT_PROPERTY', 'link-48');">HEIGHT_PROPERTY</a></tt> </tt>
+<a name="L322"></a><tt class="py-lineno"> 322</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">version</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">10</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">version</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">16</tt> <tt class="py-keyword">or</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L323"></a><tt class="py-lineno"> 323</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt> <tt class="py-op">=</tt> <tt id="link-83" class="py-name"><a title="com.dtmilano.android.viewclient.ID_PROPERTY" class="py-name" href="#" onclick="return doclink('link-83', 'ID_PROPERTY', 'link-36');">ID_PROPERTY</a></tt> </tt>
+<a name="L324"></a><tt class="py-lineno"> 324</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-84" class="py-name"><a title="com.dtmilano.android.viewclient.TEXT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-84', 'TEXT_PROPERTY', 'link-38');">TEXT_PROPERTY</a></tt> </tt>
+<a name="L325"></a><tt class="py-lineno"> 325</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt> <tt class="py-op">=</tt> <tt id="link-85" class="py-name"><a title="com.dtmilano.android.viewclient.LEFT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-85', 'LEFT_PROPERTY', 'link-42');">LEFT_PROPERTY</a></tt> </tt>
+<a name="L326"></a><tt class="py-lineno"> 326</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt> <tt class="py-op">=</tt> <tt id="link-86" class="py-name"><a title="com.dtmilano.android.viewclient.TOP_PROPERTY" class="py-name" href="#" onclick="return doclink('link-86', 'TOP_PROPERTY', 'link-44');">TOP_PROPERTY</a></tt> </tt>
+<a name="L327"></a><tt class="py-lineno"> 327</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt> <tt class="py-op">=</tt> <tt id="link-87" class="py-name"><a title="com.dtmilano.android.viewclient.WIDTH_PROPERTY" class="py-name" href="#" onclick="return doclink('link-87', 'WIDTH_PROPERTY', 'link-46');">WIDTH_PROPERTY</a></tt> </tt>
+<a name="L328"></a><tt class="py-lineno"> 328</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt> <tt class="py-op">=</tt> <tt id="link-88" class="py-name"><a title="com.dtmilano.android.viewclient.HEIGHT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-88', 'HEIGHT_PROPERTY', 'link-48');">HEIGHT_PROPERTY</a></tt> </tt>
+<a name="L329"></a><tt class="py-lineno"> 329</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">version</tt> <tt class="py-op">==</tt> <tt class="py-number">10</tt><tt class="py-op">:</tt> </tt>
+<a name="L330"></a><tt class="py-lineno"> 330</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt> <tt class="py-op">=</tt> <tt id="link-89" class="py-name"><a title="com.dtmilano.android.viewclient.ID_PROPERTY" class="py-name" href="#" onclick="return doclink('link-89', 'ID_PROPERTY', 'link-36');">ID_PROPERTY</a></tt> </tt>
+<a name="L331"></a><tt class="py-lineno"> 331</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-90" class="py-name"><a title="com.dtmilano.android.viewclient.TEXT_PROPERTY_API_10" class="py-name" href="#" onclick="return doclink('link-90', 'TEXT_PROPERTY_API_10', 'link-39');">TEXT_PROPERTY_API_10</a></tt> </tt>
+<a name="L332"></a><tt class="py-lineno"> 332</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt> <tt class="py-op">=</tt> <tt id="link-91" class="py-name"><a title="com.dtmilano.android.viewclient.LEFT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-91', 'LEFT_PROPERTY', 'link-42');">LEFT_PROPERTY</a></tt> </tt>
+<a name="L333"></a><tt class="py-lineno"> 333</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt> <tt class="py-op">=</tt> <tt id="link-92" class="py-name"><a title="com.dtmilano.android.viewclient.TOP_PROPERTY" class="py-name" href="#" onclick="return doclink('link-92', 'TOP_PROPERTY', 'link-44');">TOP_PROPERTY</a></tt> </tt>
+<a name="L334"></a><tt class="py-lineno"> 334</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt> <tt class="py-op">=</tt> <tt id="link-93" class="py-name"><a title="com.dtmilano.android.viewclient.WIDTH_PROPERTY" class="py-name" href="#" onclick="return doclink('link-93', 'WIDTH_PROPERTY', 'link-46');">WIDTH_PROPERTY</a></tt> </tt>
+<a name="L335"></a><tt class="py-lineno"> 335</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt> <tt class="py-op">=</tt> <tt id="link-94" class="py-name"><a title="com.dtmilano.android.viewclient.HEIGHT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-94', 'HEIGHT_PROPERTY', 'link-48');">HEIGHT_PROPERTY</a></tt> </tt>
+<a name="L336"></a><tt class="py-lineno"> 336</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">version</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">7</tt> <tt class="py-keyword">and</tt> <tt class="py-name">version</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">10</tt><tt class="py-op">:</tt> </tt>
+<a name="L337"></a><tt class="py-lineno"> 337</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt> <tt class="py-op">=</tt> <tt id="link-95" class="py-name"><a title="com.dtmilano.android.viewclient.ID_PROPERTY" class="py-name" href="#" onclick="return doclink('link-95', 'ID_PROPERTY', 'link-36');">ID_PROPERTY</a></tt> </tt>
+<a name="L338"></a><tt class="py-lineno"> 338</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-96" class="py-name"><a title="com.dtmilano.android.viewclient.TEXT_PROPERTY_API_10" class="py-name" href="#" onclick="return doclink('link-96', 'TEXT_PROPERTY_API_10', 'link-39');">TEXT_PROPERTY_API_10</a></tt> </tt>
+<a name="L339"></a><tt class="py-lineno"> 339</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt> <tt class="py-op">=</tt> <tt id="link-97" class="py-name"><a title="com.dtmilano.android.viewclient.LEFT_PROPERTY_API_8" class="py-name" href="#" onclick="return doclink('link-97', 'LEFT_PROPERTY_API_8', 'link-43');">LEFT_PROPERTY_API_8</a></tt> </tt>
+<a name="L340"></a><tt class="py-lineno"> 340</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt> <tt class="py-op">=</tt> <tt id="link-98" class="py-name"><a title="com.dtmilano.android.viewclient.TOP_PROPERTY_API_8" class="py-name" href="#" onclick="return doclink('link-98', 'TOP_PROPERTY_API_8', 'link-45');">TOP_PROPERTY_API_8</a></tt> </tt>
+<a name="L341"></a><tt class="py-lineno"> 341</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt> <tt class="py-op">=</tt> <tt id="link-99" class="py-name"><a title="com.dtmilano.android.viewclient.WIDTH_PROPERTY_API_8" class="py-name" href="#" onclick="return doclink('link-99', 'WIDTH_PROPERTY_API_8', 'link-47');">WIDTH_PROPERTY_API_8</a></tt> </tt>
+<a name="L342"></a><tt class="py-lineno"> 342</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt> <tt class="py-op">=</tt> <tt id="link-100" class="py-name"><a title="com.dtmilano.android.viewclient.HEIGHT_PROPERTY_API_8" class="py-name" href="#" onclick="return doclink('link-100', 'HEIGHT_PROPERTY_API_8', 'link-49');">HEIGHT_PROPERTY_API_8</a></tt> </tt>
+<a name="L343"></a><tt class="py-lineno"> 343</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">version</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> <tt class="py-name">version</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">7</tt><tt class="py-op">:</tt> </tt>
+<a name="L344"></a><tt class="py-lineno"> 344</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt> <tt class="py-op">=</tt> <tt id="link-101" class="py-name"><a title="com.dtmilano.android.viewclient.ID_PROPERTY" class="py-name" href="#" onclick="return doclink('link-101', 'ID_PROPERTY', 'link-36');">ID_PROPERTY</a></tt> </tt>
+<a name="L345"></a><tt class="py-lineno"> 345</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-102" class="py-name"><a title="com.dtmilano.android.viewclient.TEXT_PROPERTY_API_10" class="py-name" href="#" onclick="return doclink('link-102', 'TEXT_PROPERTY_API_10', 'link-39');">TEXT_PROPERTY_API_10</a></tt> </tt>
+<a name="L346"></a><tt class="py-lineno"> 346</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt> <tt class="py-op">=</tt> <tt id="link-103" class="py-name"><a title="com.dtmilano.android.viewclient.LEFT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-103', 'LEFT_PROPERTY', 'link-42');">LEFT_PROPERTY</a></tt> </tt>
+<a name="L347"></a><tt class="py-lineno"> 347</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt> <tt class="py-op">=</tt> <tt id="link-104" class="py-name"><a title="com.dtmilano.android.viewclient.TOP_PROPERTY" class="py-name" href="#" onclick="return doclink('link-104', 'TOP_PROPERTY', 'link-44');">TOP_PROPERTY</a></tt> </tt>
+<a name="L348"></a><tt class="py-lineno"> 348</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt> <tt class="py-op">=</tt> <tt id="link-105" class="py-name"><a title="com.dtmilano.android.viewclient.WIDTH_PROPERTY" class="py-name" href="#" onclick="return doclink('link-105', 'WIDTH_PROPERTY', 'link-46');">WIDTH_PROPERTY</a></tt> </tt>
+<a name="L349"></a><tt class="py-lineno"> 349</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt> <tt class="py-op">=</tt> <tt id="link-106" class="py-name"><a title="com.dtmilano.android.viewclient.HEIGHT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-106', 'HEIGHT_PROPERTY', 'link-48');">HEIGHT_PROPERTY</a></tt> </tt>
+<a name="L350"></a><tt class="py-lineno"> 350</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">version</tt> <tt class="py-op">==</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L351"></a><tt class="py-lineno"> 351</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt> <tt class="py-op">=</tt> <tt id="link-107" class="py-name"><a title="com.dtmilano.android.viewclient.ID_PROPERTY" class="py-name" href="#" onclick="return doclink('link-107', 'ID_PROPERTY', 'link-36');">ID_PROPERTY</a></tt> </tt>
+<a name="L352"></a><tt class="py-lineno"> 352</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-108" class="py-name"><a title="com.dtmilano.android.viewclient.TEXT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-108', 'TEXT_PROPERTY', 'link-38');">TEXT_PROPERTY</a></tt> </tt>
+<a name="L353"></a><tt class="py-lineno"> 353</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt> <tt class="py-op">=</tt> <tt id="link-109" class="py-name"><a title="com.dtmilano.android.viewclient.LEFT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-109', 'LEFT_PROPERTY', 'link-42');">LEFT_PROPERTY</a></tt> </tt>
+<a name="L354"></a><tt class="py-lineno"> 354</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt> <tt class="py-op">=</tt> <tt id="link-110" class="py-name"><a title="com.dtmilano.android.viewclient.TOP_PROPERTY" class="py-name" href="#" onclick="return doclink('link-110', 'TOP_PROPERTY', 'link-44');">TOP_PROPERTY</a></tt> </tt>
+<a name="L355"></a><tt class="py-lineno"> 355</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt> <tt class="py-op">=</tt> <tt id="link-111" class="py-name"><a title="com.dtmilano.android.viewclient.WIDTH_PROPERTY" class="py-name" href="#" onclick="return doclink('link-111', 'WIDTH_PROPERTY', 'link-46');">WIDTH_PROPERTY</a></tt> </tt>
+<a name="L356"></a><tt class="py-lineno"> 356</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt> <tt class="py-op">=</tt> <tt id="link-112" class="py-name"><a title="com.dtmilano.android.viewclient.HEIGHT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-112', 'HEIGHT_PROPERTY', 'link-48');">HEIGHT_PROPERTY</a></tt> </tt>
+<a name="L357"></a><tt class="py-lineno"> 357</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L358"></a><tt class="py-lineno"> 358</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt> <tt class="py-op">=</tt> <tt id="link-113" class="py-name"><a title="com.dtmilano.android.viewclient.ID_PROPERTY" class="py-name" href="#" onclick="return doclink('link-113', 'ID_PROPERTY', 'link-36');">ID_PROPERTY</a></tt> </tt>
+<a name="L359"></a><tt class="py-lineno"> 359</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-114" class="py-name"><a title="com.dtmilano.android.viewclient.TEXT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-114', 'TEXT_PROPERTY', 'link-38');">TEXT_PROPERTY</a></tt> </tt>
+<a name="L360"></a><tt class="py-lineno"> 360</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt> <tt class="py-op">=</tt> <tt id="link-115" class="py-name"><a title="com.dtmilano.android.viewclient.LEFT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-115', 'LEFT_PROPERTY', 'link-42');">LEFT_PROPERTY</a></tt> </tt>
+<a name="L361"></a><tt class="py-lineno"> 361</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt> <tt class="py-op">=</tt> <tt id="link-116" class="py-name"><a title="com.dtmilano.android.viewclient.TOP_PROPERTY" class="py-name" href="#" onclick="return doclink('link-116', 'TOP_PROPERTY', 'link-44');">TOP_PROPERTY</a></tt> </tt>
+<a name="L362"></a><tt class="py-lineno"> 362</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt> <tt class="py-op">=</tt> <tt id="link-117" class="py-name"><a title="com.dtmilano.android.viewclient.WIDTH_PROPERTY" class="py-name" href="#" onclick="return doclink('link-117', 'WIDTH_PROPERTY', 'link-46');">WIDTH_PROPERTY</a></tt> </tt>
+<a name="L363"></a><tt class="py-lineno"> 363</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt> <tt class="py-op">=</tt> <tt id="link-118" class="py-name"><a title="com.dtmilano.android.viewclient.HEIGHT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-118', 'HEIGHT_PROPERTY', 'link-48');">HEIGHT_PROPERTY</a></tt> </tt>
+</div><a name="L364"></a><tt class="py-lineno"> 364</tt>  <tt class="py-line">         </tt>
+<a name="View.__getitem__"></a><div id="View.__getitem__-def"><a name="L365"></a><tt class="py-lineno"> 365</tt> <a class="py-toggle" href="#" id="View.__getitem__-toggle" onclick="return toggle('View.__getitem__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#__getitem__">__getitem__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__getitem__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__getitem__-expanded"><a name="L366"></a><tt class="py-lineno"> 366</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L367"></a><tt class="py-lineno"> 367</tt>  <tt class="py-line"> </tt>
+<a name="View.__getattr__"></a><div id="View.__getattr__-def"><a name="L368"></a><tt class="py-lineno"> 368</tt> <a class="py-toggle" href="#" id="View.__getattr__-toggle" onclick="return toggle('View.__getattr__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#__getattr__">__getattr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__getattr__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__getattr__-expanded"><a name="L369"></a><tt class="py-lineno"> 369</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-119" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_GETATTR" class="py-name" href="#" onclick="return doclink('link-119', 'DEBUG_GETATTR', 'link-10');">DEBUG_GETATTR</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L370"></a><tt class="py-lineno"> 370</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__getattr__(%s)    version: %d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-120" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-120', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L371"></a><tt class="py-lineno"> 371</tt>  <tt class="py-line"> </tt>
+<a name="L372"></a><tt class="py-lineno"> 372</tt>  <tt class="py-line">        <tt class="py-comment"># NOTE:</tt> </tt>
+<a name="L373"></a><tt class="py-lineno"> 373</tt>  <tt class="py-line">        <tt class="py-comment"># I should try to see if 'name' is a defined method</tt> </tt>
+<a name="L374"></a><tt class="py-lineno"> 374</tt>  <tt class="py-line">        <tt class="py-comment"># but it seems that if I call locals() here an infinite loop is entered</tt> </tt>
+<a name="L375"></a><tt class="py-lineno"> 375</tt>  <tt class="py-line"> </tt>
+<a name="L376"></a><tt class="py-lineno"> 376</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L377"></a><tt class="py-lineno"> 377</tt>  <tt class="py-line">            <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> </tt>
+<a name="L378"></a><tt class="py-lineno"> 378</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">name</tt> <tt class="py-op">+</tt> <tt class="py-string">'()'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L379"></a><tt class="py-lineno"> 379</tt>  <tt class="py-line">            <tt class="py-comment"># the method names are stored in the map with their trailing '()'</tt> </tt>
+<a name="L380"></a><tt class="py-lineno"> 380</tt>  <tt class="py-line">            <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">name</tt> <tt class="py-op">+</tt> <tt class="py-string">'()'</tt><tt class="py-op">]</tt> </tt>
+<a name="L381"></a><tt class="py-lineno"> 381</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">name</tt><tt class="py-op">.</tt><tt class="py-name">count</tt><tt class="py-op">(</tt><tt class="py-string">"_"</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L382"></a><tt class="py-lineno"> 382</tt>  <tt class="py-line">            <tt class="py-name">mangledList</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-121" class="py-name" targets="Method com.dtmilano.android.viewclient.View.allPossibleNamesWithColon()=com.dtmilano.android.viewclient.View-class.html#allPossibleNamesWithColon"><a title="com.dtmilano.android.viewclient.View.allPossibleNamesWithColon" class="py-name" href="#" onclick="return doclink('link-121', 'allPossibleNamesWithColon', 'link-121');">allPossibleNamesWithColon</a></tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
+<a name="L383"></a><tt class="py-lineno"> 383</tt>  <tt class="py-line">            <tt class="py-name">mangledName</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-122" class="py-name" targets="Method com.dtmilano.android.viewclient.View.intersection()=com.dtmilano.android.viewclient.View-class.html#intersection"><a title="com.dtmilano.android.viewclient.View.intersection" class="py-name" href="#" onclick="return doclink('link-122', 'intersection', 'link-122');">intersection</a></tt><tt class="py-op">(</tt><tt class="py-name">mangledList</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L384"></a><tt class="py-lineno"> 384</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">mangledName</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">mangledName</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L385"></a><tt class="py-lineno"> 385</tt>  <tt class="py-line">                <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">mangledName</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
+<a name="L386"></a><tt class="py-lineno"> 386</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L387"></a><tt class="py-lineno"> 387</tt>  <tt class="py-line">                <tt class="py-comment"># Default behavior</tt> </tt>
+<a name="L388"></a><tt class="py-lineno"> 388</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">,</tt> <tt class="py-name">name</tt> </tt>
+<a name="L389"></a><tt class="py-lineno"> 389</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L390"></a><tt class="py-lineno"> 390</tt>  <tt class="py-line">            <tt class="py-comment"># try removing 'is' prefix</tt> </tt>
+<a name="L391"></a><tt class="py-lineno"> 391</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-123" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_GETATTR" class="py-name" href="#" onclick="return doclink('link-123', 'DEBUG_GETATTR', 'link-10');">DEBUG_GETATTR</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L392"></a><tt class="py-lineno"> 392</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    __getattr__: trying without 'is' prefix"</tt> </tt>
+<a name="L393"></a><tt class="py-lineno"> 393</tt>  <tt class="py-line">            <tt class="py-name">suffix</tt> <tt class="py-op">=</tt> <tt class="py-name">name</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L394"></a><tt class="py-lineno"> 394</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">suffix</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L395"></a><tt class="py-lineno"> 395</tt>  <tt class="py-line">                <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">suffix</tt><tt class="py-op">]</tt> </tt>
+<a name="L396"></a><tt class="py-lineno"> 396</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L397"></a><tt class="py-lineno"> 397</tt>  <tt class="py-line">                <tt class="py-comment"># Default behavior</tt> </tt>
+<a name="L398"></a><tt class="py-lineno"> 398</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">,</tt> <tt class="py-name">name</tt> </tt>
+<a name="L399"></a><tt class="py-lineno"> 399</tt>  <tt class="py-line"> </tt>
+<a name="L400"></a><tt class="py-lineno"> 400</tt>  <tt class="py-line">        <tt class="py-comment"># if the method name starts with 'is' let's assume its return value is boolean</tt> </tt>
+<a name="L401"></a><tt class="py-lineno"> 401</tt>  <tt class="py-line"><tt class="py-comment">#         if name[:2] == 'is':</tt> </tt>
+<a name="L402"></a><tt class="py-lineno"> 402</tt>  <tt class="py-line"><tt class="py-comment">#             r = True if r == 'true' else False</tt> </tt>
+<a name="L403"></a><tt class="py-lineno"> 403</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">r</tt> <tt class="py-op">==</tt> <tt class="py-string">'true'</tt><tt class="py-op">:</tt> </tt>
+<a name="L404"></a><tt class="py-lineno"> 404</tt>  <tt class="py-line">            <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L405"></a><tt class="py-lineno"> 405</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">r</tt> <tt class="py-op">==</tt> <tt class="py-string">'false'</tt><tt class="py-op">:</tt> </tt>
+<a name="L406"></a><tt class="py-lineno"> 406</tt>  <tt class="py-line">            <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L407"></a><tt class="py-lineno"> 407</tt>  <tt class="py-line"> </tt>
+<a name="L408"></a><tt class="py-lineno"> 408</tt>  <tt class="py-line">        <tt class="py-comment"># this should not cached in some way</tt> </tt>
+<a name="L409"></a><tt class="py-lineno"> 409</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">innerMethod</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L410"></a><tt class="py-lineno"> 410</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-124" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_GETATTR" class="py-name" href="#" onclick="return doclink('link-124', 'DEBUG_GETATTR', 'link-10');">DEBUG_GETATTR</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L411"></a><tt class="py-lineno"> 411</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"innerMethod: %s returning %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">innerMethod</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> <tt class="py-name">r</tt><tt class="py-op">)</tt> </tt>
+<a name="L412"></a><tt class="py-lineno"> 412</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">r</tt> </tt>
+</div><a name="L413"></a><tt class="py-lineno"> 413</tt>  <tt class="py-line"> </tt>
+<a name="L414"></a><tt class="py-lineno"> 414</tt>  <tt class="py-line">        <tt class="py-name">innerMethod</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt> <tt class="py-op">=</tt> <tt class="py-name">name</tt> </tt>
+<a name="L415"></a><tt class="py-lineno"> 415</tt>  <tt class="py-line"> </tt>
+<a name="L416"></a><tt class="py-lineno"> 416</tt>  <tt class="py-line">        <tt class="py-comment"># this should work, but then there's problems with the arguments of innerMethod</tt> </tt>
+<a name="L417"></a><tt class="py-lineno"> 417</tt>  <tt class="py-line">        <tt class="py-comment"># even if innerMethod(self) is added</tt> </tt>
+<a name="L418"></a><tt class="py-lineno"> 418</tt>  <tt class="py-line">        <tt class="py-comment">#setattr(View, innerMethod.__name__, innerMethod)</tt> </tt>
+<a name="L419"></a><tt class="py-lineno"> 419</tt>  <tt class="py-line">        <tt class="py-comment">#setattr(self, innerMethod.__name__, innerMethod)</tt> </tt>
+<a name="L420"></a><tt class="py-lineno"> 420</tt>  <tt class="py-line"> </tt>
+<a name="L421"></a><tt class="py-lineno"> 421</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">innerMethod</tt> </tt>
+</div><a name="L422"></a><tt class="py-lineno"> 422</tt>  <tt class="py-line"> </tt>
+<a name="View.__call__"></a><div id="View.__call__-def"><a name="L423"></a><tt class="py-lineno"> 423</tt> <a class="py-toggle" href="#" id="View.__call__-toggle" onclick="return toggle('View.__call__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#__call__">__call__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__call__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__call__-expanded"><a name="L424"></a><tt class="py-lineno"> 424</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-125" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_CALL" class="py-name" href="#" onclick="return doclink('link-125', 'DEBUG_CALL', 'link-12');">DEBUG_CALL</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L425"></a><tt class="py-lineno"> 425</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__call__(%s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">args</tt> <tt class="py-keyword">if</tt> <tt class="py-name">args</tt> <tt class="py-keyword">else</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L426"></a><tt class="py-lineno"> 426</tt>  <tt class="py-line"> </tt>
+<a name="View.getClass"></a><div id="View.getClass-def"><a name="L427"></a><tt class="py-lineno"> 427</tt> <a class="py-toggle" href="#" id="View.getClass-toggle" onclick="return toggle('View.getClass');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#getClass">getClass</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getClass-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getClass-expanded"><a name="L428"></a><tt class="py-lineno"> 428</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L429"></a><tt class="py-lineno"> 429</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the L{View} class</tt> </tt>
+<a name="L430"></a><tt class="py-lineno"> 430</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L431"></a><tt class="py-lineno"> 431</tt>  <tt class="py-line"><tt class="py-docstring">        @return:  the L{View} class or C{None} if not defined</tt> </tt>
+<a name="L432"></a><tt class="py-lineno"> 432</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L433"></a><tt class="py-lineno"> 433</tt>  <tt class="py-line"> </tt>
+<a name="L434"></a><tt class="py-lineno"> 434</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L435"></a><tt class="py-lineno"> 435</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'class'</tt><tt class="py-op">]</tt> </tt>
+<a name="L436"></a><tt class="py-lineno"> 436</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L437"></a><tt class="py-lineno"> 437</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L438"></a><tt class="py-lineno"> 438</tt>  <tt class="py-line"> </tt>
+<a name="View.getId"></a><div id="View.getId-def"><a name="L439"></a><tt class="py-lineno"> 439</tt> <a class="py-toggle" href="#" id="View.getId-toggle" onclick="return toggle('View.getId');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#getId">getId</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getId-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getId-expanded"><a name="L440"></a><tt class="py-lineno"> 440</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L441"></a><tt class="py-lineno"> 441</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the L{View} Id</tt> </tt>
+<a name="L442"></a><tt class="py-lineno"> 442</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L443"></a><tt class="py-lineno"> 443</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the L{View} C{Id} or C{None} if not defined</tt> </tt>
+<a name="L444"></a><tt class="py-lineno"> 444</tt>  <tt class="py-line"><tt class="py-docstring">        @see: L{getUniqueId()}</tt> </tt>
+<a name="L445"></a><tt class="py-lineno"> 445</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L446"></a><tt class="py-lineno"> 446</tt>  <tt class="py-line"> </tt>
+<a name="L447"></a><tt class="py-lineno"> 447</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L448"></a><tt class="py-lineno"> 448</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'resource-id'</tt><tt class="py-op">]</tt> </tt>
+<a name="L449"></a><tt class="py-lineno"> 449</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L450"></a><tt class="py-lineno"> 450</tt>  <tt class="py-line">            <tt class="py-keyword">pass</tt> </tt>
+<a name="L451"></a><tt class="py-lineno"> 451</tt>  <tt class="py-line"> </tt>
+<a name="L452"></a><tt class="py-lineno"> 452</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L453"></a><tt class="py-lineno"> 453</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt><tt class="py-op">]</tt> </tt>
+<a name="L454"></a><tt class="py-lineno"> 454</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L455"></a><tt class="py-lineno"> 455</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L456"></a><tt class="py-lineno"> 456</tt>  <tt class="py-line"> </tt>
+<a name="View.getContentDescription"></a><div id="View.getContentDescription-def"><a name="L457"></a><tt class="py-lineno"> 457</tt> <a class="py-toggle" href="#" id="View.getContentDescription-toggle" onclick="return toggle('View.getContentDescription');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#getContentDescription">getContentDescription</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getContentDescription-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getContentDescription-expanded"><a name="L458"></a><tt class="py-lineno"> 458</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L459"></a><tt class="py-lineno"> 459</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the content description.</tt> </tt>
+<a name="L460"></a><tt class="py-lineno"> 460</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L461"></a><tt class="py-lineno"> 461</tt>  <tt class="py-line"> </tt>
+<a name="L462"></a><tt class="py-lineno"> 462</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L463"></a><tt class="py-lineno"> 463</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'content-desc'</tt><tt class="py-op">]</tt> </tt>
+<a name="L464"></a><tt class="py-lineno"> 464</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L465"></a><tt class="py-lineno"> 465</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L466"></a><tt class="py-lineno"> 466</tt>  <tt class="py-line"> </tt>
+<a name="View.getParent"></a><div id="View.getParent-def"><a name="L467"></a><tt class="py-lineno"> 467</tt> <a class="py-toggle" href="#" id="View.getParent-toggle" onclick="return toggle('View.getParent');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#getParent">getParent</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getParent-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getParent-expanded"><a name="L468"></a><tt class="py-lineno"> 468</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L469"></a><tt class="py-lineno"> 469</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the parent.</tt> </tt>
+<a name="L470"></a><tt class="py-lineno"> 470</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L471"></a><tt class="py-lineno"> 471</tt>  <tt class="py-line"> </tt>
+<a name="L472"></a><tt class="py-lineno"> 472</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> </tt>
+</div><a name="L473"></a><tt class="py-lineno"> 473</tt>  <tt class="py-line"> </tt>
+<a name="View.getText"></a><div id="View.getText-def"><a name="L474"></a><tt class="py-lineno"> 474</tt> <a class="py-toggle" href="#" id="View.getText-toggle" onclick="return toggle('View.getText');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#getText">getText</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getText-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getText-expanded"><a name="L475"></a><tt class="py-lineno"> 475</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L476"></a><tt class="py-lineno"> 476</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the text attribute.</tt> </tt>
+<a name="L477"></a><tt class="py-lineno"> 477</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L478"></a><tt class="py-lineno"> 478</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the text attribute or C{None} if not defined</tt> </tt>
+<a name="L479"></a><tt class="py-lineno"> 479</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L480"></a><tt class="py-lineno"> 480</tt>  <tt class="py-line"> </tt>
+<a name="L481"></a><tt class="py-lineno"> 481</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L482"></a><tt class="py-lineno"> 482</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt><tt class="py-op">]</tt> </tt>
+<a name="L483"></a><tt class="py-lineno"> 483</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">:</tt> </tt>
+<a name="L484"></a><tt class="py-lineno"> 484</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L485"></a><tt class="py-lineno"> 485</tt>  <tt class="py-line"> </tt>
+<a name="View.getHeight"></a><div id="View.getHeight-def"><a name="L486"></a><tt class="py-lineno"> 486</tt> <a class="py-toggle" href="#" id="View.getHeight-toggle" onclick="return toggle('View.getHeight');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#getHeight">getHeight</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getHeight-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getHeight-expanded"><a name="L487"></a><tt class="py-lineno"> 487</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L488"></a><tt class="py-lineno"> 488</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the height.</tt> </tt>
+<a name="L489"></a><tt class="py-lineno"> 489</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L490"></a><tt class="py-lineno"> 490</tt>  <tt class="py-line"> </tt>
+<a name="L491"></a><tt class="py-lineno"> 491</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L492"></a><tt class="py-lineno"> 492</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L493"></a><tt class="py-lineno"> 493</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L494"></a><tt class="py-lineno"> 494</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L495"></a><tt class="py-lineno"> 495</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L496"></a><tt class="py-lineno"> 496</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L497"></a><tt class="py-lineno"> 497</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-number">0</tt> </tt>
+</div><a name="L498"></a><tt class="py-lineno"> 498</tt>  <tt class="py-line"> </tt>
+<a name="View.getWidth"></a><div id="View.getWidth-def"><a name="L499"></a><tt class="py-lineno"> 499</tt> <a class="py-toggle" href="#" id="View.getWidth-toggle" onclick="return toggle('View.getWidth');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#getWidth">getWidth</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getWidth-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getWidth-expanded"><a name="L500"></a><tt class="py-lineno"> 500</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L501"></a><tt class="py-lineno"> 501</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the width.</tt> </tt>
+<a name="L502"></a><tt class="py-lineno"> 502</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L503"></a><tt class="py-lineno"> 503</tt>  <tt class="py-line"> </tt>
+<a name="L504"></a><tt class="py-lineno"> 504</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L505"></a><tt class="py-lineno"> 505</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+<a name="L506"></a><tt class="py-lineno"> 506</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L507"></a><tt class="py-lineno"> 507</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L508"></a><tt class="py-lineno"> 508</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L509"></a><tt class="py-lineno"> 509</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L510"></a><tt class="py-lineno"> 510</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-number">0</tt> </tt>
+</div><a name="L511"></a><tt class="py-lineno"> 511</tt>  <tt class="py-line"> </tt>
+<a name="View.getUniqueId"></a><div id="View.getUniqueId-def"><a name="L512"></a><tt class="py-lineno"> 512</tt> <a class="py-toggle" href="#" id="View.getUniqueId-toggle" onclick="return toggle('View.getUniqueId');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#getUniqueId">getUniqueId</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getUniqueId-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getUniqueId-expanded"><a name="L513"></a><tt class="py-lineno"> 513</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L514"></a><tt class="py-lineno"> 514</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the unique Id of this View.</tt> </tt>
+<a name="L515"></a><tt class="py-lineno"> 515</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L516"></a><tt class="py-lineno"> 516</tt>  <tt class="py-line"><tt class="py-docstring">        @see: L{ViewClient.__splitAttrs()} for a discussion on B{Unique Ids}</tt> </tt>
+<a name="L517"></a><tt class="py-lineno"> 517</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L518"></a><tt class="py-lineno"> 518</tt>  <tt class="py-line"> </tt>
+<a name="L519"></a><tt class="py-lineno"> 519</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L520"></a><tt class="py-lineno"> 520</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'uniqueId'</tt><tt class="py-op">]</tt> </tt>
+<a name="L521"></a><tt class="py-lineno"> 521</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L522"></a><tt class="py-lineno"> 522</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L523"></a><tt class="py-lineno"> 523</tt>  <tt class="py-line"> </tt>
+<a name="View.getVisibility"></a><div id="View.getVisibility-def"><a name="L524"></a><tt class="py-lineno"> 524</tt> <a class="py-toggle" href="#" id="View.getVisibility-toggle" onclick="return toggle('View.getVisibility');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#getVisibility">getVisibility</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getVisibility-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getVisibility-expanded"><a name="L525"></a><tt class="py-lineno"> 525</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L526"></a><tt class="py-lineno"> 526</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the View visibility</tt> </tt>
+<a name="L527"></a><tt class="py-lineno"> 527</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L528"></a><tt class="py-lineno"> 528</tt>  <tt class="py-line"> </tt>
+<a name="L529"></a><tt class="py-lineno"> 529</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L530"></a><tt class="py-lineno"> 530</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt id="link-126" class="py-name"><a title="com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY" class="py-name" href="#" onclick="return doclink('link-126', 'GET_VISIBILITY_PROPERTY', 'link-50');">GET_VISIBILITY_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'VISIBLE'</tt><tt class="py-op">:</tt> </tt>
+<a name="L531"></a><tt class="py-lineno"> 531</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt id="link-127" class="py-name"><a title="com.dtmilano.android.viewclient.VISIBLE" class="py-name" href="#" onclick="return doclink('link-127', 'VISIBLE', 'link-52');">VISIBLE</a></tt> </tt>
+<a name="L532"></a><tt class="py-lineno"> 532</tt>  <tt class="py-line">            <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt id="link-128" class="py-name"><a title="com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY" class="py-name" href="#" onclick="return doclink('link-128', 'GET_VISIBILITY_PROPERTY', 'link-50');">GET_VISIBILITY_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'INVISIBLE'</tt><tt class="py-op">:</tt> </tt>
+<a name="L533"></a><tt class="py-lineno"> 533</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt id="link-129" class="py-name"><a title="com.dtmilano.android.viewclient.INVISIBLE" class="py-name" href="#" onclick="return doclink('link-129', 'INVISIBLE', 'link-53');">INVISIBLE</a></tt> </tt>
+<a name="L534"></a><tt class="py-lineno"> 534</tt>  <tt class="py-line">            <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt id="link-130" class="py-name"><a title="com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY" class="py-name" href="#" onclick="return doclink('link-130', 'GET_VISIBILITY_PROPERTY', 'link-50');">GET_VISIBILITY_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'GONE'</tt><tt class="py-op">:</tt> </tt>
+<a name="L535"></a><tt class="py-lineno"> 535</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt id="link-131" class="py-name"><a title="com.dtmilano.android.viewclient.GONE" class="py-name" href="#" onclick="return doclink('link-131', 'GONE', 'link-54');">GONE</a></tt> </tt>
+<a name="L536"></a><tt class="py-lineno"> 536</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L537"></a><tt class="py-lineno"> 537</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-op">-</tt><tt class="py-number">2</tt> </tt>
+<a name="L538"></a><tt class="py-lineno"> 538</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L539"></a><tt class="py-lineno"> 539</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+</div><a name="L540"></a><tt class="py-lineno"> 540</tt>  <tt class="py-line"> </tt>
+<a name="View.getX"></a><div id="View.getX-def"><a name="L541"></a><tt class="py-lineno"> 541</tt> <a class="py-toggle" href="#" id="View.getX-toggle" onclick="return toggle('View.getX');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#getX">getX</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getX-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getX-expanded"><a name="L542"></a><tt class="py-lineno"> 542</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L543"></a><tt class="py-lineno"> 543</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the View X coordinate</tt> </tt>
+<a name="L544"></a><tt class="py-lineno"> 544</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L545"></a><tt class="py-lineno"> 545</tt>  <tt class="py-line"> </tt>
+<a name="L546"></a><tt class="py-lineno"> 546</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-132" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-132', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L547"></a><tt class="py-lineno"> 547</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"getX(%s %s ## %s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-133" class="py-name" targets="Method com.dtmilano.android.viewclient.View.getClass()=com.dtmilano.android.viewclient.View-class.html#getClass"><a title="com.dtmilano.android.viewclient.View.getClass" class="py-name" href="#" onclick="return doclink('link-133', 'getClass', 'link-133');">getClass</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-134" class="py-name" targets="Method com.dtmilano.android.viewclient.View.getId()=com.dtmilano.android.viewclient.View-class.html#getId"><a title="com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-134', 'getId', 'link-134');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-135" class="py-name" targets="Method com.dtmilano.android.viewclient.View.getUniqueId()=com.dtmilano.android.viewclient.View-class.html#getUniqueId"><a title="com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-135', 'getUniqueId', 'link-135');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L548"></a><tt class="py-lineno"> 548</tt>  <tt class="py-line">        <tt class="py-name">x</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L549"></a><tt class="py-lineno"> 549</tt>  <tt class="py-line"> </tt>
+<a name="L550"></a><tt class="py-lineno"> 550</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L551"></a><tt class="py-lineno"> 551</tt>  <tt class="py-line">            <tt class="py-name">x</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+<a name="L552"></a><tt class="py-lineno"> 552</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L553"></a><tt class="py-lineno"> 553</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L554"></a><tt class="py-lineno"> 554</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-136" class="py-name"><a title="com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY" class="py-name" href="#" onclick="return doclink('link-136', 'GET_VISIBILITY_PROPERTY', 'link-50');">GET_VISIBILITY_PROPERTY</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt id="link-137" class="py-name"><a title="com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY" class="py-name" href="#" onclick="return doclink('link-137', 'GET_VISIBILITY_PROPERTY', 'link-50');">GET_VISIBILITY_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'VISIBLE'</tt><tt class="py-op">:</tt> </tt>
+<a name="L555"></a><tt class="py-lineno"> 555</tt>  <tt class="py-line">                    <tt class="py-name">_x</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L556"></a><tt class="py-lineno"> 556</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt id="link-138" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-138', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getX: VISIBLE adding %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">_x</tt> </tt>
+<a name="L557"></a><tt class="py-lineno"> 557</tt>  <tt class="py-line">                    <tt class="py-name">x</tt> <tt class="py-op">+=</tt> <tt class="py-name">_x</tt> </tt>
+<a name="L558"></a><tt class="py-lineno"> 558</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L559"></a><tt class="py-lineno"> 559</tt>  <tt class="py-line">                <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"View %s has no '%s' property"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-139" class="py-name"><a title="com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-139', 'getId', 'link-134');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L560"></a><tt class="py-lineno"> 560</tt>  <tt class="py-line"> </tt>
+<a name="L561"></a><tt class="py-lineno"> 561</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-140" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-140', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getX: returning %d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">)</tt> </tt>
+<a name="L562"></a><tt class="py-lineno"> 562</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">x</tt> </tt>
+</div><a name="L563"></a><tt class="py-lineno"> 563</tt>  <tt class="py-line"> </tt>
+<a name="View.getY"></a><div id="View.getY-def"><a name="L564"></a><tt class="py-lineno"> 564</tt> <a class="py-toggle" href="#" id="View.getY-toggle" onclick="return toggle('View.getY');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#getY">getY</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getY-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getY-expanded"><a name="L565"></a><tt class="py-lineno"> 565</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L566"></a><tt class="py-lineno"> 566</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the View Y coordinate</tt> </tt>
+<a name="L567"></a><tt class="py-lineno"> 567</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L568"></a><tt class="py-lineno"> 568</tt>  <tt class="py-line"> </tt>
+<a name="L569"></a><tt class="py-lineno"> 569</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-141" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-141', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L570"></a><tt class="py-lineno"> 570</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"getY(%s %s ## %s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-142" class="py-name"><a title="com.dtmilano.android.viewclient.View.getClass" class="py-name" href="#" onclick="return doclink('link-142', 'getClass', 'link-133');">getClass</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-143" class="py-name"><a title="com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-143', 'getId', 'link-134');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-144" class="py-name"><a title="com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-144', 'getUniqueId', 'link-135');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L571"></a><tt class="py-lineno"> 571</tt>  <tt class="py-line">        <tt class="py-name">y</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L572"></a><tt class="py-lineno"> 572</tt>  <tt class="py-line"> </tt>
+<a name="L573"></a><tt class="py-lineno"> 573</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L574"></a><tt class="py-lineno"> 574</tt>  <tt class="py-line">            <tt class="py-name">y</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L575"></a><tt class="py-lineno"> 575</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L576"></a><tt class="py-lineno"> 576</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L577"></a><tt class="py-lineno"> 577</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-145" class="py-name"><a title="com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY" class="py-name" href="#" onclick="return doclink('link-145', 'GET_VISIBILITY_PROPERTY', 'link-50');">GET_VISIBILITY_PROPERTY</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt id="link-146" class="py-name"><a title="com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY" class="py-name" href="#" onclick="return doclink('link-146', 'GET_VISIBILITY_PROPERTY', 'link-50');">GET_VISIBILITY_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'VISIBLE'</tt><tt class="py-op">:</tt> </tt>
+<a name="L578"></a><tt class="py-lineno"> 578</tt>  <tt class="py-line">                    <tt class="py-name">_y</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L579"></a><tt class="py-lineno"> 579</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt id="link-147" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-147', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getY: VISIBLE adding %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">_y</tt> </tt>
+<a name="L580"></a><tt class="py-lineno"> 580</tt>  <tt class="py-line">                    <tt class="py-name">y</tt> <tt class="py-op">+=</tt> <tt class="py-name">_y</tt> </tt>
+<a name="L581"></a><tt class="py-lineno"> 581</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L582"></a><tt class="py-lineno"> 582</tt>  <tt class="py-line">                <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"View %s has no '%s' property"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-148" class="py-name"><a title="com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-148', 'getId', 'link-134');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L583"></a><tt class="py-lineno"> 583</tt>  <tt class="py-line"> </tt>
+<a name="L584"></a><tt class="py-lineno"> 584</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-149" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-149', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getY: returning %d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">y</tt><tt class="py-op">)</tt> </tt>
+<a name="L585"></a><tt class="py-lineno"> 585</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">y</tt> </tt>
+</div><a name="L586"></a><tt class="py-lineno"> 586</tt>  <tt class="py-line"> </tt>
+<a name="View.getXY"></a><div id="View.getXY-def"><a name="L587"></a><tt class="py-lineno"> 587</tt> <a class="py-toggle" href="#" id="View.getXY-toggle" onclick="return toggle('View.getXY');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#getXY">getXY</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">debug</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getXY-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getXY-expanded"><a name="L588"></a><tt class="py-lineno"> 588</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L589"></a><tt class="py-lineno"> 589</tt>  <tt class="py-line"><tt class="py-docstring">        Returns the I{screen} coordinates of this C{View}.</tt> </tt>
+<a name="L590"></a><tt class="py-lineno"> 590</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L591"></a><tt class="py-lineno"> 591</tt>  <tt class="py-line"><tt class="py-docstring">        @return: The I{screen} coordinates of this C{View}</tt> </tt>
+<a name="L592"></a><tt class="py-lineno"> 592</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L593"></a><tt class="py-lineno"> 593</tt>  <tt class="py-line"> </tt>
+<a name="L594"></a><tt class="py-lineno"> 594</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-150" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-150', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt> <tt class="py-keyword">or</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
+<a name="L595"></a><tt class="py-lineno"> 595</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L596"></a><tt class="py-lineno"> 596</tt>  <tt class="py-line">                <tt class="py-name">id</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-151" class="py-name"><a title="com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-151', 'getId', 'link-134');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L597"></a><tt class="py-lineno"> 597</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L598"></a><tt class="py-lineno"> 598</tt>  <tt class="py-line">                <tt class="py-name">id</tt> <tt class="py-op">=</tt> <tt class="py-string">"NO_ID"</tt> </tt>
+<a name="L599"></a><tt class="py-lineno"> 599</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"getXY(%s %s ## %s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-152" class="py-name"><a title="com.dtmilano.android.viewclient.View.getClass" class="py-name" href="#" onclick="return doclink('link-152', 'getClass', 'link-133');">getClass</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">id</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-153" class="py-name"><a title="com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-153', 'getUniqueId', 'link-135');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L600"></a><tt class="py-lineno"> 600</tt>  <tt class="py-line"> </tt>
+<a name="L601"></a><tt class="py-lineno"> 601</tt>  <tt class="py-line">        <tt class="py-name">x</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-154" class="py-name" targets="Method com.dtmilano.android.viewclient.View.getX()=com.dtmilano.android.viewclient.View-class.html#getX"><a title="com.dtmilano.android.viewclient.View.getX" class="py-name" href="#" onclick="return doclink('link-154', 'getX', 'link-154');">getX</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L602"></a><tt class="py-lineno"> 602</tt>  <tt class="py-line">        <tt class="py-name">y</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-155" class="py-name" targets="Method com.dtmilano.android.viewclient.View.getY()=com.dtmilano.android.viewclient.View-class.html#getY"><a title="com.dtmilano.android.viewclient.View.getY" class="py-name" href="#" onclick="return doclink('link-155', 'getY', 'link-155');">getY</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L603"></a><tt class="py-lineno"> 603</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L604"></a><tt class="py-lineno"> 604</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">)</tt> </tt>
+<a name="L605"></a><tt class="py-lineno"> 605</tt>  <tt class="py-line"> </tt>
+<a name="L606"></a><tt class="py-lineno"> 606</tt>  <tt class="py-line">        <tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> </tt>
+<a name="L607"></a><tt class="py-lineno"> 607</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-156" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-156', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getXY: x=%s y=%s parent=%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">,</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-157" class="py-name"><a title="com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-157', 'getUniqueId', 'link-135');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">if</tt> <tt class="py-name">parent</tt> <tt class="py-keyword">else</tt> <tt class="py-string">"None"</tt><tt class="py-op">)</tt> </tt>
+<a name="L608"></a><tt class="py-lineno"> 608</tt>  <tt class="py-line">        <tt class="py-name">hx</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L609"></a><tt class="py-lineno"> 609</tt>  <tt class="py-line">        <tt class="py-string">''' Hierarchy accumulated X '''</tt> </tt>
+<a name="L610"></a><tt class="py-lineno"> 610</tt>  <tt class="py-line">        <tt class="py-name">hy</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L611"></a><tt class="py-lineno"> 611</tt>  <tt class="py-line">        <tt class="py-string">''' Hierarchy accumulated Y '''</tt> </tt>
+<a name="L612"></a><tt class="py-lineno"> 612</tt>  <tt class="py-line"> </tt>
+<a name="L613"></a><tt class="py-lineno"> 613</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-158" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-158', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getXY: not using UiAutomator, calculating parent coordinates"</tt> </tt>
+<a name="L614"></a><tt class="py-lineno"> 614</tt>  <tt class="py-line">        <tt class="py-keyword">while</tt> <tt class="py-name">parent</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L615"></a><tt class="py-lineno"> 615</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-159" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-159', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"      getXY: parent: %s %s &lt;&lt;&lt;&lt;"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-160" class="py-name"><a title="com.dtmilano.android.viewclient.View.getClass" class="py-name" href="#" onclick="return doclink('link-160', 'getClass', 'link-133');">getClass</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-161" class="py-name"><a title="com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-161', 'getId', 'link-134');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L616"></a><tt class="py-lineno"> 616</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-162" class="py-name"><a title="com.dtmilano.android.viewclient.SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED" class="py-name" href="#" onclick="return doclink('link-162', 'SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED', 'link-32');">SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L617"></a><tt class="py-lineno"> 617</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-163" class="py-name"><a title="com.dtmilano.android.viewclient.View.getClass" class="py-name" href="#" onclick="return doclink('link-163', 'getClass', 'link-133');">getClass</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt> <tt class="py-string">'com.android.internal.widget.ActionBarView'</tt><tt class="py-op">,</tt> </tt>
+<a name="L618"></a><tt class="py-lineno"> 618</tt>  <tt class="py-line">                                   <tt class="py-string">'com.android.internal.widget.ActionBarContextView'</tt><tt class="py-op">,</tt> </tt>
+<a name="L619"></a><tt class="py-lineno"> 619</tt>  <tt class="py-line">                                   <tt class="py-string">'com.android.internal.view.menu.ActionMenuView'</tt><tt class="py-op">,</tt> </tt>
+<a name="L620"></a><tt class="py-lineno"> 620</tt>  <tt class="py-line">                                   <tt class="py-string">'com.android.internal.policy.impl.PhoneWindow$DecorView'</tt> <tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L621"></a><tt class="py-lineno"> 621</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt id="link-164" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-164', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getXY: skipping %s %s (%d,%d)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-165" class="py-name"><a title="com.dtmilano.android.viewclient.View.getClass" class="py-name" href="#" onclick="return doclink('link-165', 'getClass', 'link-133');">getClass</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-166" class="py-name"><a title="com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-166', 'getId', 'link-134');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-167" class="py-name"><a title="com.dtmilano.android.viewclient.View.getX" class="py-name" href="#" onclick="return doclink('link-167', 'getX', 'link-154');">getX</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-168" class="py-name"><a title="com.dtmilano.android.viewclient.View.getY" class="py-name" href="#" onclick="return doclink('link-168', 'getY', 'link-155');">getY</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L622"></a><tt class="py-lineno"> 622</tt>  <tt class="py-line">                    <tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> </tt>
+<a name="L623"></a><tt class="py-lineno"> 623</tt>  <tt class="py-line">                    <tt class="py-keyword">continue</tt> </tt>
+<a name="L624"></a><tt class="py-lineno"> 624</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-169" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-169', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getXY: parent=%s x=%d hx=%d y=%d hy=%d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-170" class="py-name"><a title="com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-170', 'getId', 'link-134');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">hx</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">,</tt> <tt class="py-name">hy</tt><tt class="py-op">)</tt> </tt>
+<a name="L625"></a><tt class="py-lineno"> 625</tt>  <tt class="py-line">            <tt class="py-name">hx</tt> <tt class="py-op">+=</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-171" class="py-name"><a title="com.dtmilano.android.viewclient.View.getX" class="py-name" href="#" onclick="return doclink('link-171', 'getX', 'link-154');">getX</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L626"></a><tt class="py-lineno"> 626</tt>  <tt class="py-line">            <tt class="py-name">hy</tt> <tt class="py-op">+=</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-172" class="py-name"><a title="com.dtmilano.android.viewclient.View.getY" class="py-name" href="#" onclick="return doclink('link-172', 'getY', 'link-155');">getY</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L627"></a><tt class="py-lineno"> 627</tt>  <tt class="py-line">            <tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> </tt>
+<a name="L628"></a><tt class="py-lineno"> 628</tt>  <tt class="py-line"> </tt>
+<a name="L629"></a><tt class="py-lineno"> 629</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-173" class="py-name" targets="Method com.dtmilano.android.viewclient.View.__dumpWindowsInformation()=com.dtmilano.android.viewclient.View-class.html#__dumpWindowsInformation"><a title="com.dtmilano.android.viewclient.View.__dumpWindowsInformation" class="py-name" href="#" onclick="return doclink('link-173', '__dumpWindowsInformation', 'link-173');">__dumpWindowsInformation</a></tt><tt class="py-op">(</tt><tt class="py-name">debug</tt><tt class="py-op">=</tt><tt class="py-name">debug</tt><tt class="py-op">)</tt> </tt>
+<a name="L630"></a><tt class="py-lineno"> 630</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-174" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-174', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt> <tt class="py-keyword">or</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
+<a name="L631"></a><tt class="py-lineno"> 631</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getXY: wv=(%d, %d) (windows information)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt><tt class="py-op">)</tt> </tt>
+<a name="L632"></a><tt class="py-lineno"> 632</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L633"></a><tt class="py-lineno"> 633</tt>  <tt class="py-line">            <tt class="py-name">fw</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt><tt class="py-op">]</tt> </tt>
+<a name="L634"></a><tt class="py-lineno"> 634</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-175" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_STATUSBAR" class="py-name" href="#" onclick="return doclink('link-175', 'DEBUG_STATUSBAR', 'link-18');">DEBUG_STATUSBAR</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L635"></a><tt class="py-lineno"> 635</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    getXY: focused window="</tt><tt class="py-op">,</tt> <tt class="py-name">fw</tt> </tt>
+<a name="L636"></a><tt class="py-lineno"> 636</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    getXY: deciding whether to consider statusbar offset because current focused windows is at"</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">"parent"</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">py</tt><tt class="py-op">)</tt> </tt>
+<a name="L637"></a><tt class="py-lineno"> 637</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">KeyError</tt><tt class="py-op">:</tt> </tt>
+<a name="L638"></a><tt class="py-lineno"> 638</tt>  <tt class="py-line">            <tt class="py-name">fw</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L639"></a><tt class="py-lineno"> 639</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">sbw</tt><tt class="py-op">,</tt> <tt class="py-name">sbh</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-176" class="py-name" targets="Method com.dtmilano.android.viewclient.View.__obtainStatusBarDimensionsIfVisible()=com.dtmilano.android.viewclient.View-class.html#__obtainStatusBarDimensionsIfVisible"><a title="com.dtmilano.android.viewclient.View.__obtainStatusBarDimensionsIfVisible" class="py-name" href="#" onclick="return doclink('link-176', '__obtainStatusBarDimensionsIfVisible', 'link-176');">__obtainStatusBarDimensionsIfVisible</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L640"></a><tt class="py-lineno"> 640</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-177" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-177', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt> <tt class="py-keyword">or</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
+<a name="L641"></a><tt class="py-lineno"> 641</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getXY: sb=(%d, %d) (statusbar dimensions)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">sbw</tt><tt class="py-op">,</tt> <tt class="py-name">sbh</tt><tt class="py-op">)</tt> </tt>
+<a name="L642"></a><tt class="py-lineno"> 642</tt>  <tt class="py-line">        <tt class="py-name">statusBarOffset</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L643"></a><tt class="py-lineno"> 643</tt>  <tt class="py-line">        <tt class="py-name">pwx</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L644"></a><tt class="py-lineno"> 644</tt>  <tt class="py-line">        <tt class="py-name">pwy</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L645"></a><tt class="py-lineno"> 645</tt>  <tt class="py-line"> </tt>
+<a name="L646"></a><tt class="py-lineno"> 646</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">fw</tt><tt class="py-op">:</tt> </tt>
+<a name="L647"></a><tt class="py-lineno"> 647</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-178" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-178', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L648"></a><tt class="py-lineno"> 648</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    getXY: focused window="</tt><tt class="py-op">,</tt> <tt class="py-name">fw</tt><tt class="py-op">,</tt> <tt class="py-string">"sb="</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">sbw</tt><tt class="py-op">,</tt> <tt class="py-name">sbh</tt><tt class="py-op">)</tt> </tt>
+<a name="L649"></a><tt class="py-lineno"> 649</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">sbh</tt><tt class="py-op">:</tt> <tt class="py-comment"># it's very unlikely that fw.wvy &lt; sbh, that is a window over the statusbar</tt> </tt>
+<a name="L650"></a><tt class="py-lineno"> 650</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-179" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_STATUSBAR" class="py-name" href="#" onclick="return doclink('link-179', 'DEBUG_STATUSBAR', 'link-18');">DEBUG_STATUSBAR</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"        getXY: yes, considering offset="</tt><tt class="py-op">,</tt> <tt class="py-name">sbh</tt> </tt>
+<a name="L651"></a><tt class="py-lineno"> 651</tt>  <tt class="py-line">                <tt class="py-name">statusBarOffset</tt> <tt class="py-op">=</tt> <tt class="py-name">sbh</tt> </tt>
+<a name="L652"></a><tt class="py-lineno"> 652</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L653"></a><tt class="py-lineno"> 653</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-180" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_STATUSBAR" class="py-name" href="#" onclick="return doclink('link-180', 'DEBUG_STATUSBAR', 'link-18');">DEBUG_STATUSBAR</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"        getXY: no, ignoring statusbar offset fw.wvy="</tt><tt class="py-op">,</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt><tt class="py-op">,</tt> <tt class="py-string">"&gt;"</tt><tt class="py-op">,</tt> <tt class="py-name">sbh</tt> </tt>
+<a name="L654"></a><tt class="py-lineno"> 654</tt>  <tt class="py-line"> </tt>
+<a name="L655"></a><tt class="py-lineno"> 655</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">py</tt> <tt class="py-op">==</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt><tt class="py-op">:</tt> </tt>
+<a name="L656"></a><tt class="py-lineno"> 656</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-181" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_STATUSBAR" class="py-name" href="#" onclick="return doclink('link-181', 'DEBUG_STATUSBAR', 'link-18');">DEBUG_STATUSBAR</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"        getXY: but wait, fw.py == fw.wvy so we are adjusting by "</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">py</tt><tt class="py-op">)</tt> </tt>
+<a name="L657"></a><tt class="py-lineno"> 657</tt>  <tt class="py-line">                <tt class="py-name">pwx</tt> <tt class="py-op">=</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">px</tt> </tt>
+<a name="L658"></a><tt class="py-lineno"> 658</tt>  <tt class="py-line">                <tt class="py-name">pwy</tt> <tt class="py-op">=</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">py</tt> </tt>
+<a name="L659"></a><tt class="py-lineno"> 659</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L660"></a><tt class="py-lineno"> 660</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-182" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_STATUSBAR" class="py-name" href="#" onclick="return doclink('link-182', 'DEBUG_STATUSBAR', 'link-18');">DEBUG_STATUSBAR</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    getXY: fw.py=%d &lt;= fw.wvy=%d, no adjustment"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">py</tt><tt class="py-op">,</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt><tt class="py-op">)</tt> </tt>
+<a name="L661"></a><tt class="py-lineno"> 661</tt>  <tt class="py-line"> </tt>
+<a name="L662"></a><tt class="py-lineno"> 662</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-183" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-183', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt> <tt class="py-keyword">or</tt> <tt id="link-184" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_STATUSBAR" class="py-name" href="#" onclick="return doclink('link-184', 'DEBUG_STATUSBAR', 'link-18');">DEBUG_STATUSBAR</a></tt> <tt class="py-keyword">or</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
+<a name="L663"></a><tt class="py-lineno"> 663</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getXY: returning (%d, %d) ***"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">+</tt><tt class="py-name">hx</tt><tt class="py-op">+</tt><tt class="py-name">wvx</tt><tt class="py-op">+</tt><tt class="py-name">pwx</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">+</tt><tt class="py-name">hy</tt><tt class="py-op">+</tt><tt class="py-name">wvy</tt><tt class="py-op">-</tt><tt class="py-name">statusBarOffset</tt><tt class="py-op">+</tt><tt class="py-name">pwy</tt><tt class="py-op">)</tt> </tt>
+<a name="L664"></a><tt class="py-lineno"> 664</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"                     x=%d+%d+%d+%d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt><tt class="py-name">hx</tt><tt class="py-op">,</tt><tt class="py-name">wvx</tt><tt class="py-op">,</tt><tt class="py-name">pwx</tt><tt class="py-op">)</tt> </tt>
+<a name="L665"></a><tt class="py-lineno"> 665</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"                     y=%d+%d+%d-%d+%d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">y</tt><tt class="py-op">,</tt><tt class="py-name">hy</tt><tt class="py-op">,</tt><tt class="py-name">wvy</tt><tt class="py-op">,</tt><tt class="py-name">statusBarOffset</tt><tt class="py-op">,</tt><tt class="py-name">pwy</tt><tt class="py-op">)</tt> </tt>
+<a name="L666"></a><tt class="py-lineno"> 666</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">+</tt><tt class="py-name">hx</tt><tt class="py-op">+</tt><tt class="py-name">wvx</tt><tt class="py-op">+</tt><tt class="py-name">pwx</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">+</tt><tt class="py-name">hy</tt><tt class="py-op">+</tt><tt class="py-name">wvy</tt><tt class="py-op">-</tt><tt class="py-name">statusBarOffset</tt><tt class="py-op">+</tt><tt class="py-name">pwy</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L667"></a><tt class="py-lineno"> 667</tt>  <tt class="py-line"> </tt>
+<a name="View.getCoords"></a><div id="View.getCoords-def"><a name="L668"></a><tt class="py-lineno"> 668</tt> <a class="py-toggle" href="#" id="View.getCoords-toggle" onclick="return toggle('View.getCoords');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#getCoords">getCoords</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getCoords-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getCoords-expanded"><a name="L669"></a><tt class="py-lineno"> 669</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L670"></a><tt class="py-lineno"> 670</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the coords of the View</tt> </tt>
+<a name="L671"></a><tt class="py-lineno"> 671</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L672"></a><tt class="py-lineno"> 672</tt>  <tt class="py-line"><tt class="py-docstring">        @return: A tuple containing the View's coordinates ((L, T), (R, B))</tt> </tt>
+<a name="L673"></a><tt class="py-lineno"> 673</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L674"></a><tt class="py-lineno"> 674</tt>  <tt class="py-line"> </tt>
+<a name="L675"></a><tt class="py-lineno"> 675</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-185" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-185', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L676"></a><tt class="py-lineno"> 676</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"getCoords(%s %s ## %s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-186" class="py-name"><a title="com.dtmilano.android.viewclient.View.getClass" class="py-name" href="#" onclick="return doclink('link-186', 'getClass', 'link-133');">getClass</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-187" class="py-name"><a title="com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-187', 'getId', 'link-134');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-188" class="py-name"><a title="com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-188', 'getUniqueId', 'link-135');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L677"></a><tt class="py-lineno"> 677</tt>  <tt class="py-line"> </tt>
+<a name="L678"></a><tt class="py-lineno"> 678</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-189" class="py-name" targets="Method com.dtmilano.android.viewclient.View.getXY()=com.dtmilano.android.viewclient.View-class.html#getXY"><a title="com.dtmilano.android.viewclient.View.getXY" class="py-name" href="#" onclick="return doclink('link-189', 'getXY', 'link-189');">getXY</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">;</tt> </tt>
+<a name="L679"></a><tt class="py-lineno"> 679</tt>  <tt class="py-line">        <tt class="py-name">w</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-190" class="py-name" targets="Method com.dtmilano.android.viewclient.View.getWidth()=com.dtmilano.android.viewclient.View-class.html#getWidth"><a title="com.dtmilano.android.viewclient.View.getWidth" class="py-name" href="#" onclick="return doclink('link-190', 'getWidth', 'link-190');">getWidth</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L680"></a><tt class="py-lineno"> 680</tt>  <tt class="py-line">        <tt class="py-name">h</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-191" class="py-name" targets="Method com.dtmilano.android.viewclient.View.getHeight()=com.dtmilano.android.viewclient.View-class.html#getHeight"><a title="com.dtmilano.android.viewclient.View.getHeight" class="py-name" href="#" onclick="return doclink('link-191', 'getHeight', 'link-191');">getHeight</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L681"></a><tt class="py-lineno"> 681</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">+</tt><tt class="py-name">w</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">+</tt><tt class="py-name">h</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L682"></a><tt class="py-lineno"> 682</tt>  <tt class="py-line"> </tt>
+<a name="View.getPositionAndSize"></a><div id="View.getPositionAndSize-def"><a name="L683"></a><tt class="py-lineno"> 683</tt> <a class="py-toggle" href="#" id="View.getPositionAndSize-toggle" onclick="return toggle('View.getPositionAndSize');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#getPositionAndSize">getPositionAndSize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getPositionAndSize-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getPositionAndSize-expanded"><a name="L684"></a><tt class="py-lineno"> 684</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L685"></a><tt class="py-lineno"> 685</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the position and size (X,Y, W, H)</tt> </tt>
+<a name="L686"></a><tt class="py-lineno"> 686</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L687"></a><tt class="py-lineno"> 687</tt>  <tt class="py-line"><tt class="py-docstring">        @return: A tuple containing the View's coordinates (X, Y, W, H)</tt> </tt>
+<a name="L688"></a><tt class="py-lineno"> 688</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L689"></a><tt class="py-lineno"> 689</tt>  <tt class="py-line"> </tt>
+<a name="L690"></a><tt class="py-lineno"> 690</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-192" class="py-name"><a title="com.dtmilano.android.viewclient.View.getXY" class="py-name" href="#" onclick="return doclink('link-192', 'getXY', 'link-189');">getXY</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">;</tt> </tt>
+<a name="L691"></a><tt class="py-lineno"> 691</tt>  <tt class="py-line">        <tt class="py-name">w</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-193" class="py-name"><a title="com.dtmilano.android.viewclient.View.getWidth" class="py-name" href="#" onclick="return doclink('link-193', 'getWidth', 'link-190');">getWidth</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L692"></a><tt class="py-lineno"> 692</tt>  <tt class="py-line">        <tt class="py-name">h</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-194" class="py-name"><a title="com.dtmilano.android.viewclient.View.getHeight" class="py-name" href="#" onclick="return doclink('link-194', 'getHeight', 'link-191');">getHeight</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L693"></a><tt class="py-lineno"> 693</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">,</tt> <tt class="py-name">w</tt><tt class="py-op">,</tt> <tt class="py-name">h</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L694"></a><tt class="py-lineno"> 694</tt>  <tt class="py-line"> </tt>
+<a name="L695"></a><tt class="py-lineno"> 695</tt>  <tt class="py-line"> </tt>
+<a name="View.getCenter"></a><div id="View.getCenter-def"><a name="L696"></a><tt class="py-lineno"> 696</tt> <a class="py-toggle" href="#" id="View.getCenter-toggle" onclick="return toggle('View.getCenter');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#getCenter">getCenter</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getCenter-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getCenter-expanded"><a name="L697"></a><tt class="py-lineno"> 697</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L698"></a><tt class="py-lineno"> 698</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the center coords of the View</tt> </tt>
+<a name="L699"></a><tt class="py-lineno"> 699</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L700"></a><tt class="py-lineno"> 700</tt>  <tt class="py-line"><tt class="py-docstring">        @author: U{Dean Morin &lt;https://github.com/deanmorin&gt;}</tt> </tt>
+<a name="L701"></a><tt class="py-lineno"> 701</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L702"></a><tt class="py-lineno"> 702</tt>  <tt class="py-line"> </tt>
+<a name="L703"></a><tt class="py-lineno"> 703</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">left</tt><tt class="py-op">,</tt> <tt class="py-name">top</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">right</tt><tt class="py-op">,</tt> <tt class="py-name">bottom</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-195" class="py-name" targets="Method com.dtmilano.android.viewclient.View.getCoords()=com.dtmilano.android.viewclient.View-class.html#getCoords"><a title="com.dtmilano.android.viewclient.View.getCoords" class="py-name" href="#" onclick="return doclink('link-195', 'getCoords', 'link-195');">getCoords</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L704"></a><tt class="py-lineno"> 704</tt>  <tt class="py-line">        <tt class="py-name">x</tt> <tt class="py-op">=</tt> <tt class="py-name">left</tt> <tt class="py-op">+</tt> <tt class="py-op">(</tt><tt class="py-name">right</tt> <tt class="py-op">-</tt> <tt class="py-name">left</tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-number">2</tt> </tt>
+<a name="L705"></a><tt class="py-lineno"> 705</tt>  <tt class="py-line">        <tt class="py-name">y</tt> <tt class="py-op">=</tt> <tt class="py-name">top</tt> <tt class="py-op">+</tt> <tt class="py-op">(</tt><tt class="py-name">bottom</tt> <tt class="py-op">-</tt> <tt class="py-name">top</tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-number">2</tt> </tt>
+<a name="L706"></a><tt class="py-lineno"> 706</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L707"></a><tt class="py-lineno"> 707</tt>  <tt class="py-line"> </tt>
+<a name="View.__obtainStatusBarDimensionsIfVisible"></a><div id="View.__obtainStatusBarDimensionsIfVisible-def"><a name="L708"></a><tt class="py-lineno"> 708</tt> <a class="py-toggle" href="#" id="View.__obtainStatusBarDimensionsIfVisible-toggle" onclick="return toggle('View.__obtainStatusBarDimensionsIfVisible');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#__obtainStatusBarDimensionsIfVisible">__obtainStatusBarDimensionsIfVisible</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__obtainStatusBarDimensionsIfVisible-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__obtainStatusBarDimensionsIfVisible-expanded"><a name="L709"></a><tt class="py-lineno"> 709</tt>  <tt class="py-line">        <tt class="py-name">sbw</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L710"></a><tt class="py-lineno"> 710</tt>  <tt class="py-line">        <tt class="py-name">sbh</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L711"></a><tt class="py-lineno"> 711</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">winId</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">:</tt> </tt>
+<a name="L712"></a><tt class="py-lineno"> 712</tt>  <tt class="py-line">            <tt class="py-name">w</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">[</tt><tt class="py-name">winId</tt><tt class="py-op">]</tt> </tt>
+<a name="L713"></a><tt class="py-lineno"> 713</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-196" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-196', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"      __obtainStatusBarDimensionsIfVisible: w="</tt><tt class="py-op">,</tt> <tt class="py-name">w</tt><tt class="py-op">,</tt> <tt class="py-string">"   w.activity="</tt><tt class="py-op">,</tt> <tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">activity</tt><tt class="py-op">,</tt> <tt class="py-string">"%%%"</tt> </tt>
+<a name="L714"></a><tt class="py-lineno"> 714</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">activity</tt> <tt class="py-op">==</tt> <tt class="py-string">'StatusBar'</tt><tt class="py-op">:</tt> </tt>
+<a name="L715"></a><tt class="py-lineno"> 715</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> <tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">visibility</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L716"></a><tt class="py-lineno"> 716</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt id="link-197" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-197', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"      __obtainStatusBarDimensionsIfVisible: statusBar="</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">wvw</tt><tt class="py-op">,</tt> <tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">wvh</tt><tt class="py-op">)</tt> </tt>
+<a name="L717"></a><tt class="py-lineno"> 717</tt>  <tt class="py-line">                    <tt class="py-name">sbw</tt> <tt class="py-op">=</tt> <tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">wvw</tt> </tt>
+<a name="L718"></a><tt class="py-lineno"> 718</tt>  <tt class="py-line">                    <tt class="py-name">sbh</tt> <tt class="py-op">=</tt> <tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">wvh</tt> </tt>
+<a name="L719"></a><tt class="py-lineno"> 719</tt>  <tt class="py-line">                <tt class="py-keyword">break</tt> </tt>
+<a name="L720"></a><tt class="py-lineno"> 720</tt>  <tt class="py-line"> </tt>
+<a name="L721"></a><tt class="py-lineno"> 721</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">sbw</tt><tt class="py-op">,</tt> <tt class="py-name">sbh</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L722"></a><tt class="py-lineno"> 722</tt>  <tt class="py-line"> </tt>
+<a name="View.__obtainVxVy"></a><div id="View.__obtainVxVy-def"><a name="L723"></a><tt class="py-lineno"> 723</tt> <a class="py-toggle" href="#" id="View.__obtainVxVy-toggle" onclick="return toggle('View.__obtainVxVy');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#__obtainVxVy">__obtainVxVy</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">m</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__obtainVxVy-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__obtainVxVy-expanded"><a name="L724"></a><tt class="py-lineno"> 724</tt>  <tt class="py-line">        <tt class="py-name">wvx</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'vx'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L725"></a><tt class="py-lineno"> 725</tt>  <tt class="py-line">        <tt class="py-name">wvy</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'vy'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L726"></a><tt class="py-lineno"> 726</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt> </tt>
+</div><a name="L727"></a><tt class="py-lineno"> 727</tt>  <tt class="py-line"> </tt>
+<a name="View.__obtainVwVh"></a><div id="View.__obtainVwVh-def"><a name="L728"></a><tt class="py-lineno"> 728</tt> <a class="py-toggle" href="#" id="View.__obtainVwVh-toggle" onclick="return toggle('View.__obtainVwVh');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#__obtainVwVh">__obtainVwVh</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">m</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__obtainVwVh-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__obtainVwVh-expanded"><a name="L729"></a><tt class="py-lineno"> 729</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-198" class="py-name" targets="Method com.dtmilano.android.viewclient.View.__obtainVxVy()=com.dtmilano.android.viewclient.View-class.html#__obtainVxVy"><a title="com.dtmilano.android.viewclient.View.__obtainVxVy" class="py-name" href="#" onclick="return doclink('link-198', '__obtainVxVy', 'link-198');">__obtainVxVy</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L730"></a><tt class="py-lineno"> 730</tt>  <tt class="py-line">        <tt class="py-name">wvx1</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'vx1'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L731"></a><tt class="py-lineno"> 731</tt>  <tt class="py-line">        <tt class="py-name">wvy1</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'vy1'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L732"></a><tt class="py-lineno"> 732</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">wvx1</tt><tt class="py-op">-</tt><tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy1</tt><tt class="py-op">-</tt><tt class="py-name">wvy</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L733"></a><tt class="py-lineno"> 733</tt>  <tt class="py-line"> </tt>
+<a name="View.__obtainPxPy"></a><div id="View.__obtainPxPy-def"><a name="L734"></a><tt class="py-lineno"> 734</tt> <a class="py-toggle" href="#" id="View.__obtainPxPy-toggle" onclick="return toggle('View.__obtainPxPy');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#__obtainPxPy">__obtainPxPy</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">m</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__obtainPxPy-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__obtainPxPy-expanded"><a name="L735"></a><tt class="py-lineno"> 735</tt>  <tt class="py-line">        <tt class="py-name">px</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'px'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L736"></a><tt class="py-lineno"> 736</tt>  <tt class="py-line">        <tt class="py-name">py</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'py'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L737"></a><tt class="py-lineno"> 737</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">py</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L738"></a><tt class="py-lineno"> 738</tt>  <tt class="py-line"> </tt>
+<a name="View.__dumpWindowsInformation"></a><div id="View.__dumpWindowsInformation-def"><a name="L739"></a><tt class="py-lineno"> 739</tt> <a class="py-toggle" href="#" id="View.__dumpWindowsInformation-toggle" onclick="return toggle('View.__dumpWindowsInformation');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#__dumpWindowsInformation">__dumpWindowsInformation</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">debug</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__dumpWindowsInformation-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__dumpWindowsInformation-expanded"><a name="L740"></a><tt class="py-lineno"> 740</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L741"></a><tt class="py-lineno"> 741</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L742"></a><tt class="py-lineno"> 742</tt>  <tt class="py-line">        <tt class="py-name">dww</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-199" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-199', 'shell', 'link-73');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'dumpsys window windows'</tt><tt class="py-op">)</tt> </tt>
+<a name="L743"></a><tt class="py-lineno"> 743</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-200" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_WINDOWS" class="py-name" href="#" onclick="return doclink('link-200', 'DEBUG_WINDOWS', 'link-20');">DEBUG_WINDOWS</a></tt> <tt class="py-keyword">or</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">dww</tt> </tt>
+<a name="L744"></a><tt class="py-lineno"> 744</tt>  <tt class="py-line">        <tt class="py-name">lines</tt> <tt class="py-op">=</tt> <tt class="py-name">dww</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">)</tt> </tt>
+<a name="L745"></a><tt class="py-lineno"> 745</tt>  <tt class="py-line">        <tt class="py-name">widRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'^ *Window #%s Window{%s (u\d+ )?%s?.*}:'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L746"></a><tt class="py-lineno"> 746</tt>  <tt class="py-line">                            <tt class="py-op">(</tt><tt id="link-201" class="py-name" targets="Function com.dtmilano.android.viewclient._nd()=com.dtmilano.android.viewclient-module.html#_nd"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-201', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'num'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-202" class="py-name" targets="Function com.dtmilano.android.viewclient._nh()=com.dtmilano.android.viewclient-module.html#_nh"><a title="com.dtmilano.android.viewclient._nh" class="py-name" href="#" onclick="return doclink('link-202', '_nh', 'link-202');">_nh</a></tt><tt class="py-op">(</tt><tt class="py-string">'winId'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-203" class="py-name" targets="Function com.dtmilano.android.viewclient._ns()=com.dtmilano.android.viewclient-module.html#_ns"><a title="com.dtmilano.android.viewclient._ns" class="py-name" href="#" onclick="return doclink('link-203', '_ns', 'link-203');">_ns</a></tt><tt class="py-op">(</tt><tt class="py-string">'activity'</tt><tt class="py-op">,</tt> <tt class="py-name">greedy</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L747"></a><tt class="py-lineno"> 747</tt>  <tt class="py-line">        <tt class="py-name">currentFocusRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'^  mCurrentFocus=Window{%s .*'</tt> <tt class="py-op">%</tt> <tt id="link-204" class="py-name"><a title="com.dtmilano.android.viewclient._nh" class="py-name" href="#" onclick="return doclink('link-204', '_nh', 'link-202');">_nh</a></tt><tt class="py-op">(</tt><tt class="py-string">'winId'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L748"></a><tt class="py-lineno"> 748</tt>  <tt class="py-line">        <tt class="py-name">viewVisibilityRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">' mViewVisibility=0x%s '</tt> <tt class="py-op">%</tt> <tt id="link-205" class="py-name"><a title="com.dtmilano.android.viewclient._nh" class="py-name" href="#" onclick="return doclink('link-205', '_nh', 'link-202');">_nh</a></tt><tt class="py-op">(</tt><tt class="py-string">'visibility'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L749"></a><tt class="py-lineno"> 749</tt>  <tt class="py-line">        <tt class="py-comment"># This is for 4.0.4 API-15</tt> </tt>
+<a name="L750"></a><tt class="py-lineno"> 750</tt>  <tt class="py-line">        <tt class="py-name">containingFrameRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'^   *mContainingFrame=\[%s,%s\]\[%s,%s\] mParentFrame=\[%s,%s\]\[%s,%s\]'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L751"></a><tt class="py-lineno"> 751</tt>  <tt class="py-line">                             <tt class="py-op">(</tt><tt id="link-206" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-206', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'cx'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-207" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-207', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'cy'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-208" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-208', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'cw'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-209" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-209', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'ch'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-210" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-210', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'px'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-211" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-211', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'py'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-212" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-212', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'pw'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-213" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-213', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'ph'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L752"></a><tt class="py-lineno"> 752</tt>  <tt class="py-line">        <tt class="py-name">contentFrameRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'^   *mContentFrame=\[%s,%s\]\[%s,%s\] mVisibleFrame=\[%s,%s\]\[%s,%s\]'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L753"></a><tt class="py-lineno"> 753</tt>  <tt class="py-line">                             <tt class="py-op">(</tt><tt id="link-214" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-214', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'x'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-215" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-215', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'y'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-216" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-216', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'w'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-217" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-217', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'h'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-218" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-218', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'vx'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-219" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-219', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'vy'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-220" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-220', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'vx1'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-221" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-221', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'vy1'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L754"></a><tt class="py-lineno"> 754</tt>  <tt class="py-line">        <tt class="py-comment"># This is for 4.1 API-16</tt> </tt>
+<a name="L755"></a><tt class="py-lineno"> 755</tt>  <tt class="py-line">        <tt class="py-name">framesRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'^   *Frames: containing=\[%s,%s\]\[%s,%s\] parent=\[%s,%s\]\[%s,%s\]'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L756"></a><tt class="py-lineno"> 756</tt>  <tt class="py-line">                               <tt class="py-op">(</tt><tt id="link-222" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-222', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'cx'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-223" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-223', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'cy'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-224" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-224', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'cw'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-225" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-225', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'ch'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-226" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-226', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'px'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-227" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-227', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'py'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-228" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-228', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'pw'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-229" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-229', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'ph'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L757"></a><tt class="py-lineno"> 757</tt>  <tt class="py-line">        <tt class="py-name">contentRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'^     *content=\[%s,%s\]\[%s,%s\] visible=\[%s,%s\]\[%s,%s\]'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L758"></a><tt class="py-lineno"> 758</tt>  <tt class="py-line">                               <tt class="py-op">(</tt><tt id="link-230" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-230', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'x'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-231" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-231', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'y'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-232" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-232', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'w'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-233" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-233', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'h'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-234" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-234', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'vx'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-235" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-235', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'vy'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-236" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-236', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'vx1'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-237" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-237', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'vy1'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L759"></a><tt class="py-lineno"> 759</tt>  <tt class="py-line">        <tt class="py-name">policyVisibilityRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'mPolicyVisibility=%s '</tt> <tt class="py-op">%</tt> <tt id="link-238" class="py-name"><a title="com.dtmilano.android.viewclient._ns" class="py-name" href="#" onclick="return doclink('link-238', '_ns', 'link-203');">_ns</a></tt><tt class="py-op">(</tt><tt class="py-string">'policyVisibility'</tt><tt class="py-op">,</tt> <tt class="py-name">greedy</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L760"></a><tt class="py-lineno"> 760</tt>  <tt class="py-line"> </tt>
+<a name="L761"></a><tt class="py-lineno"> 761</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">l</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L762"></a><tt class="py-lineno"> 762</tt>  <tt class="py-line">            <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">widRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L763"></a><tt class="py-lineno"> 763</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L764"></a><tt class="py-lineno"> 764</tt>  <tt class="py-line">                <tt class="py-name">num</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'num'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L765"></a><tt class="py-lineno"> 765</tt>  <tt class="py-line">                <tt class="py-name">winId</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'winId'</tt><tt class="py-op">)</tt> </tt>
+<a name="L766"></a><tt class="py-lineno"> 766</tt>  <tt class="py-line">                <tt class="py-name">activity</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'activity'</tt><tt class="py-op">)</tt> </tt>
+<a name="L767"></a><tt class="py-lineno"> 767</tt>  <tt class="py-line">                <tt class="py-name">wvx</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L768"></a><tt class="py-lineno"> 768</tt>  <tt class="py-line">                <tt class="py-name">wvy</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L769"></a><tt class="py-lineno"> 769</tt>  <tt class="py-line">                <tt class="py-name">wvw</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L770"></a><tt class="py-lineno"> 770</tt>  <tt class="py-line">                <tt class="py-name">wvh</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L771"></a><tt class="py-lineno"> 771</tt>  <tt class="py-line">                <tt class="py-name">px</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L772"></a><tt class="py-lineno"> 772</tt>  <tt class="py-line">                <tt class="py-name">py</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L773"></a><tt class="py-lineno"> 773</tt>  <tt class="py-line">                <tt class="py-name">visibility</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L774"></a><tt class="py-lineno"> 774</tt>  <tt class="py-line">                <tt class="py-name">policyVisibility</tt> <tt class="py-op">=</tt> <tt class="py-number">0x0</tt> </tt>
+<a name="L775"></a><tt class="py-lineno"> 775</tt>  <tt class="py-line"> </tt>
+<a name="L776"></a><tt class="py-lineno"> 776</tt>  <tt class="py-line">                <tt class="py-keyword">for</tt> <tt class="py-name">l2</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">l</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L777"></a><tt class="py-lineno"> 777</tt>  <tt class="py-line">                    <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">widRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L778"></a><tt class="py-lineno"> 778</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L779"></a><tt class="py-lineno"> 779</tt>  <tt class="py-line">                        <tt class="py-name">l</tt> <tt class="py-op">+=</tt> <tt class="py-op">(</tt><tt class="py-name">l2</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L780"></a><tt class="py-lineno"> 780</tt>  <tt class="py-line">                        <tt class="py-keyword">break</tt> </tt>
+<a name="L781"></a><tt class="py-lineno"> 781</tt>  <tt class="py-line">                    <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">viewVisibilityRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L782"></a><tt class="py-lineno"> 782</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L783"></a><tt class="py-lineno"> 783</tt>  <tt class="py-line">                        <tt class="py-name">visibility</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'visibility'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L784"></a><tt class="py-lineno"> 784</tt>  <tt class="py-line">                        <tt class="py-keyword">if</tt> <tt id="link-239" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-239', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__dumpWindowsInformation: visibility="</tt><tt class="py-op">,</tt> <tt class="py-name">visibility</tt> </tt>
+<a name="L785"></a><tt class="py-lineno"> 785</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-240" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-240', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">17</tt><tt class="py-op">:</tt> </tt>
+<a name="L786"></a><tt class="py-lineno"> 786</tt>  <tt class="py-line">                        <tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L787"></a><tt class="py-lineno"> 787</tt>  <tt class="py-line">                        <tt class="py-name">wvw</tt><tt class="py-op">,</tt> <tt class="py-name">wvh</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L788"></a><tt class="py-lineno"> 788</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-241" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-241', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">16</tt><tt class="py-op">:</tt> </tt>
+<a name="L789"></a><tt class="py-lineno"> 789</tt>  <tt class="py-line">                        <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">framesRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L790"></a><tt class="py-lineno"> 790</tt>  <tt class="py-line">                        <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L791"></a><tt class="py-lineno"> 791</tt>  <tt class="py-line">                            <tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">py</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-242" class="py-name" targets="Method com.dtmilano.android.viewclient.View.__obtainPxPy()=com.dtmilano.android.viewclient.View-class.html#__obtainPxPy"><a title="com.dtmilano.android.viewclient.View.__obtainPxPy" class="py-name" href="#" onclick="return doclink('link-242', '__obtainPxPy', 'link-242');">__obtainPxPy</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L792"></a><tt class="py-lineno"> 792</tt>  <tt class="py-line">                            <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">contentRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L793"></a><tt class="py-lineno"> 793</tt>  <tt class="py-line">                            <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L794"></a><tt class="py-lineno"> 794</tt>  <tt class="py-line">                                <tt class="py-comment"># FIXME: the information provided by 'dumpsys window windows' in 4.2.1 (API 16)</tt> </tt>
+<a name="L795"></a><tt class="py-lineno"> 795</tt>  <tt class="py-line">                                <tt class="py-comment"># when there's a system dialog may not be correct and causes the View coordinates</tt> </tt>
+<a name="L796"></a><tt class="py-lineno"> 796</tt>  <tt class="py-line">                                <tt class="py-comment"># be offset by this amount, see</tt> </tt>
+<a name="L797"></a><tt class="py-lineno"> 797</tt>  <tt class="py-line">                                <tt class="py-comment"># https://github.com/dtmilano/AndroidViewClient/issues/29</tt> </tt>
+<a name="L798"></a><tt class="py-lineno"> 798</tt>  <tt class="py-line">                                <tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-243" class="py-name"><a title="com.dtmilano.android.viewclient.View.__obtainVxVy" class="py-name" href="#" onclick="return doclink('link-243', '__obtainVxVy', 'link-198');">__obtainVxVy</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L799"></a><tt class="py-lineno"> 799</tt>  <tt class="py-line">                                <tt class="py-name">wvw</tt><tt class="py-op">,</tt> <tt class="py-name">wvh</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-244" class="py-name" targets="Method com.dtmilano.android.viewclient.View.__obtainVwVh()=com.dtmilano.android.viewclient.View-class.html#__obtainVwVh"><a title="com.dtmilano.android.viewclient.View.__obtainVwVh" class="py-name" href="#" onclick="return doclink('link-244', '__obtainVwVh', 'link-244');">__obtainVwVh</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L800"></a><tt class="py-lineno"> 800</tt>  <tt class="py-line">                    <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-245" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-245', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-number">15</tt><tt class="py-op">:</tt> </tt>
+<a name="L801"></a><tt class="py-lineno"> 801</tt>  <tt class="py-line">                        <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">containingFrameRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L802"></a><tt class="py-lineno"> 802</tt>  <tt class="py-line">                        <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L803"></a><tt class="py-lineno"> 803</tt>  <tt class="py-line">                            <tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">py</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-246" class="py-name"><a title="com.dtmilano.android.viewclient.View.__obtainPxPy" class="py-name" href="#" onclick="return doclink('link-246', '__obtainPxPy', 'link-242');">__obtainPxPy</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L804"></a><tt class="py-lineno"> 804</tt>  <tt class="py-line">                            <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">contentFrameRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L805"></a><tt class="py-lineno"> 805</tt>  <tt class="py-line">                            <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L806"></a><tt class="py-lineno"> 806</tt>  <tt class="py-line">                                <tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-247" class="py-name"><a title="com.dtmilano.android.viewclient.View.__obtainVxVy" class="py-name" href="#" onclick="return doclink('link-247', '__obtainVxVy', 'link-198');">__obtainVxVy</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L807"></a><tt class="py-lineno"> 807</tt>  <tt class="py-line">                                <tt class="py-name">wvw</tt><tt class="py-op">,</tt> <tt class="py-name">wvh</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-248" class="py-name"><a title="com.dtmilano.android.viewclient.View.__obtainVwVh" class="py-name" href="#" onclick="return doclink('link-248', '__obtainVwVh', 'link-244');">__obtainVwVh</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L808"></a><tt class="py-lineno"> 808</tt>  <tt class="py-line">                    <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-249" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-249', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-number">10</tt><tt class="py-op">:</tt> </tt>
+<a name="L809"></a><tt class="py-lineno"> 809</tt>  <tt class="py-line">                        <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">containingFrameRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L810"></a><tt class="py-lineno"> 810</tt>  <tt class="py-line">                        <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L811"></a><tt class="py-lineno"> 811</tt>  <tt class="py-line">                            <tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">py</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-250" class="py-name"><a title="com.dtmilano.android.viewclient.View.__obtainPxPy" class="py-name" href="#" onclick="return doclink('link-250', '__obtainPxPy', 'link-242');">__obtainPxPy</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L812"></a><tt class="py-lineno"> 812</tt>  <tt class="py-line">                            <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">contentFrameRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L813"></a><tt class="py-lineno"> 813</tt>  <tt class="py-line">                            <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L814"></a><tt class="py-lineno"> 814</tt>  <tt class="py-line">                                <tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-251" class="py-name"><a title="com.dtmilano.android.viewclient.View.__obtainVxVy" class="py-name" href="#" onclick="return doclink('link-251', '__obtainVxVy', 'link-198');">__obtainVxVy</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L815"></a><tt class="py-lineno"> 815</tt>  <tt class="py-line">                                <tt class="py-name">wvw</tt><tt class="py-op">,</tt> <tt class="py-name">wvh</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-252" class="py-name"><a title="com.dtmilano.android.viewclient.View.__obtainVwVh" class="py-name" href="#" onclick="return doclink('link-252', '__obtainVwVh', 'link-244');">__obtainVwVh</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L816"></a><tt class="py-lineno"> 816</tt>  <tt class="py-line">                    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L817"></a><tt class="py-lineno"> 817</tt>  <tt class="py-line">                        <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Unsupported Android version %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-253" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-253', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L818"></a><tt class="py-lineno"> 818</tt>  <tt class="py-line"> </tt>
+<a name="L819"></a><tt class="py-lineno"> 819</tt>  <tt class="py-line">                    <tt class="py-comment">#print &gt;&gt; sys.stderr, "Searching policyVisibility in", lines[l2]</tt> </tt>
+<a name="L820"></a><tt class="py-lineno"> 820</tt>  <tt class="py-line">                    <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">policyVisibilityRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L821"></a><tt class="py-lineno"> 821</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L822"></a><tt class="py-lineno"> 822</tt>  <tt class="py-line">                        <tt class="py-name">policyVisibility</tt> <tt class="py-op">=</tt> <tt class="py-number">0x0</tt> <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'policyVisibility'</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'true'</tt> <tt class="py-keyword">else</tt> <tt class="py-number">0x8</tt> </tt>
+<a name="L823"></a><tt class="py-lineno"> 823</tt>  <tt class="py-line"> </tt>
+<a name="L824"></a><tt class="py-lineno"> 824</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">[</tt><tt class="py-name">winId</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-254" class="py-name" targets="Class com.dtmilano.android.viewclient.Window=com.dtmilano.android.viewclient.Window-class.html"><a title="com.dtmilano.android.viewclient.Window" class="py-name" href="#" onclick="return doclink('link-254', 'Window', 'link-254');">Window</a></tt><tt class="py-op">(</tt><tt class="py-name">num</tt><tt class="py-op">,</tt> <tt class="py-name">winId</tt><tt class="py-op">,</tt> <tt class="py-name">activity</tt><tt class="py-op">,</tt> <tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt><tt class="py-op">,</tt> <tt class="py-name">wvw</tt><tt class="py-op">,</tt> <tt class="py-name">wvh</tt><tt class="py-op">,</tt> <tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">py</tt><tt class="py-op">,</tt> <tt class="py-name">visibility</tt> <tt class="py-op">+</tt> <tt class="py-name">policyVisibility</tt><tt class="py-op">)</tt> </tt>
+<a name="L825"></a><tt class="py-lineno"> 825</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L826"></a><tt class="py-lineno"> 826</tt>  <tt class="py-line">                <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">currentFocusRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L827"></a><tt class="py-lineno"> 827</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L828"></a><tt class="py-lineno"> 828</tt>  <tt class="py-line">                    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'winId'</tt><tt class="py-op">)</tt> </tt>
+<a name="L829"></a><tt class="py-lineno"> 829</tt>  <tt class="py-line"> </tt>
+<a name="L830"></a><tt class="py-lineno"> 830</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">visibility</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L831"></a><tt class="py-lineno"> 831</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-255" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-255', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt> <tt class="py-keyword">or</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
+<a name="L832"></a><tt class="py-lineno"> 832</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__dumpWindowsInformation: focus="</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt> </tt>
+<a name="L833"></a><tt class="py-lineno"> 833</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__dumpWindowsInformation:"</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt><tt class="py-op">]</tt> </tt>
+<a name="L834"></a><tt class="py-lineno"> 834</tt>  <tt class="py-line">            <tt class="py-name">w</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt><tt class="py-op">]</tt> </tt>
+<a name="L835"></a><tt class="py-lineno"> 835</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt><tt class="py-op">)</tt> </tt>
+<a name="L836"></a><tt class="py-lineno"> 836</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L837"></a><tt class="py-lineno"> 837</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-256" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-256', 'DEBUG_COORDS', 'link-14');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__dumpWindowsInformation: (0,0)"</tt> </tt>
+<a name="L838"></a><tt class="py-lineno"> 838</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L839"></a><tt class="py-lineno"> 839</tt>  <tt class="py-line"> </tt>
+<a name="View.touch"></a><div id="View.touch-def"><a name="L840"></a><tt class="py-lineno"> 840</tt> <a class="py-toggle" href="#" id="View.touch-toggle" onclick="return toggle('View.touch');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#touch">touch</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">type</tt><tt class="py-op">=</tt><tt id="link-257" class="py-name"><a title="com.dtmilano.android.adb.adbclient" class="py-name" href="#" onclick="return doclink('link-257', 'adbclient', 'link-2');">adbclient</a></tt><tt class="py-op">.</tt><tt id="link-258" class="py-name" targets="Variable com.dtmilano.android.adb.adbclient.DOWN_AND_UP=com.dtmilano.android.adb.adbclient-module.html#DOWN_AND_UP"><a title="com.dtmilano.android.adb.adbclient.DOWN_AND_UP" class="py-name" href="#" onclick="return doclink('link-258', 'DOWN_AND_UP', 'link-258');">DOWN_AND_UP</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.touch-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.touch-expanded"><a name="L841"></a><tt class="py-lineno"> 841</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L842"></a><tt class="py-lineno"> 842</tt>  <tt class="py-line"><tt class="py-docstring">        Touches the center of this C{View}</tt> </tt>
+<a name="L843"></a><tt class="py-lineno"> 843</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L844"></a><tt class="py-lineno"> 844</tt>  <tt class="py-line"> </tt>
+<a name="L845"></a><tt class="py-lineno"> 845</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-259" class="py-name" targets="Method com.dtmilano.android.viewclient.View.getCenter()=com.dtmilano.android.viewclient.View-class.html#getCenter"><a title="com.dtmilano.android.viewclient.View.getCenter" class="py-name" href="#" onclick="return doclink('link-259', 'getCenter', 'link-259');">getCenter</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L846"></a><tt class="py-lineno"> 846</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-260" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_TOUCH" class="py-name" href="#" onclick="return doclink('link-260', 'DEBUG_TOUCH', 'link-16');">DEBUG_TOUCH</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L847"></a><tt class="py-lineno"> 847</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"should touch @ (%d, %d)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">)</tt> </tt>
+<a name="L848"></a><tt class="py-lineno"> 848</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-261" class="py-name"><a title="com.dtmilano.android.viewclient.VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED" class="py-name" href="#" onclick="return doclink('link-261', 'VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED', 'link-33');">VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED</a></tt> <tt class="py-keyword">and</tt> <tt id="link-262" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.type
+com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-262', 'type', 'link-55');">type</a></tt> <tt class="py-op">==</tt> <tt id="link-263" class="py-name"><a title="com.dtmilano.android.adb.adbclient" class="py-name" href="#" onclick="return doclink('link-263', 'adbclient', 'link-2');">adbclient</a></tt><tt class="py-op">.</tt><tt id="link-264" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DOWN_AND_UP" class="py-name" href="#" onclick="return doclink('link-264', 'DOWN_AND_UP', 'link-258');">DOWN_AND_UP</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L849"></a><tt class="py-lineno"> 849</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-265" class="py-name"><a title="com.dtmilano.android.viewclient.WARNINGS" class="py-name" href="#" onclick="return doclink('link-265', 'WARNINGS', 'link-26');">WARNINGS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L850"></a><tt class="py-lineno"> 850</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ViewClient: touch workaround enabled"</tt> </tt>
+<a name="L851"></a><tt class="py-lineno"> 851</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-266" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.touch()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#touch,Method com.dtmilano.android.viewclient.View.touch()=com.dtmilano.android.viewclient.View-class.html#touch"><a title="com.dtmilano.android.adb.adbclient.AdbClient.touch
+com.dtmilano.android.viewclient.View.touch" class="py-name" href="#" onclick="return doclink('link-266', 'touch', 'link-266');">touch</a></tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">,</tt> <tt id="link-267" class="py-name"><a title="com.dtmilano.android.adb.adbclient" class="py-name" href="#" onclick="return doclink('link-267', 'adbclient', 'link-2');">adbclient</a></tt><tt class="py-op">.</tt><tt id="link-268" class="py-name" targets="Variable com.dtmilano.android.adb.adbclient.DOWN=com.dtmilano.android.adb.adbclient-module.html#DOWN"><a title="com.dtmilano.android.adb.adbclient.DOWN" class="py-name" href="#" onclick="return doclink('link-268', 'DOWN', 'link-268');">DOWN</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L852"></a><tt class="py-lineno"> 852</tt>  <tt class="py-line">            <tt class="py-name">time</tt><tt class="py-op">.</tt><tt id="link-269" class="py-name" targets="Static Method com.dtmilano.android.viewclient.ViewClient.sleep()=com.dtmilano.android.viewclient.ViewClient-class.html#sleep"><a title="com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-269', 'sleep', 'link-269');">sleep</a></tt><tt class="py-op">(</tt><tt class="py-number">50</tt><tt class="py-op">/</tt><tt class="py-number">1000.0</tt><tt class="py-op">)</tt> </tt>
+<a name="L853"></a><tt class="py-lineno"> 853</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-270" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.touch
+com.dtmilano.android.viewclient.View.touch" class="py-name" href="#" onclick="return doclink('link-270', 'touch', 'link-266');">touch</a></tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">+</tt><tt class="py-number">10</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">+</tt><tt class="py-number">10</tt><tt class="py-op">,</tt> <tt id="link-271" class="py-name"><a title="com.dtmilano.android.adb.adbclient" class="py-name" href="#" onclick="return doclink('link-271', 'adbclient', 'link-2');">adbclient</a></tt><tt class="py-op">.</tt><tt id="link-272" class="py-name" targets="Variable com.dtmilano.android.adb.adbclient.UP=com.dtmilano.android.adb.adbclient-module.html#UP"><a title="com.dtmilano.android.adb.adbclient.UP" class="py-name" href="#" onclick="return doclink('link-272', 'UP', 'link-272');">UP</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L854"></a><tt class="py-lineno"> 854</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L855"></a><tt class="py-lineno"> 855</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-273" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.touch
+com.dtmilano.android.viewclient.View.touch" class="py-name" href="#" onclick="return doclink('link-273', 'touch', 'link-266');">touch</a></tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">,</tt> <tt id="link-274" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.type
+com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-274', 'type', 'link-55');">type</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L856"></a><tt class="py-lineno"> 856</tt>  <tt class="py-line"> </tt>
+<a name="View.allPossibleNamesWithColon"></a><div id="View.allPossibleNamesWithColon-def"><a name="L857"></a><tt class="py-lineno"> 857</tt> <a class="py-toggle" href="#" id="View.allPossibleNamesWithColon-toggle" onclick="return toggle('View.allPossibleNamesWithColon');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#allPossibleNamesWithColon">allPossibleNamesWithColon</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.allPossibleNamesWithColon-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.allPossibleNamesWithColon-expanded"><a name="L858"></a><tt class="py-lineno"> 858</tt>  <tt class="py-line">        <tt class="py-name">l</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L859"></a><tt class="py-lineno"> 859</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">.</tt><tt class="py-name">count</tt><tt class="py-op">(</tt><tt class="py-string">"_"</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L860"></a><tt class="py-lineno"> 860</tt>  <tt class="py-line">            <tt class="py-name">name</tt> <tt class="py-op">=</tt> <tt class="py-name">name</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">"_"</tt><tt class="py-op">,</tt> <tt class="py-string">":"</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L861"></a><tt class="py-lineno"> 861</tt>  <tt class="py-line">            <tt class="py-name">l</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
+<a name="L862"></a><tt class="py-lineno"> 862</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">l</tt> </tt>
+</div><a name="L863"></a><tt class="py-lineno"> 863</tt>  <tt class="py-line"> </tt>
+<a name="View.intersection"></a><div id="View.intersection-def"><a name="L864"></a><tt class="py-lineno"> 864</tt> <a class="py-toggle" href="#" id="View.intersection-toggle" onclick="return toggle('View.intersection');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#intersection">intersection</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">l1</tt><tt class="py-op">,</tt> <tt class="py-param">l2</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.intersection-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.intersection-expanded"><a name="L865"></a><tt class="py-lineno"> 865</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-275" class="py-name" targets="Method com.dtmilano.android.viewclient.ViewClient.list()=com.dtmilano.android.viewclient.ViewClient-class.html#list"><a title="com.dtmilano.android.viewclient.ViewClient.list" class="py-name" href="#" onclick="return doclink('link-275', 'list', 'link-275');">list</a></tt><tt class="py-op">(</tt><tt class="py-name">set</tt><tt class="py-op">(</tt><tt class="py-name">l1</tt><tt class="py-op">)</tt> <tt class="py-op">&amp;</tt> <tt class="py-name">set</tt><tt class="py-op">(</tt><tt class="py-name">l2</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L866"></a><tt class="py-lineno"> 866</tt>  <tt class="py-line"> </tt>
+<a name="View.containsPoint"></a><div id="View.containsPoint-def"><a name="L867"></a><tt class="py-lineno"> 867</tt> <a class="py-toggle" href="#" id="View.containsPoint-toggle" onclick="return toggle('View.containsPoint');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#containsPoint">containsPoint</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-param">x</tt><tt class="py-op">,</tt> <tt class="py-param">y</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.containsPoint-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.containsPoint-expanded"><a name="L868"></a><tt class="py-lineno"> 868</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">X</tt><tt class="py-op">,</tt> <tt class="py-name">Y</tt><tt class="py-op">,</tt> <tt class="py-name">W</tt><tt class="py-op">,</tt> <tt class="py-name">H</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-276" class="py-name" targets="Method com.dtmilano.android.viewclient.View.getPositionAndSize()=com.dtmilano.android.viewclient.View-class.html#getPositionAndSize"><a title="com.dtmilano.android.viewclient.View.getPositionAndSize" class="py-name" href="#" onclick="return doclink('link-276', 'getPositionAndSize', 'link-276');">getPositionAndSize</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L869"></a><tt class="py-lineno"> 869</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">x</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">X</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt> <tt class="py-op">&lt;=</tt> <tt class="py-op">(</tt><tt class="py-name">X</tt><tt class="py-op">+</tt><tt class="py-name">W</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">y</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">Y</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">y</tt> <tt class="py-op">&lt;=</tt> <tt class="py-op">(</tt><tt class="py-name">Y</tt><tt class="py-op">+</tt><tt class="py-name">H</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L870"></a><tt class="py-lineno"> 870</tt>  <tt class="py-line"> </tt>
+<a name="View.add"></a><div id="View.add-def"><a name="L871"></a><tt class="py-lineno"> 871</tt> <a class="py-toggle" href="#" id="View.add-toggle" onclick="return toggle('View.add');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#add">add</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">child</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.add-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.add-expanded"><a name="L872"></a><tt class="py-lineno"> 872</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L873"></a><tt class="py-lineno"> 873</tt>  <tt class="py-line"><tt class="py-docstring">        Adds a child</tt> </tt>
+<a name="L874"></a><tt class="py-lineno"> 874</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L875"></a><tt class="py-lineno"> 875</tt>  <tt class="py-line"><tt class="py-docstring">        @type child: View</tt> </tt>
+<a name="L876"></a><tt class="py-lineno"> 876</tt>  <tt class="py-line"><tt class="py-docstring">        @param child: The child to add</tt> </tt>
+<a name="L877"></a><tt class="py-lineno"> 877</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L878"></a><tt class="py-lineno"> 878</tt>  <tt class="py-line">        <tt class="py-name">child</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt> </tt>
+<a name="L879"></a><tt class="py-lineno"> 879</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">children</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L880"></a><tt class="py-lineno"> 880</tt>  <tt class="py-line"> </tt>
+<a name="View.isClickable"></a><div id="View.isClickable-def"><a name="L881"></a><tt class="py-lineno"> 881</tt> <a class="py-toggle" href="#" id="View.isClickable-toggle" onclick="return toggle('View.isClickable');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#isClickable">isClickable</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.isClickable-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.isClickable-expanded"><a name="L882"></a><tt class="py-lineno"> 882</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-277" class="py-name" targets="Method com.dtmilano.android.viewclient.View.__getattr__()=com.dtmilano.android.viewclient.View-class.html#__getattr__"><a title="com.dtmilano.android.viewclient.View.__getattr__" class="py-name" href="#" onclick="return doclink('link-277', '__getattr__', 'link-277');">__getattr__</a></tt><tt class="py-op">(</tt><tt class="py-string">'isClickable'</tt><tt class="py-op">)</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L883"></a><tt class="py-lineno"> 883</tt>  <tt class="py-line"> </tt>
+<a name="View.variableNameFromId"></a><div id="View.variableNameFromId-def"><a name="L884"></a><tt class="py-lineno"> 884</tt> <a class="py-toggle" href="#" id="View.variableNameFromId-toggle" onclick="return toggle('View.variableNameFromId');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#variableNameFromId">variableNameFromId</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.variableNameFromId-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.variableNameFromId-expanded"><a name="L885"></a><tt class="py-lineno"> 885</tt>  <tt class="py-line">        <tt class="py-name">_id</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-278" class="py-name"><a title="com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-278', 'getId', 'link-134');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L886"></a><tt class="py-lineno"> 886</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">_id</tt><tt class="py-op">:</tt> </tt>
+<a name="L887"></a><tt class="py-lineno"> 887</tt>  <tt class="py-line">            <tt class="py-name">var</tt> <tt class="py-op">=</tt> <tt class="py-name">_id</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'.'</tt><tt class="py-op">,</tt> <tt class="py-string">'_'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">':'</tt><tt class="py-op">,</tt> <tt class="py-string">'___'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">,</tt> <tt class="py-string">'_'</tt><tt class="py-op">)</tt> </tt>
+<a name="L888"></a><tt class="py-lineno"> 888</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L889"></a><tt class="py-lineno"> 889</tt>  <tt class="py-line">            <tt class="py-name">_id</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-279" class="py-name"><a title="com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-279', 'getUniqueId', 'link-135');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L890"></a><tt class="py-lineno"> 890</tt>  <tt class="py-line">            <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt id="link-280" class="py-name"><a title="com.dtmilano.android.viewclient.ID_RE" class="py-name" href="#" onclick="return doclink('link-280', 'ID_RE', 'link-57');">ID_RE</a></tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">_id</tt><tt class="py-op">)</tt> </tt>
+<a name="L891"></a><tt class="py-lineno"> 891</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L892"></a><tt class="py-lineno"> 892</tt>  <tt class="py-line">                <tt class="py-name">var</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L893"></a><tt class="py-lineno"> 893</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L894"></a><tt class="py-lineno"> 894</tt>  <tt class="py-line">                    <tt class="py-name">var</tt> <tt class="py-op">+=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">)</tt> </tt>
+<a name="L895"></a><tt class="py-lineno"> 895</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-string">'^\d'</tt><tt class="py-op">,</tt> <tt class="py-name">var</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L896"></a><tt class="py-lineno"> 896</tt>  <tt class="py-line">                    <tt class="py-name">var</tt> <tt class="py-op">=</tt> <tt class="py-string">'id_'</tt> <tt class="py-op">+</tt> <tt class="py-name">var</tt> </tt>
+<a name="L897"></a><tt class="py-lineno"> 897</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">var</tt> </tt>
+</div><a name="L898"></a><tt class="py-lineno"> 898</tt>  <tt class="py-line"> </tt>
+<a name="View.writeImageToFile"></a><div id="View.writeImageToFile-def"><a name="L899"></a><tt class="py-lineno"> 899</tt> <a class="py-toggle" href="#" id="View.writeImageToFile-toggle" onclick="return toggle('View.writeImageToFile');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#writeImageToFile">writeImageToFile</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filename</tt><tt class="py-op">,</tt> <tt class="py-param">format</tt><tt class="py-op">=</tt><tt class="py-string">"PNG"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.writeImageToFile-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.writeImageToFile-expanded"><a name="L900"></a><tt class="py-lineno"> 900</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L901"></a><tt class="py-lineno"> 901</tt>  <tt class="py-line"><tt class="py-docstring">        Write the View image to the specified filename in the specified format.</tt> </tt>
+<a name="L902"></a><tt class="py-lineno"> 902</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L903"></a><tt class="py-lineno"> 903</tt>  <tt class="py-line"><tt class="py-docstring">        @type filename: str</tt> </tt>
+<a name="L904"></a><tt class="py-lineno"> 904</tt>  <tt class="py-line"><tt class="py-docstring">        @param filename: Absolute path and optional filename receiving the image. If this points to</tt> </tt>
+<a name="L905"></a><tt class="py-lineno"> 905</tt>  <tt class="py-line"><tt class="py-docstring">                         a directory, then the filename is determined by this View unique ID and</tt> </tt>
+<a name="L906"></a><tt class="py-lineno"> 906</tt>  <tt class="py-line"><tt class="py-docstring">                         format extension.</tt> </tt>
+<a name="L907"></a><tt class="py-lineno"> 907</tt>  <tt class="py-line"><tt class="py-docstring">        @type format: str</tt> </tt>
+<a name="L908"></a><tt class="py-lineno"> 908</tt>  <tt class="py-line"><tt class="py-docstring">        @param format: Image format (default format is PNG)</tt> </tt>
+<a name="L909"></a><tt class="py-lineno"> 909</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L910"></a><tt class="py-lineno"> 910</tt>  <tt class="py-line"> </tt>
+<a name="L911"></a><tt class="py-lineno"> 911</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">isabs</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L912"></a><tt class="py-lineno"> 912</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"writeImageToFile expects an absolute path"</tt><tt class="py-op">)</tt> </tt>
+<a name="L913"></a><tt class="py-lineno"> 913</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">isdir</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L914"></a><tt class="py-lineno"> 914</tt>  <tt class="py-line">            <tt class="py-name">filename</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-281" class="py-name" targets="Method com.dtmilano.android.viewclient.View.variableNameFromId()=com.dtmilano.android.viewclient.View-class.html#variableNameFromId"><a title="com.dtmilano.android.viewclient.View.variableNameFromId" class="py-name" href="#" onclick="return doclink('link-281', 'variableNameFromId', 'link-281');">variableNameFromId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">'.'</tt> <tt class="py-op">+</tt> <tt class="py-name">format</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L915"></a><tt class="py-lineno"> 915</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-282" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-282', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L916"></a><tt class="py-lineno"> 916</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"writeImageToFile: saving image to '%s' in %s format"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-name">format</tt><tt class="py-op">)</tt> </tt>
+<a name="L917"></a><tt class="py-lineno"> 917</tt>  <tt class="py-line">        <tt class="py-comment">#self.device.takeSnapshot().getSubImage(self.getPositionAndSize()).writeToFile(filename, format)</tt> </tt>
+<a name="L918"></a><tt class="py-lineno"> 918</tt>  <tt class="py-line">        <tt class="py-comment"># crop:</tt> </tt>
+<a name="L919"></a><tt class="py-lineno"> 919</tt>  <tt class="py-line">        <tt class="py-comment"># im.crop(box) &#8658; image</tt> </tt>
+<a name="L920"></a><tt class="py-lineno"> 920</tt>  <tt class="py-line">        <tt class="py-comment"># Returns a copy of a rectangular region from the current image.</tt> </tt>
+<a name="L921"></a><tt class="py-lineno"> 921</tt>  <tt class="py-line">        <tt class="py-comment"># The box is a 4-tuple defining the left, upper, right, and lower pixel coordinate.</tt> </tt>
+<a name="L922"></a><tt class="py-lineno"> 922</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">l</tt><tt class="py-op">,</tt> <tt class="py-name">t</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">r</tt><tt class="py-op">,</tt> <tt class="py-name">b</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-283" class="py-name"><a title="com.dtmilano.android.viewclient.View.getCoords" class="py-name" href="#" onclick="return doclink('link-283', 'getCoords', 'link-195');">getCoords</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L923"></a><tt class="py-lineno"> 923</tt>  <tt class="py-line">        <tt class="py-name">box</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">l</tt><tt class="py-op">,</tt> <tt class="py-name">t</tt><tt class="py-op">,</tt> <tt class="py-name">r</tt><tt class="py-op">,</tt> <tt class="py-name">b</tt><tt class="py-op">)</tt> </tt>
+<a name="L924"></a><tt class="py-lineno"> 924</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-284" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-284', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L925"></a><tt class="py-lineno"> 925</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"writeImageToFile: cropping"</tt><tt class="py-op">,</tt> <tt class="py-name">box</tt><tt class="py-op">,</tt> <tt class="py-string">"    reconnect="</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">reconnect</tt> </tt>
+<a name="L926"></a><tt class="py-lineno"> 926</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-285" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.takeSnapshot()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#takeSnapshot"><a title="com.dtmilano.android.adb.adbclient.AdbClient.takeSnapshot" class="py-name" href="#" onclick="return doclink('link-285', 'takeSnapshot', 'link-285');">takeSnapshot</a></tt><tt class="py-op">(</tt><tt class="py-name">reconnect</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">reconnect</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">crop</tt><tt class="py-op">(</tt><tt class="py-name">box</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">save</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-name">format</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L927"></a><tt class="py-lineno"> 927</tt>  <tt class="py-line"> </tt>
+<a name="View.__smallStr__"></a><div id="View.__smallStr__-def"><a name="L928"></a><tt class="py-lineno"> 928</tt> <a class="py-toggle" href="#" id="View.__smallStr__-toggle" onclick="return toggle('View.__smallStr__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#__smallStr__">__smallStr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__smallStr__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__smallStr__-expanded"><a name="L929"></a><tt class="py-lineno"> 929</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">=</tt> <tt class="py-name">unicode</tt><tt class="py-op">(</tt><tt class="py-string">"View["</tt><tt class="py-op">,</tt> <tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-string">'replace'</tt><tt class="py-op">)</tt> </tt>
+<a name="L930"></a><tt class="py-lineno"> 930</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">"class"</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">:</tt> </tt>
+<a name="L931"></a><tt class="py-lineno"> 931</tt>  <tt class="py-line">            <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">" class="</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'class'</tt><tt class="py-op">]</tt> </tt>
+<a name="L932"></a><tt class="py-lineno"> 932</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">" id=%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-286" class="py-name"><a title="com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-286', 'getId', 'link-134');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L933"></a><tt class="py-lineno"> 933</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">" ]   parent="</tt> </tt>
+<a name="L934"></a><tt class="py-lineno"> 934</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-keyword">and</tt> <tt class="py-string">"class"</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">:</tt> </tt>
+<a name="L935"></a><tt class="py-lineno"> 935</tt>  <tt class="py-line">            <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">"%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">"class"</tt><tt class="py-op">]</tt> </tt>
+<a name="L936"></a><tt class="py-lineno"> 936</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L937"></a><tt class="py-lineno"> 937</tt>  <tt class="py-line">            <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">"None"</tt> </tt>
+<a name="L938"></a><tt class="py-lineno"> 938</tt>  <tt class="py-line"> </tt>
+<a name="L939"></a><tt class="py-lineno"> 939</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">__str</tt> </tt>
+</div><a name="L940"></a><tt class="py-lineno"> 940</tt>  <tt class="py-line"> </tt>
+<a name="View.__tinyStr__"></a><div id="View.__tinyStr__-def"><a name="L941"></a><tt class="py-lineno"> 941</tt> <a class="py-toggle" href="#" id="View.__tinyStr__-toggle" onclick="return toggle('View.__tinyStr__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#__tinyStr__">__tinyStr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__tinyStr__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__tinyStr__-expanded"><a name="L942"></a><tt class="py-lineno"> 942</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">=</tt> <tt class="py-name">unicode</tt><tt class="py-op">(</tt><tt class="py-string">"View["</tt><tt class="py-op">,</tt> <tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-string">'replace'</tt><tt class="py-op">)</tt> </tt>
+<a name="L943"></a><tt class="py-lineno"> 943</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">"class"</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">:</tt> </tt>
+<a name="L944"></a><tt class="py-lineno"> 944</tt>  <tt class="py-line">            <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">" class="</tt> <tt class="py-op">+</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt><tt class="py-op">(</tt><tt class="py-string">'.*\.'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'class'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L945"></a><tt class="py-lineno"> 945</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">" id=%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-287" class="py-name"><a title="com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-287', 'getId', 'link-134');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L946"></a><tt class="py-lineno"> 946</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">" ]"</tt> </tt>
+<a name="L947"></a><tt class="py-lineno"> 947</tt>  <tt class="py-line"> </tt>
+<a name="L948"></a><tt class="py-lineno"> 948</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">__str</tt> </tt>
+</div><a name="L949"></a><tt class="py-lineno"> 949</tt>  <tt class="py-line"> </tt>
+<a name="View.__microStr__"></a><div id="View.__microStr__-def"><a name="L950"></a><tt class="py-lineno"> 950</tt> <a class="py-toggle" href="#" id="View.__microStr__-toggle" onclick="return toggle('View.__microStr__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#__microStr__">__microStr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__microStr__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__microStr__-expanded"><a name="L951"></a><tt class="py-lineno"> 951</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">=</tt> <tt class="py-name">unicode</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-string">'replace'</tt><tt class="py-op">)</tt> </tt>
+<a name="L952"></a><tt class="py-lineno"> 952</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">"class"</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">:</tt> </tt>
+<a name="L953"></a><tt class="py-lineno"> 953</tt>  <tt class="py-line">            <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt><tt class="py-op">(</tt><tt class="py-string">'.*\.'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'class'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L954"></a><tt class="py-lineno"> 954</tt>  <tt class="py-line">        <tt class="py-name">id</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-288" class="py-name"><a title="com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-288', 'getId', 'link-134');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'id/no_id/'</tt><tt class="py-op">,</tt> <tt class="py-string">'-'</tt><tt class="py-op">)</tt> </tt>
+<a name="L955"></a><tt class="py-lineno"> 955</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-name">id</tt> </tt>
+<a name="L956"></a><tt class="py-lineno"> 956</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">L</tt><tt class="py-op">,</tt> <tt class="py-name">T</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">R</tt><tt class="py-op">,</tt> <tt class="py-name">B</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-289" class="py-name"><a title="com.dtmilano.android.viewclient.View.getCoords" class="py-name" href="#" onclick="return doclink('link-289', 'getCoords', 'link-195');">getCoords</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L957"></a><tt class="py-lineno"> 957</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">'@%04d%04d%04d%04d'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">L</tt><tt class="py-op">,</tt> <tt class="py-name">T</tt><tt class="py-op">,</tt> <tt class="py-name">R</tt><tt class="py-op">,</tt> <tt class="py-name">B</tt><tt class="py-op">)</tt> </tt>
+<a name="L958"></a><tt class="py-lineno"> 958</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L959"></a><tt class="py-lineno"> 959</tt>  <tt class="py-line"> </tt>
+<a name="L960"></a><tt class="py-lineno"> 960</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">__str</tt> </tt>
+</div><a name="L961"></a><tt class="py-lineno"> 961</tt>  <tt class="py-line"> </tt>
+<a name="L962"></a><tt class="py-lineno"> 962</tt>  <tt class="py-line"> </tt>
+<a name="View.__str__"></a><div id="View.__str__-def"><a name="L963"></a><tt class="py-lineno"> 963</tt> <a class="py-toggle" href="#" id="View.__str__-toggle" onclick="return toggle('View.__str__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.View-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__str__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__str__-expanded"><a name="L964"></a><tt class="py-lineno"> 964</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">=</tt> <tt class="py-name">unicode</tt><tt class="py-op">(</tt><tt class="py-string">"View["</tt><tt class="py-op">,</tt> <tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-string">'replace'</tt><tt class="py-op">)</tt> </tt>
+<a name="L965"></a><tt class="py-lineno"> 965</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">"class"</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">:</tt> </tt>
+<a name="L966"></a><tt class="py-lineno"> 966</tt>  <tt class="py-line">            <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">" class="</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">"class"</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt id="link-290" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.Device.__str__()=com.dtmilano.android.adb.adbclient.Device-class.html#__str__,Method com.dtmilano.android.viewclient.View.__str__()=com.dtmilano.android.viewclient.View-class.html#__str__,Method com.dtmilano.android.viewclient.Window.__str__()=com.dtmilano.android.viewclient.Window-class.html#__str__"><a title="com.dtmilano.android.adb.adbclient.Device.__str__
+com.dtmilano.android.viewclient.View.__str__
+com.dtmilano.android.viewclient.Window.__str__" class="py-name" href="#" onclick="return doclink('link-290', '__str__', 'link-290');">__str__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">" "</tt> </tt>
+<a name="L967"></a><tt class="py-lineno"> 967</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">a</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">:</tt> </tt>
+<a name="L968"></a><tt class="py-lineno"> 968</tt>  <tt class="py-line">            <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-name">a</tt> <tt class="py-op">+</tt> <tt class="py-string">"="</tt> </tt>
+<a name="L969"></a><tt class="py-lineno"> 969</tt>  <tt class="py-line">            <tt class="py-comment"># decode() works only on python's 8-bit strings</tt> </tt>
+<a name="L970"></a><tt class="py-lineno"> 970</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">a</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L971"></a><tt class="py-lineno"> 971</tt>  <tt class="py-line">                <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">a</tt><tt class="py-op">]</tt> </tt>
+<a name="L972"></a><tt class="py-lineno"> 972</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L973"></a><tt class="py-lineno"> 973</tt>  <tt class="py-line">                <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-name">unicode</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">a</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-name">errors</tt><tt class="py-op">=</tt><tt class="py-string">'replace'</tt><tt class="py-op">)</tt> </tt>
+<a name="L974"></a><tt class="py-lineno"> 974</tt>  <tt class="py-line">            <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">" "</tt> </tt>
+<a name="L975"></a><tt class="py-lineno"> 975</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">"]   parent="</tt> </tt>
+<a name="L976"></a><tt class="py-lineno"> 976</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">:</tt> </tt>
+<a name="L977"></a><tt class="py-lineno"> 977</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-string">"class"</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">:</tt> </tt>
+<a name="L978"></a><tt class="py-lineno"> 978</tt>  <tt class="py-line">                <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">"%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">"class"</tt><tt class="py-op">]</tt> </tt>
+<a name="L979"></a><tt class="py-lineno"> 979</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L980"></a><tt class="py-lineno"> 980</tt>  <tt class="py-line">                <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-291" class="py-name"><a title="com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-291', 'getId', 'link-134');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-292" class="py-name"><a title="com.dtmilano.android.adb.adbclient.Device.__str__
+com.dtmilano.android.viewclient.View.__str__
+com.dtmilano.android.viewclient.Window.__str__" class="py-name" href="#" onclick="return doclink('link-292', '__str__', 'link-290');">__str__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L981"></a><tt class="py-lineno"> 981</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L982"></a><tt class="py-lineno"> 982</tt>  <tt class="py-line">            <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">"None"</tt> </tt>
+<a name="L983"></a><tt class="py-lineno"> 983</tt>  <tt class="py-line"> </tt>
+<a name="L984"></a><tt class="py-lineno"> 984</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">__str</tt> </tt>
+</div></div><a name="L985"></a><tt class="py-lineno"> 985</tt>  <tt class="py-line"> </tt>
+<a name="TextView"></a><div id="TextView-def"><a name="L986"></a><tt class="py-lineno"> 986</tt> <a class="py-toggle" href="#" id="TextView-toggle" onclick="return toggle('TextView');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.TextView-class.html">TextView</a><tt class="py-op">(</tt><tt class="py-base-class">View</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="TextView-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="TextView-expanded"><a name="L987"></a><tt class="py-lineno"> 987</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L988"></a><tt class="py-lineno"> 988</tt>  <tt class="py-line"><tt class="py-docstring">    TextView class.</tt> </tt>
+<a name="L989"></a><tt class="py-lineno"> 989</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L990"></a><tt class="py-lineno"> 990</tt>  <tt class="py-line"> </tt>
+<a name="L991"></a><tt class="py-lineno"> 991</tt>  <tt class="py-line">    <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L992"></a><tt class="py-lineno"> 992</tt>  <tt class="py-line"> </tt>
+<a name="EditText"></a><div id="EditText-def"><a name="L993"></a><tt class="py-lineno"> 993</tt> <a class="py-toggle" href="#" id="EditText-toggle" onclick="return toggle('EditText');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.EditText-class.html">EditText</a><tt class="py-op">(</tt><tt class="py-base-class">TextView</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="EditText-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="EditText-expanded"><a name="L994"></a><tt class="py-lineno"> 994</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L995"></a><tt class="py-lineno"> 995</tt>  <tt class="py-line"><tt class="py-docstring">    EditText class.</tt> </tt>
+<a name="L996"></a><tt class="py-lineno"> 996</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L997"></a><tt class="py-lineno"> 997</tt>  <tt class="py-line">     </tt>
+<a name="EditText.type"></a><div id="EditText.type-def"><a name="L998"></a><tt class="py-lineno"> 998</tt> <a class="py-toggle" href="#" id="EditText.type-toggle" onclick="return toggle('EditText.type');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.EditText-class.html#type">type</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">text</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="EditText.type-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="EditText.type-expanded"><a name="L999"></a><tt class="py-lineno"> 999</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-293" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.touch
+com.dtmilano.android.viewclient.View.touch" class="py-name" href="#" onclick="return doclink('link-293', 'touch', 'link-266');">touch</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1000"></a><tt class="py-lineno">1000</tt>  <tt class="py-line">        <tt class="py-name">time</tt><tt class="py-op">.</tt><tt id="link-294" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-294', 'sleep', 'link-269');">sleep</a></tt><tt class="py-op">(</tt><tt class="py-number">0.5</tt><tt class="py-op">)</tt> </tt>
+<a name="L1001"></a><tt class="py-lineno">1001</tt>  <tt class="py-line">        <tt class="py-name">escaped</tt> <tt class="py-op">=</tt> <tt class="py-name">text</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'%s'</tt><tt class="py-op">,</tt> <tt class="py-string">'\\%s'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1002"></a><tt class="py-lineno">1002</tt>  <tt class="py-line">        <tt class="py-name">encoded</tt> <tt class="py-op">=</tt> <tt class="py-name">escaped</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">' '</tt><tt class="py-op">,</tt> <tt class="py-string">'%s'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1003"></a><tt class="py-lineno">1003</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-295" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.type
+com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-295', 'type', 'link-55');">type</a></tt><tt class="py-op">(</tt><tt class="py-name">encoded</tt><tt class="py-op">)</tt> </tt>
+<a name="L1004"></a><tt class="py-lineno">1004</tt>  <tt class="py-line">        <tt class="py-name">time</tt><tt class="py-op">.</tt><tt id="link-296" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-296', 'sleep', 'link-269');">sleep</a></tt><tt class="py-op">(</tt><tt class="py-number">0.5</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1005"></a><tt class="py-lineno">1005</tt>  <tt class="py-line"> </tt>
+<a name="EditText.backspace"></a><div id="EditText.backspace-def"><a name="L1006"></a><tt class="py-lineno">1006</tt> <a class="py-toggle" href="#" id="EditText.backspace-toggle" onclick="return toggle('EditText.backspace');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.EditText-class.html#backspace">backspace</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="EditText.backspace-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="EditText.backspace-expanded"><a name="L1007"></a><tt class="py-lineno">1007</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-297" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.touch
+com.dtmilano.android.viewclient.View.touch" class="py-name" href="#" onclick="return doclink('link-297', 'touch', 'link-266');">touch</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1008"></a><tt class="py-lineno">1008</tt>  <tt class="py-line">        <tt class="py-name">time</tt><tt class="py-op">.</tt><tt id="link-298" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-298', 'sleep', 'link-269');">sleep</a></tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L1009"></a><tt class="py-lineno">1009</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-299" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.press()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#press"><a title="com.dtmilano.android.adb.adbclient.AdbClient.press" class="py-name" href="#" onclick="return doclink('link-299', 'press', 'link-299');">press</a></tt><tt class="py-op">(</tt><tt class="py-string">'KEYCODE_DEL'</tt><tt class="py-op">,</tt> <tt id="link-300" class="py-name"><a title="com.dtmilano.android.adb.adbclient" class="py-name" href="#" onclick="return doclink('link-300', 'adbclient', 'link-2');">adbclient</a></tt><tt class="py-op">.</tt><tt id="link-301" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DOWN_AND_UP" class="py-name" href="#" onclick="return doclink('link-301', 'DOWN_AND_UP', 'link-258');">DOWN_AND_UP</a></tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L1010"></a><tt class="py-lineno">1010</tt>  <tt class="py-line"> </tt>
+<a name="UiAutomator2AndroidViewClient"></a><div id="UiAutomator2AndroidViewClient-def"><a name="L1011"></a><tt class="py-lineno">1011</tt> <a class="py-toggle" href="#" id="UiAutomator2AndroidViewClient-toggle" onclick="return toggle('UiAutomator2AndroidViewClient');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html">UiAutomator2AndroidViewClient</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UiAutomator2AndroidViewClient-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="UiAutomator2AndroidViewClient-expanded"><a name="L1012"></a><tt class="py-lineno">1012</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L1013"></a><tt class="py-lineno">1013</tt>  <tt class="py-line"><tt class="py-docstring">    UiAutomator XML to AndroidViewClient</tt> </tt>
+<a name="L1014"></a><tt class="py-lineno">1014</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L1015"></a><tt class="py-lineno">1015</tt>  <tt class="py-line"> </tt>
+<a name="UiAutomator2AndroidViewClient.__init__"></a><div id="UiAutomator2AndroidViewClient.__init__-def"><a name="L1016"></a><tt class="py-lineno">1016</tt> <a class="py-toggle" href="#" id="UiAutomator2AndroidViewClient.__init__-toggle" onclick="return toggle('UiAutomator2AndroidViewClient.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">device</tt><tt class="py-op">,</tt> <tt class="py-param">version</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UiAutomator2AndroidViewClient.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="UiAutomator2AndroidViewClient.__init__-expanded"><a name="L1017"></a><tt class="py-lineno">1017</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt> </tt>
+<a name="L1018"></a><tt class="py-lineno">1018</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">version</tt> <tt class="py-op">=</tt> <tt class="py-name">version</tt> </tt>
+<a name="L1019"></a><tt class="py-lineno">1019</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1020"></a><tt class="py-lineno">1020</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodeStack</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1021"></a><tt class="py-lineno">1021</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1022"></a><tt class="py-lineno">1022</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1023"></a><tt class="py-lineno">1023</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idCount</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+</div><a name="L1024"></a><tt class="py-lineno">1024</tt>  <tt class="py-line"> </tt>
+<a name="UiAutomator2AndroidViewClient.StartElement"></a><div id="UiAutomator2AndroidViewClient.StartElement-def"><a name="L1025"></a><tt class="py-lineno">1025</tt> <a class="py-toggle" href="#" id="UiAutomator2AndroidViewClient.StartElement-toggle" onclick="return toggle('UiAutomator2AndroidViewClient.StartElement');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#StartElement">StartElement</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">attributes</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UiAutomator2AndroidViewClient.StartElement-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="UiAutomator2AndroidViewClient.StartElement-expanded"><a name="L1026"></a><tt class="py-lineno">1026</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1027"></a><tt class="py-lineno">1027</tt>  <tt class="py-line"><tt class="py-docstring">        Expat start element event handler</tt> </tt>
+<a name="L1028"></a><tt class="py-lineno">1028</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1029"></a><tt class="py-lineno">1029</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-op">==</tt> <tt class="py-string">'hierarchy'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1030"></a><tt class="py-lineno">1030</tt>  <tt class="py-line">            <tt class="py-keyword">pass</tt> </tt>
+<a name="L1031"></a><tt class="py-lineno">1031</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">name</tt> <tt class="py-op">==</tt> <tt class="py-string">'node'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1032"></a><tt class="py-lineno">1032</tt>  <tt class="py-line">            <tt class="py-comment"># Instantiate an Element object</tt> </tt>
+<a name="L1033"></a><tt class="py-lineno">1033</tt>  <tt class="py-line">            <tt class="py-name">attributes</tt><tt class="py-op">[</tt><tt class="py-string">'uniqueId'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'id/no_id/%d'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idCount</tt> </tt>
+<a name="L1034"></a><tt class="py-lineno">1034</tt>  <tt class="py-line">            <tt class="py-name">bounds</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'[\][,]'</tt><tt class="py-op">,</tt> <tt class="py-name">attributes</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L1035"></a><tt class="py-lineno">1035</tt>  <tt class="py-line">            <tt class="py-name">attributes</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">bounds</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">bounds</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">bounds</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">bounds</tt><tt class="py-op">[</tt><tt class="py-number">5</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1036"></a><tt class="py-lineno">1036</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-302" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_BOUNDS" class="py-name" href="#" onclick="return doclink('link-302', 'DEBUG_BOUNDS', 'link-22');">DEBUG_BOUNDS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1037"></a><tt class="py-lineno">1037</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"bounds="</tt><tt class="py-op">,</tt> <tt class="py-name">attributes</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt> </tt>
+<a name="L1038"></a><tt class="py-lineno">1038</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idCount</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L1039"></a><tt class="py-lineno">1039</tt>  <tt class="py-line">            <tt class="py-name">child</tt> <tt class="py-op">=</tt> <tt id="link-303" class="py-name"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-303', 'View', 'link-61');">View</a></tt><tt class="py-op">.</tt><tt id="link-304" class="py-name" targets="Static Method com.dtmilano.android.adb.adbclient.Device.factory()=com.dtmilano.android.adb.adbclient.Device-class.html#factory,Static Method com.dtmilano.android.viewclient.View.factory()=com.dtmilano.android.viewclient.View-class.html#factory"><a title="com.dtmilano.android.adb.adbclient.Device.factory
+com.dtmilano.android.viewclient.View.factory" class="py-name" href="#" onclick="return doclink('link-304', 'factory', 'link-304');">factory</a></tt><tt class="py-op">(</tt><tt class="py-name">attributes</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">version</tt><tt class="py-op">)</tt> </tt>
+<a name="L1040"></a><tt class="py-lineno">1040</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">)</tt> </tt>
+<a name="L1041"></a><tt class="py-lineno">1041</tt>  <tt class="py-line">            <tt class="py-comment"># Push element onto the stack and make it a child of parent</tt> </tt>
+<a name="L1042"></a><tt class="py-lineno">1042</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodeStack</tt><tt class="py-op">:</tt> </tt>
+<a name="L1043"></a><tt class="py-lineno">1043</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">child</tt> </tt>
+<a name="L1044"></a><tt class="py-lineno">1044</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1045"></a><tt class="py-lineno">1045</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodeStack</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L1046"></a><tt class="py-lineno">1046</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-305" class="py-name" targets="Method com.dtmilano.android.viewclient.View.add()=com.dtmilano.android.viewclient.View-class.html#add"><a title="com.dtmilano.android.viewclient.View.add" class="py-name" href="#" onclick="return doclink('link-305', 'add', 'link-305');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">)</tt> </tt>
+<a name="L1047"></a><tt class="py-lineno">1047</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodeStack</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1048"></a><tt class="py-lineno">1048</tt>  <tt class="py-line"> </tt>
+<a name="UiAutomator2AndroidViewClient.EndElement"></a><div id="UiAutomator2AndroidViewClient.EndElement-def"><a name="L1049"></a><tt class="py-lineno">1049</tt> <a class="py-toggle" href="#" id="UiAutomator2AndroidViewClient.EndElement-toggle" onclick="return toggle('UiAutomator2AndroidViewClient.EndElement');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#EndElement">EndElement</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UiAutomator2AndroidViewClient.EndElement-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="UiAutomator2AndroidViewClient.EndElement-expanded"><a name="L1050"></a><tt class="py-lineno">1050</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1051"></a><tt class="py-lineno">1051</tt>  <tt class="py-line"><tt class="py-docstring">        Expat end element event handler</tt> </tt>
+<a name="L1052"></a><tt class="py-lineno">1052</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1053"></a><tt class="py-lineno">1053</tt>  <tt class="py-line"> </tt>
+<a name="L1054"></a><tt class="py-lineno">1054</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-op">==</tt> <tt class="py-string">'hierarchy'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1055"></a><tt class="py-lineno">1055</tt>  <tt class="py-line">            <tt class="py-keyword">pass</tt> </tt>
+<a name="L1056"></a><tt class="py-lineno">1056</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">name</tt> <tt class="py-op">==</tt> <tt class="py-string">'node'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1057"></a><tt class="py-lineno">1057</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodeStack</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1058"></a><tt class="py-lineno">1058</tt>  <tt class="py-line"> </tt>
+<a name="UiAutomator2AndroidViewClient.CharacterData"></a><div id="UiAutomator2AndroidViewClient.CharacterData-def"><a name="L1059"></a><tt class="py-lineno">1059</tt> <a class="py-toggle" href="#" id="UiAutomator2AndroidViewClient.CharacterData-toggle" onclick="return toggle('UiAutomator2AndroidViewClient.CharacterData');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#CharacterData">CharacterData</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UiAutomator2AndroidViewClient.CharacterData-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="UiAutomator2AndroidViewClient.CharacterData-expanded"><a name="L1060"></a><tt class="py-lineno">1060</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1061"></a><tt class="py-lineno">1061</tt>  <tt class="py-line"><tt class="py-docstring">        Expat character data event handler</tt> </tt>
+<a name="L1062"></a><tt class="py-lineno">1062</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1063"></a><tt class="py-lineno">1063</tt>  <tt class="py-line"> </tt>
+<a name="L1064"></a><tt class="py-lineno">1064</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">data</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1065"></a><tt class="py-lineno">1065</tt>  <tt class="py-line">            <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1066"></a><tt class="py-lineno">1066</tt>  <tt class="py-line">            <tt class="py-name">element</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodeStack</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L1067"></a><tt class="py-lineno">1067</tt>  <tt class="py-line">            <tt class="py-name">element</tt><tt class="py-op">.</tt><tt class="py-name">cdata</tt> <tt class="py-op">+=</tt> <tt class="py-name">data</tt> </tt>
+</div><a name="L1068"></a><tt class="py-lineno">1068</tt>  <tt class="py-line"> </tt>
+<a name="UiAutomator2AndroidViewClient.Parse"></a><div id="UiAutomator2AndroidViewClient.Parse-def"><a name="L1069"></a><tt class="py-lineno">1069</tt> <a class="py-toggle" href="#" id="UiAutomator2AndroidViewClient.Parse-toggle" onclick="return toggle('UiAutomator2AndroidViewClient.Parse');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#Parse">Parse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">uiautomatorxml</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UiAutomator2AndroidViewClient.Parse-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="UiAutomator2AndroidViewClient.Parse-expanded"><a name="L1070"></a><tt class="py-lineno">1070</tt>  <tt class="py-line">        <tt class="py-comment"># Create an Expat parser</tt> </tt>
+<a name="L1071"></a><tt class="py-lineno">1071</tt>  <tt class="py-line">        <tt class="py-name">parser</tt> <tt class="py-op">=</tt> <tt class="py-name">xml</tt><tt class="py-op">.</tt><tt class="py-name">parsers</tt><tt class="py-op">.</tt><tt class="py-name">expat</tt><tt class="py-op">.</tt><tt class="py-name">ParserCreate</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1072"></a><tt class="py-lineno">1072</tt>  <tt class="py-line">        <tt class="py-comment"># Set the Expat event handlers to our methods</tt> </tt>
+<a name="L1073"></a><tt class="py-lineno">1073</tt>  <tt class="py-line">        <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">StartElementHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-306" class="py-name" targets="Method com.dtmilano.android.viewclient.Excerpt2Code.StartElement()=com.dtmilano.android.viewclient.Excerpt2Code-class.html#StartElement,Method com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.StartElement()=com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#StartElement"><a title="com.dtmilano.android.viewclient.Excerpt2Code.StartElement
+com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.StartElement" class="py-name" href="#" onclick="return doclink('link-306', 'StartElement', 'link-306');">StartElement</a></tt> </tt>
+<a name="L1074"></a><tt class="py-lineno">1074</tt>  <tt class="py-line">        <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">EndElementHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-307" class="py-name" targets="Method com.dtmilano.android.viewclient.Excerpt2Code.EndElement()=com.dtmilano.android.viewclient.Excerpt2Code-class.html#EndElement,Method com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.EndElement()=com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#EndElement"><a title="com.dtmilano.android.viewclient.Excerpt2Code.EndElement
+com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.EndElement" class="py-name" href="#" onclick="return doclink('link-307', 'EndElement', 'link-307');">EndElement</a></tt> </tt>
+<a name="L1075"></a><tt class="py-lineno">1075</tt>  <tt class="py-line">        <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">CharacterDataHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-308" class="py-name" targets="Method com.dtmilano.android.viewclient.Excerpt2Code.CharacterData()=com.dtmilano.android.viewclient.Excerpt2Code-class.html#CharacterData,Method com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.CharacterData()=com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#CharacterData"><a title="com.dtmilano.android.viewclient.Excerpt2Code.CharacterData
+com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.CharacterData" class="py-name" href="#" onclick="return doclink('link-308', 'CharacterData', 'link-308');">CharacterData</a></tt> </tt>
+<a name="L1076"></a><tt class="py-lineno">1076</tt>  <tt class="py-line">        <tt class="py-comment"># Parse the XML File</tt> </tt>
+<a name="L1077"></a><tt class="py-lineno">1077</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1078"></a><tt class="py-lineno">1078</tt>  <tt class="py-line">            <tt class="py-name">parserStatus</tt> <tt class="py-op">=</tt> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt id="link-309" class="py-name" targets="Method com.dtmilano.android.viewclient.Excerpt2Code.Parse()=com.dtmilano.android.viewclient.Excerpt2Code-class.html#Parse,Method com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.Parse()=com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#Parse"><a title="com.dtmilano.android.viewclient.Excerpt2Code.Parse
+com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.Parse" class="py-name" href="#" onclick="return doclink('link-309', 'Parse', 'link-309');">Parse</a></tt><tt class="py-op">(</tt><tt class="py-name">uiautomatorxml</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-name">encoding</tt><tt class="py-op">=</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-name">errors</tt><tt class="py-op">=</tt><tt class="py-string">'replace'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L1079"></a><tt class="py-lineno">1079</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">xml</tt><tt class="py-op">.</tt><tt class="py-name">parsers</tt><tt class="py-op">.</tt><tt class="py-name">expat</tt><tt class="py-op">.</tt><tt class="py-name">ExpatError</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">:</tt> </tt>
+<a name="L1080"></a><tt class="py-lineno">1080</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: Offending XML:\n"</tt><tt class="py-op">,</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">uiautomatorxml</tt><tt class="py-op">)</tt> </tt>
+<a name="L1081"></a><tt class="py-lineno">1081</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-name">ex</tt><tt class="py-op">)</tt> </tt>
+<a name="L1082"></a><tt class="py-lineno">1082</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> </tt>
+</div></div><a name="L1083"></a><tt class="py-lineno">1083</tt>  <tt class="py-line"> </tt>
+<a name="Excerpt2Code"></a><div id="Excerpt2Code-def"><a name="L1084"></a><tt class="py-lineno">1084</tt> <a class="py-toggle" href="#" id="Excerpt2Code-toggle" onclick="return toggle('Excerpt2Code');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.Excerpt2Code-class.html">Excerpt2Code</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Excerpt2Code-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Excerpt2Code-expanded"><a name="L1085"></a><tt class="py-lineno">1085</tt>  <tt class="py-line">    <tt class="py-docstring">''' Excerpt XML to code '''</tt> </tt>
+<a name="L1086"></a><tt class="py-lineno">1086</tt>  <tt class="py-line"> </tt>
+<a name="Excerpt2Code.__init__"></a><div id="Excerpt2Code.__init__-def"><a name="L1087"></a><tt class="py-lineno">1087</tt> <a class="py-toggle" href="#" id="Excerpt2Code.__init__-toggle" onclick="return toggle('Excerpt2Code.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.Excerpt2Code-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Excerpt2Code.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Excerpt2Code.__init__-expanded"><a name="L1088"></a><tt class="py-lineno">1088</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L1089"></a><tt class="py-lineno">1089</tt>  <tt class="py-line"> </tt>
+<a name="Excerpt2Code.StartElement"></a><div id="Excerpt2Code.StartElement-def"><a name="L1090"></a><tt class="py-lineno">1090</tt> <a class="py-toggle" href="#" id="Excerpt2Code.StartElement-toggle" onclick="return toggle('Excerpt2Code.StartElement');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.Excerpt2Code-class.html#StartElement">StartElement</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">attributes</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Excerpt2Code.StartElement-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Excerpt2Code.StartElement-expanded"><a name="L1091"></a><tt class="py-lineno">1091</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1092"></a><tt class="py-lineno">1092</tt>  <tt class="py-line"><tt class="py-docstring">        Expat start element event handler</tt> </tt>
+<a name="L1093"></a><tt class="py-lineno">1093</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1094"></a><tt class="py-lineno">1094</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-op">==</tt> <tt class="py-string">'excerpt'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1095"></a><tt class="py-lineno">1095</tt>  <tt class="py-line">            <tt class="py-keyword">pass</tt> </tt>
+<a name="L1096"></a><tt class="py-lineno">1096</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1097"></a><tt class="py-lineno">1097</tt>  <tt class="py-line">            <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Unexpected element: '%s'"</tt> <tt class="py-op">%</tt> <tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1098"></a><tt class="py-lineno">1098</tt>  <tt class="py-line"> </tt>
+<a name="Excerpt2Code.EndElement"></a><div id="Excerpt2Code.EndElement-def"><a name="L1099"></a><tt class="py-lineno">1099</tt> <a class="py-toggle" href="#" id="Excerpt2Code.EndElement-toggle" onclick="return toggle('Excerpt2Code.EndElement');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.Excerpt2Code-class.html#EndElement">EndElement</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Excerpt2Code.EndElement-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Excerpt2Code.EndElement-expanded"><a name="L1100"></a><tt class="py-lineno">1100</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1101"></a><tt class="py-lineno">1101</tt>  <tt class="py-line"><tt class="py-docstring">        Expat end element event handler</tt> </tt>
+<a name="L1102"></a><tt class="py-lineno">1102</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1103"></a><tt class="py-lineno">1103</tt>  <tt class="py-line"> </tt>
+<a name="L1104"></a><tt class="py-lineno">1104</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-op">==</tt> <tt class="py-string">'excerpt'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1105"></a><tt class="py-lineno">1105</tt>  <tt class="py-line">            <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L1106"></a><tt class="py-lineno">1106</tt>  <tt class="py-line"> </tt>
+<a name="Excerpt2Code.CharacterData"></a><div id="Excerpt2Code.CharacterData-def"><a name="L1107"></a><tt class="py-lineno">1107</tt> <a class="py-toggle" href="#" id="Excerpt2Code.CharacterData-toggle" onclick="return toggle('Excerpt2Code.CharacterData');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.Excerpt2Code-class.html#CharacterData">CharacterData</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Excerpt2Code.CharacterData-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Excerpt2Code.CharacterData-expanded"><a name="L1108"></a><tt class="py-lineno">1108</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1109"></a><tt class="py-lineno">1109</tt>  <tt class="py-line"><tt class="py-docstring">        Expat character data event handler</tt> </tt>
+<a name="L1110"></a><tt class="py-lineno">1110</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1111"></a><tt class="py-lineno">1111</tt>  <tt class="py-line"> </tt>
+<a name="L1112"></a><tt class="py-lineno">1112</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">data</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1113"></a><tt class="py-lineno">1113</tt>  <tt class="py-line">            <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1114"></a><tt class="py-lineno">1114</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">:</tt> </tt>
+<a name="L1115"></a><tt class="py-lineno">1115</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt> </tt>
+<a name="L1116"></a><tt class="py-lineno">1116</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1117"></a><tt class="py-lineno">1117</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> <tt class="py-op">+=</tt> <tt class="py-name">data</tt> </tt>
+</div><a name="L1118"></a><tt class="py-lineno">1118</tt>  <tt class="py-line"> </tt>
+<a name="Excerpt2Code.Parse"></a><div id="Excerpt2Code.Parse-def"><a name="L1119"></a><tt class="py-lineno">1119</tt> <a class="py-toggle" href="#" id="Excerpt2Code.Parse-toggle" onclick="return toggle('Excerpt2Code.Parse');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.Excerpt2Code-class.html#Parse">Parse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">excerpt</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Excerpt2Code.Parse-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Excerpt2Code.Parse-expanded"><a name="L1120"></a><tt class="py-lineno">1120</tt>  <tt class="py-line">        <tt class="py-comment"># Create an Expat parser</tt> </tt>
+<a name="L1121"></a><tt class="py-lineno">1121</tt>  <tt class="py-line">        <tt class="py-name">parser</tt> <tt class="py-op">=</tt> <tt class="py-name">xml</tt><tt class="py-op">.</tt><tt class="py-name">parsers</tt><tt class="py-op">.</tt><tt class="py-name">expat</tt><tt class="py-op">.</tt><tt class="py-name">ParserCreate</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1122"></a><tt class="py-lineno">1122</tt>  <tt class="py-line">        <tt class="py-comment"># Set the Expat event handlers to our methods</tt> </tt>
+<a name="L1123"></a><tt class="py-lineno">1123</tt>  <tt class="py-line">        <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">StartElementHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-310" class="py-name"><a title="com.dtmilano.android.viewclient.Excerpt2Code.StartElement
+com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.StartElement" class="py-name" href="#" onclick="return doclink('link-310', 'StartElement', 'link-306');">StartElement</a></tt> </tt>
+<a name="L1124"></a><tt class="py-lineno">1124</tt>  <tt class="py-line">        <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">EndElementHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-311" class="py-name"><a title="com.dtmilano.android.viewclient.Excerpt2Code.EndElement
+com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.EndElement" class="py-name" href="#" onclick="return doclink('link-311', 'EndElement', 'link-307');">EndElement</a></tt> </tt>
+<a name="L1125"></a><tt class="py-lineno">1125</tt>  <tt class="py-line">        <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">CharacterDataHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-312" class="py-name"><a title="com.dtmilano.android.viewclient.Excerpt2Code.CharacterData
+com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.CharacterData" class="py-name" href="#" onclick="return doclink('link-312', 'CharacterData', 'link-308');">CharacterData</a></tt> </tt>
+<a name="L1126"></a><tt class="py-lineno">1126</tt>  <tt class="py-line">        <tt class="py-comment"># Parse the XML</tt> </tt>
+<a name="L1127"></a><tt class="py-lineno">1127</tt>  <tt class="py-line">        <tt class="py-name">parserStatus</tt> <tt class="py-op">=</tt> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt id="link-313" class="py-name"><a title="com.dtmilano.android.viewclient.Excerpt2Code.Parse
+com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.Parse" class="py-name" href="#" onclick="return doclink('link-313', 'Parse', 'link-309');">Parse</a></tt><tt class="py-op">(</tt><tt id="link-314" class="py-name" targets="Static Method com.dtmilano.android.viewclient.ViewClient.excerpt()=com.dtmilano.android.viewclient.ViewClient-class.html#excerpt"><a title="com.dtmilano.android.viewclient.ViewClient.excerpt" class="py-name" href="#" onclick="return doclink('link-314', 'excerpt', 'link-314');">excerpt</a></tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L1128"></a><tt class="py-lineno">1128</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> </tt>
+</div></div><a name="L1129"></a><tt class="py-lineno">1129</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient"></a><div id="ViewClient-def"><a name="L1130"></a><tt class="py-lineno">1130</tt> <a class="py-toggle" href="#" id="ViewClient-toggle" onclick="return toggle('ViewClient');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ViewClient-expanded"><a name="L1131"></a><tt class="py-lineno">1131</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L1132"></a><tt class="py-lineno">1132</tt>  <tt class="py-line"><tt class="py-docstring">    ViewClient is a I{ViewServer} client.</tt> </tt>
+<a name="L1133"></a><tt class="py-lineno">1133</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1134"></a><tt class="py-lineno">1134</tt>  <tt class="py-line"><tt class="py-docstring">    ViewServer backend</tt> </tt>
+<a name="L1135"></a><tt class="py-lineno">1135</tt>  <tt class="py-line"><tt class="py-docstring">    ==================</tt> </tt>
+<a name="L1136"></a><tt class="py-lineno">1136</tt>  <tt class="py-line"><tt class="py-docstring">    If not running the ViewServer is started on the target device or emulator and then the port</tt> </tt>
+<a name="L1137"></a><tt class="py-lineno">1137</tt>  <tt class="py-line"><tt class="py-docstring">    mapping is created.</tt> </tt>
+<a name="L1138"></a><tt class="py-lineno">1138</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1139"></a><tt class="py-lineno">1139</tt>  <tt class="py-line"><tt class="py-docstring">    UiAutomator backend</tt> </tt>
+<a name="L1140"></a><tt class="py-lineno">1140</tt>  <tt class="py-line"><tt class="py-docstring">    ===================</tt> </tt>
+<a name="L1141"></a><tt class="py-lineno">1141</tt>  <tt class="py-line"><tt class="py-docstring">    No service is started.</tt> </tt>
+<a name="L1142"></a><tt class="py-lineno">1142</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L1143"></a><tt class="py-lineno">1143</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.__init__"></a><div id="ViewClient.__init__-def"><a name="L1144"></a><tt class="py-lineno">1144</tt> <a class="py-toggle" href="#" id="ViewClient.__init__-toggle" onclick="return toggle('ViewClient.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">device</tt><tt class="py-op">,</tt> <tt class="py-param">serialno</tt><tt class="py-op">,</tt> <tt class="py-param">adb</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">autodump</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-param">forceviewserveruse</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-param">localport</tt><tt class="py-op">=</tt><tt id="link-315" class="py-name"><a title="com.dtmilano.android.viewclient.VIEW_SERVER_PORT" class="py-name" href="#" onclick="return doclink('link-315', 'VIEW_SERVER_PORT', 'link-28');">VIEW_SERVER_PORT</a></tt><tt class="py-op">,</tt> <tt class="py-param">remoteport</tt><tt class="py-op">=</tt><tt id="link-316" class="py-name"><a title="com.dtmilano.android.viewclient.VIEW_SERVER_PORT" class="py-name" href="#" onclick="return doclink('link-316', 'VIEW_SERVER_PORT', 'link-28');">VIEW_SERVER_PORT</a></tt><tt class="py-op">,</tt> <tt class="py-param">startviewserver</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-param">ignoreuiautomatorkilled</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__init__-expanded"><a name="L1145"></a><tt class="py-lineno">1145</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1146"></a><tt class="py-lineno">1146</tt>  <tt class="py-line"><tt class="py-docstring">        Constructor</tt> </tt>
+<a name="L1147"></a><tt class="py-lineno">1147</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1148"></a><tt class="py-lineno">1148</tt>  <tt class="py-line"><tt class="py-docstring">        @type device: MonkeyDevice</tt> </tt>
+<a name="L1149"></a><tt class="py-lineno">1149</tt>  <tt class="py-line"><tt class="py-docstring">        @param device: The device running the C{View server} to which this client will connect</tt> </tt>
+<a name="L1150"></a><tt class="py-lineno">1150</tt>  <tt class="py-line"><tt class="py-docstring">        @type serialno: str</tt> </tt>
+<a name="L1151"></a><tt class="py-lineno">1151</tt>  <tt class="py-line"><tt class="py-docstring">        @param serialno: the serial number of the device or emulator to connect to</tt> </tt>
+<a name="L1152"></a><tt class="py-lineno">1152</tt>  <tt class="py-line"><tt class="py-docstring">        @type adb: str</tt> </tt>
+<a name="L1153"></a><tt class="py-lineno">1153</tt>  <tt class="py-line"><tt class="py-docstring">        @param adb: the path of the C{adb} executable or None and C{ViewClient} will try to find it</tt> </tt>
+<a name="L1154"></a><tt class="py-lineno">1154</tt>  <tt class="py-line"><tt class="py-docstring">        @type autodump: boolean</tt> </tt>
+<a name="L1155"></a><tt class="py-lineno">1155</tt>  <tt class="py-line"><tt class="py-docstring">        @param autodump: whether an automatic dump is performed at the end of this constructor</tt> </tt>
+<a name="L1156"></a><tt class="py-lineno">1156</tt>  <tt class="py-line"><tt class="py-docstring">        @type forceviewserveruse: boolean</tt> </tt>
+<a name="L1157"></a><tt class="py-lineno">1157</tt>  <tt class="py-line"><tt class="py-docstring">        @param forceviewserveruse: Force the use of C{ViewServer} even if the conditions to use</tt> </tt>
+<a name="L1158"></a><tt class="py-lineno">1158</tt>  <tt class="py-line"><tt class="py-docstring">                            C{UiAutomator} are satisfied</tt> </tt>
+<a name="L1159"></a><tt class="py-lineno">1159</tt>  <tt class="py-line"><tt class="py-docstring">        @type localport: int</tt> </tt>
+<a name="L1160"></a><tt class="py-lineno">1160</tt>  <tt class="py-line"><tt class="py-docstring">        @param localport: the local port used in the redirection</tt> </tt>
+<a name="L1161"></a><tt class="py-lineno">1161</tt>  <tt class="py-line"><tt class="py-docstring">        @type remoteport: int</tt> </tt>
+<a name="L1162"></a><tt class="py-lineno">1162</tt>  <tt class="py-line"><tt class="py-docstring">        @param remoteport: the remote port used to start the C{ViewServer} in the device or</tt> </tt>
+<a name="L1163"></a><tt class="py-lineno">1163</tt>  <tt class="py-line"><tt class="py-docstring">                           emulator</tt> </tt>
+<a name="L1164"></a><tt class="py-lineno">1164</tt>  <tt class="py-line"><tt class="py-docstring">        @type startviewserver: boolean</tt> </tt>
+<a name="L1165"></a><tt class="py-lineno">1165</tt>  <tt class="py-line"><tt class="py-docstring">        @param startviewserver: Whether to start the B{global} ViewServer</tt> </tt>
+<a name="L1166"></a><tt class="py-lineno">1166</tt>  <tt class="py-line"><tt class="py-docstring">        @type ignoreuiautomatorkilled: boolean</tt> </tt>
+<a name="L1167"></a><tt class="py-lineno">1167</tt>  <tt class="py-line"><tt class="py-docstring">        @param ignoreuiautomatorkilled: Ignores received B{Killed} message from C{uiautomator}</tt> </tt>
+<a name="L1168"></a><tt class="py-lineno">1168</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1169"></a><tt class="py-lineno">1169</tt>  <tt class="py-line"> </tt>
+<a name="L1170"></a><tt class="py-lineno">1170</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">device</tt><tt class="py-op">:</tt> </tt>
+<a name="L1171"></a><tt class="py-lineno">1171</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">'Device is not connected'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1172"></a><tt class="py-lineno">1172</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt> </tt>
+<a name="L1173"></a><tt class="py-lineno">1173</tt>  <tt class="py-line">        <tt class="py-string">''' The C{MonkeyDevice} device instance '''</tt> </tt>
+<a name="L1174"></a><tt class="py-lineno">1174</tt>  <tt class="py-line"> </tt>
+<a name="L1175"></a><tt class="py-lineno">1175</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">serialno</tt><tt class="py-op">:</tt> </tt>
+<a name="L1176"></a><tt class="py-lineno">1176</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"Serialno cannot be None"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1177"></a><tt class="py-lineno">1177</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-317" class="py-name" targets="Static Method com.dtmilano.android.viewclient.ViewClient.__mapSerialNo()=com.dtmilano.android.viewclient.ViewClient-class.html#__mapSerialNo"><a title="com.dtmilano.android.viewclient.ViewClient.__mapSerialNo" class="py-name" href="#" onclick="return doclink('link-317', '__mapSerialNo', 'link-317');">__mapSerialNo</a></tt><tt class="py-op">(</tt><tt class="py-name">serialno</tt><tt class="py-op">)</tt> </tt>
+<a name="L1178"></a><tt class="py-lineno">1178</tt>  <tt class="py-line">        <tt class="py-string">''' The serial number of the device '''</tt> </tt>
+<a name="L1179"></a><tt class="py-lineno">1179</tt>  <tt class="py-line"> </tt>
+<a name="L1180"></a><tt class="py-lineno">1180</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-318" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_DEVICE" class="py-name" href="#" onclick="return doclink('link-318', 'DEBUG_DEVICE', 'link-4');">DEBUG_DEVICE</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ViewClient: using device with serialno"</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt> </tt>
+<a name="L1181"></a><tt class="py-lineno">1181</tt>  <tt class="py-line"> </tt>
+<a name="L1182"></a><tt class="py-lineno">1182</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-319" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-319', 'adb', 'link-1');">adb</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1183"></a><tt class="py-lineno">1183</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">access</tt><tt class="py-op">(</tt><tt id="link-320" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-320', 'adb', 'link-1');">adb</a></tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">X_OK</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1184"></a><tt class="py-lineno">1184</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">'adb="%s" is not executable'</tt> <tt class="py-op">%</tt> <tt id="link-321" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-321', 'adb', 'link-1');">adb</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1185"></a><tt class="py-lineno">1185</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1186"></a><tt class="py-lineno">1186</tt>  <tt class="py-line">            <tt class="py-comment"># Using adbclient we don't need adb executable yet (maybe it's needed if we want to</tt> </tt>
+<a name="L1187"></a><tt class="py-lineno">1187</tt>  <tt class="py-line">            <tt class="py-comment"># start adb if not running)</tt> </tt>
+<a name="L1188"></a><tt class="py-lineno">1188</tt>  <tt class="py-line">            <tt id="link-322" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-322', 'adb', 'link-1');">adb</a></tt> <tt class="py-op">=</tt> <tt id="link-323" class="py-name" targets="Class com.dtmilano.android.viewclient.ViewClient=com.dtmilano.android.viewclient.ViewClient-class.html"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-323', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-324" class="py-name" targets="Static Method com.dtmilano.android.viewclient.ViewClient.__obtainAdbPath()=com.dtmilano.android.viewclient.ViewClient-class.html#__obtainAdbPath"><a title="com.dtmilano.android.viewclient.ViewClient.__obtainAdbPath" class="py-name" href="#" onclick="return doclink('link-324', '__obtainAdbPath', 'link-324');">__obtainAdbPath</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1189"></a><tt class="py-lineno">1189</tt>  <tt class="py-line"> </tt>
+<a name="L1190"></a><tt class="py-lineno">1190</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-325" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-325', 'adb', 'link-1');">adb</a></tt> <tt class="py-op">=</tt> <tt id="link-326" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-326', 'adb', 'link-1');">adb</a></tt> </tt>
+<a name="L1191"></a><tt class="py-lineno">1191</tt>  <tt class="py-line">        <tt class="py-string">''' The adb command '''</tt> </tt>
+<a name="L1192"></a><tt class="py-lineno">1192</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1193"></a><tt class="py-lineno">1193</tt>  <tt class="py-line">        <tt class="py-string">''' The root node '''</tt> </tt>
+<a name="L1194"></a><tt class="py-lineno">1194</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1195"></a><tt class="py-lineno">1195</tt>  <tt class="py-line">        <tt class="py-string">''' The map containing all the L{View}s indexed by their L{View.getUniqueId()} '''</tt> </tt>
+<a name="L1196"></a><tt class="py-lineno">1196</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">display</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1197"></a><tt class="py-lineno">1197</tt>  <tt class="py-line">        <tt class="py-string">''' The map containing the device's display properties: width, height and density '''</tt> </tt>
+<a name="L1198"></a><tt class="py-lineno">1198</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">prop</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt> <tt class="py-string">'width'</tt><tt class="py-op">,</tt> <tt class="py-string">'height'</tt><tt class="py-op">,</tt> <tt class="py-string">'density'</tt> <tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L1199"></a><tt class="py-lineno">1199</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">display</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L1200"></a><tt class="py-lineno">1200</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-327" class="py-name"><a title="com.dtmilano.android.viewclient.USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES" class="py-name" href="#" onclick="return doclink('link-327', 'USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES', 'link-31');">USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1201"></a><tt class="py-lineno">1201</tt>  <tt class="py-line">                <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1202"></a><tt class="py-lineno">1202</tt>  <tt class="py-line">                    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">display</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-328" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.getProperty" class="py-name" href="#" onclick="return doclink('link-328', 'getProperty', 'link-70');">getProperty</a></tt><tt class="py-op">(</tt><tt class="py-string">'display.'</tt> <tt class="py-op">+</tt> <tt class="py-name">prop</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1203"></a><tt class="py-lineno">1203</tt>  <tt class="py-line">                <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L1204"></a><tt class="py-lineno">1204</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt id="link-329" class="py-name"><a title="com.dtmilano.android.viewclient.WARNINGS" class="py-name" href="#" onclick="return doclink('link-329', 'WARNINGS', 'link-26');">WARNINGS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1205"></a><tt class="py-lineno">1205</tt>  <tt class="py-line">                        <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Couldn't determine display %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">prop</tt><tt class="py-op">)</tt> </tt>
+<a name="L1206"></a><tt class="py-lineno">1206</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1207"></a><tt class="py-lineno">1207</tt>  <tt class="py-line">                <tt class="py-comment"># these values are usually not defined as properties, so we stick to the -1 set</tt> </tt>
+<a name="L1208"></a><tt class="py-lineno">1208</tt>  <tt class="py-line">                <tt class="py-comment"># before</tt> </tt>
+<a name="L1209"></a><tt class="py-lineno">1209</tt>  <tt class="py-line">                <tt class="py-keyword">pass</tt> </tt>
+<a name="L1210"></a><tt class="py-lineno">1210</tt>  <tt class="py-line"> </tt>
+<a name="L1211"></a><tt class="py-lineno">1211</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1212"></a><tt class="py-lineno">1212</tt>  <tt class="py-line">        <tt class="py-string">''' The map containing the device's build properties: version.sdk, version.release '''</tt> </tt>
+<a name="L1213"></a><tt class="py-lineno">1213</tt>  <tt class="py-line"> </tt>
+<a name="L1214"></a><tt class="py-lineno">1214</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">prop</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt id="link-330" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-330', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">,</tt> <tt id="link-331" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_RELEASE_PROPERTY
+com.dtmilano.android.viewclient.VERSION_RELEASE_PROPERTY" class="py-name" href="#" onclick="return doclink('link-331', 'VERSION_RELEASE_PROPERTY', 'link-35');">VERSION_RELEASE_PROPERTY</a></tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L1215"></a><tt class="py-lineno">1215</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L1216"></a><tt class="py-lineno">1216</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1217"></a><tt class="py-lineno">1217</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-332" class="py-name"><a title="com.dtmilano.android.viewclient.USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES" class="py-name" href="#" onclick="return doclink('link-332', 'USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES', 'link-31');">USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1218"></a><tt class="py-lineno">1218</tt>  <tt class="py-line">                    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-333" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.getProperty" class="py-name" href="#" onclick="return doclink('link-333', 'getProperty', 'link-70');">getProperty</a></tt><tt class="py-op">(</tt><tt class="py-name">prop</tt><tt class="py-op">)</tt> </tt>
+<a name="L1219"></a><tt class="py-lineno">1219</tt>  <tt class="py-line">                <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1220"></a><tt class="py-lineno">1220</tt>  <tt class="py-line">                    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-334" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-334', 'shell', 'link-73');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'getprop ro.build.'</tt> <tt class="py-op">+</tt> <tt class="py-name">prop</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
+<a name="L1221"></a><tt class="py-lineno">1221</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L1222"></a><tt class="py-lineno">1222</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-335" class="py-name"><a title="com.dtmilano.android.viewclient.WARNINGS" class="py-name" href="#" onclick="return doclink('link-335', 'WARNINGS', 'link-26');">WARNINGS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1223"></a><tt class="py-lineno">1223</tt>  <tt class="py-line">                    <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Couldn't determine build %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">prop</tt><tt class="py-op">)</tt> </tt>
+<a name="L1224"></a><tt class="py-lineno">1224</tt>  <tt class="py-line"> </tt>
+<a name="L1225"></a><tt class="py-lineno">1225</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">prop</tt> <tt class="py-op">==</tt> <tt id="link-336" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-336', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1226"></a><tt class="py-lineno">1226</tt>  <tt class="py-line">                <tt class="py-comment"># we expect it to be an int</tt> </tt>
+<a name="L1227"></a><tt class="py-lineno">1227</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-keyword">else</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L1228"></a><tt class="py-lineno">1228</tt>  <tt class="py-line"> </tt>
+<a name="L1229"></a><tt class="py-lineno">1229</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ro</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1230"></a><tt class="py-lineno">1230</tt>  <tt class="py-line">        <tt class="py-string">''' The map containing the device's ro properties: secure, debuggable '''</tt> </tt>
+<a name="L1231"></a><tt class="py-lineno">1231</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">prop</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt class="py-string">'secure'</tt><tt class="py-op">,</tt> <tt class="py-string">'debuggable'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L1232"></a><tt class="py-lineno">1232</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1233"></a><tt class="py-lineno">1233</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ro</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-337" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-337', 'shell', 'link-73');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'getprop ro.'</tt> <tt class="py-op">+</tt> <tt class="py-name">prop</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
+<a name="L1234"></a><tt class="py-lineno">1234</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L1235"></a><tt class="py-lineno">1235</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-338" class="py-name"><a title="com.dtmilano.android.viewclient.WARNINGS" class="py-name" href="#" onclick="return doclink('link-338', 'WARNINGS', 'link-26');">WARNINGS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1236"></a><tt class="py-lineno">1236</tt>  <tt class="py-line">                    <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Couldn't determine ro %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">prop</tt><tt class="py-op">)</tt> </tt>
+<a name="L1237"></a><tt class="py-lineno">1237</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ro</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'UNKNOWN'</tt> </tt>
+<a name="L1238"></a><tt class="py-lineno">1238</tt>  <tt class="py-line"> </tt>
+<a name="L1239"></a><tt class="py-lineno">1239</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">forceViewServerUse</tt> <tt class="py-op">=</tt> <tt class="py-name">forceviewserveruse</tt> </tt>
+<a name="L1240"></a><tt class="py-lineno">1240</tt>  <tt class="py-line">        <tt class="py-string">''' Force the use of ViewServer even if the conditions to use UiAutomator are satisfied '''</tt> </tt>
+<a name="L1241"></a><tt class="py-lineno">1241</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-339" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-339', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">forceviewserveruse</tt> <tt class="py-comment"># jelly bean 4.1 &amp; 4.2</tt> </tt>
+<a name="L1242"></a><tt class="py-lineno">1242</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-340" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-340', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1243"></a><tt class="py-lineno">1243</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    ViewClient.__init__: useUiAutomator="</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">,</tt> <tt class="py-string">"sdk="</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-341" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-341', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-string">"forceviewserveruse="</tt><tt class="py-op">,</tt> <tt class="py-name">forceviewserveruse</tt> </tt>
+<a name="L1244"></a><tt class="py-lineno">1244</tt>  <tt class="py-line">        <tt class="py-string">''' If UIAutomator is supported by the device it will be used '''</tt> </tt>
+<a name="L1245"></a><tt class="py-lineno">1245</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ignoreUiAutomatorKilled</tt> <tt class="py-op">=</tt> <tt class="py-name">ignoreuiautomatorkilled</tt> </tt>
+<a name="L1246"></a><tt class="py-lineno">1246</tt>  <tt class="py-line">        <tt class="py-string">''' On some devices (i.e. Nexus 7 running 4.2.2) uiautomator is killed just after generating</tt> </tt>
+<a name="L1247"></a><tt class="py-lineno">1247</tt>  <tt class="py-line"><tt class="py-string">        the dump file. In many cases the file is already complete so we can ask to ignore the 'Killed'</tt> </tt>
+<a name="L1248"></a><tt class="py-lineno">1248</tt>  <tt class="py-line"><tt class="py-string">        message by setting L{ignoreuiautomatorkilled} to C{True}.</tt> </tt>
+<a name="L1249"></a><tt class="py-lineno">1249</tt>  <tt class="py-line"><tt class="py-string"></tt> </tt>
+<a name="L1250"></a><tt class="py-lineno">1250</tt>  <tt class="py-line"><tt class="py-string">        Changes in v2.3.21 that uses C{/dev/tty} instead of a file may have turned this variable</tt> </tt>
+<a name="L1251"></a><tt class="py-lineno">1251</tt>  <tt class="py-line"><tt class="py-string">        unnecessary, however it has been kept for backward compatibility.</tt> </tt>
+<a name="L1252"></a><tt class="py-lineno">1252</tt>  <tt class="py-line"><tt class="py-string">        '''</tt> </tt>
+<a name="L1253"></a><tt class="py-lineno">1253</tt>  <tt class="py-line"> </tt>
+<a name="L1254"></a><tt class="py-lineno">1254</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L1255"></a><tt class="py-lineno">1255</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-342" class="py-name"><a title="com.dtmilano.android.viewclient.TEXT_PROPERTY_UI_AUTOMATOR" class="py-name" href="#" onclick="return doclink('link-342', 'TEXT_PROPERTY_UI_AUTOMATOR', 'link-40');">TEXT_PROPERTY_UI_AUTOMATOR</a></tt> </tt>
+<a name="L1256"></a><tt class="py-lineno">1256</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1257"></a><tt class="py-lineno">1257</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-343" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-343', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">10</tt><tt class="py-op">:</tt> </tt>
+<a name="L1258"></a><tt class="py-lineno">1258</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-344" class="py-name"><a title="com.dtmilano.android.viewclient.TEXT_PROPERTY_API_10" class="py-name" href="#" onclick="return doclink('link-344', 'TEXT_PROPERTY_API_10', 'link-39');">TEXT_PROPERTY_API_10</a></tt> </tt>
+<a name="L1259"></a><tt class="py-lineno">1259</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1260"></a><tt class="py-lineno">1260</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-345" class="py-name"><a title="com.dtmilano.android.viewclient.TEXT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-345', 'TEXT_PROPERTY', 'link-38');">TEXT_PROPERTY</a></tt> </tt>
+<a name="L1261"></a><tt class="py-lineno">1261</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">startviewserver</tt><tt class="py-op">:</tt> </tt>
+<a name="L1262"></a><tt class="py-lineno">1262</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-346" class="py-name" targets="Method com.dtmilano.android.viewclient.ViewClient.serviceResponse()=com.dtmilano.android.viewclient.ViewClient-class.html#serviceResponse"><a title="com.dtmilano.android.viewclient.ViewClient.serviceResponse" class="py-name" href="#" onclick="return doclink('link-346', 'serviceResponse', 'link-346');">serviceResponse</a></tt><tt class="py-op">(</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-347" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-347', 'shell', 'link-73');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'service call window 3'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1263"></a><tt class="py-lineno">1263</tt>  <tt class="py-line">                    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1264"></a><tt class="py-lineno">1264</tt>  <tt class="py-line">                        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-348" class="py-name" targets="Method com.dtmilano.android.viewclient.ViewClient.assertServiceResponse()=com.dtmilano.android.viewclient.ViewClient-class.html#assertServiceResponse"><a title="com.dtmilano.android.viewclient.ViewClient.assertServiceResponse" class="py-name" href="#" onclick="return doclink('link-348', 'assertServiceResponse', 'link-348');">assertServiceResponse</a></tt><tt class="py-op">(</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-349" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-349', 'shell', 'link-73');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'service call window 1 i32 %d'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L1265"></a><tt class="py-lineno">1265</tt>  <tt class="py-line">                                                        <tt class="py-name">remoteport</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1266"></a><tt class="py-lineno">1266</tt>  <tt class="py-line">                    <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L1267"></a><tt class="py-lineno">1267</tt>  <tt class="py-line">                        <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-string">'Cannot start View server.\n'</tt> \ </tt>
+<a name="L1268"></a><tt class="py-lineno">1268</tt>  <tt class="py-line">                            <tt class="py-string">'This only works on emulator and devices running developer versions.\n'</tt> \ </tt>
+<a name="L1269"></a><tt class="py-lineno">1269</tt>  <tt class="py-line">                            <tt class="py-string">'Does hierarchyviewer work on your device?\n'</tt> \ </tt>
+<a name="L1270"></a><tt class="py-lineno">1270</tt>  <tt class="py-line">                            <tt class="py-string">'See https://github.com/dtmilano/AndroidViewClient/wiki/Secure-mode\n\n'</tt> \ </tt>
+<a name="L1271"></a><tt class="py-lineno">1271</tt>  <tt class="py-line">                            <tt class="py-string">'Device properties:\n'</tt> \ </tt>
+<a name="L1272"></a><tt class="py-lineno">1272</tt>  <tt class="py-line">                            <tt class="py-string">'    ro.secure=%s\n'</tt> \ </tt>
+<a name="L1273"></a><tt class="py-lineno">1273</tt>  <tt class="py-line">                            <tt class="py-string">'    ro.debuggable=%s\n'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ro</tt><tt class="py-op">[</tt><tt class="py-string">'secure'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ro</tt><tt class="py-op">[</tt><tt class="py-string">'debuggable'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L1274"></a><tt class="py-lineno">1274</tt>  <tt class="py-line">                        <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt>
+<a name="L1275"></a><tt class="py-lineno">1275</tt>  <tt class="py-line"> </tt>
+<a name="L1276"></a><tt class="py-lineno">1276</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">localPort</tt> <tt class="py-op">=</tt> <tt class="py-name">localport</tt> </tt>
+<a name="L1277"></a><tt class="py-lineno">1277</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">remotePort</tt> <tt class="py-op">=</tt> <tt class="py-name">remoteport</tt> </tt>
+<a name="L1278"></a><tt class="py-lineno">1278</tt>  <tt class="py-line">            <tt class="py-comment"># FIXME: it seems there's no way of obtaining the serialno from the MonkeyDevice</tt> </tt>
+<a name="L1279"></a><tt class="py-lineno">1279</tt>  <tt class="py-line">            <tt class="py-name">subprocess</tt><tt class="py-op">.</tt><tt class="py-name">check_call</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-350" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-350', 'adb', 'link-1');">adb</a></tt><tt class="py-op">,</tt> <tt class="py-string">'-s'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt><tt class="py-op">,</tt> <tt class="py-string">'forward'</tt><tt class="py-op">,</tt> <tt class="py-string">'tcp:%d'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">localPort</tt><tt class="py-op">,</tt> </tt>
+<a name="L1280"></a><tt class="py-lineno">1280</tt>  <tt class="py-line">                                    <tt class="py-string">'tcp:%d'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">remotePort</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L1281"></a><tt class="py-lineno">1281</tt>  <tt class="py-line"> </tt>
+<a name="L1282"></a><tt class="py-lineno">1282</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1283"></a><tt class="py-lineno">1283</tt>  <tt class="py-line">        <tt class="py-string">''' The list of windows as obtained by L{ViewClient.list()} '''</tt> </tt>
+<a name="L1284"></a><tt class="py-lineno">1284</tt>  <tt class="py-line"> </tt>
+<a name="L1285"></a><tt class="py-lineno">1285</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">autodump</tt><tt class="py-op">:</tt> </tt>
+<a name="L1286"></a><tt class="py-lineno">1286</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-351" class="py-name" targets="Method com.dtmilano.android.viewclient.ViewClient.dump()=com.dtmilano.android.viewclient.ViewClient-class.html#dump"><a title="com.dtmilano.android.viewclient.ViewClient.dump" class="py-name" href="#" onclick="return doclink('link-351', 'dump', 'link-351');">dump</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1287"></a><tt class="py-lineno">1287</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.__del__"></a><div id="ViewClient.__del__-def"><a name="L1288"></a><tt class="py-lineno">1288</tt> <a class="py-toggle" href="#" id="ViewClient.__del__-toggle" onclick="return toggle('ViewClient.__del__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__del__">__del__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__del__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__del__-expanded"><a name="L1289"></a><tt class="py-lineno">1289</tt>  <tt class="py-line">        <tt class="py-comment"># should clean up some things</tt> </tt>
+<a name="L1290"></a><tt class="py-lineno">1290</tt>  <tt class="py-line">        <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L1291"></a><tt class="py-lineno">1291</tt>  <tt class="py-line"> </tt>
+<a name="L1292"></a><tt class="py-lineno">1292</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.__obtainAdbPath"></a><div id="ViewClient.__obtainAdbPath-def"><a name="L1293"></a><tt class="py-lineno">1293</tt> <a class="py-toggle" href="#" id="ViewClient.__obtainAdbPath-toggle" onclick="return toggle('ViewClient.__obtainAdbPath');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__obtainAdbPath">__obtainAdbPath</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__obtainAdbPath-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__obtainAdbPath-expanded"><a name="L1294"></a><tt class="py-lineno">1294</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1295"></a><tt class="py-lineno">1295</tt>  <tt class="py-line"><tt class="py-docstring">        Obtains the ADB path attempting know locations for different OSs</tt> </tt>
+<a name="L1296"></a><tt class="py-lineno">1296</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1297"></a><tt class="py-lineno">1297</tt>  <tt class="py-line"> </tt>
+<a name="L1298"></a><tt class="py-lineno">1298</tt>  <tt class="py-line">        <tt class="py-name">osName</tt> <tt class="py-op">=</tt> <tt class="py-name">platform</tt><tt class="py-op">.</tt><tt class="py-name">system</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1299"></a><tt class="py-lineno">1299</tt>  <tt class="py-line">        <tt class="py-name">isWindows</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L1300"></a><tt class="py-lineno">1300</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">osName</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'Windows'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1301"></a><tt class="py-lineno">1301</tt>  <tt class="py-line">            <tt id="link-352" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-352', 'adb', 'link-1');">adb</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'adb.exe'</tt> </tt>
+<a name="L1302"></a><tt class="py-lineno">1302</tt>  <tt class="py-line">            <tt class="py-name">isWindows</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L1303"></a><tt class="py-lineno">1303</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1304"></a><tt class="py-lineno">1304</tt>  <tt class="py-line">            <tt id="link-353" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-353', 'adb', 'link-1');">adb</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'adb'</tt> </tt>
+<a name="L1305"></a><tt class="py-lineno">1305</tt>  <tt class="py-line"> </tt>
+<a name="L1306"></a><tt class="py-lineno">1306</tt>  <tt class="py-line">        <tt class="py-name">ANDROID_HOME</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">[</tt><tt class="py-string">'ANDROID_HOME'</tt><tt class="py-op">]</tt> <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'ANDROID_HOME'</tt><tt class="py-op">)</tt> <tt class="py-keyword">else</tt> <tt class="py-string">'/opt/android-sdk'</tt> </tt>
+<a name="L1307"></a><tt class="py-lineno">1307</tt>  <tt class="py-line">        <tt class="py-name">HOME</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">[</tt><tt class="py-string">'HOME'</tt><tt class="py-op">]</tt> <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'HOME'</tt><tt class="py-op">)</tt> <tt class="py-keyword">else</tt> <tt class="py-string">''</tt> </tt>
+<a name="L1308"></a><tt class="py-lineno">1308</tt>  <tt class="py-line"> </tt>
+<a name="L1309"></a><tt class="py-lineno">1309</tt>  <tt class="py-line">        <tt class="py-name">possibleChoices</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">ANDROID_HOME</tt><tt class="py-op">,</tt> <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt id="link-354" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-354', 'adb', 'link-1');">adb</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L1310"></a><tt class="py-lineno">1310</tt>  <tt class="py-line">                           <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">HOME</tt><tt class="py-op">,</tt>  <tt class="py-string">"android"</tt><tt class="py-op">,</tt> <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt id="link-355" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-355', 'adb', 'link-1');">adb</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L1311"></a><tt class="py-lineno">1311</tt>  <tt class="py-line">                           <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">HOME</tt><tt class="py-op">,</tt>  <tt class="py-string">"android-sdk"</tt><tt class="py-op">,</tt> <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt id="link-356" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-356', 'adb', 'link-1');">adb</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L1312"></a><tt class="py-lineno">1312</tt>  <tt class="py-line">                           <tt id="link-357" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-357', 'adb', 'link-1');">adb</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L1313"></a><tt class="py-lineno">1313</tt>  <tt class="py-line">                           <tt class="py-op">]</tt> </tt>
+<a name="L1314"></a><tt class="py-lineno">1314</tt>  <tt class="py-line"> </tt>
+<a name="L1315"></a><tt class="py-lineno">1315</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">osName</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'Windows'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1316"></a><tt class="py-lineno">1316</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-string">"""C:\Program Files\Android\android-sdk\platform-tools"""</tt><tt class="py-op">,</tt> <tt id="link-358" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-358', 'adb', 'link-1');">adb</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1317"></a><tt class="py-lineno">1317</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-string">"""C:\Program Files (x86)\Android\android-sdk\platform-tools"""</tt><tt class="py-op">,</tt> <tt id="link-359" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-359', 'adb', 'link-1');">adb</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1318"></a><tt class="py-lineno">1318</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">osName</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'Linux'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1319"></a><tt class="py-lineno">1319</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-string">"opt"</tt><tt class="py-op">,</tt> <tt class="py-string">"android-sdk-linux"</tt><tt class="py-op">,</tt>  <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt id="link-360" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-360', 'adb', 'link-1');">adb</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1320"></a><tt class="py-lineno">1320</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">HOME</tt><tt class="py-op">,</tt>  <tt class="py-string">"opt"</tt><tt class="py-op">,</tt> <tt class="py-string">"android-sdk-linux"</tt><tt class="py-op">,</tt>  <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt id="link-361" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-361', 'adb', 'link-1');">adb</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1321"></a><tt class="py-lineno">1321</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">HOME</tt><tt class="py-op">,</tt>  <tt class="py-string">"android-sdk-linux"</tt><tt class="py-op">,</tt>  <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt id="link-362" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-362', 'adb', 'link-1');">adb</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1322"></a><tt class="py-lineno">1322</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">osName</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'Mac'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1323"></a><tt class="py-lineno">1323</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-string">"opt"</tt><tt class="py-op">,</tt> <tt class="py-string">"android-sdk-mac_x86"</tt><tt class="py-op">,</tt>  <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt id="link-363" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-363', 'adb', 'link-1');">adb</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1324"></a><tt class="py-lineno">1324</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">HOME</tt><tt class="py-op">,</tt>  <tt class="py-string">"opt"</tt><tt class="py-op">,</tt> <tt class="py-string">"android-sdk-mac"</tt><tt class="py-op">,</tt> <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt id="link-364" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-364', 'adb', 'link-1');">adb</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1325"></a><tt class="py-lineno">1325</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">HOME</tt><tt class="py-op">,</tt>  <tt class="py-string">"android-sdk-mac"</tt><tt class="py-op">,</tt> <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt id="link-365" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-365', 'adb', 'link-1');">adb</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1326"></a><tt class="py-lineno">1326</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">HOME</tt><tt class="py-op">,</tt>  <tt class="py-string">"opt"</tt><tt class="py-op">,</tt> <tt class="py-string">"android-sdk-mac_x86"</tt><tt class="py-op">,</tt>  <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt id="link-366" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-366', 'adb', 'link-1');">adb</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1327"></a><tt class="py-lineno">1327</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">HOME</tt><tt class="py-op">,</tt>  <tt class="py-string">"android-sdk-mac_x86"</tt><tt class="py-op">,</tt>  <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt id="link-367" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-367', 'adb', 'link-1');">adb</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1328"></a><tt class="py-lineno">1328</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1329"></a><tt class="py-lineno">1329</tt>  <tt class="py-line">            <tt class="py-comment"># Unsupported OS</tt> </tt>
+<a name="L1330"></a><tt class="py-lineno">1330</tt>  <tt class="py-line">            <tt class="py-keyword">pass</tt> </tt>
+<a name="L1331"></a><tt class="py-lineno">1331</tt>  <tt class="py-line"> </tt>
+<a name="L1332"></a><tt class="py-lineno">1332</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">exeFile</tt> <tt class="py-keyword">in</tt> <tt class="py-name">possibleChoices</tt><tt class="py-op">:</tt> </tt>
+<a name="L1333"></a><tt class="py-lineno">1333</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">access</tt><tt class="py-op">(</tt><tt class="py-name">exeFile</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">X_OK</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1334"></a><tt class="py-lineno">1334</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">exeFile</tt> </tt>
+<a name="L1335"></a><tt class="py-lineno">1335</tt>  <tt class="py-line"> </tt>
+<a name="L1336"></a><tt class="py-lineno">1336</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">path</tt> <tt class="py-keyword">in</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">[</tt><tt class="py-string">"PATH"</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">pathsep</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1337"></a><tt class="py-lineno">1337</tt>  <tt class="py-line">            <tt class="py-name">exeFile</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">path</tt><tt class="py-op">,</tt> <tt id="link-368" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-368', 'adb', 'link-1');">adb</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1338"></a><tt class="py-lineno">1338</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">exeFile</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">access</tt><tt class="py-op">(</tt><tt class="py-name">exeFile</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">X_OK</tt> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isWindows</tt> <tt class="py-keyword">else</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">F_OK</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1339"></a><tt class="py-lineno">1339</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">exeFile</tt> </tt>
+<a name="L1340"></a><tt class="py-lineno">1340</tt>  <tt class="py-line"> </tt>
+<a name="L1341"></a><tt class="py-lineno">1341</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">'adb="%s" is not executable. Did you forget to set ANDROID_HOME in the environment?'</tt> <tt class="py-op">%</tt> <tt id="link-369" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-369', 'adb', 'link-1');">adb</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1342"></a><tt class="py-lineno">1342</tt>  <tt class="py-line"> </tt>
+<a name="L1343"></a><tt class="py-lineno">1343</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.__mapSerialNo"></a><div id="ViewClient.__mapSerialNo-def"><a name="L1344"></a><tt class="py-lineno">1344</tt> <a class="py-toggle" href="#" id="ViewClient.__mapSerialNo-toggle" onclick="return toggle('ViewClient.__mapSerialNo');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__mapSerialNo">__mapSerialNo</a><tt class="py-op">(</tt><tt class="py-param">serialno</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__mapSerialNo-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__mapSerialNo-expanded"><a name="L1345"></a><tt class="py-lineno">1345</tt>  <tt class="py-line">        <tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">serialno</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1346"></a><tt class="py-lineno">1346</tt>  <tt class="py-line">        <tt class="py-comment">#ipRE = re.compile('^\d+\.\d+.\d+.\d+$')</tt> </tt>
+<a name="L1347"></a><tt class="py-lineno">1347</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-370" class="py-name"><a title="com.dtmilano.android.viewclient.IP_RE" class="py-name" href="#" onclick="return doclink('link-370', 'IP_RE', 'link-56');">IP_RE</a></tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">serialno</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1348"></a><tt class="py-lineno">1348</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-371" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_DEVICE" class="py-name" href="#" onclick="return doclink('link-371', 'DEBUG_DEVICE', 'link-4');">DEBUG_DEVICE</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ViewClient: adding default port to serialno"</tt><tt class="py-op">,</tt> <tt class="py-name">serialno</tt><tt class="py-op">,</tt> <tt id="link-372" class="py-name"><a title="com.dtmilano.android.viewclient.ADB_DEFAULT_PORT" class="py-name" href="#" onclick="return doclink('link-372', 'ADB_DEFAULT_PORT', 'link-29');">ADB_DEFAULT_PORT</a></tt> </tt>
+<a name="L1349"></a><tt class="py-lineno">1349</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">serialno</tt> <tt class="py-op">+</tt> <tt class="py-string">':%d'</tt> <tt class="py-op">%</tt> <tt id="link-373" class="py-name"><a title="com.dtmilano.android.viewclient.ADB_DEFAULT_PORT" class="py-name" href="#" onclick="return doclink('link-373', 'ADB_DEFAULT_PORT', 'link-29');">ADB_DEFAULT_PORT</a></tt> </tt>
+<a name="L1350"></a><tt class="py-lineno">1350</tt>  <tt class="py-line"> </tt>
+<a name="L1351"></a><tt class="py-lineno">1351</tt>  <tt class="py-line">        <tt class="py-name">ipPortRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'^\d+\.\d+.\d+.\d+:\d+$'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1352"></a><tt class="py-lineno">1352</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">ipPortRE</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">serialno</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1353"></a><tt class="py-lineno">1353</tt>  <tt class="py-line">            <tt class="py-comment"># nothing to map</tt> </tt>
+<a name="L1354"></a><tt class="py-lineno">1354</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">serialno</tt> </tt>
+<a name="L1355"></a><tt class="py-lineno">1355</tt>  <tt class="py-line"> </tt>
+<a name="L1356"></a><tt class="py-lineno">1356</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-string">"[.*()+]"</tt><tt class="py-op">,</tt> <tt class="py-name">serialno</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1357"></a><tt class="py-lineno">1357</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"Regular expression not supported as serialno in ViewClient"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1358"></a><tt class="py-lineno">1358</tt>  <tt class="py-line"> </tt>
+<a name="L1359"></a><tt class="py-lineno">1359</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">serialno</tt> </tt>
+</div><a name="L1360"></a><tt class="py-lineno">1360</tt>  <tt class="py-line"> </tt>
+<a name="L1361"></a><tt class="py-lineno">1361</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.__obtainDeviceSerialNumber"></a><div id="ViewClient.__obtainDeviceSerialNumber-def"><a name="L1362"></a><tt class="py-lineno">1362</tt> <a class="py-toggle" href="#" id="ViewClient.__obtainDeviceSerialNumber-toggle" onclick="return toggle('ViewClient.__obtainDeviceSerialNumber');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__obtainDeviceSerialNumber">__obtainDeviceSerialNumber</a><tt class="py-op">(</tt><tt class="py-param">device</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__obtainDeviceSerialNumber-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__obtainDeviceSerialNumber-expanded"><a name="L1363"></a><tt class="py-lineno">1363</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-374" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_DEVICE" class="py-name" href="#" onclick="return doclink('link-374', 'DEBUG_DEVICE', 'link-4');">DEBUG_DEVICE</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ViewClient: obtaining serial number for connected device"</tt> </tt>
+<a name="L1364"></a><tt class="py-lineno">1364</tt>  <tt class="py-line">        <tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-375" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.getProperty" class="py-name" href="#" onclick="return doclink('link-375', 'getProperty', 'link-70');">getProperty</a></tt><tt class="py-op">(</tt><tt class="py-string">'ro.serialno'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1365"></a><tt class="py-lineno">1365</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">serialno</tt><tt class="py-op">:</tt> </tt>
+<a name="L1366"></a><tt class="py-lineno">1366</tt>  <tt class="py-line">            <tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-376" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-376', 'shell', 'link-73');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'getprop ro.serialno'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1367"></a><tt class="py-lineno">1367</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">serialno</tt><tt class="py-op">:</tt> </tt>
+<a name="L1368"></a><tt class="py-lineno">1368</tt>  <tt class="py-line">                <tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">serialno</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
+<a name="L1369"></a><tt class="py-lineno">1369</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">serialno</tt><tt class="py-op">:</tt> </tt>
+<a name="L1370"></a><tt class="py-lineno">1370</tt>  <tt class="py-line">            <tt class="py-name">qemu</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-377" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-377', 'shell', 'link-73');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'getprop ro.kernel.qemu'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1371"></a><tt class="py-lineno">1371</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">qemu</tt><tt class="py-op">:</tt> </tt>
+<a name="L1372"></a><tt class="py-lineno">1372</tt>  <tt class="py-line">                <tt class="py-name">qemu</tt> <tt class="py-op">=</tt> <tt class="py-name">qemu</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
+<a name="L1373"></a><tt class="py-lineno">1373</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">qemu</tt> <tt class="py-keyword">and</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">qemu</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L1374"></a><tt class="py-lineno">1374</tt>  <tt class="py-line">                    <tt class="py-comment"># FIXME !!!!!</tt> </tt>
+<a name="L1375"></a><tt class="py-lineno">1375</tt>  <tt class="py-line">                    <tt class="py-comment"># this must be calculated from somewhere, though using a fixed serialno for now</tt> </tt>
+<a name="L1376"></a><tt class="py-lineno">1376</tt>  <tt class="py-line">                    <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Running on emulator but no serial number was specified then 'emulator-5554' is used"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1377"></a><tt class="py-lineno">1377</tt>  <tt class="py-line">                    <tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-string">'emulator-5554'</tt> </tt>
+<a name="L1378"></a><tt class="py-lineno">1378</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">serialno</tt><tt class="py-op">:</tt> </tt>
+<a name="L1379"></a><tt class="py-lineno">1379</tt>  <tt class="py-line">            <tt class="py-comment"># If there's only one device connected get its serialno</tt> </tt>
+<a name="L1380"></a><tt class="py-lineno">1380</tt>  <tt class="py-line">            <tt id="link-378" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-378', 'adb', 'link-1');">adb</a></tt> <tt class="py-op">=</tt> <tt id="link-379" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-379', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-380" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.__obtainAdbPath" class="py-name" href="#" onclick="return doclink('link-380', '__obtainAdbPath', 'link-324');">__obtainAdbPath</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1381"></a><tt class="py-lineno">1381</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-381" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_DEVICE" class="py-name" href="#" onclick="return doclink('link-381', 'DEBUG_DEVICE', 'link-4');">DEBUG_DEVICE</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    using adb=%s"</tt> <tt class="py-op">%</tt> <tt id="link-382" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-382', 'adb', 'link-1');">adb</a></tt> </tt>
+<a name="L1382"></a><tt class="py-lineno">1382</tt>  <tt class="py-line">            <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">subprocess</tt><tt class="py-op">.</tt><tt class="py-name">Popen</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt id="link-383" class="py-name"><a title="com.dtmilano.android.adb" class="py-name" href="#" onclick="return doclink('link-383', 'adb', 'link-1');">adb</a></tt><tt class="py-op">,</tt> <tt class="py-string">'get-serialno'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">stdout</tt><tt class="py-op">=</tt><tt class="py-name">subprocess</tt><tt class="py-op">.</tt><tt class="py-name">PIPE</tt><tt class="py-op">,</tt> <tt class="py-name">stderr</tt><tt class="py-op">=</tt><tt class="py-name">subprocess</tt><tt class="py-op">.</tt><tt class="py-name">PIPE</tt><tt class="py-op">,</tt> <tt class="py-name">env</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">communicate</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L1383"></a><tt class="py-lineno">1383</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">s</tt> <tt class="py-op">!=</tt> <tt class="py-string">'unknown'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1384"></a><tt class="py-lineno">1384</tt>  <tt class="py-line">                <tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> </tt>
+<a name="L1385"></a><tt class="py-lineno">1385</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-384" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_DEVICE" class="py-name" href="#" onclick="return doclink('link-384', 'DEBUG_DEVICE', 'link-4');">DEBUG_DEVICE</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    serialno=%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">serialno</tt> </tt>
+<a name="L1386"></a><tt class="py-lineno">1386</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">serialno</tt><tt class="py-op">:</tt> </tt>
+<a name="L1387"></a><tt class="py-lineno">1387</tt>  <tt class="py-line">            <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Couldn't obtain the serialno of the connected device"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1388"></a><tt class="py-lineno">1388</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">serialno</tt> </tt>
+</div><a name="L1389"></a><tt class="py-lineno">1389</tt>  <tt class="py-line"> </tt>
+<a name="L1390"></a><tt class="py-lineno">1390</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.setAlarm"></a><div id="ViewClient.setAlarm-def"><a name="L1391"></a><tt class="py-lineno">1391</tt> <a class="py-toggle" href="#" id="ViewClient.setAlarm-toggle" onclick="return toggle('ViewClient.setAlarm');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#setAlarm">setAlarm</a><tt class="py-op">(</tt><tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.setAlarm-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.setAlarm-expanded"><a name="L1392"></a><tt class="py-lineno">1392</tt>  <tt class="py-line">        <tt class="py-name">osName</tt> <tt class="py-op">=</tt> <tt class="py-name">platform</tt><tt class="py-op">.</tt><tt class="py-name">system</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1393"></a><tt class="py-lineno">1393</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">osName</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'Windows'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-comment"># alarm is not implemented in Windows</tt> </tt>
+<a name="L1394"></a><tt class="py-lineno">1394</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> </tt>
+<a name="L1395"></a><tt class="py-lineno">1395</tt>  <tt class="py-line">        <tt class="py-name">signal</tt><tt class="py-op">.</tt><tt class="py-name">alarm</tt><tt class="py-op">(</tt><tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1396"></a><tt class="py-lineno">1396</tt>  <tt class="py-line"> </tt>
+<a name="L1397"></a><tt class="py-lineno">1397</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.connectToDeviceOrExit"></a><div id="ViewClient.connectToDeviceOrExit-def"><a name="L1398"></a><tt class="py-lineno">1398</tt> <a class="py-toggle" href="#" id="ViewClient.connectToDeviceOrExit-toggle" onclick="return toggle('ViewClient.connectToDeviceOrExit');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#connectToDeviceOrExit">connectToDeviceOrExit</a><tt class="py-op">(</tt><tt class="py-param">timeout</tt><tt class="py-op">=</tt><tt class="py-number">60</tt><tt class="py-op">,</tt> <tt class="py-param">verbose</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-param">ignoresecuredevice</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-param">serialno</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.connectToDeviceOrExit-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.connectToDeviceOrExit-expanded"><a name="L1399"></a><tt class="py-lineno">1399</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1400"></a><tt class="py-lineno">1400</tt>  <tt class="py-line"><tt class="py-docstring">        Connects to a device which serial number is obtained from the script arguments if available</tt> </tt>
+<a name="L1401"></a><tt class="py-lineno">1401</tt>  <tt class="py-line"><tt class="py-docstring">        or using the default regex C{.*}.</tt> </tt>
+<a name="L1402"></a><tt class="py-lineno">1402</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1403"></a><tt class="py-lineno">1403</tt>  <tt class="py-line"><tt class="py-docstring">        If the connection is not successful the script exits.</tt> </tt>
+<a name="L1404"></a><tt class="py-lineno">1404</tt>  <tt class="py-line"><tt class="py-docstring">        L{MonkeyRunner.waitForConnection()} returns a L{MonkeyDevice} even if the connection failed.</tt> </tt>
+<a name="L1405"></a><tt class="py-lineno">1405</tt>  <tt class="py-line"><tt class="py-docstring">        Then, to detect this situation, C{device.wake()} is attempted and if it fails then it is</tt> </tt>
+<a name="L1406"></a><tt class="py-lineno">1406</tt>  <tt class="py-line"><tt class="py-docstring">        assumed the previous connection failed.</tt> </tt>
+<a name="L1407"></a><tt class="py-lineno">1407</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1408"></a><tt class="py-lineno">1408</tt>  <tt class="py-line"><tt class="py-docstring">        @type timeout: int</tt> </tt>
+<a name="L1409"></a><tt class="py-lineno">1409</tt>  <tt class="py-line"><tt class="py-docstring">        @param timeout: timeout for the connection</tt> </tt>
+<a name="L1410"></a><tt class="py-lineno">1410</tt>  <tt class="py-line"><tt class="py-docstring">        @type verbose: bool</tt> </tt>
+<a name="L1411"></a><tt class="py-lineno">1411</tt>  <tt class="py-line"><tt class="py-docstring">        @param verbose: Verbose output</tt> </tt>
+<a name="L1412"></a><tt class="py-lineno">1412</tt>  <tt class="py-line"><tt class="py-docstring">        @type ignoresecuredevice: bool</tt> </tt>
+<a name="L1413"></a><tt class="py-lineno">1413</tt>  <tt class="py-line"><tt class="py-docstring">        @param ignoresecuredevice: Ignores the check for a secure device</tt> </tt>
+<a name="L1414"></a><tt class="py-lineno">1414</tt>  <tt class="py-line"><tt class="py-docstring">        @type serialno: str</tt> </tt>
+<a name="L1415"></a><tt class="py-lineno">1415</tt>  <tt class="py-line"><tt class="py-docstring">        @param serialno: The device or emulator serial number</tt> </tt>
+<a name="L1416"></a><tt class="py-lineno">1416</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1417"></a><tt class="py-lineno">1417</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the device and serialno used for the connection</tt> </tt>
+<a name="L1418"></a><tt class="py-lineno">1418</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1419"></a><tt class="py-lineno">1419</tt>  <tt class="py-line"> </tt>
+<a name="L1420"></a><tt class="py-lineno">1420</tt>  <tt class="py-line">        <tt class="py-name">progname</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">basename</tt><tt class="py-op">(</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">argv</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L1421"></a><tt class="py-lineno">1421</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">serialno</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1422"></a><tt class="py-lineno">1422</tt>  <tt class="py-line">            <tt class="py-comment"># eat all the extra options the invoking script may have added</tt> </tt>
+<a name="L1423"></a><tt class="py-lineno">1423</tt>  <tt class="py-line">            <tt class="py-name">args</tt> <tt class="py-op">=</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">argv</tt> </tt>
+<a name="L1424"></a><tt class="py-lineno">1424</tt>  <tt class="py-line">            <tt class="py-keyword">while</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">args</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">1</tt> <tt class="py-keyword">and</tt> <tt class="py-name">args</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'-'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1425"></a><tt class="py-lineno">1425</tt>  <tt class="py-line">                <tt class="py-name">args</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L1426"></a><tt class="py-lineno">1426</tt>  <tt class="py-line">            <tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">args</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">args</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">1</tt> <tt class="py-keyword">else</tt> \ </tt>
+<a name="L1427"></a><tt class="py-lineno">1427</tt>  <tt class="py-line">                    <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">[</tt><tt class="py-string">'ANDROID_SERIAL'</tt><tt class="py-op">]</tt> <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'ANDROID_SERIAL'</tt><tt class="py-op">)</tt> \ </tt>
+<a name="L1428"></a><tt class="py-lineno">1428</tt>  <tt class="py-line">                    <tt class="py-keyword">else</tt> <tt class="py-string">'.*'</tt> </tt>
+<a name="L1429"></a><tt class="py-lineno">1429</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-385" class="py-name"><a title="com.dtmilano.android.viewclient.IP_RE" class="py-name" href="#" onclick="return doclink('link-385', 'IP_RE', 'link-56');">IP_RE</a></tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">serialno</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1430"></a><tt class="py-lineno">1430</tt>  <tt class="py-line">            <tt class="py-comment"># If matches an IP address format and port was not specified add the default</tt> </tt>
+<a name="L1431"></a><tt class="py-lineno">1431</tt>  <tt class="py-line">            <tt class="py-name">serialno</tt> <tt class="py-op">+=</tt> <tt class="py-string">':%d'</tt> <tt class="py-op">%</tt> <tt id="link-386" class="py-name"><a title="com.dtmilano.android.viewclient.ADB_DEFAULT_PORT" class="py-name" href="#" onclick="return doclink('link-386', 'ADB_DEFAULT_PORT', 'link-29');">ADB_DEFAULT_PORT</a></tt> </tt>
+<a name="L1432"></a><tt class="py-lineno">1432</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">verbose</tt><tt class="py-op">:</tt> </tt>
+<a name="L1433"></a><tt class="py-lineno">1433</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">'Connecting to a device with serialno=%s with a timeout of %d secs...'</tt> <tt class="py-op">%</tt> \ </tt>
+<a name="L1434"></a><tt class="py-lineno">1434</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">serialno</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt>
+<a name="L1435"></a><tt class="py-lineno">1435</tt>  <tt class="py-line">        <tt id="link-387" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-387', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-388" class="py-name" targets="Static Method com.dtmilano.android.adb.adbclient.AdbClient.setAlarm()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#setAlarm,Static Method com.dtmilano.android.viewclient.ViewClient.setAlarm()=com.dtmilano.android.viewclient.ViewClient-class.html#setAlarm"><a title="com.dtmilano.android.adb.adbclient.AdbClient.setAlarm
+com.dtmilano.android.viewclient.ViewClient.setAlarm" class="py-name" href="#" onclick="return doclink('link-388', 'setAlarm', 'link-388');">setAlarm</a></tt><tt class="py-op">(</tt><tt class="py-name">timeout</tt><tt class="py-op">+</tt><tt class="py-number">5</tt><tt class="py-op">)</tt> </tt>
+<a name="L1436"></a><tt class="py-lineno">1436</tt>  <tt class="py-line">        <tt class="py-name">device</tt> <tt class="py-op">=</tt> <tt id="link-389" class="py-name"><a title="com.dtmilano.android.adb.adbclient" class="py-name" href="#" onclick="return doclink('link-389', 'adbclient', 'link-2');">adbclient</a></tt><tt class="py-op">.</tt><tt id="link-390" class="py-name" targets="Class com.dtmilano.android.adb.adbclient.AdbClient=com.dtmilano.android.adb.adbclient.AdbClient-class.html"><a title="com.dtmilano.android.adb.adbclient.AdbClient" class="py-name" href="#" onclick="return doclink('link-390', 'AdbClient', 'link-390');">AdbClient</a></tt><tt class="py-op">(</tt><tt class="py-name">serialno</tt><tt class="py-op">)</tt> </tt>
+<a name="L1437"></a><tt class="py-lineno">1437</tt>  <tt class="py-line">        <tt id="link-391" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-391', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-392" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.setAlarm
+com.dtmilano.android.viewclient.ViewClient.setAlarm" class="py-name" href="#" onclick="return doclink('link-392', 'setAlarm', 'link-388');">setAlarm</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L1438"></a><tt class="py-lineno">1438</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">verbose</tt><tt class="py-op">:</tt> </tt>
+<a name="L1439"></a><tt class="py-lineno">1439</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">'Connected to device with serialno=%s'</tt> <tt class="py-op">%</tt> <tt class="py-name">serialno</tt> </tt>
+<a name="L1440"></a><tt class="py-lineno">1440</tt>  <tt class="py-line">        <tt class="py-name">secure</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-393" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.getSystemProperty()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#getSystemProperty"><a title="com.dtmilano.android.adb.adbclient.AdbClient.getSystemProperty" class="py-name" href="#" onclick="return doclink('link-393', 'getSystemProperty', 'link-393');">getSystemProperty</a></tt><tt class="py-op">(</tt><tt class="py-string">'ro.secure'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1441"></a><tt class="py-lineno">1441</tt>  <tt class="py-line">        <tt class="py-name">debuggable</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-394" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.getSystemProperty" class="py-name" href="#" onclick="return doclink('link-394', 'getSystemProperty', 'link-393');">getSystemProperty</a></tt><tt class="py-op">(</tt><tt class="py-string">'ro.debuggable'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1442"></a><tt class="py-lineno">1442</tt>  <tt class="py-line">        <tt class="py-name">versionProperty</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-395" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.getProperty" class="py-name" href="#" onclick="return doclink('link-395', 'getProperty', 'link-70');">getProperty</a></tt><tt class="py-op">(</tt><tt id="link-396" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-396', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1443"></a><tt class="py-lineno">1443</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">versionProperty</tt><tt class="py-op">:</tt> </tt>
+<a name="L1444"></a><tt class="py-lineno">1444</tt>  <tt class="py-line">            <tt class="py-name">version</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">versionProperty</tt><tt class="py-op">)</tt> </tt>
+<a name="L1445"></a><tt class="py-lineno">1445</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1446"></a><tt class="py-lineno">1446</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">verbose</tt><tt class="py-op">:</tt> </tt>
+<a name="L1447"></a><tt class="py-lineno">1447</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-string">"Couldn't obtain device SDK version"</tt> </tt>
+<a name="L1448"></a><tt class="py-lineno">1448</tt>  <tt class="py-line">            <tt class="py-name">version</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L1449"></a><tt class="py-lineno">1449</tt>  <tt class="py-line"> </tt>
+<a name="L1450"></a><tt class="py-lineno">1450</tt>  <tt class="py-line">        <tt class="py-comment"># we are going to use UiAutomator for versions &gt;= 16 that's why we ignore if the device</tt> </tt>
+<a name="L1451"></a><tt class="py-lineno">1451</tt>  <tt class="py-line">        <tt class="py-comment"># is secure if this is true</tt> </tt>
+<a name="L1452"></a><tt class="py-lineno">1452</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">secure</tt> <tt class="py-op">==</tt> <tt class="py-string">'1'</tt> <tt class="py-keyword">and</tt> <tt class="py-name">debuggable</tt> <tt class="py-op">==</tt> <tt class="py-string">'0'</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">ignoresecuredevice</tt> <tt class="py-keyword">and</tt> <tt class="py-name">version</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">16</tt><tt class="py-op">:</tt> </tt>
+<a name="L1453"></a><tt class="py-lineno">1453</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"%s: ERROR: Device is secure, AndroidViewClient won't work."</tt> <tt class="py-op">%</tt> <tt class="py-name">progname</tt> </tt>
+<a name="L1454"></a><tt class="py-lineno">1454</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">verbose</tt><tt class="py-op">:</tt> </tt>
+<a name="L1455"></a><tt class="py-lineno">1455</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    secure=%s debuggable=%s version=%d ignoresecuredevice=%s"</tt> <tt class="py-op">%</tt> \ </tt>
+<a name="L1456"></a><tt class="py-lineno">1456</tt>  <tt class="py-line">                    <tt class="py-op">(</tt><tt class="py-name">secure</tt><tt class="py-op">,</tt> <tt class="py-name">debuggable</tt><tt class="py-op">,</tt> <tt class="py-name">version</tt><tt class="py-op">,</tt> <tt class="py-name">ignoresecuredevice</tt><tt class="py-op">)</tt> </tt>
+<a name="L1457"></a><tt class="py-lineno">1457</tt>  <tt class="py-line">            <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="L1458"></a><tt class="py-lineno">1458</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-string">"[.*()+]"</tt><tt class="py-op">,</tt> <tt class="py-name">serialno</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-string">"(\d{1,3}\.){3}\d{1,3}"</tt><tt class="py-op">,</tt> <tt class="py-name">serialno</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1459"></a><tt class="py-lineno">1459</tt>  <tt class="py-line">            <tt class="py-comment"># if a regex was used we have to determine the serialno used</tt> </tt>
+<a name="L1460"></a><tt class="py-lineno">1460</tt>  <tt class="py-line">            <tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt id="link-397" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-397', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-398" class="py-name" targets="Static Method com.dtmilano.android.viewclient.ViewClient.__obtainDeviceSerialNumber()=com.dtmilano.android.viewclient.ViewClient-class.html#__obtainDeviceSerialNumber"><a title="com.dtmilano.android.viewclient.ViewClient.__obtainDeviceSerialNumber" class="py-name" href="#" onclick="return doclink('link-398', '__obtainDeviceSerialNumber', 'link-398');">__obtainDeviceSerialNumber</a></tt><tt class="py-op">(</tt><tt class="py-name">device</tt><tt class="py-op">)</tt> </tt>
+<a name="L1461"></a><tt class="py-lineno">1461</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">verbose</tt><tt class="py-op">:</tt> </tt>
+<a name="L1462"></a><tt class="py-lineno">1462</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">'Actual device serialno=%s'</tt> <tt class="py-op">%</tt> <tt class="py-name">serialno</tt> </tt>
+<a name="L1463"></a><tt class="py-lineno">1463</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">serialno</tt> </tt>
+</div><a name="L1464"></a><tt class="py-lineno">1464</tt>  <tt class="py-line"> </tt>
+<a name="L1465"></a><tt class="py-lineno">1465</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.traverseShowClassIdAndText"></a><div id="ViewClient.traverseShowClassIdAndText-def"><a name="L1466"></a><tt class="py-lineno">1466</tt> <a class="py-toggle" href="#" id="ViewClient.traverseShowClassIdAndText-toggle" onclick="return toggle('ViewClient.traverseShowClassIdAndText');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdAndText">traverseShowClassIdAndText</a><tt class="py-op">(</tt><tt class="py-param">view</tt><tt class="py-op">,</tt> <tt class="py-param">extraInfo</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">noextrainfo</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.traverseShowClassIdAndText-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.traverseShowClassIdAndText-expanded"><a name="L1467"></a><tt class="py-lineno">1467</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1468"></a><tt class="py-lineno">1468</tt>  <tt class="py-line"><tt class="py-docstring">        Shows the View class, id and text if available.</tt> </tt>
+<a name="L1469"></a><tt class="py-lineno">1469</tt>  <tt class="py-line"><tt class="py-docstring">        This function can be used as a transform function to L{ViewClient.traverse()}</tt> </tt>
+<a name="L1470"></a><tt class="py-lineno">1470</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1471"></a><tt class="py-lineno">1471</tt>  <tt class="py-line"><tt class="py-docstring">        @type view: I{View}</tt> </tt>
+<a name="L1472"></a><tt class="py-lineno">1472</tt>  <tt class="py-line"><tt class="py-docstring">        @param view: the View</tt> </tt>
+<a name="L1473"></a><tt class="py-lineno">1473</tt>  <tt class="py-line"><tt class="py-docstring">        @type extraInfo: method</tt> </tt>
+<a name="L1474"></a><tt class="py-lineno">1474</tt>  <tt class="py-line"><tt class="py-docstring">        @param extraInfo: the View method to add extra info</tt> </tt>
+<a name="L1475"></a><tt class="py-lineno">1475</tt>  <tt class="py-line"><tt class="py-docstring">        @type noextrainfo: bool</tt> </tt>
+<a name="L1476"></a><tt class="py-lineno">1476</tt>  <tt class="py-line"><tt class="py-docstring">        @param noextrainfo: Don't add extra info</tt> </tt>
+<a name="L1477"></a><tt class="py-lineno">1477</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1478"></a><tt class="py-lineno">1478</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the string containing class, id, and text if available</tt> </tt>
+<a name="L1479"></a><tt class="py-lineno">1479</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1480"></a><tt class="py-lineno">1480</tt>  <tt class="py-line"> </tt>
+<a name="L1481"></a><tt class="py-lineno">1481</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1482"></a><tt class="py-lineno">1482</tt>  <tt class="py-line">            <tt class="py-name">eis</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L1483"></a><tt class="py-lineno">1483</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">extraInfo</tt><tt class="py-op">:</tt> </tt>
+<a name="L1484"></a><tt class="py-lineno">1484</tt>  <tt class="py-line">                <tt class="py-name">eis</tt> <tt class="py-op">=</tt> <tt class="py-name">extraInfo</tt><tt class="py-op">(</tt><tt class="py-name">view</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-399" class="py-name"><a title="com.dtmilano.android.adb.adbclient.Device.__str__
+com.dtmilano.android.viewclient.View.__str__
+com.dtmilano.android.viewclient.Window.__str__" class="py-name" href="#" onclick="return doclink('link-399', '__str__', 'link-290');">__str__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1485"></a><tt class="py-lineno">1485</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">eis</tt> <tt class="py-keyword">and</tt> <tt class="py-name">noextrainfo</tt><tt class="py-op">:</tt> </tt>
+<a name="L1486"></a><tt class="py-lineno">1486</tt>  <tt class="py-line">                    <tt class="py-name">eis</tt> <tt class="py-op">=</tt> <tt class="py-name">noextrainfo</tt> </tt>
+<a name="L1487"></a><tt class="py-lineno">1487</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">eis</tt><tt class="py-op">:</tt> </tt>
+<a name="L1488"></a><tt class="py-lineno">1488</tt>  <tt class="py-line">                <tt class="py-name">eis</tt> <tt class="py-op">=</tt> <tt class="py-string">' '</tt> <tt class="py-op">+</tt> <tt class="py-name">eis</tt> </tt>
+<a name="L1489"></a><tt class="py-lineno">1489</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">"%s %s %s%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">view</tt><tt class="py-op">.</tt><tt id="link-400" class="py-name"><a title="com.dtmilano.android.viewclient.View.getClass" class="py-name" href="#" onclick="return doclink('link-400', 'getClass', 'link-133');">getClass</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">view</tt><tt class="py-op">.</tt><tt id="link-401" class="py-name"><a title="com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-401', 'getId', 'link-134');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">view</tt><tt class="py-op">.</tt><tt id="link-402" class="py-name" targets="Method com.dtmilano.android.viewclient.View.getText()=com.dtmilano.android.viewclient.View-class.html#getText"><a title="com.dtmilano.android.viewclient.View.getText" class="py-name" href="#" onclick="return doclink('link-402', 'getText', 'link-402');">getText</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">eis</tt><tt class="py-op">)</tt> </tt>
+<a name="L1490"></a><tt class="py-lineno">1490</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L1491"></a><tt class="py-lineno">1491</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">"Exception in view=%s: %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">view</tt><tt class="py-op">.</tt><tt id="link-403" class="py-name" targets="Method com.dtmilano.android.viewclient.View.__smallStr__()=com.dtmilano.android.viewclient.View-class.html#__smallStr__"><a title="com.dtmilano.android.viewclient.View.__smallStr__" class="py-name" href="#" onclick="return doclink('link-403', '__smallStr__', 'link-403');">__smallStr__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1492"></a><tt class="py-lineno">1492</tt>  <tt class="py-line"> </tt>
+<a name="L1493"></a><tt class="py-lineno">1493</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.traverseShowClassIdTextAndUniqueId"></a><div id="ViewClient.traverseShowClassIdTextAndUniqueId-def"><a name="L1494"></a><tt class="py-lineno">1494</tt> <a class="py-toggle" href="#" id="ViewClient.traverseShowClassIdTextAndUniqueId-toggle" onclick="return toggle('ViewClient.traverseShowClassIdTextAndUniqueId');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndUniqueId">traverseShowClassIdTextAndUniqueId</a><tt class="py-op">(</tt><tt class="py-param">view</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.traverseShowClassIdTextAndUniqueId-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.traverseShowClassIdTextAndUniqueId-expanded"><a name="L1495"></a><tt class="py-lineno">1495</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1496"></a><tt class="py-lineno">1496</tt>  <tt class="py-line"><tt class="py-docstring">        Shows the View class, id, text if available and unique id.</tt> </tt>
+<a name="L1497"></a><tt class="py-lineno">1497</tt>  <tt class="py-line"><tt class="py-docstring">        This function can be used as a transform function to L{ViewClient.traverse()}</tt> </tt>
+<a name="L1498"></a><tt class="py-lineno">1498</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1499"></a><tt class="py-lineno">1499</tt>  <tt class="py-line"><tt class="py-docstring">        @type view: I{View}</tt> </tt>
+<a name="L1500"></a><tt class="py-lineno">1500</tt>  <tt class="py-line"><tt class="py-docstring">        @param view: the View</tt> </tt>
+<a name="L1501"></a><tt class="py-lineno">1501</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the string containing class, id, and text if available and unique Id</tt> </tt>
+<a name="L1502"></a><tt class="py-lineno">1502</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1503"></a><tt class="py-lineno">1503</tt>  <tt class="py-line"> </tt>
+<a name="L1504"></a><tt class="py-lineno">1504</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-404" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-404', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-405" class="py-name" targets="Static Method com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdAndText()=com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdAndText"><a title="com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdAndText" class="py-name" href="#" onclick="return doclink('link-405', 'traverseShowClassIdAndText', 'link-405');">traverseShowClassIdAndText</a></tt><tt class="py-op">(</tt><tt class="py-name">view</tt><tt class="py-op">,</tt> <tt id="link-406" class="py-name"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-406', 'View', 'link-61');">View</a></tt><tt class="py-op">.</tt><tt id="link-407" class="py-name"><a title="com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-407', 'getUniqueId', 'link-135');">getUniqueId</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1505"></a><tt class="py-lineno">1505</tt>  <tt class="py-line"> </tt>
+<a name="L1506"></a><tt class="py-lineno">1506</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.traverseShowClassIdTextAndContentDescription"></a><div id="ViewClient.traverseShowClassIdTextAndContentDescription-def"><a name="L1507"></a><tt class="py-lineno">1507</tt> <a class="py-toggle" href="#" id="ViewClient.traverseShowClassIdTextAndContentDescription-toggle" onclick="return toggle('ViewClient.traverseShowClassIdTextAndContentDescription');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndContentDescription">traverseShowClassIdTextAndContentDescription</a><tt class="py-op">(</tt><tt class="py-param">view</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.traverseShowClassIdTextAndContentDescription-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.traverseShowClassIdTextAndContentDescription-expanded"><a name="L1508"></a><tt class="py-lineno">1508</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1509"></a><tt class="py-lineno">1509</tt>  <tt class="py-line"><tt class="py-docstring">        Shows the View class, id, text if available and unique id.</tt> </tt>
+<a name="L1510"></a><tt class="py-lineno">1510</tt>  <tt class="py-line"><tt class="py-docstring">        This function can be used as a transform function to L{ViewClient.traverse()}</tt> </tt>
+<a name="L1511"></a><tt class="py-lineno">1511</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1512"></a><tt class="py-lineno">1512</tt>  <tt class="py-line"><tt class="py-docstring">        @type view: I{View}</tt> </tt>
+<a name="L1513"></a><tt class="py-lineno">1513</tt>  <tt class="py-line"><tt class="py-docstring">        @param view: the View</tt> </tt>
+<a name="L1514"></a><tt class="py-lineno">1514</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the string containing class, id, and text if available and the content description</tt> </tt>
+<a name="L1515"></a><tt class="py-lineno">1515</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1516"></a><tt class="py-lineno">1516</tt>  <tt class="py-line"> </tt>
+<a name="L1517"></a><tt class="py-lineno">1517</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-408" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-408', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-409" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdAndText" class="py-name" href="#" onclick="return doclink('link-409', 'traverseShowClassIdAndText', 'link-405');">traverseShowClassIdAndText</a></tt><tt class="py-op">(</tt><tt class="py-name">view</tt><tt class="py-op">,</tt> <tt id="link-410" class="py-name"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-410', 'View', 'link-61');">View</a></tt><tt class="py-op">.</tt><tt id="link-411" class="py-name" targets="Method com.dtmilano.android.viewclient.View.getContentDescription()=com.dtmilano.android.viewclient.View-class.html#getContentDescription"><a title="com.dtmilano.android.viewclient.View.getContentDescription" class="py-name" href="#" onclick="return doclink('link-411', 'getContentDescription', 'link-411');">getContentDescription</a></tt><tt class="py-op">,</tt> <tt class="py-string">'NAF'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1518"></a><tt class="py-lineno">1518</tt>  <tt class="py-line"> </tt>
+<a name="L1519"></a><tt class="py-lineno">1519</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.traverseShowClassIdTextAndCenter"></a><div id="ViewClient.traverseShowClassIdTextAndCenter-def"><a name="L1520"></a><tt class="py-lineno">1520</tt> <a class="py-toggle" href="#" id="ViewClient.traverseShowClassIdTextAndCenter-toggle" onclick="return toggle('ViewClient.traverseShowClassIdTextAndCenter');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndCenter">traverseShowClassIdTextAndCenter</a><tt class="py-op">(</tt><tt class="py-param">view</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.traverseShowClassIdTextAndCenter-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.traverseShowClassIdTextAndCenter-expanded"><a name="L1521"></a><tt class="py-lineno">1521</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1522"></a><tt class="py-lineno">1522</tt>  <tt class="py-line"><tt class="py-docstring">        Shows the View class, id and text if available.</tt> </tt>
+<a name="L1523"></a><tt class="py-lineno">1523</tt>  <tt class="py-line"><tt class="py-docstring">        This function can be used as a transform function to L{ViewClient.traverse()}</tt> </tt>
+<a name="L1524"></a><tt class="py-lineno">1524</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1525"></a><tt class="py-lineno">1525</tt>  <tt class="py-line"><tt class="py-docstring">        @type view: I{View}</tt> </tt>
+<a name="L1526"></a><tt class="py-lineno">1526</tt>  <tt class="py-line"><tt class="py-docstring">        @param view: the View</tt> </tt>
+<a name="L1527"></a><tt class="py-lineno">1527</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the string containing class, id, and text if available</tt> </tt>
+<a name="L1528"></a><tt class="py-lineno">1528</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1529"></a><tt class="py-lineno">1529</tt>  <tt class="py-line"> </tt>
+<a name="L1530"></a><tt class="py-lineno">1530</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-412" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-412', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-413" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdAndText" class="py-name" href="#" onclick="return doclink('link-413', 'traverseShowClassIdAndText', 'link-405');">traverseShowClassIdAndText</a></tt><tt class="py-op">(</tt><tt class="py-name">view</tt><tt class="py-op">,</tt> <tt id="link-414" class="py-name"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-414', 'View', 'link-61');">View</a></tt><tt class="py-op">.</tt><tt id="link-415" class="py-name"><a title="com.dtmilano.android.viewclient.View.getCenter" class="py-name" href="#" onclick="return doclink('link-415', 'getCenter', 'link-259');">getCenter</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1531"></a><tt class="py-lineno">1531</tt>  <tt class="py-line"> </tt>
+<a name="L1532"></a><tt class="py-lineno">1532</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.traverseShowClassIdTextPositionAndSize"></a><div id="ViewClient.traverseShowClassIdTextPositionAndSize-def"><a name="L1533"></a><tt class="py-lineno">1533</tt> <a class="py-toggle" href="#" id="ViewClient.traverseShowClassIdTextPositionAndSize-toggle" onclick="return toggle('ViewClient.traverseShowClassIdTextPositionAndSize');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextPositionAndSize">traverseShowClassIdTextPositionAndSize</a><tt class="py-op">(</tt><tt class="py-param">view</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.traverseShowClassIdTextPositionAndSize-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.traverseShowClassIdTextPositionAndSize-expanded"><a name="L1534"></a><tt class="py-lineno">1534</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1535"></a><tt class="py-lineno">1535</tt>  <tt class="py-line"><tt class="py-docstring">        Shows the View class, id and text if available.</tt> </tt>
+<a name="L1536"></a><tt class="py-lineno">1536</tt>  <tt class="py-line"><tt class="py-docstring">        This function can be used as a transform function to L{ViewClient.traverse()}</tt> </tt>
+<a name="L1537"></a><tt class="py-lineno">1537</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1538"></a><tt class="py-lineno">1538</tt>  <tt class="py-line"><tt class="py-docstring">        @type view: I{View}</tt> </tt>
+<a name="L1539"></a><tt class="py-lineno">1539</tt>  <tt class="py-line"><tt class="py-docstring">        @param view: the View</tt> </tt>
+<a name="L1540"></a><tt class="py-lineno">1540</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the string containing class, id, and text if available</tt> </tt>
+<a name="L1541"></a><tt class="py-lineno">1541</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1542"></a><tt class="py-lineno">1542</tt>  <tt class="py-line"> </tt>
+<a name="L1543"></a><tt class="py-lineno">1543</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-416" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-416', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-417" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdAndText" class="py-name" href="#" onclick="return doclink('link-417', 'traverseShowClassIdAndText', 'link-405');">traverseShowClassIdAndText</a></tt><tt class="py-op">(</tt><tt class="py-name">view</tt><tt class="py-op">,</tt> <tt id="link-418" class="py-name"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-418', 'View', 'link-61');">View</a></tt><tt class="py-op">.</tt><tt id="link-419" class="py-name"><a title="com.dtmilano.android.viewclient.View.getPositionAndSize" class="py-name" href="#" onclick="return doclink('link-419', 'getPositionAndSize', 'link-276');">getPositionAndSize</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1544"></a><tt class="py-lineno">1544</tt>  <tt class="py-line"> </tt>
+<a name="L1545"></a><tt class="py-lineno">1545</tt>  <tt class="py-line">    <tt class="py-comment"># methods that can be used to transform ViewClient.traverse output</tt> </tt>
+<a name="L1546"></a><tt class="py-lineno">1546</tt>  <tt class="py-line">    <tt class="py-name">TRAVERSE_CIT</tt> <tt class="py-op">=</tt> <tt id="link-420" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdAndText" class="py-name" href="#" onclick="return doclink('link-420', 'traverseShowClassIdAndText', 'link-405');">traverseShowClassIdAndText</a></tt> </tt>
+<a name="L1547"></a><tt class="py-lineno">1547</tt>  <tt class="py-line">    <tt class="py-string">''' An alias for L{traverseShowClassIdAndText(view)} '''</tt> </tt>
+<a name="L1548"></a><tt class="py-lineno">1548</tt>  <tt class="py-line">    <tt class="py-name">TRAVERSE_CITUI</tt> <tt class="py-op">=</tt> <tt id="link-421" class="py-name" targets="Static Method com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextAndUniqueId()=com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndUniqueId"><a title="com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextAndUniqueId" class="py-name" href="#" onclick="return doclink('link-421', 'traverseShowClassIdTextAndUniqueId', 'link-421');">traverseShowClassIdTextAndUniqueId</a></tt> </tt>
+<a name="L1549"></a><tt class="py-lineno">1549</tt>  <tt class="py-line">    <tt class="py-string">''' An alias for L{traverseShowClassIdTextAndUniqueId(view)} '''</tt> </tt>
+<a name="L1550"></a><tt class="py-lineno">1550</tt>  <tt class="py-line">    <tt class="py-name">TRAVERSE_CITCD</tt> <tt class="py-op">=</tt> <tt id="link-422" class="py-name" targets="Static Method com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextAndContentDescription()=com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndContentDescription"><a title="com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextAndContentDescription" class="py-name" href="#" onclick="return doclink('link-422', 'traverseShowClassIdTextAndContentDescription', 'link-422');">traverseShowClassIdTextAndContentDescription</a></tt> </tt>
+<a name="L1551"></a><tt class="py-lineno">1551</tt>  <tt class="py-line">    <tt class="py-string">''' An alias for L{traverseShowClassIdTextAndContentDescription(view)} '''</tt> </tt>
+<a name="L1552"></a><tt class="py-lineno">1552</tt>  <tt class="py-line">    <tt class="py-name">TRAVERSE_CITC</tt> <tt class="py-op">=</tt> <tt id="link-423" class="py-name" targets="Static Method com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextAndCenter()=com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndCenter"><a title="com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextAndCenter" class="py-name" href="#" onclick="return doclink('link-423', 'traverseShowClassIdTextAndCenter', 'link-423');">traverseShowClassIdTextAndCenter</a></tt> </tt>
+<a name="L1553"></a><tt class="py-lineno">1553</tt>  <tt class="py-line">    <tt class="py-string">''' An alias for L{traverseShowClassIdTextAndCenter(view)} '''</tt> </tt>
+<a name="L1554"></a><tt class="py-lineno">1554</tt>  <tt class="py-line">    <tt class="py-name">TRAVERSE_CITPS</tt> <tt class="py-op">=</tt> <tt id="link-424" class="py-name" targets="Static Method com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextPositionAndSize()=com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextPositionAndSize"><a title="com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextPositionAndSize" class="py-name" href="#" onclick="return doclink('link-424', 'traverseShowClassIdTextPositionAndSize', 'link-424');">traverseShowClassIdTextPositionAndSize</a></tt> </tt>
+<a name="L1555"></a><tt class="py-lineno">1555</tt>  <tt class="py-line">    <tt class="py-string">''' An alias for L{traverseShowClassIdTextPositionAndSize(view)} '''</tt> </tt>
+<a name="L1556"></a><tt class="py-lineno">1556</tt>  <tt class="py-line"> </tt>
+<a name="L1557"></a><tt class="py-lineno">1557</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.sleep"></a><div id="ViewClient.sleep-def"><a name="L1558"></a><tt class="py-lineno">1558</tt> <a class="py-toggle" href="#" id="ViewClient.sleep-toggle" onclick="return toggle('ViewClient.sleep');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#sleep">sleep</a><tt class="py-op">(</tt><tt class="py-param">secs</tt><tt class="py-op">=</tt><tt class="py-number">1.0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.sleep-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.sleep-expanded"><a name="L1559"></a><tt class="py-lineno">1559</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1560"></a><tt class="py-lineno">1560</tt>  <tt class="py-line"><tt class="py-docstring">        Sleeps for the specified number of seconds.</tt> </tt>
+<a name="L1561"></a><tt class="py-lineno">1561</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1562"></a><tt class="py-lineno">1562</tt>  <tt class="py-line"><tt class="py-docstring">        @type secs: float</tt> </tt>
+<a name="L1563"></a><tt class="py-lineno">1563</tt>  <tt class="py-line"><tt class="py-docstring">        @param secs: number of seconds</tt> </tt>
+<a name="L1564"></a><tt class="py-lineno">1564</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1565"></a><tt class="py-lineno">1565</tt>  <tt class="py-line">        <tt class="py-name">time</tt><tt class="py-op">.</tt><tt id="link-425" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-425', 'sleep', 'link-269');">sleep</a></tt><tt class="py-op">(</tt><tt class="py-name">secs</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1566"></a><tt class="py-lineno">1566</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.assertServiceResponse"></a><div id="ViewClient.assertServiceResponse-def"><a name="L1567"></a><tt class="py-lineno">1567</tt> <a class="py-toggle" href="#" id="ViewClient.assertServiceResponse-toggle" onclick="return toggle('ViewClient.assertServiceResponse');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#assertServiceResponse">assertServiceResponse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">response</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.assertServiceResponse-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.assertServiceResponse-expanded"><a name="L1568"></a><tt class="py-lineno">1568</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1569"></a><tt class="py-lineno">1569</tt>  <tt class="py-line"><tt class="py-docstring">        Checks whether the response received from the server is correct or raises and Exception.</tt> </tt>
+<a name="L1570"></a><tt class="py-lineno">1570</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1571"></a><tt class="py-lineno">1571</tt>  <tt class="py-line"><tt class="py-docstring">        @type response: str</tt> </tt>
+<a name="L1572"></a><tt class="py-lineno">1572</tt>  <tt class="py-line"><tt class="py-docstring">        @param response: Response received from the server</tt> </tt>
+<a name="L1573"></a><tt class="py-lineno">1573</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1574"></a><tt class="py-lineno">1574</tt>  <tt class="py-line"><tt class="py-docstring">        @raise Exception: If the response received from the server is invalid</tt> </tt>
+<a name="L1575"></a><tt class="py-lineno">1575</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1576"></a><tt class="py-lineno">1576</tt>  <tt class="py-line"> </tt>
+<a name="L1577"></a><tt class="py-lineno">1577</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-426" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.serviceResponse" class="py-name" href="#" onclick="return doclink('link-426', 'serviceResponse', 'link-346');">serviceResponse</a></tt><tt class="py-op">(</tt><tt class="py-name">response</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1578"></a><tt class="py-lineno">1578</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid response received from service.'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1579"></a><tt class="py-lineno">1579</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.serviceResponse"></a><div id="ViewClient.serviceResponse-def"><a name="L1580"></a><tt class="py-lineno">1580</tt> <a class="py-toggle" href="#" id="ViewClient.serviceResponse-toggle" onclick="return toggle('ViewClient.serviceResponse');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#serviceResponse">serviceResponse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">response</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.serviceResponse-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.serviceResponse-expanded"><a name="L1581"></a><tt class="py-lineno">1581</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1582"></a><tt class="py-lineno">1582</tt>  <tt class="py-line"><tt class="py-docstring">        Checks the response received from the I{ViewServer}.</tt> </tt>
+<a name="L1583"></a><tt class="py-lineno">1583</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1584"></a><tt class="py-lineno">1584</tt>  <tt class="py-line"><tt class="py-docstring">        @return: C{True} if the response received matches L{PARCEL_TRUE}, C{False} otherwise</tt> </tt>
+<a name="L1585"></a><tt class="py-lineno">1585</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1586"></a><tt class="py-lineno">1586</tt>  <tt class="py-line"> </tt>
+<a name="L1587"></a><tt class="py-lineno">1587</tt>  <tt class="py-line">        <tt class="py-name">PARCEL_TRUE</tt> <tt class="py-op">=</tt> <tt class="py-string">"Result: Parcel(00000000 00000001   '........')\r\n"</tt> </tt>
+<a name="L1588"></a><tt class="py-lineno">1588</tt>  <tt class="py-line">        <tt class="py-string">''' The TRUE response parcel '''</tt> </tt>
+<a name="L1589"></a><tt class="py-lineno">1589</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-427" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-427', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1590"></a><tt class="py-lineno">1590</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"serviceResponse: comparing '%s' vs Parcel(%s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">response</tt><tt class="py-op">,</tt> <tt class="py-name">PARCEL_TRUE</tt><tt class="py-op">)</tt> </tt>
+<a name="L1591"></a><tt class="py-lineno">1591</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">response</tt> <tt class="py-op">==</tt> <tt class="py-name">PARCEL_TRUE</tt> </tt>
+</div><a name="L1592"></a><tt class="py-lineno">1592</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.setViews"></a><div id="ViewClient.setViews-def"><a name="L1593"></a><tt class="py-lineno">1593</tt> <a class="py-toggle" href="#" id="ViewClient.setViews-toggle" onclick="return toggle('ViewClient.setViews');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#setViews">setViews</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">received</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.setViews-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.setViews-expanded"><a name="L1594"></a><tt class="py-lineno">1594</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1595"></a><tt class="py-lineno">1595</tt>  <tt class="py-line"><tt class="py-docstring">        Sets L{self.views} to the received value splitting it into lines.</tt> </tt>
+<a name="L1596"></a><tt class="py-lineno">1596</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1597"></a><tt class="py-lineno">1597</tt>  <tt class="py-line"><tt class="py-docstring">        @type received: str</tt> </tt>
+<a name="L1598"></a><tt class="py-lineno">1598</tt>  <tt class="py-line"><tt class="py-docstring">        @param received: the string received from the I{View Server}</tt> </tt>
+<a name="L1599"></a><tt class="py-lineno">1599</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1600"></a><tt class="py-lineno">1600</tt>  <tt class="py-line"> </tt>
+<a name="L1601"></a><tt class="py-lineno">1601</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">received</tt> <tt class="py-keyword">or</tt> <tt class="py-name">received</tt> <tt class="py-op">==</tt> <tt class="py-string">""</tt><tt class="py-op">:</tt> </tt>
+<a name="L1602"></a><tt class="py-lineno">1602</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"received is empty"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1603"></a><tt class="py-lineno">1603</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1604"></a><tt class="py-lineno">1604</tt>  <tt class="py-line">        <tt class="py-string">''' The list of Views represented as C{str} obtained after splitting it into lines after being received from the server. Done by L{self.setViews()}. '''</tt> </tt>
+<a name="L1605"></a><tt class="py-lineno">1605</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-428" class="py-name" targets="Method com.dtmilano.android.viewclient.ViewClient.__parseTree()=com.dtmilano.android.viewclient.ViewClient-class.html#__parseTree"><a title="com.dtmilano.android.viewclient.ViewClient.__parseTree" class="py-name" href="#" onclick="return doclink('link-428', '__parseTree', 'link-428');">__parseTree</a></tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">"\n"</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1606"></a><tt class="py-lineno">1606</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-429" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-429', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1607"></a><tt class="py-lineno">1607</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"there are %d views in this dump"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1608"></a><tt class="py-lineno">1608</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.setViewsFromUiAutomatorDump"></a><div id="ViewClient.setViewsFromUiAutomatorDump-def"><a name="L1609"></a><tt class="py-lineno">1609</tt> <a class="py-toggle" href="#" id="ViewClient.setViewsFromUiAutomatorDump-toggle" onclick="return toggle('ViewClient.setViewsFromUiAutomatorDump');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#setViewsFromUiAutomatorDump">setViewsFromUiAutomatorDump</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">received</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.setViewsFromUiAutomatorDump-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.setViewsFromUiAutomatorDump-expanded"><a name="L1610"></a><tt class="py-lineno">1610</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1611"></a><tt class="py-lineno">1611</tt>  <tt class="py-line"><tt class="py-docstring">        Sets L{self.views} to the received value parsing the received XML.</tt> </tt>
+<a name="L1612"></a><tt class="py-lineno">1612</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1613"></a><tt class="py-lineno">1613</tt>  <tt class="py-line"><tt class="py-docstring">        @type received: str</tt> </tt>
+<a name="L1614"></a><tt class="py-lineno">1614</tt>  <tt class="py-line"><tt class="py-docstring">        @param received: the string received from the I{UI Automator}</tt> </tt>
+<a name="L1615"></a><tt class="py-lineno">1615</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1616"></a><tt class="py-lineno">1616</tt>  <tt class="py-line"> </tt>
+<a name="L1617"></a><tt class="py-lineno">1617</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">received</tt> <tt class="py-keyword">or</tt> <tt class="py-name">received</tt> <tt class="py-op">==</tt> <tt class="py-string">""</tt><tt class="py-op">:</tt> </tt>
+<a name="L1618"></a><tt class="py-lineno">1618</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"received is empty"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1619"></a><tt class="py-lineno">1619</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1620"></a><tt class="py-lineno">1620</tt>  <tt class="py-line">        <tt class="py-string">''' The list of Views represented as C{str} obtained after splitting it into lines after being received from the server. Done by L{self.setViews()}. '''</tt> </tt>
+<a name="L1621"></a><tt class="py-lineno">1621</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-430" class="py-name" targets="Method com.dtmilano.android.viewclient.ViewClient.__parseTreeFromUiAutomatorDump()=com.dtmilano.android.viewclient.ViewClient-class.html#__parseTreeFromUiAutomatorDump"><a title="com.dtmilano.android.viewclient.ViewClient.__parseTreeFromUiAutomatorDump" class="py-name" href="#" onclick="return doclink('link-430', '__parseTreeFromUiAutomatorDump', 'link-430');">__parseTreeFromUiAutomatorDump</a></tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1622"></a><tt class="py-lineno">1622</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-431" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-431', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1623"></a><tt class="py-lineno">1623</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"there are %d views in this dump"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1624"></a><tt class="py-lineno">1624</tt>  <tt class="py-line"> </tt>
+<a name="L1625"></a><tt class="py-lineno">1625</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.__splitAttrs"></a><div id="ViewClient.__splitAttrs-def"><a name="L1626"></a><tt class="py-lineno">1626</tt> <a class="py-toggle" href="#" id="ViewClient.__splitAttrs-toggle" onclick="return toggle('ViewClient.__splitAttrs');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__splitAttrs">__splitAttrs</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">strArgs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__splitAttrs-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__splitAttrs-expanded"><a name="L1627"></a><tt class="py-lineno">1627</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1628"></a><tt class="py-lineno">1628</tt>  <tt class="py-line"><tt class="py-docstring">        Splits the C{View} attributes in C{strArgs} and optionally adds the view id to the C{viewsById} list.</tt> </tt>
+<a name="L1629"></a><tt class="py-lineno">1629</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1630"></a><tt class="py-lineno">1630</tt>  <tt class="py-line"><tt class="py-docstring">        Unique Ids</tt> </tt>
+<a name="L1631"></a><tt class="py-lineno">1631</tt>  <tt class="py-line"><tt class="py-docstring">        ==========</tt> </tt>
+<a name="L1632"></a><tt class="py-lineno">1632</tt>  <tt class="py-line"><tt class="py-docstring">        It is very common to find C{View}s having B{NO_ID} as the Id. This turns very difficult to</tt> </tt>
+<a name="L1633"></a><tt class="py-lineno">1633</tt>  <tt class="py-line"><tt class="py-docstring">        use L{self.findViewById()}. To help in this situation this method assigns B{unique Ids}.</tt> </tt>
+<a name="L1634"></a><tt class="py-lineno">1634</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1635"></a><tt class="py-lineno">1635</tt>  <tt class="py-line"><tt class="py-docstring">        The B{unique Ids} are generated using the pattern C{id/no_id/&lt;number&gt;} with C{&lt;number&gt;} starting</tt> </tt>
+<a name="L1636"></a><tt class="py-lineno">1636</tt>  <tt class="py-line"><tt class="py-docstring">        at 1.</tt> </tt>
+<a name="L1637"></a><tt class="py-lineno">1637</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1638"></a><tt class="py-lineno">1638</tt>  <tt class="py-line"><tt class="py-docstring">        @type strArgs: str</tt> </tt>
+<a name="L1639"></a><tt class="py-lineno">1639</tt>  <tt class="py-line"><tt class="py-docstring">        @param strArgs: the string containing the raw list of attributes and values</tt> </tt>
+<a name="L1640"></a><tt class="py-lineno">1640</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1641"></a><tt class="py-lineno">1641</tt>  <tt class="py-line"><tt class="py-docstring">        @return: Returns the attributes map.</tt> </tt>
+<a name="L1642"></a><tt class="py-lineno">1642</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1643"></a><tt class="py-lineno">1643</tt>  <tt class="py-line"> </tt>
+<a name="L1644"></a><tt class="py-lineno">1644</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L1645"></a><tt class="py-lineno">1645</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"This method is not compatible with UIAutomator"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1646"></a><tt class="py-lineno">1646</tt>  <tt class="py-line">        <tt class="py-comment"># replace the spaces in text:mText to preserve them in later split</tt> </tt>
+<a name="L1647"></a><tt class="py-lineno">1647</tt>  <tt class="py-line">        <tt class="py-comment"># they are translated back after the attribute matches</tt> </tt>
+<a name="L1648"></a><tt class="py-lineno">1648</tt>  <tt class="py-line">        <tt class="py-name">textRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'%s=%s,'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt><tt class="py-op">,</tt> <tt id="link-432" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-432', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'len'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1649"></a><tt class="py-lineno">1649</tt>  <tt class="py-line">        <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">textRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">strArgs</tt><tt class="py-op">)</tt> </tt>
+<a name="L1650"></a><tt class="py-lineno">1650</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L1651"></a><tt class="py-lineno">1651</tt>  <tt class="py-line">            <tt class="py-name">__textStart</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">end</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1652"></a><tt class="py-lineno">1652</tt>  <tt class="py-line">            <tt class="py-name">__textLen</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'len'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1653"></a><tt class="py-lineno">1653</tt>  <tt class="py-line">            <tt class="py-name">__textEnd</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">end</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">__textLen</tt> </tt>
+<a name="L1654"></a><tt class="py-lineno">1654</tt>  <tt class="py-line">            <tt class="py-name">s1</tt> <tt class="py-op">=</tt> <tt class="py-name">strArgs</tt><tt class="py-op">[</tt><tt class="py-name">__textStart</tt><tt class="py-op">:</tt><tt class="py-name">__textEnd</tt><tt class="py-op">]</tt> </tt>
+<a name="L1655"></a><tt class="py-lineno">1655</tt>  <tt class="py-line">            <tt class="py-name">s2</tt> <tt class="py-op">=</tt> <tt class="py-name">s1</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">' '</tt><tt class="py-op">,</tt> <tt id="link-433" class="py-name"><a title="com.dtmilano.android.viewclient.WS" class="py-name" href="#" onclick="return doclink('link-433', 'WS', 'link-41');">WS</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1656"></a><tt class="py-lineno">1656</tt>  <tt class="py-line">            <tt class="py-name">strArgs</tt> <tt class="py-op">=</tt> <tt class="py-name">strArgs</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L1657"></a><tt class="py-lineno">1657</tt>  <tt class="py-line"> </tt>
+<a name="L1658"></a><tt class="py-lineno">1658</tt>  <tt class="py-line">        <tt class="py-name">idRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">"(?P&lt;viewId&gt;id/\S+)"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1659"></a><tt class="py-lineno">1659</tt>  <tt class="py-line">        <tt class="py-name">attrRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'%s(?P&lt;parens&gt;\(\))?=%s,(?P&lt;val&gt;[^ ]*)'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-434" class="py-name"><a title="com.dtmilano.android.viewclient._ns" class="py-name" href="#" onclick="return doclink('link-434', '_ns', 'link-203');">_ns</a></tt><tt class="py-op">(</tt><tt class="py-string">'attr'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-435" class="py-name"><a title="com.dtmilano.android.viewclient._nd" class="py-name" href="#" onclick="return doclink('link-435', '_nd', 'link-201');">_nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'len'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">flags</tt><tt class="py-op">=</tt><tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">DOTALL</tt><tt class="py-op">)</tt> </tt>
+<a name="L1660"></a><tt class="py-lineno">1660</tt>  <tt class="py-line">        <tt class="py-name">hashRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'%s@%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-436" class="py-name"><a title="com.dtmilano.android.viewclient._ns" class="py-name" href="#" onclick="return doclink('link-436', '_ns', 'link-203');">_ns</a></tt><tt class="py-op">(</tt><tt class="py-string">'class'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-437" class="py-name"><a title="com.dtmilano.android.viewclient._nh" class="py-name" href="#" onclick="return doclink('link-437', '_nh', 'link-202');">_nh</a></tt><tt class="py-op">(</tt><tt class="py-string">'oid'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1661"></a><tt class="py-lineno">1661</tt>  <tt class="py-line"> </tt>
+<a name="L1662"></a><tt class="py-lineno">1662</tt>  <tt class="py-line">        <tt class="py-name">attrs</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1663"></a><tt class="py-lineno">1663</tt>  <tt class="py-line">        <tt class="py-name">viewId</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1664"></a><tt class="py-lineno">1664</tt>  <tt class="py-line">        <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">idRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">strArgs</tt><tt class="py-op">)</tt> </tt>
+<a name="L1665"></a><tt class="py-lineno">1665</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L1666"></a><tt class="py-lineno">1666</tt>  <tt class="py-line">            <tt class="py-name">viewId</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'viewId'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1667"></a><tt class="py-lineno">1667</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-438" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-438', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1668"></a><tt class="py-lineno">1668</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"found view with id=%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">viewId</tt> </tt>
+<a name="L1669"></a><tt class="py-lineno">1669</tt>  <tt class="py-line"> </tt>
+<a name="L1670"></a><tt class="py-lineno">1670</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">attr</tt> <tt class="py-keyword">in</tt> <tt class="py-name">strArgs</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1671"></a><tt class="py-lineno">1671</tt>  <tt class="py-line">            <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">attrRE</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">)</tt> </tt>
+<a name="L1672"></a><tt class="py-lineno">1672</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L1673"></a><tt class="py-lineno">1673</tt>  <tt class="py-line">                <tt class="py-name">__attr</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'attr'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1674"></a><tt class="py-lineno">1674</tt>  <tt class="py-line">                <tt class="py-name">__parens</tt> <tt class="py-op">=</tt> <tt class="py-string">'()'</tt> <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'parens'</tt><tt class="py-op">)</tt> <tt class="py-keyword">else</tt> <tt class="py-string">''</tt> </tt>
+<a name="L1675"></a><tt class="py-lineno">1675</tt>  <tt class="py-line">                <tt class="py-name">__len</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'len'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1676"></a><tt class="py-lineno">1676</tt>  <tt class="py-line">                <tt class="py-name">__val</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'val'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1677"></a><tt class="py-lineno">1677</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-439" class="py-name"><a title="com.dtmilano.android.viewclient.WARNINGS" class="py-name" href="#" onclick="return doclink('link-439', 'WARNINGS', 'link-26');">WARNINGS</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">__len</tt> <tt class="py-op">!=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">__val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1678"></a><tt class="py-lineno">1678</tt>  <tt class="py-line">                    <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Invalid len: expected: %d   found: %d   s=%s   e=%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">__len</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">__val</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">__val</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-number">50</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">__val</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">50</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1679"></a><tt class="py-lineno">1679</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">__attr</tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt><tt class="py-op">:</tt> </tt>
+<a name="L1680"></a><tt class="py-lineno">1680</tt>  <tt class="py-line">                    <tt class="py-comment"># restore spaces that have been replaced</tt> </tt>
+<a name="L1681"></a><tt class="py-lineno">1681</tt>  <tt class="py-line">                    <tt class="py-name">__val</tt> <tt class="py-op">=</tt> <tt class="py-name">__val</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt id="link-440" class="py-name"><a title="com.dtmilano.android.viewclient.WS" class="py-name" href="#" onclick="return doclink('link-440', 'WS', 'link-41');">WS</a></tt><tt class="py-op">,</tt> <tt class="py-string">' '</tt><tt class="py-op">)</tt> </tt>
+<a name="L1682"></a><tt class="py-lineno">1682</tt>  <tt class="py-line">                <tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-name">__attr</tt> <tt class="py-op">+</tt> <tt class="py-name">__parens</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">__val</tt> </tt>
+<a name="L1683"></a><tt class="py-lineno">1683</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1684"></a><tt class="py-lineno">1684</tt>  <tt class="py-line">                <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">hashRE</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">)</tt> </tt>
+<a name="L1685"></a><tt class="py-lineno">1685</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L1686"></a><tt class="py-lineno">1686</tt>  <tt class="py-line">                    <tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-string">'class'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'class'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1687"></a><tt class="py-lineno">1687</tt>  <tt class="py-line">                    <tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-string">'oid'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'oid'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1688"></a><tt class="py-lineno">1688</tt>  <tt class="py-line">                <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1689"></a><tt class="py-lineno">1689</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt id="link-441" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-441', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1690"></a><tt class="py-lineno">1690</tt>  <tt class="py-line">                        <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-string">"doesn't match"</tt> </tt>
+<a name="L1691"></a><tt class="py-lineno">1691</tt>  <tt class="py-line"> </tt>
+<a name="L1692"></a><tt class="py-lineno">1692</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> <tt class="py-comment"># was assignViewById</tt> </tt>
+<a name="L1693"></a><tt class="py-lineno">1693</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">viewId</tt><tt class="py-op">:</tt> </tt>
+<a name="L1694"></a><tt class="py-lineno">1694</tt>  <tt class="py-line">                <tt class="py-comment"># If the view has NO_ID we are assigning a default id here (id/no_id) which is</tt> </tt>
+<a name="L1695"></a><tt class="py-lineno">1695</tt>  <tt class="py-line">                <tt class="py-comment"># immediately incremented if another view with no id was found before to generate</tt> </tt>
+<a name="L1696"></a><tt class="py-lineno">1696</tt>  <tt class="py-line">                <tt class="py-comment"># a unique id</tt> </tt>
+<a name="L1697"></a><tt class="py-lineno">1697</tt>  <tt class="py-line">                <tt class="py-name">viewId</tt> <tt class="py-op">=</tt> <tt class="py-string">"id/no_id/1"</tt> </tt>
+<a name="L1698"></a><tt class="py-lineno">1698</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">viewId</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt><tt class="py-op">:</tt> </tt>
+<a name="L1699"></a><tt class="py-lineno">1699</tt>  <tt class="py-line">                <tt class="py-comment"># sometimes the view ids are not unique, so let's generate a unique id here</tt> </tt>
+<a name="L1700"></a><tt class="py-lineno">1700</tt>  <tt class="py-line">                <tt class="py-name">i</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L1701"></a><tt class="py-lineno">1701</tt>  <tt class="py-line">                <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
+<a name="L1702"></a><tt class="py-lineno">1702</tt>  <tt class="py-line">                    <tt class="py-name">newId</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt><tt class="py-op">(</tt><tt class="py-string">'/\d+$'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-name">viewId</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">'/%d'</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> </tt>
+<a name="L1703"></a><tt class="py-lineno">1703</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">newId</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt><tt class="py-op">:</tt> </tt>
+<a name="L1704"></a><tt class="py-lineno">1704</tt>  <tt class="py-line">                        <tt class="py-keyword">break</tt> </tt>
+<a name="L1705"></a><tt class="py-lineno">1705</tt>  <tt class="py-line">                    <tt class="py-name">i</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L1706"></a><tt class="py-lineno">1706</tt>  <tt class="py-line">                <tt class="py-name">viewId</tt> <tt class="py-op">=</tt> <tt class="py-name">newId</tt> </tt>
+<a name="L1707"></a><tt class="py-lineno">1707</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-442" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-442', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1708"></a><tt class="py-lineno">1708</tt>  <tt class="py-line">                    <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"adding viewById %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">viewId</tt> </tt>
+<a name="L1709"></a><tt class="py-lineno">1709</tt>  <tt class="py-line">            <tt class="py-comment"># We are assigning a new attribute to keep the original id preserved, which could have</tt> </tt>
+<a name="L1710"></a><tt class="py-lineno">1710</tt>  <tt class="py-line">            <tt class="py-comment"># been NO_ID repeated multiple times</tt> </tt>
+<a name="L1711"></a><tt class="py-lineno">1711</tt>  <tt class="py-line">            <tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-string">'uniqueId'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">viewId</tt> </tt>
+<a name="L1712"></a><tt class="py-lineno">1712</tt>  <tt class="py-line"> </tt>
+<a name="L1713"></a><tt class="py-lineno">1713</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">attrs</tt> </tt>
+</div><a name="L1714"></a><tt class="py-lineno">1714</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.__parseTree"></a><div id="ViewClient.__parseTree-def"><a name="L1715"></a><tt class="py-lineno">1715</tt> <a class="py-toggle" href="#" id="ViewClient.__parseTree-toggle" onclick="return toggle('ViewClient.__parseTree');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__parseTree">__parseTree</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">receivedLines</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__parseTree-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__parseTree-expanded"><a name="L1716"></a><tt class="py-lineno">1716</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1717"></a><tt class="py-lineno">1717</tt>  <tt class="py-line"><tt class="py-docstring">        Parses the View tree contained in L{receivedLines}. The tree is created and the root node assigned to L{self.root}.</tt> </tt>
+<a name="L1718"></a><tt class="py-lineno">1718</tt>  <tt class="py-line"><tt class="py-docstring">        This method also assigns L{self.viewsById} values using L{View.getUniqueId} as the key.</tt> </tt>
+<a name="L1719"></a><tt class="py-lineno">1719</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1720"></a><tt class="py-lineno">1720</tt>  <tt class="py-line"><tt class="py-docstring">        @type receivedLines: str</tt> </tt>
+<a name="L1721"></a><tt class="py-lineno">1721</tt>  <tt class="py-line"><tt class="py-docstring">        @param receivedLines: the string received from B{View Server}</tt> </tt>
+<a name="L1722"></a><tt class="py-lineno">1722</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1723"></a><tt class="py-lineno">1723</tt>  <tt class="py-line"> </tt>
+<a name="L1724"></a><tt class="py-lineno">1724</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1725"></a><tt class="py-lineno">1725</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1726"></a><tt class="py-lineno">1726</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1727"></a><tt class="py-lineno">1727</tt>  <tt class="py-line">        <tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1728"></a><tt class="py-lineno">1728</tt>  <tt class="py-line">        <tt class="py-name">parents</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1729"></a><tt class="py-lineno">1729</tt>  <tt class="py-line">        <tt class="py-name">treeLevel</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L1730"></a><tt class="py-lineno">1730</tt>  <tt class="py-line">        <tt class="py-name">newLevel</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L1731"></a><tt class="py-lineno">1731</tt>  <tt class="py-line">        <tt class="py-name">lastView</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1732"></a><tt class="py-lineno">1732</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt class="py-name">receivedLines</tt><tt class="py-op">:</tt> </tt>
+<a name="L1733"></a><tt class="py-lineno">1733</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">v</tt> <tt class="py-op">==</tt> <tt class="py-string">''</tt> <tt class="py-keyword">or</tt> <tt class="py-name">v</tt> <tt class="py-op">==</tt> <tt class="py-string">'DONE'</tt> <tt class="py-keyword">or</tt> <tt class="py-name">v</tt> <tt class="py-op">==</tt> <tt class="py-string">'DONE.'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1734"></a><tt class="py-lineno">1734</tt>  <tt class="py-line">                <tt class="py-keyword">break</tt> </tt>
+<a name="L1735"></a><tt class="py-lineno">1735</tt>  <tt class="py-line">            <tt class="py-name">attrs</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-443" class="py-name" targets="Method com.dtmilano.android.viewclient.ViewClient.__splitAttrs()=com.dtmilano.android.viewclient.ViewClient-class.html#__splitAttrs"><a title="com.dtmilano.android.viewclient.ViewClient.__splitAttrs" class="py-name" href="#" onclick="return doclink('link-443', '__splitAttrs', 'link-443');">__splitAttrs</a></tt><tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">)</tt> </tt>
+<a name="L1736"></a><tt class="py-lineno">1736</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">:</tt> </tt>
+<a name="L1737"></a><tt class="py-lineno">1737</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">v</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">' '</tt><tt class="py-op">:</tt> </tt>
+<a name="L1738"></a><tt class="py-lineno">1738</tt>  <tt class="py-line">                    <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">"Unexpected root element starting with ' '."</tt><tt class="py-op">)</tt> </tt>
+<a name="L1739"></a><tt class="py-lineno">1739</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt id="link-444" class="py-name"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-444', 'View', 'link-61');">View</a></tt><tt class="py-op">.</tt><tt id="link-445" class="py-name"><a title="com.dtmilano.android.adb.adbclient.Device.factory
+com.dtmilano.android.viewclient.View.factory" class="py-name" href="#" onclick="return doclink('link-445', 'factory', 'link-304');">factory</a></tt><tt class="py-op">(</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-446" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-446', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">forceViewServerUse</tt><tt class="py-op">)</tt> </tt>
+<a name="L1740"></a><tt class="py-lineno">1740</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-447" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-447', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">raw</tt> <tt class="py-op">=</tt> <tt class="py-name">v</tt> </tt>
+<a name="L1741"></a><tt class="py-lineno">1741</tt>  <tt class="py-line">                <tt class="py-name">treeLevel</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L1742"></a><tt class="py-lineno">1742</tt>  <tt class="py-line">                <tt class="py-name">newLevel</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L1743"></a><tt class="py-lineno">1743</tt>  <tt class="py-line">                <tt class="py-name">lastView</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> </tt>
+<a name="L1744"></a><tt class="py-lineno">1744</tt>  <tt class="py-line">                <tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> </tt>
+<a name="L1745"></a><tt class="py-lineno">1745</tt>  <tt class="py-line">                <tt class="py-name">parents</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">parent</tt><tt class="py-op">)</tt> </tt>
+<a name="L1746"></a><tt class="py-lineno">1746</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1747"></a><tt class="py-lineno">1747</tt>  <tt class="py-line">                <tt class="py-name">newLevel</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">.</tt><tt class="py-name">lstrip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1748"></a><tt class="py-lineno">1748</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">newLevel</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L1749"></a><tt class="py-lineno">1749</tt>  <tt class="py-line">                    <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">"newLevel==0 treeLevel=%d but tree can have only one root, v=%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">treeLevel</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1750"></a><tt class="py-lineno">1750</tt>  <tt class="py-line">                <tt class="py-name">child</tt> <tt class="py-op">=</tt> <tt id="link-448" class="py-name"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-448', 'View', 'link-61');">View</a></tt><tt class="py-op">.</tt><tt id="link-449" class="py-name"><a title="com.dtmilano.android.adb.adbclient.Device.factory
+com.dtmilano.android.viewclient.View.factory" class="py-name" href="#" onclick="return doclink('link-449', 'factory', 'link-304');">factory</a></tt><tt class="py-op">(</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-450" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-450', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">forceViewServerUse</tt><tt class="py-op">)</tt> </tt>
+<a name="L1751"></a><tt class="py-lineno">1751</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-451" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-451', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> <tt class="py-name">child</tt><tt class="py-op">.</tt><tt class="py-name">raw</tt> <tt class="py-op">=</tt> <tt class="py-name">v</tt> </tt>
+<a name="L1752"></a><tt class="py-lineno">1752</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">newLevel</tt> <tt class="py-op">==</tt> <tt class="py-name">treeLevel</tt><tt class="py-op">:</tt> </tt>
+<a name="L1753"></a><tt class="py-lineno">1753</tt>  <tt class="py-line">                    <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-452" class="py-name"><a title="com.dtmilano.android.viewclient.View.add" class="py-name" href="#" onclick="return doclink('link-452', 'add', 'link-305');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">)</tt> </tt>
+<a name="L1754"></a><tt class="py-lineno">1754</tt>  <tt class="py-line">                    <tt class="py-name">lastView</tt> <tt class="py-op">=</tt> <tt class="py-name">child</tt> </tt>
+<a name="L1755"></a><tt class="py-lineno">1755</tt>  <tt class="py-line">                <tt class="py-keyword">elif</tt> <tt class="py-name">newLevel</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">treeLevel</tt><tt class="py-op">:</tt> </tt>
+<a name="L1756"></a><tt class="py-lineno">1756</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">newLevel</tt> <tt class="py-op">-</tt> <tt class="py-name">treeLevel</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L1757"></a><tt class="py-lineno">1757</tt>  <tt class="py-line">                        <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">"newLevel jumps %d levels, v=%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">newLevel</tt><tt class="py-op">-</tt><tt class="py-name">treeLevel</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1758"></a><tt class="py-lineno">1758</tt>  <tt class="py-line">                    <tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">lastView</tt> </tt>
+<a name="L1759"></a><tt class="py-lineno">1759</tt>  <tt class="py-line">                    <tt class="py-name">parents</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">parent</tt><tt class="py-op">)</tt> </tt>
+<a name="L1760"></a><tt class="py-lineno">1760</tt>  <tt class="py-line">                    <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-453" class="py-name"><a title="com.dtmilano.android.viewclient.View.add" class="py-name" href="#" onclick="return doclink('link-453', 'add', 'link-305');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">)</tt> </tt>
+<a name="L1761"></a><tt class="py-lineno">1761</tt>  <tt class="py-line">                    <tt class="py-name">lastView</tt> <tt class="py-op">=</tt> <tt class="py-name">child</tt> </tt>
+<a name="L1762"></a><tt class="py-lineno">1762</tt>  <tt class="py-line">                    <tt class="py-name">treeLevel</tt> <tt class="py-op">=</tt> <tt class="py-name">newLevel</tt> </tt>
+<a name="L1763"></a><tt class="py-lineno">1763</tt>  <tt class="py-line">                <tt class="py-keyword">else</tt><tt class="py-op">:</tt> <tt class="py-comment"># newLevel &lt; treeLevel</tt> </tt>
+<a name="L1764"></a><tt class="py-lineno">1764</tt>  <tt class="py-line">                    <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">treeLevel</tt> <tt class="py-op">-</tt> <tt class="py-name">newLevel</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1765"></a><tt class="py-lineno">1765</tt>  <tt class="py-line">                        <tt class="py-name">parents</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1766"></a><tt class="py-lineno">1766</tt>  <tt class="py-line">                    <tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">parents</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1767"></a><tt class="py-lineno">1767</tt>  <tt class="py-line">                    <tt class="py-name">parents</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">parent</tt><tt class="py-op">)</tt> </tt>
+<a name="L1768"></a><tt class="py-lineno">1768</tt>  <tt class="py-line">                    <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-454" class="py-name"><a title="com.dtmilano.android.viewclient.View.add" class="py-name" href="#" onclick="return doclink('link-454', 'add', 'link-305');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">)</tt> </tt>
+<a name="L1769"></a><tt class="py-lineno">1769</tt>  <tt class="py-line">                    <tt class="py-name">treeLevel</tt> <tt class="py-op">=</tt> <tt class="py-name">newLevel</tt> </tt>
+<a name="L1770"></a><tt class="py-lineno">1770</tt>  <tt class="py-line">                    <tt class="py-name">lastView</tt> <tt class="py-op">=</tt> <tt class="py-name">child</tt> </tt>
+<a name="L1771"></a><tt class="py-lineno">1771</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">lastView</tt><tt class="py-op">)</tt> </tt>
+<a name="L1772"></a><tt class="py-lineno">1772</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt><tt class="py-op">[</tt><tt class="py-name">lastView</tt><tt class="py-op">.</tt><tt id="link-455" class="py-name"><a title="com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-455', 'getUniqueId', 'link-135');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">lastView</tt> </tt>
+</div><a name="L1773"></a><tt class="py-lineno">1773</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.__parseTreeFromUiAutomatorDump"></a><div id="ViewClient.__parseTreeFromUiAutomatorDump-def"><a name="L1774"></a><tt class="py-lineno">1774</tt> <a class="py-toggle" href="#" id="ViewClient.__parseTreeFromUiAutomatorDump-toggle" onclick="return toggle('ViewClient.__parseTreeFromUiAutomatorDump');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__parseTreeFromUiAutomatorDump">__parseTreeFromUiAutomatorDump</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">receivedXml</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__parseTreeFromUiAutomatorDump-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__parseTreeFromUiAutomatorDump-expanded"><a name="L1775"></a><tt class="py-lineno">1775</tt>  <tt class="py-line">        <tt class="py-name">parser</tt> <tt class="py-op">=</tt> <tt id="link-456" class="py-name" targets="Class com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient=com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html"><a title="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient" class="py-name" href="#" onclick="return doclink('link-456', 'UiAutomator2AndroidViewClient', 'link-456');">UiAutomator2AndroidViewClient</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-457" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-457', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L1776"></a><tt class="py-lineno">1776</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt id="link-458" class="py-name"><a title="com.dtmilano.android.viewclient.Excerpt2Code.Parse
+com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.Parse" class="py-name" href="#" onclick="return doclink('link-458', 'Parse', 'link-309');">Parse</a></tt><tt class="py-op">(</tt><tt class="py-name">receivedXml</tt><tt class="py-op">)</tt> </tt>
+<a name="L1777"></a><tt class="py-lineno">1777</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt> <tt class="py-op">=</tt> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">views</tt> </tt>
+<a name="L1778"></a><tt class="py-lineno">1778</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1779"></a><tt class="py-lineno">1779</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt><tt class="py-op">:</tt> </tt>
+<a name="L1780"></a><tt class="py-lineno">1780</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt><tt class="py-op">[</tt><tt class="py-name">v</tt><tt class="py-op">.</tt><tt id="link-459" class="py-name"><a title="com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-459', 'getUniqueId', 'link-135');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">v</tt> </tt>
+</div><a name="L1781"></a><tt class="py-lineno">1781</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.getRoot"></a><div id="ViewClient.getRoot-def"><a name="L1782"></a><tt class="py-lineno">1782</tt> <a class="py-toggle" href="#" id="ViewClient.getRoot-toggle" onclick="return toggle('ViewClient.getRoot');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#getRoot">getRoot</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.getRoot-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.getRoot-expanded"><a name="L1783"></a><tt class="py-lineno">1783</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1784"></a><tt class="py-lineno">1784</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the root node of the C{View} tree</tt> </tt>
+<a name="L1785"></a><tt class="py-lineno">1785</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1786"></a><tt class="py-lineno">1786</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the root node of the C{View} tree</tt> </tt>
+<a name="L1787"></a><tt class="py-lineno">1787</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1788"></a><tt class="py-lineno">1788</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> </tt>
+</div><a name="L1789"></a><tt class="py-lineno">1789</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.traverse"></a><div id="ViewClient.traverse-def"><a name="L1790"></a><tt class="py-lineno">1790</tt> <a class="py-toggle" href="#" id="ViewClient.traverse-toggle" onclick="return toggle('ViewClient.traverse');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#traverse">traverse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">,</tt> <tt class="py-param">indent</tt><tt class="py-op">=</tt><tt class="py-string">""</tt><tt class="py-op">,</tt> <tt class="py-param">transform</tt><tt class="py-op">=</tt><tt id="link-460" class="py-name"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-460', 'View', 'link-61');">View</a></tt><tt class="py-op">.</tt><tt id="link-461" class="py-name"><a title="com.dtmilano.android.adb.adbclient.Device.__str__
+com.dtmilano.android.viewclient.View.__str__
+com.dtmilano.android.viewclient.Window.__str__" class="py-name" href="#" onclick="return doclink('link-461', '__str__', 'link-290');">__str__</a></tt><tt class="py-op">,</tt> <tt class="py-param">stream</tt><tt class="py-op">=</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.traverse-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.traverse-expanded"><a name="L1791"></a><tt class="py-lineno">1791</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1792"></a><tt class="py-lineno">1792</tt>  <tt class="py-line"><tt class="py-docstring">        Traverses the C{View} tree and prints its nodes.</tt> </tt>
+<a name="L1793"></a><tt class="py-lineno">1793</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1794"></a><tt class="py-lineno">1794</tt>  <tt class="py-line"><tt class="py-docstring">        The nodes are printed converting them to string but other transformations can be specified</tt> </tt>
+<a name="L1795"></a><tt class="py-lineno">1795</tt>  <tt class="py-line"><tt class="py-docstring">        by providing a method name as the C{transform} parameter.</tt> </tt>
+<a name="L1796"></a><tt class="py-lineno">1796</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1797"></a><tt class="py-lineno">1797</tt>  <tt class="py-line"><tt class="py-docstring">        @type root: L{View}</tt> </tt>
+<a name="L1798"></a><tt class="py-lineno">1798</tt>  <tt class="py-line"><tt class="py-docstring">        @param root: the root node from where the traverse starts</tt> </tt>
+<a name="L1799"></a><tt class="py-lineno">1799</tt>  <tt class="py-line"><tt class="py-docstring">        @type indent: str</tt> </tt>
+<a name="L1800"></a><tt class="py-lineno">1800</tt>  <tt class="py-line"><tt class="py-docstring">        @param indent: the indentation string to use to print the nodes</tt> </tt>
+<a name="L1801"></a><tt class="py-lineno">1801</tt>  <tt class="py-line"><tt class="py-docstring">        @type transform: method</tt> </tt>
+<a name="L1802"></a><tt class="py-lineno">1802</tt>  <tt class="py-line"><tt class="py-docstring">        @param transform: a method to use to transform the node before is printed</tt> </tt>
+<a name="L1803"></a><tt class="py-lineno">1803</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1804"></a><tt class="py-lineno">1804</tt>  <tt class="py-line"> </tt>
+<a name="L1805"></a><tt class="py-lineno">1805</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-462" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.type
+com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-462', 'type', 'link-55');">type</a></tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">types</tt><tt class="py-op">.</tt><tt class="py-name">StringType</tt> <tt class="py-keyword">and</tt> <tt class="py-name">root</tt> <tt class="py-op">==</tt> <tt class="py-string">"ROOT"</tt><tt class="py-op">:</tt> </tt>
+<a name="L1806"></a><tt class="py-lineno">1806</tt>  <tt class="py-line">            <tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> </tt>
+<a name="L1807"></a><tt class="py-lineno">1807</tt>  <tt class="py-line"> </tt>
+<a name="L1808"></a><tt class="py-lineno">1808</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-463" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-463', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-464" class="py-name" targets="Static Method com.dtmilano.android.viewclient.ViewClient.__traverse()=com.dtmilano.android.viewclient.ViewClient-class.html#__traverse"><a title="com.dtmilano.android.viewclient.ViewClient.__traverse" class="py-name" href="#" onclick="return doclink('link-464', '__traverse', 'link-464');">__traverse</a></tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">,</tt> <tt class="py-name">indent</tt><tt class="py-op">,</tt> <tt class="py-name">transform</tt><tt class="py-op">,</tt> <tt class="py-name">stream</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1809"></a><tt class="py-lineno">1809</tt>  <tt class="py-line"><tt class="py-comment">#         if not root:</tt> </tt>
+<a name="L1810"></a><tt class="py-lineno">1810</tt>  <tt class="py-line"><tt class="py-comment">#             return</tt> </tt>
+<a name="L1811"></a><tt class="py-lineno">1811</tt>  <tt class="py-line"><tt class="py-comment">#</tt> </tt>
+<a name="L1812"></a><tt class="py-lineno">1812</tt>  <tt class="py-line"><tt class="py-comment">#         s = transform(root)</tt> </tt>
+<a name="L1813"></a><tt class="py-lineno">1813</tt>  <tt class="py-line"><tt class="py-comment">#         if s:</tt> </tt>
+<a name="L1814"></a><tt class="py-lineno">1814</tt>  <tt class="py-line"><tt class="py-comment">#             print &gt;&gt;stream, "%s%s" % (indent, s)</tt> </tt>
+<a name="L1815"></a><tt class="py-lineno">1815</tt>  <tt class="py-line"><tt class="py-comment">#</tt> </tt>
+<a name="L1816"></a><tt class="py-lineno">1816</tt>  <tt class="py-line"><tt class="py-comment">#         for ch in root.children:</tt> </tt>
+<a name="L1817"></a><tt class="py-lineno">1817</tt>  <tt class="py-line"><tt class="py-comment">#             self.traverse(ch, indent=indent+"   ", transform=transform, stream=stream)</tt> </tt>
+<a name="L1818"></a><tt class="py-lineno">1818</tt>  <tt class="py-line"> </tt>
+<a name="L1819"></a><tt class="py-lineno">1819</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.__traverse"></a><div id="ViewClient.__traverse-def"><a name="L1820"></a><tt class="py-lineno">1820</tt> <a class="py-toggle" href="#" id="ViewClient.__traverse-toggle" onclick="return toggle('ViewClient.__traverse');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__traverse">__traverse</a><tt class="py-op">(</tt><tt class="py-param">root</tt><tt class="py-op">,</tt> <tt class="py-param">indent</tt><tt class="py-op">=</tt><tt class="py-string">""</tt><tt class="py-op">,</tt> <tt class="py-param">transform</tt><tt class="py-op">=</tt><tt id="link-465" class="py-name"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-465', 'View', 'link-61');">View</a></tt><tt class="py-op">.</tt><tt id="link-466" class="py-name"><a title="com.dtmilano.android.adb.adbclient.Device.__str__
+com.dtmilano.android.viewclient.View.__str__
+com.dtmilano.android.viewclient.Window.__str__" class="py-name" href="#" onclick="return doclink('link-466', '__str__', 'link-290');">__str__</a></tt><tt class="py-op">,</tt> <tt class="py-param">stream</tt><tt class="py-op">=</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__traverse-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__traverse-expanded"><a name="L1821"></a><tt class="py-lineno">1821</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">root</tt><tt class="py-op">:</tt> </tt>
+<a name="L1822"></a><tt class="py-lineno">1822</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> </tt>
+<a name="L1823"></a><tt class="py-lineno">1823</tt>  <tt class="py-line"> </tt>
+<a name="L1824"></a><tt class="py-lineno">1824</tt>  <tt class="py-line">        <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">transform</tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L1825"></a><tt class="py-lineno">1825</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">s</tt><tt class="py-op">:</tt> </tt>
+<a name="L1826"></a><tt class="py-lineno">1826</tt>  <tt class="py-line">            <tt class="py-name">ius</tt> <tt class="py-op">=</tt> <tt class="py-string">"%s%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">indent</tt><tt class="py-op">,</tt> <tt class="py-name">s</tt> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt> <tt class="py-keyword">else</tt> <tt class="py-name">unicode</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">,</tt> <tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-string">'replace'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1827"></a><tt class="py-lineno">1827</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">stream</tt><tt class="py-op">,</tt> <tt class="py-name">ius</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-string">'replace'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1828"></a><tt class="py-lineno">1828</tt>  <tt class="py-line"> </tt>
+<a name="L1829"></a><tt class="py-lineno">1829</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">ch</tt> <tt class="py-keyword">in</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">children</tt><tt class="py-op">:</tt> </tt>
+<a name="L1830"></a><tt class="py-lineno">1830</tt>  <tt class="py-line">            <tt id="link-467" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-467', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-468" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.__traverse" class="py-name" href="#" onclick="return doclink('link-468', '__traverse', 'link-464');">__traverse</a></tt><tt class="py-op">(</tt><tt class="py-name">ch</tt><tt class="py-op">,</tt> <tt class="py-name">indent</tt><tt class="py-op">=</tt><tt class="py-name">indent</tt><tt class="py-op">+</tt><tt class="py-string">"   "</tt><tt class="py-op">,</tt> <tt class="py-name">transform</tt><tt class="py-op">=</tt><tt class="py-name">transform</tt><tt class="py-op">,</tt> <tt class="py-name">stream</tt><tt class="py-op">=</tt><tt class="py-name">stream</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1831"></a><tt class="py-lineno">1831</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.dump"></a><div id="ViewClient.dump-def"><a name="L1832"></a><tt class="py-lineno">1832</tt> <a class="py-toggle" href="#" id="ViewClient.dump-toggle" onclick="return toggle('ViewClient.dump');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#dump">dump</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">window</tt><tt class="py-op">=</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-param">sleep</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.dump-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.dump-expanded"><a name="L1833"></a><tt class="py-lineno">1833</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1834"></a><tt class="py-lineno">1834</tt>  <tt class="py-line"><tt class="py-docstring">        Dumps the window content.</tt> </tt>
+<a name="L1835"></a><tt class="py-lineno">1835</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1836"></a><tt class="py-lineno">1836</tt>  <tt class="py-line"><tt class="py-docstring">        Sleep is useful to wait some time before obtaining the new content when something in the</tt> </tt>
+<a name="L1837"></a><tt class="py-lineno">1837</tt>  <tt class="py-line"><tt class="py-docstring">        window has changed.</tt> </tt>
+<a name="L1838"></a><tt class="py-lineno">1838</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1839"></a><tt class="py-lineno">1839</tt>  <tt class="py-line"><tt class="py-docstring">        @type window: int or str</tt> </tt>
+<a name="L1840"></a><tt class="py-lineno">1840</tt>  <tt class="py-line"><tt class="py-docstring">        @param window: the window id or name of the window to dump.</tt> </tt>
+<a name="L1841"></a><tt class="py-lineno">1841</tt>  <tt class="py-line"><tt class="py-docstring">                    The B{name} is the package name or the window name (i.e. StatusBar) for</tt> </tt>
+<a name="L1842"></a><tt class="py-lineno">1842</tt>  <tt class="py-line"><tt class="py-docstring">                    system windows.</tt> </tt>
+<a name="L1843"></a><tt class="py-lineno">1843</tt>  <tt class="py-line"><tt class="py-docstring">                    The window id can be provided as C{int} or C{str}. The C{str} should represent</tt> </tt>
+<a name="L1844"></a><tt class="py-lineno">1844</tt>  <tt class="py-line"><tt class="py-docstring">                    and C{int} in either base 10 or 16.</tt> </tt>
+<a name="L1845"></a><tt class="py-lineno">1845</tt>  <tt class="py-line"><tt class="py-docstring">                    Use -1 to dump all windows.</tt> </tt>
+<a name="L1846"></a><tt class="py-lineno">1846</tt>  <tt class="py-line"><tt class="py-docstring">                    This parameter only is used when the backend is B{ViewServer} and it's</tt> </tt>
+<a name="L1847"></a><tt class="py-lineno">1847</tt>  <tt class="py-line"><tt class="py-docstring">                    ignored for B{UiAutomator}.</tt> </tt>
+<a name="L1848"></a><tt class="py-lineno">1848</tt>  <tt class="py-line"><tt class="py-docstring">        @type sleep: int</tt> </tt>
+<a name="L1849"></a><tt class="py-lineno">1849</tt>  <tt class="py-line"><tt class="py-docstring">        @param sleep: sleep in seconds before proceeding to dump the content</tt> </tt>
+<a name="L1850"></a><tt class="py-lineno">1850</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1851"></a><tt class="py-lineno">1851</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the list of Views as C{str} received from the server after being split into lines</tt> </tt>
+<a name="L1852"></a><tt class="py-lineno">1852</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1853"></a><tt class="py-lineno">1853</tt>  <tt class="py-line"> </tt>
+<a name="L1854"></a><tt class="py-lineno">1854</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-469" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-469', 'sleep', 'link-269');">sleep</a></tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L1855"></a><tt class="py-lineno">1855</tt>  <tt class="py-line">            <tt class="py-name">time</tt><tt class="py-op">.</tt><tt id="link-470" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-470', 'sleep', 'link-269');">sleep</a></tt><tt class="py-op">(</tt><tt id="link-471" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-471', 'sleep', 'link-269');">sleep</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1856"></a><tt class="py-lineno">1856</tt>  <tt class="py-line"> </tt>
+<a name="L1857"></a><tt class="py-lineno">1857</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L1858"></a><tt class="py-lineno">1858</tt>  <tt class="py-line">            <tt class="py-comment"># NOTICE:</tt> </tt>
+<a name="L1859"></a><tt class="py-lineno">1859</tt>  <tt class="py-line">            <tt class="py-comment"># Using /dev/tty this works even on devices with no sdcard</tt> </tt>
+<a name="L1860"></a><tt class="py-lineno">1860</tt>  <tt class="py-line">            <tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">unicode</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-472" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-472', 'shell', 'link-73');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'uiautomator dump /dev/tty &gt;/dev/null'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">encoding</tt><tt class="py-op">=</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-name">errors</tt><tt class="py-op">=</tt><tt class="py-string">'replace'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1861"></a><tt class="py-lineno">1861</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">received</tt><tt class="py-op">:</tt> </tt>
+<a name="L1862"></a><tt class="py-lineno">1862</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">'ERROR: Empty UiAutomator dump was received'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1863"></a><tt class="py-lineno">1863</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-473" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-473', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1864"></a><tt class="py-lineno">1864</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">received</tt> </tt>
+<a name="L1865"></a><tt class="py-lineno">1865</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-474" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_RECEIVED" class="py-name" href="#" onclick="return doclink('link-474', 'DEBUG_RECEIVED', 'link-6');">DEBUG_RECEIVED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1866"></a><tt class="py-lineno">1866</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"received %d chars"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1867"></a><tt class="py-lineno">1867</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
+<a name="L1868"></a><tt class="py-lineno">1868</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1869"></a><tt class="py-lineno">1869</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
+<a name="L1870"></a><tt class="py-lineno">1870</tt>  <tt class="py-line">            <tt class="py-name">onlyKilledRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'[\n\S]*Killed[\n\r\S]*'</tt><tt class="py-op">,</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">MULTILINE</tt><tt class="py-op">)</tt> </tt>
+<a name="L1871"></a><tt class="py-lineno">1871</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">onlyKilledRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1872"></a><tt class="py-lineno">1872</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">'''ERROR: UiAutomator output contains no valid information. UiAutomator was killed, no reason given.'''</tt><tt class="py-op">)</tt> </tt>
+<a name="L1873"></a><tt class="py-lineno">1873</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ignoreUiAutomatorKilled</tt><tt class="py-op">:</tt> </tt>
+<a name="L1874"></a><tt class="py-lineno">1874</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-475" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_RECEIVED" class="py-name" href="#" onclick="return doclink('link-475', 'DEBUG_RECEIVED', 'link-6');">DEBUG_RECEIVED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1875"></a><tt class="py-lineno">1875</tt>  <tt class="py-line">                    <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ignoring UiAutomator Killed"</tt> </tt>
+<a name="L1876"></a><tt class="py-lineno">1876</tt>  <tt class="py-line">                <tt class="py-name">killedRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'&lt;/hierarchy&gt;[\n\S]*Killed'</tt><tt class="py-op">,</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">MULTILINE</tt><tt class="py-op">)</tt> </tt>
+<a name="L1877"></a><tt class="py-lineno">1877</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">killedRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1878"></a><tt class="py-lineno">1878</tt>  <tt class="py-line">                    <tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt><tt class="py-op">(</tt><tt class="py-name">killedRE</tt><tt class="py-op">,</tt> <tt class="py-string">'&lt;/hierarchy&gt;'</tt><tt class="py-op">,</tt> <tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1879"></a><tt class="py-lineno">1879</tt>  <tt class="py-line">                <tt class="py-keyword">elif</tt> <tt id="link-476" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_RECEIVED" class="py-name" href="#" onclick="return doclink('link-476', 'DEBUG_RECEIVED', 'link-6');">DEBUG_RECEIVED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1880"></a><tt class="py-lineno">1880</tt>  <tt class="py-line">                    <tt class="py-keyword">print</tt> <tt class="py-string">"UiAutomator Killed: NOT FOUND!"</tt> </tt>
+<a name="L1881"></a><tt class="py-lineno">1881</tt>  <tt class="py-line">                <tt class="py-comment"># It seems that API18 uiautomator spits this message to stdout</tt> </tt>
+<a name="L1882"></a><tt class="py-lineno">1882</tt>  <tt class="py-line">                <tt class="py-name">dumpedToDevTtyRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'&lt;/hierarchy&gt;[\n\S]*UI hierchary dumped to: /dev/tty.*'</tt><tt class="py-op">,</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">MULTILINE</tt><tt class="py-op">)</tt> </tt>
+<a name="L1883"></a><tt class="py-lineno">1883</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">dumpedToDevTtyRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1884"></a><tt class="py-lineno">1884</tt>  <tt class="py-line">                    <tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt><tt class="py-op">(</tt><tt class="py-name">dumpedToDevTtyRE</tt><tt class="py-op">,</tt> <tt class="py-string">'&lt;/hierarchy&gt;'</tt><tt class="py-op">,</tt> <tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1885"></a><tt class="py-lineno">1885</tt>  <tt class="py-line">                <tt class="py-comment"># API19 seems to send this warning as part of the XML.</tt> </tt>
+<a name="L1886"></a><tt class="py-lineno">1886</tt>  <tt class="py-line">                <tt class="py-comment"># Let's remove it if present</tt> </tt>
+<a name="L1887"></a><tt class="py-lineno">1887</tt>  <tt class="py-line">                <tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">received</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'WARNING: linker: libdvm.so has text relocations. This is wasting memory and is a security risk. Please fix.\r\n'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
+<a name="L1888"></a><tt class="py-lineno">1888</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-477" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_RECEIVED" class="py-name" href="#" onclick="return doclink('link-477', 'DEBUG_RECEIVED', 'link-6');">DEBUG_RECEIVED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1889"></a><tt class="py-lineno">1889</tt>  <tt class="py-line">                    <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"received="</tt><tt class="py-op">,</tt> <tt class="py-name">received</tt> </tt>
+<a name="L1890"></a><tt class="py-lineno">1890</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-string">'\[: not found'</tt><tt class="py-op">,</tt> <tt class="py-name">received</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1891"></a><tt class="py-lineno">1891</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">'''ERROR: Some emulator images (i.e. android 4.1.2 API 16 generic_x86) does not include the '[' command.</tt> </tt>
+<a name="L1892"></a><tt class="py-lineno">1892</tt>  <tt class="py-line"><tt class="py-string">While UiAutomator back-end might be supported 'uiautomator' command fails.</tt> </tt>
+<a name="L1893"></a><tt class="py-lineno">1893</tt>  <tt class="py-line"><tt class="py-string">You should force ViewServer back-end.'''</tt><tt class="py-op">)</tt> </tt>
+<a name="L1894"></a><tt class="py-lineno">1894</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-478" class="py-name" targets="Method com.dtmilano.android.viewclient.ViewClient.setViewsFromUiAutomatorDump()=com.dtmilano.android.viewclient.ViewClient-class.html#setViewsFromUiAutomatorDump"><a title="com.dtmilano.android.viewclient.ViewClient.setViewsFromUiAutomatorDump" class="py-name" href="#" onclick="return doclink('link-478', 'setViewsFromUiAutomatorDump', 'link-478');">setViewsFromUiAutomatorDump</a></tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1895"></a><tt class="py-lineno">1895</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1896"></a><tt class="py-lineno">1896</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">window</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1897"></a><tt class="py-lineno">1897</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">window</tt> <tt class="py-op">!=</tt> <tt class="py-string">'-1'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1898"></a><tt class="py-lineno">1898</tt>  <tt class="py-line">                    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-479" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.list" class="py-name" href="#" onclick="return doclink('link-479', 'list', 'link-275');">list</a></tt><tt class="py-op">(</tt><tt id="link-480" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-480', 'sleep', 'link-269');">sleep</a></tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L1899"></a><tt class="py-lineno">1899</tt>  <tt class="py-line">                    <tt class="py-name">found</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L1900"></a><tt class="py-lineno">1900</tt>  <tt class="py-line">                    <tt class="py-keyword">for</tt> <tt class="py-name">wId</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">:</tt> </tt>
+<a name="L1901"></a><tt class="py-lineno">1901</tt>  <tt class="py-line">                        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1902"></a><tt class="py-lineno">1902</tt>  <tt class="py-line">                            <tt class="py-keyword">if</tt> <tt class="py-name">window</tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">[</tt><tt class="py-name">wId</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L1903"></a><tt class="py-lineno">1903</tt>  <tt class="py-line">                                <tt class="py-name">window</tt> <tt class="py-op">=</tt> <tt class="py-name">wId</tt> </tt>
+<a name="L1904"></a><tt class="py-lineno">1904</tt>  <tt class="py-line">                                <tt class="py-name">found</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L1905"></a><tt class="py-lineno">1905</tt>  <tt class="py-line">                                <tt class="py-keyword">break</tt> </tt>
+<a name="L1906"></a><tt class="py-lineno">1906</tt>  <tt class="py-line">                        <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L1907"></a><tt class="py-lineno">1907</tt>  <tt class="py-line">                            <tt class="py-keyword">pass</tt> </tt>
+<a name="L1908"></a><tt class="py-lineno">1908</tt>  <tt class="py-line">                        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1909"></a><tt class="py-lineno">1909</tt>  <tt class="py-line">                            <tt class="py-keyword">if</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">window</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">wId</tt><tt class="py-op">:</tt> </tt>
+<a name="L1910"></a><tt class="py-lineno">1910</tt>  <tt class="py-line">                                <tt class="py-name">window</tt> <tt class="py-op">=</tt> <tt class="py-name">wId</tt> </tt>
+<a name="L1911"></a><tt class="py-lineno">1911</tt>  <tt class="py-line">                                <tt class="py-name">found</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L1912"></a><tt class="py-lineno">1912</tt>  <tt class="py-line">                                <tt class="py-keyword">break</tt> </tt>
+<a name="L1913"></a><tt class="py-lineno">1913</tt>  <tt class="py-line">                        <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L1914"></a><tt class="py-lineno">1914</tt>  <tt class="py-line">                            <tt class="py-keyword">pass</tt> </tt>
+<a name="L1915"></a><tt class="py-lineno">1915</tt>  <tt class="py-line">                        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1916"></a><tt class="py-lineno">1916</tt>  <tt class="py-line">                            <tt class="py-keyword">if</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">window</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">wId</tt><tt class="py-op">:</tt> </tt>
+<a name="L1917"></a><tt class="py-lineno">1917</tt>  <tt class="py-line">                                <tt class="py-name">window</tt> <tt class="py-op">=</tt> <tt class="py-name">wId</tt> </tt>
+<a name="L1918"></a><tt class="py-lineno">1918</tt>  <tt class="py-line">                                <tt class="py-name">found</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L1919"></a><tt class="py-lineno">1919</tt>  <tt class="py-line">                                <tt class="py-keyword">break</tt> </tt>
+<a name="L1920"></a><tt class="py-lineno">1920</tt>  <tt class="py-line">                        <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L1921"></a><tt class="py-lineno">1921</tt>  <tt class="py-line">                            <tt class="py-keyword">pass</tt> </tt>
+<a name="L1922"></a><tt class="py-lineno">1922</tt>  <tt class="py-line"> </tt>
+<a name="L1923"></a><tt class="py-lineno">1923</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">found</tt><tt class="py-op">:</tt> </tt>
+<a name="L1924"></a><tt class="py-lineno">1924</tt>  <tt class="py-line">                        <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"ERROR: Cannot find window '%s' in %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">window</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1925"></a><tt class="py-lineno">1925</tt>  <tt class="py-line">                <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1926"></a><tt class="py-lineno">1926</tt>  <tt class="py-line">                    <tt class="py-name">window</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L1927"></a><tt class="py-lineno">1927</tt>  <tt class="py-line"> </tt>
+<a name="L1928"></a><tt class="py-lineno">1928</tt>  <tt class="py-line">            <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">(</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">AF_INET</tt><tt class="py-op">,</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">SOCK_STREAM</tt><tt class="py-op">)</tt> </tt>
+<a name="L1929"></a><tt class="py-lineno">1929</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1930"></a><tt class="py-lineno">1930</tt>  <tt class="py-line">                <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">connect</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt id="link-481" class="py-name"><a title="com.dtmilano.android.viewclient.VIEW_SERVER_HOST" class="py-name" href="#" onclick="return doclink('link-481', 'VIEW_SERVER_HOST', 'link-27');">VIEW_SERVER_HOST</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">localPort</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1931"></a><tt class="py-lineno">1931</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">:</tt> </tt>
+<a name="L1932"></a><tt class="py-lineno">1932</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"ERROR: Connecting to %s:%d: %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-482" class="py-name"><a title="com.dtmilano.android.viewclient.VIEW_SERVER_HOST" class="py-name" href="#" onclick="return doclink('link-482', 'VIEW_SERVER_HOST', 'link-27');">VIEW_SERVER_HOST</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">localPort</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1933"></a><tt class="py-lineno">1933</tt>  <tt class="py-line">            <tt class="py-name">cmd</tt> <tt class="py-op">=</tt> <tt class="py-string">'dump %x\r\n'</tt> <tt class="py-op">%</tt> <tt class="py-name">window</tt> </tt>
+<a name="L1934"></a><tt class="py-lineno">1934</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-483" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-483', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1935"></a><tt class="py-lineno">1935</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"executing: '%s'"</tt> <tt class="py-op">%</tt> <tt class="py-name">cmd</tt> </tt>
+<a name="L1936"></a><tt class="py-lineno">1936</tt>  <tt class="py-line">            <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">send</tt><tt class="py-op">(</tt><tt class="py-name">cmd</tt><tt class="py-op">)</tt> </tt>
+<a name="L1937"></a><tt class="py-lineno">1937</tt>  <tt class="py-line">            <tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
+<a name="L1938"></a><tt class="py-lineno">1938</tt>  <tt class="py-line">            <tt class="py-name">doneRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">"DONE"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1939"></a><tt class="py-lineno">1939</tt>  <tt class="py-line">            <tt id="link-484" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-484', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-485" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.setAlarm
+com.dtmilano.android.viewclient.ViewClient.setAlarm" class="py-name" href="#" onclick="return doclink('link-485', 'setAlarm', 'link-388');">setAlarm</a></tt><tt class="py-op">(</tt><tt class="py-number">120</tt><tt class="py-op">)</tt> </tt>
+<a name="L1940"></a><tt class="py-lineno">1940</tt>  <tt class="py-line">            <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
+<a name="L1941"></a><tt class="py-lineno">1941</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-486" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_RECEIVED" class="py-name" href="#" onclick="return doclink('link-486', 'DEBUG_RECEIVED', 'link-6');">DEBUG_RECEIVED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1942"></a><tt class="py-lineno">1942</tt>  <tt class="py-line">                    <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    reading from socket..."</tt> </tt>
+<a name="L1943"></a><tt class="py-lineno">1943</tt>  <tt class="py-line">                <tt class="py-name">received</tt> <tt class="py-op">+=</tt> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">recv</tt><tt class="py-op">(</tt><tt class="py-number">1024</tt><tt class="py-op">)</tt> </tt>
+<a name="L1944"></a><tt class="py-lineno">1944</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">doneRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">7</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1945"></a><tt class="py-lineno">1945</tt>  <tt class="py-line">                    <tt class="py-keyword">break</tt> </tt>
+<a name="L1946"></a><tt class="py-lineno">1946</tt>  <tt class="py-line">            <tt class="py-name">s</tt><tt class="py-op">.</tt><tt id="link-487" class="py-name" targets="Method com.dtmilano.android.adb.adbclient.AdbClient.close()=com.dtmilano.android.adb.adbclient.AdbClient-class.html#close"><a title="com.dtmilano.android.adb.adbclient.AdbClient.close" class="py-name" href="#" onclick="return doclink('link-487', 'close', 'link-487');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1947"></a><tt class="py-lineno">1947</tt>  <tt class="py-line">            <tt id="link-488" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-488', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-489" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.setAlarm
+com.dtmilano.android.viewclient.ViewClient.setAlarm" class="py-name" href="#" onclick="return doclink('link-489', 'setAlarm', 'link-388');">setAlarm</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L1948"></a><tt class="py-lineno">1948</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-490" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-490', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1949"></a><tt class="py-lineno">1949</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">received</tt> </tt>
+<a name="L1950"></a><tt class="py-lineno">1950</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-491" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_RECEIVED" class="py-name" href="#" onclick="return doclink('link-491', 'DEBUG_RECEIVED', 'link-6');">DEBUG_RECEIVED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1951"></a><tt class="py-lineno">1951</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"received %d chars"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1952"></a><tt class="py-lineno">1952</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
+<a name="L1953"></a><tt class="py-lineno">1953</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">received</tt> </tt>
+<a name="L1954"></a><tt class="py-lineno">1954</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
+<a name="L1955"></a><tt class="py-lineno">1955</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-492" class="py-name" targets="Method com.dtmilano.android.viewclient.ViewClient.setViews()=com.dtmilano.android.viewclient.ViewClient-class.html#setViews"><a title="com.dtmilano.android.viewclient.ViewClient.setViews" class="py-name" href="#" onclick="return doclink('link-492', 'setViews', 'link-492');">setViews</a></tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1956"></a><tt class="py-lineno">1956</tt>  <tt class="py-line"> </tt>
+<a name="L1957"></a><tt class="py-lineno">1957</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-493" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_TREE" class="py-name" href="#" onclick="return doclink('link-493', 'DEBUG_TREE', 'link-8');">DEBUG_TREE</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1958"></a><tt class="py-lineno">1958</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-494" class="py-name" targets="Method com.dtmilano.android.viewclient.ViewClient.traverse()=com.dtmilano.android.viewclient.ViewClient-class.html#traverse"><a title="com.dtmilano.android.viewclient.ViewClient.traverse" class="py-name" href="#" onclick="return doclink('link-494', 'traverse', 'link-494');">traverse</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L1959"></a><tt class="py-lineno">1959</tt>  <tt class="py-line"> </tt>
+<a name="L1960"></a><tt class="py-lineno">1960</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt> </tt>
+</div><a name="L1961"></a><tt class="py-lineno">1961</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.list"></a><div id="ViewClient.list-def"><a name="L1962"></a><tt class="py-lineno">1962</tt> <a class="py-toggle" href="#" id="ViewClient.list-toggle" onclick="return toggle('ViewClient.list');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#list">list</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">sleep</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.list-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.list-expanded"><a name="L1963"></a><tt class="py-lineno">1963</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1964"></a><tt class="py-lineno">1964</tt>  <tt class="py-line"><tt class="py-docstring">        List the windows.</tt> </tt>
+<a name="L1965"></a><tt class="py-lineno">1965</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1966"></a><tt class="py-lineno">1966</tt>  <tt class="py-line"><tt class="py-docstring">        Sleep is useful to wait some time before obtaining the new content when something in the</tt> </tt>
+<a name="L1967"></a><tt class="py-lineno">1967</tt>  <tt class="py-line"><tt class="py-docstring">        window has changed.</tt> </tt>
+<a name="L1968"></a><tt class="py-lineno">1968</tt>  <tt class="py-line"><tt class="py-docstring">        This also sets L{self.windows} as the list of windows.</tt> </tt>
+<a name="L1969"></a><tt class="py-lineno">1969</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1970"></a><tt class="py-lineno">1970</tt>  <tt class="py-line"><tt class="py-docstring">        @type sleep: int</tt> </tt>
+<a name="L1971"></a><tt class="py-lineno">1971</tt>  <tt class="py-line"><tt class="py-docstring">        @param sleep: sleep in seconds before proceeding to dump the content</tt> </tt>
+<a name="L1972"></a><tt class="py-lineno">1972</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1973"></a><tt class="py-lineno">1973</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the list of windows</tt> </tt>
+<a name="L1974"></a><tt class="py-lineno">1974</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1975"></a><tt class="py-lineno">1975</tt>  <tt class="py-line"> </tt>
+<a name="L1976"></a><tt class="py-lineno">1976</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-495" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-495', 'sleep', 'link-269');">sleep</a></tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L1977"></a><tt class="py-lineno">1977</tt>  <tt class="py-line">            <tt class="py-name">time</tt><tt class="py-op">.</tt><tt id="link-496" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-496', 'sleep', 'link-269');">sleep</a></tt><tt class="py-op">(</tt><tt id="link-497" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-497', 'sleep', 'link-269');">sleep</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1978"></a><tt class="py-lineno">1978</tt>  <tt class="py-line"> </tt>
+<a name="L1979"></a><tt class="py-lineno">1979</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L1980"></a><tt class="py-lineno">1980</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">"Not implemented yet: listing windows with UiAutomator"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1981"></a><tt class="py-lineno">1981</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1982"></a><tt class="py-lineno">1982</tt>  <tt class="py-line">            <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">(</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">AF_INET</tt><tt class="py-op">,</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">SOCK_STREAM</tt><tt class="py-op">)</tt> </tt>
+<a name="L1983"></a><tt class="py-lineno">1983</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1984"></a><tt class="py-lineno">1984</tt>  <tt class="py-line">                <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">connect</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt id="link-498" class="py-name"><a title="com.dtmilano.android.viewclient.VIEW_SERVER_HOST" class="py-name" href="#" onclick="return doclink('link-498', 'VIEW_SERVER_HOST', 'link-27');">VIEW_SERVER_HOST</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">localPort</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1985"></a><tt class="py-lineno">1985</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">:</tt> </tt>
+<a name="L1986"></a><tt class="py-lineno">1986</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"ERROR: Connecting to %s:%d: %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-499" class="py-name"><a title="com.dtmilano.android.viewclient.VIEW_SERVER_HOST" class="py-name" href="#" onclick="return doclink('link-499', 'VIEW_SERVER_HOST', 'link-27');">VIEW_SERVER_HOST</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">localPort</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1987"></a><tt class="py-lineno">1987</tt>  <tt class="py-line">            <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">send</tt><tt class="py-op">(</tt><tt class="py-string">'list\r\n'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1988"></a><tt class="py-lineno">1988</tt>  <tt class="py-line">            <tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
+<a name="L1989"></a><tt class="py-lineno">1989</tt>  <tt class="py-line">            <tt class="py-name">doneRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">"DONE"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1990"></a><tt class="py-lineno">1990</tt>  <tt class="py-line">            <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
+<a name="L1991"></a><tt class="py-lineno">1991</tt>  <tt class="py-line">                <tt class="py-name">received</tt> <tt class="py-op">+=</tt> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">recv</tt><tt class="py-op">(</tt><tt class="py-number">1024</tt><tt class="py-op">)</tt> </tt>
+<a name="L1992"></a><tt class="py-lineno">1992</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">doneRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">7</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1993"></a><tt class="py-lineno">1993</tt>  <tt class="py-line">                    <tt class="py-keyword">break</tt> </tt>
+<a name="L1994"></a><tt class="py-lineno">1994</tt>  <tt class="py-line">            <tt class="py-name">s</tt><tt class="py-op">.</tt><tt id="link-500" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.close" class="py-name" href="#" onclick="return doclink('link-500', 'close', 'link-487');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1995"></a><tt class="py-lineno">1995</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-501" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-501', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1996"></a><tt class="py-lineno">1996</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">received</tt> </tt>
+<a name="L1997"></a><tt class="py-lineno">1997</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-502" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_RECEIVED" class="py-name" href="#" onclick="return doclink('link-502', 'DEBUG_RECEIVED', 'link-6');">DEBUG_RECEIVED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1998"></a><tt class="py-lineno">1998</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"received %d chars"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1999"></a><tt class="py-lineno">1999</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
+<a name="L2000"></a><tt class="py-lineno">2000</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">received</tt> </tt>
+<a name="L2001"></a><tt class="py-lineno">2001</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
+<a name="L2002"></a><tt class="py-lineno">2002</tt>  <tt class="py-line"> </tt>
+<a name="L2003"></a><tt class="py-lineno">2003</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L2004"></a><tt class="py-lineno">2004</tt>  <tt class="py-line">            <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt class="py-name">received</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2005"></a><tt class="py-lineno">2005</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">line</tt><tt class="py-op">:</tt> </tt>
+<a name="L2006"></a><tt class="py-lineno">2006</tt>  <tt class="py-line">                    <tt class="py-keyword">break</tt> </tt>
+<a name="L2007"></a><tt class="py-lineno">2007</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">doneRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2008"></a><tt class="py-lineno">2008</tt>  <tt class="py-line">                    <tt class="py-keyword">break</tt> </tt>
+<a name="L2009"></a><tt class="py-lineno">2009</tt>  <tt class="py-line">                <tt class="py-name">values</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L2010"></a><tt class="py-lineno">2010</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">values</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L2011"></a><tt class="py-lineno">2011</tt>  <tt class="py-line">                    <tt class="py-name">package</tt> <tt class="py-op">=</tt> <tt class="py-name">values</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L2012"></a><tt class="py-lineno">2012</tt>  <tt class="py-line">                <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2013"></a><tt class="py-lineno">2013</tt>  <tt class="py-line">                    <tt class="py-name">package</tt> <tt class="py-op">=</tt> <tt class="py-string">"UNKNOWN"</tt> </tt>
+<a name="L2014"></a><tt class="py-lineno">2014</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">values</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L2015"></a><tt class="py-lineno">2015</tt>  <tt class="py-line">                    <tt class="py-name">wid</tt> <tt class="py-op">=</tt> <tt class="py-name">values</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+<a name="L2016"></a><tt class="py-lineno">2016</tt>  <tt class="py-line">                <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2017"></a><tt class="py-lineno">2017</tt>  <tt class="py-line">                    <tt class="py-name">wid</tt> <tt class="py-op">=</tt> <tt class="py-string">'00000000'</tt> </tt>
+<a name="L2018"></a><tt class="py-lineno">2018</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">[</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-string">'0x'</tt> <tt class="py-op">+</tt> <tt class="py-name">wid</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">package</tt> </tt>
+<a name="L2019"></a><tt class="py-lineno">2019</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt> </tt>
+</div><a name="L2020"></a><tt class="py-lineno">2020</tt>  <tt class="py-line"> </tt>
+<a name="L2021"></a><tt class="py-lineno">2021</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.findViewById"></a><div id="ViewClient.findViewById-def"><a name="L2022"></a><tt class="py-lineno">2022</tt> <a class="py-toggle" href="#" id="ViewClient.findViewById-toggle" onclick="return toggle('ViewClient.findViewById');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewById">findViewById</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">viewId</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">,</tt> <tt class="py-param">viewFilter</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewById-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewById-expanded"><a name="L2023"></a><tt class="py-lineno">2023</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2024"></a><tt class="py-lineno">2024</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View with the specified viewId.</tt> </tt>
+<a name="L2025"></a><tt class="py-lineno">2025</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L2026"></a><tt class="py-lineno">2026</tt>  <tt class="py-line"><tt class="py-docstring">        @type viewId: str</tt> </tt>
+<a name="L2027"></a><tt class="py-lineno">2027</tt>  <tt class="py-line"><tt class="py-docstring">        @param viewId: the ID of the view to find</tt> </tt>
+<a name="L2028"></a><tt class="py-lineno">2028</tt>  <tt class="py-line"><tt class="py-docstring">        @type root: str</tt> </tt>
+<a name="L2029"></a><tt class="py-lineno">2029</tt>  <tt class="py-line"><tt class="py-docstring">        @type root: View</tt> </tt>
+<a name="L2030"></a><tt class="py-lineno">2030</tt>  <tt class="py-line"><tt class="py-docstring">        @param root: the root node of the tree where the View will be searched</tt> </tt>
+<a name="L2031"></a><tt class="py-lineno">2031</tt>  <tt class="py-line"><tt class="py-docstring">        @type: viewFilter: function</tt> </tt>
+<a name="L2032"></a><tt class="py-lineno">2032</tt>  <tt class="py-line"><tt class="py-docstring">        @param viewFilter: a function that will be invoked providing the candidate View as a parameter</tt> </tt>
+<a name="L2033"></a><tt class="py-lineno">2033</tt>  <tt class="py-line"><tt class="py-docstring">                           and depending on the return value (C{True} or C{False}) the View will be</tt> </tt>
+<a name="L2034"></a><tt class="py-lineno">2034</tt>  <tt class="py-line"><tt class="py-docstring">                           selected and returned as the result of C{findViewById()} or ignored.</tt> </tt>
+<a name="L2035"></a><tt class="py-lineno">2035</tt>  <tt class="py-line"><tt class="py-docstring">                           This can be C{None} and no extra filtering is applied.</tt> </tt>
+<a name="L2036"></a><tt class="py-lineno">2036</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L2037"></a><tt class="py-lineno">2037</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the C{View} found or C{None}</tt> </tt>
+<a name="L2038"></a><tt class="py-lineno">2038</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2039"></a><tt class="py-lineno">2039</tt>  <tt class="py-line"> </tt>
+<a name="L2040"></a><tt class="py-lineno">2040</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">root</tt><tt class="py-op">:</tt> </tt>
+<a name="L2041"></a><tt class="py-lineno">2041</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L2042"></a><tt class="py-lineno">2042</tt>  <tt class="py-line"> </tt>
+<a name="L2043"></a><tt class="py-lineno">2043</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-503" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.type
+com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-503', 'type', 'link-55');">type</a></tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">types</tt><tt class="py-op">.</tt><tt class="py-name">StringType</tt> <tt class="py-keyword">and</tt> <tt class="py-name">root</tt> <tt class="py-op">==</tt> <tt class="py-string">"ROOT"</tt><tt class="py-op">:</tt> </tt>
+<a name="L2044"></a><tt class="py-lineno">2044</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-504" class="py-name" targets="Method com.dtmilano.android.viewclient.ViewClient.findViewById()=com.dtmilano.android.viewclient.ViewClient-class.html#findViewById"><a title="com.dtmilano.android.viewclient.ViewClient.findViewById" class="py-name" href="#" onclick="return doclink('link-504', 'findViewById', 'link-504');">findViewById</a></tt><tt class="py-op">(</tt><tt class="py-name">viewId</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">,</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">)</tt> </tt>
+<a name="L2045"></a><tt class="py-lineno">2045</tt>  <tt class="py-line"> </tt>
+<a name="L2046"></a><tt class="py-lineno">2046</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt id="link-505" class="py-name"><a title="com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-505', 'getId', 'link-134');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">viewId</tt><tt class="py-op">:</tt> </tt>
+<a name="L2047"></a><tt class="py-lineno">2047</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">:</tt> </tt>
+<a name="L2048"></a><tt class="py-lineno">2048</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2049"></a><tt class="py-lineno">2049</tt>  <tt class="py-line">                    <tt class="py-keyword">return</tt> <tt class="py-name">root</tt> </tt>
+<a name="L2050"></a><tt class="py-lineno">2050</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2051"></a><tt class="py-lineno">2051</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">root</tt> </tt>
+<a name="L2052"></a><tt class="py-lineno">2052</tt>  <tt class="py-line"> </tt>
+<a name="L2053"></a><tt class="py-lineno">2053</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-string">'^id/no_id'</tt><tt class="py-op">,</tt> <tt class="py-name">viewId</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-string">'^id/.+/.+'</tt><tt class="py-op">,</tt> <tt class="py-name">viewId</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2054"></a><tt class="py-lineno">2054</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt id="link-506" class="py-name"><a title="com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-506', 'getUniqueId', 'link-135');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">viewId</tt><tt class="py-op">:</tt> </tt>
+<a name="L2055"></a><tt class="py-lineno">2055</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">:</tt> </tt>
+<a name="L2056"></a><tt class="py-lineno">2056</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2057"></a><tt class="py-lineno">2057</tt>  <tt class="py-line">                        <tt class="py-keyword">return</tt> <tt class="py-name">root</tt><tt class="py-op">;</tt> </tt>
+<a name="L2058"></a><tt class="py-lineno">2058</tt>  <tt class="py-line">                <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2059"></a><tt class="py-lineno">2059</tt>  <tt class="py-line">                    <tt class="py-keyword">return</tt> <tt class="py-name">root</tt> </tt>
+<a name="L2060"></a><tt class="py-lineno">2060</tt>  <tt class="py-line"> </tt>
+<a name="L2061"></a><tt class="py-lineno">2061</tt>  <tt class="py-line"> </tt>
+<a name="L2062"></a><tt class="py-lineno">2062</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">ch</tt> <tt class="py-keyword">in</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">children</tt><tt class="py-op">:</tt> </tt>
+<a name="L2063"></a><tt class="py-lineno">2063</tt>  <tt class="py-line">            <tt class="py-name">foundView</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-507" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.findViewById" class="py-name" href="#" onclick="return doclink('link-507', 'findViewById', 'link-504');">findViewById</a></tt><tt class="py-op">(</tt><tt class="py-name">viewId</tt><tt class="py-op">,</tt> <tt class="py-name">ch</tt><tt class="py-op">,</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">)</tt> </tt>
+<a name="L2064"></a><tt class="py-lineno">2064</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">foundView</tt><tt class="py-op">:</tt> </tt>
+<a name="L2065"></a><tt class="py-lineno">2065</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">:</tt> </tt>
+<a name="L2066"></a><tt class="py-lineno">2066</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">(</tt><tt class="py-name">foundView</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2067"></a><tt class="py-lineno">2067</tt>  <tt class="py-line">                        <tt class="py-keyword">return</tt> <tt class="py-name">foundView</tt> </tt>
+<a name="L2068"></a><tt class="py-lineno">2068</tt>  <tt class="py-line">                <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2069"></a><tt class="py-lineno">2069</tt>  <tt class="py-line">                    <tt class="py-keyword">return</tt> <tt class="py-name">foundView</tt> </tt>
+</div><a name="L2070"></a><tt class="py-lineno">2070</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.findViewByIdOrRaise"></a><div id="ViewClient.findViewByIdOrRaise-def"><a name="L2071"></a><tt class="py-lineno">2071</tt> <a class="py-toggle" href="#" id="ViewClient.findViewByIdOrRaise-toggle" onclick="return toggle('ViewClient.findViewByIdOrRaise');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewByIdOrRaise">findViewByIdOrRaise</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">viewId</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">,</tt> <tt class="py-param">viewFilter</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewByIdOrRaise-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewByIdOrRaise-expanded"><a name="L2072"></a><tt class="py-lineno">2072</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2073"></a><tt class="py-lineno">2073</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View or raise a ViewNotFoundException.</tt> </tt>
+<a name="L2074"></a><tt class="py-lineno">2074</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L2075"></a><tt class="py-lineno">2075</tt>  <tt class="py-line"><tt class="py-docstring">        @type viewId: str</tt> </tt>
+<a name="L2076"></a><tt class="py-lineno">2076</tt>  <tt class="py-line"><tt class="py-docstring">        @param viewId: the ID of the view to find</tt> </tt>
+<a name="L2077"></a><tt class="py-lineno">2077</tt>  <tt class="py-line"><tt class="py-docstring">        @type root: str</tt> </tt>
+<a name="L2078"></a><tt class="py-lineno">2078</tt>  <tt class="py-line"><tt class="py-docstring">        @type root: View</tt> </tt>
+<a name="L2079"></a><tt class="py-lineno">2079</tt>  <tt class="py-line"><tt class="py-docstring">        @param root: the root node of the tree where the View will be searched</tt> </tt>
+<a name="L2080"></a><tt class="py-lineno">2080</tt>  <tt class="py-line"><tt class="py-docstring">        @type: viewFilter: function</tt> </tt>
+<a name="L2081"></a><tt class="py-lineno">2081</tt>  <tt class="py-line"><tt class="py-docstring">        @param viewFilter: a function that will be invoked providing the candidate View as a parameter</tt> </tt>
+<a name="L2082"></a><tt class="py-lineno">2082</tt>  <tt class="py-line"><tt class="py-docstring">                           and depending on the return value (C{True} or C{False}) the View will be</tt> </tt>
+<a name="L2083"></a><tt class="py-lineno">2083</tt>  <tt class="py-line"><tt class="py-docstring">                           selected and returned as the result of C{findViewById()} or ignored.</tt> </tt>
+<a name="L2084"></a><tt class="py-lineno">2084</tt>  <tt class="py-line"><tt class="py-docstring">                           This can be C{None} and no extra filtering is applied.</tt> </tt>
+<a name="L2085"></a><tt class="py-lineno">2085</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the View found</tt> </tt>
+<a name="L2086"></a><tt class="py-lineno">2086</tt>  <tt class="py-line"><tt class="py-docstring">        @raise ViewNotFoundException: raise the exception if View not found</tt> </tt>
+<a name="L2087"></a><tt class="py-lineno">2087</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2088"></a><tt class="py-lineno">2088</tt>  <tt class="py-line"> </tt>
+<a name="L2089"></a><tt class="py-lineno">2089</tt>  <tt class="py-line">        <tt class="py-name">view</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-508" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.findViewById" class="py-name" href="#" onclick="return doclink('link-508', 'findViewById', 'link-504');">findViewById</a></tt><tt class="py-op">(</tt><tt class="py-name">viewId</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">,</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">)</tt> </tt>
+<a name="L2090"></a><tt class="py-lineno">2090</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">view</tt><tt class="py-op">:</tt> </tt>
+<a name="L2091"></a><tt class="py-lineno">2091</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">view</tt> </tt>
+<a name="L2092"></a><tt class="py-lineno">2092</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2093"></a><tt class="py-lineno">2093</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-509" class="py-name" targets="Class com.dtmilano.android.viewclient.ViewNotFoundException=com.dtmilano.android.viewclient.ViewNotFoundException-class.html"><a title="com.dtmilano.android.viewclient.ViewNotFoundException" class="py-name" href="#" onclick="return doclink('link-509', 'ViewNotFoundException', 'link-509');">ViewNotFoundException</a></tt><tt class="py-op">(</tt><tt class="py-string">"ID"</tt><tt class="py-op">,</tt> <tt class="py-name">viewId</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2094"></a><tt class="py-lineno">2094</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.findViewByTag"></a><div id="ViewClient.findViewByTag-def"><a name="L2095"></a><tt class="py-lineno">2095</tt> <a class="py-toggle" href="#" id="ViewClient.findViewByTag-toggle" onclick="return toggle('ViewClient.findViewByTag');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewByTag">findViewByTag</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewByTag-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewByTag-expanded"><a name="L2096"></a><tt class="py-lineno">2096</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2097"></a><tt class="py-lineno">2097</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View with the specified tag</tt> </tt>
+<a name="L2098"></a><tt class="py-lineno">2098</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2099"></a><tt class="py-lineno">2099</tt>  <tt class="py-line"> </tt>
+<a name="L2100"></a><tt class="py-lineno">2100</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-510" class="py-name" targets="Method com.dtmilano.android.viewclient.ViewClient.findViewWithAttribute()=com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttribute"><a title="com.dtmilano.android.viewclient.ViewClient.findViewWithAttribute" class="py-name" href="#" onclick="return doclink('link-510', 'findViewWithAttribute', 'link-510');">findViewWithAttribute</a></tt><tt class="py-op">(</tt><tt class="py-string">'getTag()'</tt><tt class="py-op">,</tt> <tt class="py-name">tag</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2101"></a><tt class="py-lineno">2101</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.findViewByTagOrRaise"></a><div id="ViewClient.findViewByTagOrRaise-def"><a name="L2102"></a><tt class="py-lineno">2102</tt> <a class="py-toggle" href="#" id="ViewClient.findViewByTagOrRaise-toggle" onclick="return toggle('ViewClient.findViewByTagOrRaise');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewByTagOrRaise">findViewByTagOrRaise</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewByTagOrRaise-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewByTagOrRaise-expanded"><a name="L2103"></a><tt class="py-lineno">2103</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2104"></a><tt class="py-lineno">2104</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View with the specified tag or raise a ViewNotFoundException</tt> </tt>
+<a name="L2105"></a><tt class="py-lineno">2105</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2106"></a><tt class="py-lineno">2106</tt>  <tt class="py-line"> </tt>
+<a name="L2107"></a><tt class="py-lineno">2107</tt>  <tt class="py-line">        <tt class="py-name">view</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-511" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.findViewWithAttribute" class="py-name" href="#" onclick="return doclink('link-511', 'findViewWithAttribute', 'link-510');">findViewWithAttribute</a></tt><tt class="py-op">(</tt><tt class="py-string">'getTag()'</tt><tt class="py-op">,</tt> <tt class="py-name">tag</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L2108"></a><tt class="py-lineno">2108</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">view</tt><tt class="py-op">:</tt> </tt>
+<a name="L2109"></a><tt class="py-lineno">2109</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">view</tt> </tt>
+<a name="L2110"></a><tt class="py-lineno">2110</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2111"></a><tt class="py-lineno">2111</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-512" class="py-name"><a title="com.dtmilano.android.viewclient.ViewNotFoundException" class="py-name" href="#" onclick="return doclink('link-512', 'ViewNotFoundException', 'link-509');">ViewNotFoundException</a></tt><tt class="py-op">(</tt><tt class="py-string">"tag"</tt><tt class="py-op">,</tt> <tt class="py-name">tag</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2112"></a><tt class="py-lineno">2112</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.__findViewWithAttributeInTree"></a><div id="ViewClient.__findViewWithAttributeInTree-def"><a name="L2113"></a><tt class="py-lineno">2113</tt> <a class="py-toggle" href="#" id="ViewClient.__findViewWithAttributeInTree-toggle" onclick="return toggle('ViewClient.__findViewWithAttributeInTree');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTree">__findViewWithAttributeInTree</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__findViewWithAttributeInTree-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__findViewWithAttributeInTree-expanded"><a name="L2114"></a><tt class="py-lineno">2114</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">:</tt> </tt>
+<a name="L2115"></a><tt class="py-lineno">2115</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: no root, did you forget to call dump()?"</tt> </tt>
+<a name="L2116"></a><tt class="py-lineno">2116</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L2117"></a><tt class="py-lineno">2117</tt>  <tt class="py-line"> </tt>
+<a name="L2118"></a><tt class="py-lineno">2118</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-513" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.type
+com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-513', 'type', 'link-55');">type</a></tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">types</tt><tt class="py-op">.</tt><tt class="py-name">StringType</tt> <tt class="py-keyword">and</tt> <tt class="py-name">root</tt> <tt class="py-op">==</tt> <tt class="py-string">"ROOT"</tt><tt class="py-op">:</tt> </tt>
+<a name="L2119"></a><tt class="py-lineno">2119</tt>  <tt class="py-line">            <tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> </tt>
+<a name="L2120"></a><tt class="py-lineno">2120</tt>  <tt class="py-line"> </tt>
+<a name="L2121"></a><tt class="py-lineno">2121</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-514" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-514', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__findViewWithAttributeInTree: type val="</tt><tt class="py-op">,</tt> <tt id="link-515" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.type
+com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-515', 'type', 'link-55');">type</a></tt><tt class="py-op">(</tt><tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+<a name="L2122"></a><tt class="py-lineno">2122</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-516" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-516', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__findViewWithAttributeInTree: checking if root=%s has attr=%s == %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">.</tt><tt id="link-517" class="py-name"><a title="com.dtmilano.android.viewclient.View.__smallStr__" class="py-name" href="#" onclick="return doclink('link-517', '__smallStr__', 'link-403');">__smallStr__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+<a name="L2123"></a><tt class="py-lineno">2123</tt>  <tt class="py-line"> </tt>
+<a name="L2124"></a><tt class="py-lineno">2124</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">val</tt><tt class="py-op">,</tt> <tt class="py-name">RegexType</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2125"></a><tt class="py-lineno">2125</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-518" class="py-name" targets="Method com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTreeThatMatches()=com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTreeThatMatches"><a title="com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTreeThatMatches" class="py-name" href="#" onclick="return doclink('link-518', '__findViewWithAttributeInTreeThatMatches', 'link-518');">__findViewWithAttributeInTreeThatMatches</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L2126"></a><tt class="py-lineno">2126</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2127"></a><tt class="py-lineno">2127</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">root</tt> <tt class="py-keyword">and</tt> <tt class="py-name">attr</tt> <tt class="py-keyword">in</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">map</tt> <tt class="py-keyword">and</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">attr</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-name">val</tt><tt class="py-op">:</tt> </tt>
+<a name="L2128"></a><tt class="py-lineno">2128</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-519" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-519', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__findViewWithAttributeInTree:  FOUND: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt id="link-520" class="py-name"><a title="com.dtmilano.android.viewclient.View.__smallStr__" class="py-name" href="#" onclick="return doclink('link-520', '__smallStr__', 'link-403');">__smallStr__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L2129"></a><tt class="py-lineno">2129</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">root</tt> </tt>
+<a name="L2130"></a><tt class="py-lineno">2130</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2131"></a><tt class="py-lineno">2131</tt>  <tt class="py-line">                <tt class="py-keyword">for</tt> <tt class="py-name">ch</tt> <tt class="py-keyword">in</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">children</tt><tt class="py-op">:</tt> </tt>
+<a name="L2132"></a><tt class="py-lineno">2132</tt>  <tt class="py-line">                    <tt class="py-name">v</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-521" class="py-name" targets="Method com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTree()=com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTree"><a title="com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTree" class="py-name" href="#" onclick="return doclink('link-521', '__findViewWithAttributeInTree', 'link-521');">__findViewWithAttributeInTree</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">,</tt> <tt class="py-name">ch</tt><tt class="py-op">)</tt> </tt>
+<a name="L2133"></a><tt class="py-lineno">2133</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">v</tt><tt class="py-op">:</tt> </tt>
+<a name="L2134"></a><tt class="py-lineno">2134</tt>  <tt class="py-line">                        <tt class="py-keyword">return</tt> <tt class="py-name">v</tt> </tt>
+<a name="L2135"></a><tt class="py-lineno">2135</tt>  <tt class="py-line"> </tt>
+<a name="L2136"></a><tt class="py-lineno">2136</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L2137"></a><tt class="py-lineno">2137</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.__findViewWithAttributeInTreeOrRaise"></a><div id="ViewClient.__findViewWithAttributeInTreeOrRaise-def"><a name="L2138"></a><tt class="py-lineno">2138</tt> <a class="py-toggle" href="#" id="ViewClient.__findViewWithAttributeInTreeOrRaise-toggle" onclick="return toggle('ViewClient.__findViewWithAttributeInTreeOrRaise');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTreeOrRaise">__findViewWithAttributeInTreeOrRaise</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__findViewWithAttributeInTreeOrRaise-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__findViewWithAttributeInTreeOrRaise-expanded"><a name="L2139"></a><tt class="py-lineno">2139</tt>  <tt class="py-line">        <tt class="py-name">view</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-522" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTree" class="py-name" href="#" onclick="return doclink('link-522', '__findViewWithAttributeInTree', 'link-521');">__findViewWithAttributeInTree</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L2140"></a><tt class="py-lineno">2140</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">view</tt><tt class="py-op">:</tt> </tt>
+<a name="L2141"></a><tt class="py-lineno">2141</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">view</tt> </tt>
+<a name="L2142"></a><tt class="py-lineno">2142</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2143"></a><tt class="py-lineno">2143</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-523" class="py-name"><a title="com.dtmilano.android.viewclient.ViewNotFoundException" class="py-name" href="#" onclick="return doclink('link-523', 'ViewNotFoundException', 'link-509');">ViewNotFoundException</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2144"></a><tt class="py-lineno">2144</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.__findViewWithAttributeInTreeThatMatches"></a><div id="ViewClient.__findViewWithAttributeInTreeThatMatches-def"><a name="L2145"></a><tt class="py-lineno">2145</tt> <a class="py-toggle" href="#" id="ViewClient.__findViewWithAttributeInTreeThatMatches-toggle" onclick="return toggle('ViewClient.__findViewWithAttributeInTreeThatMatches');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTreeThatMatches">__findViewWithAttributeInTreeThatMatches</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">regex</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">,</tt> <tt class="py-param">rlist</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__findViewWithAttributeInTreeThatMatches-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__findViewWithAttributeInTreeThatMatches-expanded"><a name="L2146"></a><tt class="py-lineno">2146</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">:</tt> </tt>
+<a name="L2147"></a><tt class="py-lineno">2147</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: no root, did you forget to call dump()?"</tt> </tt>
+<a name="L2148"></a><tt class="py-lineno">2148</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L2149"></a><tt class="py-lineno">2149</tt>  <tt class="py-line"> </tt>
+<a name="L2150"></a><tt class="py-lineno">2150</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-524" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.type
+com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-524', 'type', 'link-55');">type</a></tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">types</tt><tt class="py-op">.</tt><tt class="py-name">StringType</tt> <tt class="py-keyword">and</tt> <tt class="py-name">root</tt> <tt class="py-op">==</tt> <tt class="py-string">"ROOT"</tt><tt class="py-op">:</tt> </tt>
+<a name="L2151"></a><tt class="py-lineno">2151</tt>  <tt class="py-line">            <tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> </tt>
+<a name="L2152"></a><tt class="py-lineno">2152</tt>  <tt class="py-line"> </tt>
+<a name="L2153"></a><tt class="py-lineno">2153</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-525" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-525', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__findViewWithAttributeInTreeThatMatches: checking if root=%s attr=%s matches %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">.</tt><tt id="link-526" class="py-name"><a title="com.dtmilano.android.viewclient.View.__smallStr__" class="py-name" href="#" onclick="return doclink('link-526', '__smallStr__', 'link-403');">__smallStr__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">regex</tt><tt class="py-op">)</tt> </tt>
+<a name="L2154"></a><tt class="py-lineno">2154</tt>  <tt class="py-line"> </tt>
+<a name="L2155"></a><tt class="py-lineno">2155</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">root</tt> <tt class="py-keyword">and</tt> <tt class="py-name">attr</tt> <tt class="py-keyword">in</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">map</tt> <tt class="py-keyword">and</tt> <tt class="py-name">regex</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">attr</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2156"></a><tt class="py-lineno">2156</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-527" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-527', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__findViewWithAttributeInTreeThatMatches:  FOUND: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt id="link-528" class="py-name"><a title="com.dtmilano.android.viewclient.View.__smallStr__" class="py-name" href="#" onclick="return doclink('link-528', '__smallStr__', 'link-403');">__smallStr__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L2157"></a><tt class="py-lineno">2157</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">root</tt> </tt>
+<a name="L2158"></a><tt class="py-lineno">2158</tt>  <tt class="py-line">            <tt class="py-comment">#print &gt;&gt;sys.stderr, "appending root=%s to rlist=%s" % (root.__smallStr__(), rlist)</tt> </tt>
+<a name="L2159"></a><tt class="py-lineno">2159</tt>  <tt class="py-line">            <tt class="py-comment">#return rlist.append(root)</tt> </tt>
+<a name="L2160"></a><tt class="py-lineno">2160</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2161"></a><tt class="py-lineno">2161</tt>  <tt class="py-line">            <tt class="py-keyword">for</tt> <tt class="py-name">ch</tt> <tt class="py-keyword">in</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">children</tt><tt class="py-op">:</tt> </tt>
+<a name="L2162"></a><tt class="py-lineno">2162</tt>  <tt class="py-line">                <tt class="py-name">v</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-529" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTreeThatMatches" class="py-name" href="#" onclick="return doclink('link-529', '__findViewWithAttributeInTreeThatMatches', 'link-518');">__findViewWithAttributeInTreeThatMatches</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">regex</tt><tt class="py-op">,</tt> <tt class="py-name">ch</tt><tt class="py-op">,</tt> <tt class="py-name">rlist</tt><tt class="py-op">)</tt> </tt>
+<a name="L2163"></a><tt class="py-lineno">2163</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">v</tt><tt class="py-op">:</tt> </tt>
+<a name="L2164"></a><tt class="py-lineno">2164</tt>  <tt class="py-line">                    <tt class="py-keyword">return</tt> <tt class="py-name">v</tt> </tt>
+<a name="L2165"></a><tt class="py-lineno">2165</tt>  <tt class="py-line">                    <tt class="py-comment">#print &gt;&gt;sys.stderr, "appending v=%s to rlist=%s" % (v.__smallStr__(), rlist)</tt> </tt>
+<a name="L2166"></a><tt class="py-lineno">2166</tt>  <tt class="py-line">                    <tt class="py-comment">#return rlist.append(v)</tt> </tt>
+<a name="L2167"></a><tt class="py-lineno">2167</tt>  <tt class="py-line"> </tt>
+<a name="L2168"></a><tt class="py-lineno">2168</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L2169"></a><tt class="py-lineno">2169</tt>  <tt class="py-line">        <tt class="py-comment">#return rlist</tt> </tt>
+<a name="L2170"></a><tt class="py-lineno">2170</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.findViewWithAttribute"></a><div id="ViewClient.findViewWithAttribute-def"><a name="L2171"></a><tt class="py-lineno">2171</tt> <a class="py-toggle" href="#" id="ViewClient.findViewWithAttribute-toggle" onclick="return toggle('ViewClient.findViewWithAttribute');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttribute">findViewWithAttribute</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewWithAttribute-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewWithAttribute-expanded"><a name="L2172"></a><tt class="py-lineno">2172</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2173"></a><tt class="py-lineno">2173</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View with the specified attribute and value</tt> </tt>
+<a name="L2174"></a><tt class="py-lineno">2174</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2175"></a><tt class="py-lineno">2175</tt>  <tt class="py-line"> </tt>
+<a name="L2176"></a><tt class="py-lineno">2176</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-530" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTree" class="py-name" href="#" onclick="return doclink('link-530', '__findViewWithAttributeInTree', 'link-521');">__findViewWithAttributeInTree</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2177"></a><tt class="py-lineno">2177</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.findViewWithAttributeOrRaise"></a><div id="ViewClient.findViewWithAttributeOrRaise-def"><a name="L2178"></a><tt class="py-lineno">2178</tt> <a class="py-toggle" href="#" id="ViewClient.findViewWithAttributeOrRaise-toggle" onclick="return toggle('ViewClient.findViewWithAttributeOrRaise');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttributeOrRaise">findViewWithAttributeOrRaise</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewWithAttributeOrRaise-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewWithAttributeOrRaise-expanded"><a name="L2179"></a><tt class="py-lineno">2179</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2180"></a><tt class="py-lineno">2180</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View or raise a ViewNotFoundException.</tt> </tt>
+<a name="L2181"></a><tt class="py-lineno">2181</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L2182"></a><tt class="py-lineno">2182</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the View found</tt> </tt>
+<a name="L2183"></a><tt class="py-lineno">2183</tt>  <tt class="py-line"><tt class="py-docstring">        @raise ViewNotFoundException: raise the exception if View not found</tt> </tt>
+<a name="L2184"></a><tt class="py-lineno">2184</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2185"></a><tt class="py-lineno">2185</tt>  <tt class="py-line"> </tt>
+<a name="L2186"></a><tt class="py-lineno">2186</tt>  <tt class="py-line">        <tt class="py-name">view</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-531" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.findViewWithAttribute" class="py-name" href="#" onclick="return doclink('link-531', 'findViewWithAttribute', 'link-510');">findViewWithAttribute</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L2187"></a><tt class="py-lineno">2187</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">view</tt><tt class="py-op">:</tt> </tt>
+<a name="L2188"></a><tt class="py-lineno">2188</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">view</tt> </tt>
+<a name="L2189"></a><tt class="py-lineno">2189</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2190"></a><tt class="py-lineno">2190</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-532" class="py-name"><a title="com.dtmilano.android.viewclient.ViewNotFoundException" class="py-name" href="#" onclick="return doclink('link-532', 'ViewNotFoundException', 'link-509');">ViewNotFoundException</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2191"></a><tt class="py-lineno">2191</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.findViewWithAttributeThatMatches"></a><div id="ViewClient.findViewWithAttributeThatMatches-def"><a name="L2192"></a><tt class="py-lineno">2192</tt> <a class="py-toggle" href="#" id="ViewClient.findViewWithAttributeThatMatches-toggle" onclick="return toggle('ViewClient.findViewWithAttributeThatMatches');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttributeThatMatches">findViewWithAttributeThatMatches</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">regex</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewWithAttributeThatMatches-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewWithAttributeThatMatches-expanded"><a name="L2193"></a><tt class="py-lineno">2193</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2194"></a><tt class="py-lineno">2194</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the list of Views with the specified attribute matching</tt> </tt>
+<a name="L2195"></a><tt class="py-lineno">2195</tt>  <tt class="py-line"><tt class="py-docstring">        regex</tt> </tt>
+<a name="L2196"></a><tt class="py-lineno">2196</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2197"></a><tt class="py-lineno">2197</tt>  <tt class="py-line"> </tt>
+<a name="L2198"></a><tt class="py-lineno">2198</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-533" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTreeThatMatches" class="py-name" href="#" onclick="return doclink('link-533', '__findViewWithAttributeInTreeThatMatches', 'link-518');">__findViewWithAttributeInTreeThatMatches</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">regex</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2199"></a><tt class="py-lineno">2199</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.findViewWithText"></a><div id="ViewClient.findViewWithText-def"><a name="L2200"></a><tt class="py-lineno">2200</tt> <a class="py-toggle" href="#" id="ViewClient.findViewWithText-toggle" onclick="return toggle('ViewClient.findViewWithText');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithText">findViewWithText</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">text</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewWithText-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewWithText-expanded"><a name="L2201"></a><tt class="py-lineno">2201</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-534" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-534', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L2202"></a><tt class="py-lineno">2202</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"findViewWithText(%s, %s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">text</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L2203"></a><tt class="py-lineno">2203</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">text</tt><tt class="py-op">,</tt> <tt class="py-name">RegexType</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2204"></a><tt class="py-lineno">2204</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-535" class="py-name" targets="Method com.dtmilano.android.viewclient.ViewClient.findViewWithAttributeThatMatches()=com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttributeThatMatches"><a title="com.dtmilano.android.viewclient.ViewClient.findViewWithAttributeThatMatches" class="py-name" href="#" onclick="return doclink('link-535', 'findViewWithAttributeThatMatches', 'link-535');">findViewWithAttributeThatMatches</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt><tt class="py-op">,</tt> <tt class="py-name">text</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L2205"></a><tt class="py-lineno">2205</tt>  <tt class="py-line">            <tt class="py-comment">#l = self.findViewWithAttributeThatMatches(TEXT_PROPERTY, text)</tt> </tt>
+<a name="L2206"></a><tt class="py-lineno">2206</tt>  <tt class="py-line">            <tt class="py-comment">#ll = len(l)</tt> </tt>
+<a name="L2207"></a><tt class="py-lineno">2207</tt>  <tt class="py-line">            <tt class="py-comment">#if ll == 0:</tt> </tt>
+<a name="L2208"></a><tt class="py-lineno">2208</tt>  <tt class="py-line">            <tt class="py-comment">#    return None</tt> </tt>
+<a name="L2209"></a><tt class="py-lineno">2209</tt>  <tt class="py-line">            <tt class="py-comment">#elif ll == 1:</tt> </tt>
+<a name="L2210"></a><tt class="py-lineno">2210</tt>  <tt class="py-line">            <tt class="py-comment">#    return l[0]</tt> </tt>
+<a name="L2211"></a><tt class="py-lineno">2211</tt>  <tt class="py-line">            <tt class="py-comment">#else:</tt> </tt>
+<a name="L2212"></a><tt class="py-lineno">2212</tt>  <tt class="py-line">            <tt class="py-comment">#    print &gt;&gt;sys.stderr, "WARNING: findViewWithAttributeThatMatches invoked by findViewWithText returns %d items." % ll</tt> </tt>
+<a name="L2213"></a><tt class="py-lineno">2213</tt>  <tt class="py-line">            <tt class="py-comment">#    return l</tt> </tt>
+<a name="L2214"></a><tt class="py-lineno">2214</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2215"></a><tt class="py-lineno">2215</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-536" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.findViewWithAttribute" class="py-name" href="#" onclick="return doclink('link-536', 'findViewWithAttribute', 'link-510');">findViewWithAttribute</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt><tt class="py-op">,</tt> <tt class="py-name">text</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2216"></a><tt class="py-lineno">2216</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.findViewWithTextOrRaise"></a><div id="ViewClient.findViewWithTextOrRaise-def"><a name="L2217"></a><tt class="py-lineno">2217</tt> <a class="py-toggle" href="#" id="ViewClient.findViewWithTextOrRaise-toggle" onclick="return toggle('ViewClient.findViewWithTextOrRaise');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithTextOrRaise">findViewWithTextOrRaise</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">text</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewWithTextOrRaise-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewWithTextOrRaise-expanded"><a name="L2218"></a><tt class="py-lineno">2218</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2219"></a><tt class="py-lineno">2219</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View or raise a ViewNotFoundException.</tt> </tt>
+<a name="L2220"></a><tt class="py-lineno">2220</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L2221"></a><tt class="py-lineno">2221</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the View found</tt> </tt>
+<a name="L2222"></a><tt class="py-lineno">2222</tt>  <tt class="py-line"><tt class="py-docstring">        @raise ViewNotFoundException: raise the exception if View not found</tt> </tt>
+<a name="L2223"></a><tt class="py-lineno">2223</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2224"></a><tt class="py-lineno">2224</tt>  <tt class="py-line"> </tt>
+<a name="L2225"></a><tt class="py-lineno">2225</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-537" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-537', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L2226"></a><tt class="py-lineno">2226</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"findViewWithTextOrRaise(%s, %s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">text</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L2227"></a><tt class="py-lineno">2227</tt>  <tt class="py-line">        <tt class="py-name">view</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-538" class="py-name" targets="Method com.dtmilano.android.viewclient.ViewClient.findViewWithText()=com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithText"><a title="com.dtmilano.android.viewclient.ViewClient.findViewWithText" class="py-name" href="#" onclick="return doclink('link-538', 'findViewWithText', 'link-538');">findViewWithText</a></tt><tt class="py-op">(</tt><tt class="py-name">text</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L2228"></a><tt class="py-lineno">2228</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">view</tt><tt class="py-op">:</tt> </tt>
+<a name="L2229"></a><tt class="py-lineno">2229</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">view</tt> </tt>
+<a name="L2230"></a><tt class="py-lineno">2230</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2231"></a><tt class="py-lineno">2231</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-539" class="py-name"><a title="com.dtmilano.android.viewclient.ViewNotFoundException" class="py-name" href="#" onclick="return doclink('link-539', 'ViewNotFoundException', 'link-509');">ViewNotFoundException</a></tt><tt class="py-op">(</tt><tt class="py-string">"text"</tt><tt class="py-op">,</tt> <tt class="py-name">text</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2232"></a><tt class="py-lineno">2232</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.findViewWithContentDescription"></a><div id="ViewClient.findViewWithContentDescription-def"><a name="L2233"></a><tt class="py-lineno">2233</tt> <a class="py-toggle" href="#" id="ViewClient.findViewWithContentDescription-toggle" onclick="return toggle('ViewClient.findViewWithContentDescription');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithContentDescription">findViewWithContentDescription</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">contentdescription</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewWithContentDescription-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewWithContentDescription-expanded"><a name="L2234"></a><tt class="py-lineno">2234</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2235"></a><tt class="py-lineno">2235</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View with the specified content description</tt> </tt>
+<a name="L2236"></a><tt class="py-lineno">2236</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2237"></a><tt class="py-lineno">2237</tt>  <tt class="py-line"> </tt>
+<a name="L2238"></a><tt class="py-lineno">2238</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-540" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTree" class="py-name" href="#" onclick="return doclink('link-540', '__findViewWithAttributeInTree', 'link-521');">__findViewWithAttributeInTree</a></tt><tt class="py-op">(</tt><tt class="py-string">'content-desc'</tt><tt class="py-op">,</tt> <tt class="py-name">contentdescription</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2239"></a><tt class="py-lineno">2239</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.findViewWithContentDescriptionOrRaise"></a><div id="ViewClient.findViewWithContentDescriptionOrRaise-def"><a name="L2240"></a><tt class="py-lineno">2240</tt> <a class="py-toggle" href="#" id="ViewClient.findViewWithContentDescriptionOrRaise-toggle" onclick="return toggle('ViewClient.findViewWithContentDescriptionOrRaise');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithContentDescriptionOrRaise">findViewWithContentDescriptionOrRaise</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">contentdescription</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewWithContentDescriptionOrRaise-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewWithContentDescriptionOrRaise-expanded"><a name="L2241"></a><tt class="py-lineno">2241</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2242"></a><tt class="py-lineno">2242</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View with the specified content description</tt> </tt>
+<a name="L2243"></a><tt class="py-lineno">2243</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2244"></a><tt class="py-lineno">2244</tt>  <tt class="py-line"> </tt>
+<a name="L2245"></a><tt class="py-lineno">2245</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-541" class="py-name" targets="Method com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTreeOrRaise()=com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTreeOrRaise"><a title="com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTreeOrRaise" class="py-name" href="#" onclick="return doclink('link-541', '__findViewWithAttributeInTreeOrRaise', 'link-541');">__findViewWithAttributeInTreeOrRaise</a></tt><tt class="py-op">(</tt><tt class="py-string">'content-desc'</tt><tt class="py-op">,</tt> <tt class="py-name">contentdescription</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2246"></a><tt class="py-lineno">2246</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.findViewsContainingPoint"></a><div id="ViewClient.findViewsContainingPoint-def"><a name="L2247"></a><tt class="py-lineno">2247</tt> <a class="py-toggle" href="#" id="ViewClient.findViewsContainingPoint-toggle" onclick="return toggle('ViewClient.findViewsContainingPoint');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewsContainingPoint">findViewsContainingPoint</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-param">x</tt><tt class="py-op">,</tt> <tt class="py-param">y</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-param">filter</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewsContainingPoint-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewsContainingPoint-expanded"><a name="L2248"></a><tt class="py-lineno">2248</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2249"></a><tt class="py-lineno">2249</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the list of Views that contain the point (x, y).</tt> </tt>
+<a name="L2250"></a><tt class="py-lineno">2250</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2251"></a><tt class="py-lineno">2251</tt>  <tt class="py-line"> </tt>
+<a name="L2252"></a><tt class="py-lineno">2252</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">filter</tt><tt class="py-op">:</tt> </tt>
+<a name="L2253"></a><tt class="py-lineno">2253</tt>  <tt class="py-line">            <tt class="py-name">filter</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">v</tt><tt class="py-op">:</tt> <tt class="py-name">True</tt> </tt>
+<a name="L2254"></a><tt class="py-lineno">2254</tt>  <tt class="py-line"> </tt>
+<a name="L2255"></a><tt class="py-lineno">2255</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">[</tt><tt class="py-name">v</tt> <tt class="py-keyword">for</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt> <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">.</tt><tt id="link-542" class="py-name" targets="Method com.dtmilano.android.viewclient.View.containsPoint()=com.dtmilano.android.viewclient.View-class.html#containsPoint"><a title="com.dtmilano.android.viewclient.View.containsPoint" class="py-name" href="#" onclick="return doclink('link-542', 'containsPoint', 'link-542');">containsPoint</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt><tt class="py-name">y</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">filter</tt><tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L2256"></a><tt class="py-lineno">2256</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.getViewIds"></a><div id="ViewClient.getViewIds-def"><a name="L2257"></a><tt class="py-lineno">2257</tt> <a class="py-toggle" href="#" id="ViewClient.getViewIds-toggle" onclick="return toggle('ViewClient.getViewIds');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#getViewIds">getViewIds</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.getViewIds-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.getViewIds-expanded"><a name="L2258"></a><tt class="py-lineno">2258</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2259"></a><tt class="py-lineno">2259</tt>  <tt class="py-line"><tt class="py-docstring">        @deprecated: Use L{getViewsById} instead.</tt> </tt>
+<a name="L2260"></a><tt class="py-lineno">2260</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L2261"></a><tt class="py-lineno">2261</tt>  <tt class="py-line"><tt class="py-docstring">        Returns the Views map.</tt> </tt>
+<a name="L2262"></a><tt class="py-lineno">2262</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2263"></a><tt class="py-lineno">2263</tt>  <tt class="py-line"> </tt>
+<a name="L2264"></a><tt class="py-lineno">2264</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt> </tt>
+</div><a name="L2265"></a><tt class="py-lineno">2265</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.getViewsById"></a><div id="ViewClient.getViewsById-def"><a name="L2266"></a><tt class="py-lineno">2266</tt> <a class="py-toggle" href="#" id="ViewClient.getViewsById-toggle" onclick="return toggle('ViewClient.getViewsById');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#getViewsById">getViewsById</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.getViewsById-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.getViewsById-expanded"><a name="L2267"></a><tt class="py-lineno">2267</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2268"></a><tt class="py-lineno">2268</tt>  <tt class="py-line"><tt class="py-docstring">        Returns the Views map. The keys are C{uniqueIds} and the values are C{View}s.</tt> </tt>
+<a name="L2269"></a><tt class="py-lineno">2269</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2270"></a><tt class="py-lineno">2270</tt>  <tt class="py-line"> </tt>
+<a name="L2271"></a><tt class="py-lineno">2271</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt> </tt>
+</div><a name="L2272"></a><tt class="py-lineno">2272</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.__getFocusedWindowPosition"></a><div id="ViewClient.__getFocusedWindowPosition-def"><a name="L2273"></a><tt class="py-lineno">2273</tt> <a class="py-toggle" href="#" id="ViewClient.__getFocusedWindowPosition-toggle" onclick="return toggle('ViewClient.__getFocusedWindowPosition');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__getFocusedWindowPosition">__getFocusedWindowPosition</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__getFocusedWindowPosition-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__getFocusedWindowPosition-expanded"><a name="L2274"></a><tt class="py-lineno">2274</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__getFocusedWindowId</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2275"></a><tt class="py-lineno">2275</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.getSdkVersion"></a><div id="ViewClient.getSdkVersion-def"><a name="L2276"></a><tt class="py-lineno">2276</tt> <a class="py-toggle" href="#" id="ViewClient.getSdkVersion-toggle" onclick="return toggle('ViewClient.getSdkVersion');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#getSdkVersion">getSdkVersion</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.getSdkVersion-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.getSdkVersion-expanded"><a name="L2277"></a><tt class="py-lineno">2277</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2278"></a><tt class="py-lineno">2278</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the SDK version.</tt> </tt>
+<a name="L2279"></a><tt class="py-lineno">2279</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2280"></a><tt class="py-lineno">2280</tt>  <tt class="py-line"> </tt>
+<a name="L2281"></a><tt class="py-lineno">2281</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-543" class="py-name"><a title="com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY
+com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-543', 'VERSION_SDK_PROPERTY', 'link-34');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> </tt>
+</div><a name="L2282"></a><tt class="py-lineno">2282</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.isKeyboardShown"></a><div id="ViewClient.isKeyboardShown-def"><a name="L2283"></a><tt class="py-lineno">2283</tt> <a class="py-toggle" href="#" id="ViewClient.isKeyboardShown-toggle" onclick="return toggle('ViewClient.isKeyboardShown');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#isKeyboardShown">isKeyboardShown</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.isKeyboardShown-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.isKeyboardShown-expanded"><a name="L2284"></a><tt class="py-lineno">2284</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2285"></a><tt class="py-lineno">2285</tt>  <tt class="py-line"><tt class="py-docstring">        Whether the keyboard is displayed.</tt> </tt>
+<a name="L2286"></a><tt class="py-lineno">2286</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2287"></a><tt class="py-lineno">2287</tt>  <tt class="py-line"> </tt>
+<a name="L2288"></a><tt class="py-lineno">2288</tt>  <tt class="py-line">        <tt class="py-name">dim</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-544" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.shell" class="py-name" href="#" onclick="return doclink('link-544', 'shell', 'link-73');">shell</a></tt><tt class="py-op">(</tt><tt class="py-string">'dumpsys input_method'</tt><tt class="py-op">)</tt> </tt>
+<a name="L2289"></a><tt class="py-lineno">2289</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">dim</tt><tt class="py-op">:</tt> </tt>
+<a name="L2290"></a><tt class="py-lineno">2290</tt>  <tt class="py-line">            <tt class="py-comment"># FIXME: API &gt;= 15 ?</tt> </tt>
+<a name="L2291"></a><tt class="py-lineno">2291</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">"mInputShown=true"</tt> <tt class="py-keyword">in</tt> <tt class="py-name">dim</tt> </tt>
+<a name="L2292"></a><tt class="py-lineno">2292</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+</div><a name="L2293"></a><tt class="py-lineno">2293</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.writeImageToFile"></a><div id="ViewClient.writeImageToFile-def"><a name="L2294"></a><tt class="py-lineno">2294</tt> <a class="py-toggle" href="#" id="ViewClient.writeImageToFile-toggle" onclick="return toggle('ViewClient.writeImageToFile');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#writeImageToFile">writeImageToFile</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filename</tt><tt class="py-op">,</tt> <tt class="py-param">format</tt><tt class="py-op">=</tt><tt class="py-string">"PNG"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.writeImageToFile-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.writeImageToFile-expanded"><a name="L2295"></a><tt class="py-lineno">2295</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2296"></a><tt class="py-lineno">2296</tt>  <tt class="py-line"><tt class="py-docstring">        Write the View image to the specified filename in the specified format.</tt> </tt>
+<a name="L2297"></a><tt class="py-lineno">2297</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L2298"></a><tt class="py-lineno">2298</tt>  <tt class="py-line"><tt class="py-docstring">        @type filename: str</tt> </tt>
+<a name="L2299"></a><tt class="py-lineno">2299</tt>  <tt class="py-line"><tt class="py-docstring">        @param filename: Absolute path and optional filename receiving the image. If this points to</tt> </tt>
+<a name="L2300"></a><tt class="py-lineno">2300</tt>  <tt class="py-line"><tt class="py-docstring">                         a directory, then the filename is determined by the serialno of the device and</tt> </tt>
+<a name="L2301"></a><tt class="py-lineno">2301</tt>  <tt class="py-line"><tt class="py-docstring">                         format extension.</tt> </tt>
+<a name="L2302"></a><tt class="py-lineno">2302</tt>  <tt class="py-line"><tt class="py-docstring">        @type format: str</tt> </tt>
+<a name="L2303"></a><tt class="py-lineno">2303</tt>  <tt class="py-line"><tt class="py-docstring">        @param format: Image format (default format is PNG)</tt> </tt>
+<a name="L2304"></a><tt class="py-lineno">2304</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2305"></a><tt class="py-lineno">2305</tt>  <tt class="py-line"> </tt>
+<a name="L2306"></a><tt class="py-lineno">2306</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">isabs</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2307"></a><tt class="py-lineno">2307</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"writeImageToFile expects an absolute path"</tt><tt class="py-op">)</tt> </tt>
+<a name="L2308"></a><tt class="py-lineno">2308</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">isdir</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2309"></a><tt class="py-lineno">2309</tt>  <tt class="py-line">            <tt class="py-name">filename</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt> <tt class="py-op">+</tt> <tt class="py-string">'.'</tt> <tt class="py-op">+</tt> <tt class="py-name">format</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L2310"></a><tt class="py-lineno">2310</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-545" class="py-name"><a title="com.dtmilano.android.adb.adbclient.DEBUG
+com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-545', 'DEBUG', 'link-3');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L2311"></a><tt class="py-lineno">2311</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"writeImageToFile: saving image to '%s' in %s format"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-name">format</tt><tt class="py-op">)</tt> </tt>
+<a name="L2312"></a><tt class="py-lineno">2312</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-546" class="py-name"><a title="com.dtmilano.android.adb.adbclient.AdbClient.takeSnapshot" class="py-name" href="#" onclick="return doclink('link-546', 'takeSnapshot', 'link-285');">takeSnapshot</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">save</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-name">format</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2313"></a><tt class="py-lineno">2313</tt>  <tt class="py-line"> </tt>
+<a name="L2314"></a><tt class="py-lineno">2314</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.__pickleable"></a><div id="ViewClient.__pickleable-def"><a name="L2315"></a><tt class="py-lineno">2315</tt> <a class="py-toggle" href="#" id="ViewClient.__pickleable-toggle" onclick="return toggle('ViewClient.__pickleable');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__pickleable">__pickleable</a><tt class="py-op">(</tt><tt class="py-param">tree</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__pickleable-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__pickleable-expanded"><a name="L2316"></a><tt class="py-lineno">2316</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2317"></a><tt class="py-lineno">2317</tt>  <tt class="py-line"><tt class="py-docstring">        Makes the tree pickleable.</tt> </tt>
+<a name="L2318"></a><tt class="py-lineno">2318</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2319"></a><tt class="py-lineno">2319</tt>  <tt class="py-line"> </tt>
+<a name="L2320"></a><tt class="py-lineno">2320</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">removeDeviceReference</tt><tt class="py-op">(</tt><tt class="py-param">view</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2321"></a><tt class="py-lineno">2321</tt>  <tt class="py-line">            <tt class="py-docstring">'''</tt> </tt>
+<a name="L2322"></a><tt class="py-lineno">2322</tt>  <tt class="py-line"><tt class="py-docstring">            Removes the reference to a L{MonkeyDevice}.</tt> </tt>
+<a name="L2323"></a><tt class="py-lineno">2323</tt>  <tt class="py-line"><tt class="py-docstring">            '''</tt> </tt>
+<a name="L2324"></a><tt class="py-lineno">2324</tt>  <tt class="py-line"> </tt>
+<a name="L2325"></a><tt class="py-lineno">2325</tt>  <tt class="py-line">            <tt class="py-name">view</tt><tt class="py-op">.</tt><tt class="py-name">device</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L2326"></a><tt class="py-lineno">2326</tt>  <tt class="py-line"> </tt>
+<a name="L2327"></a><tt class="py-lineno">2327</tt>  <tt class="py-line">        <tt class="py-comment">###########################################################################################</tt> </tt>
+<a name="L2328"></a><tt class="py-lineno">2328</tt>  <tt class="py-line">        <tt class="py-comment"># FIXME: Unfortunatelly deepcopy does not work with MonkeyDevice objects, which is</tt> </tt>
+<a name="L2329"></a><tt class="py-lineno">2329</tt>  <tt class="py-line">        <tt class="py-comment"># sadly the reason why we cannot pickle the tree and we need to remove the MonkeyDevice</tt> </tt>
+<a name="L2330"></a><tt class="py-lineno">2330</tt>  <tt class="py-line">        <tt class="py-comment"># references.</tt> </tt>
+<a name="L2331"></a><tt class="py-lineno">2331</tt>  <tt class="py-line">        <tt class="py-comment"># We wanted to copy the tree to preserve the original and make piclkleable the copy.</tt> </tt>
+<a name="L2332"></a><tt class="py-lineno">2332</tt>  <tt class="py-line">        <tt class="py-comment">#treeCopy = copy.deepcopy(tree)</tt> </tt>
+<a name="L2333"></a><tt class="py-lineno">2333</tt>  <tt class="py-line">        <tt class="py-name">treeCopy</tt> <tt class="py-op">=</tt> <tt class="py-name">tree</tt> </tt>
+<a name="L2334"></a><tt class="py-lineno">2334</tt>  <tt class="py-line">        <tt class="py-comment"># IMPORTANT:</tt> </tt>
+<a name="L2335"></a><tt class="py-lineno">2335</tt>  <tt class="py-line">        <tt class="py-comment"># This assumes that the first element in the list is the tree root</tt> </tt>
+<a name="L2336"></a><tt class="py-lineno">2336</tt>  <tt class="py-line">        <tt id="link-547" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-547', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-548" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.__traverse" class="py-name" href="#" onclick="return doclink('link-548', '__traverse', 'link-464');">__traverse</a></tt><tt class="py-op">(</tt><tt class="py-name">treeCopy</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">transform</tt><tt class="py-op">=</tt><tt class="py-name">removeDeviceReference</tt><tt class="py-op">)</tt> </tt>
+<a name="L2337"></a><tt class="py-lineno">2337</tt>  <tt class="py-line">        <tt class="py-comment">###########################################################################################</tt> </tt>
+<a name="L2338"></a><tt class="py-lineno">2338</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">treeCopy</tt> </tt>
+</div><a name="L2339"></a><tt class="py-lineno">2339</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.distance"></a><div id="ViewClient.distance-def"><a name="L2340"></a><tt class="py-lineno">2340</tt> <a class="py-toggle" href="#" id="ViewClient.distance-toggle" onclick="return toggle('ViewClient.distance');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#distance">distance</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tree</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.distance-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.distance-expanded"><a name="L2341"></a><tt class="py-lineno">2341</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2342"></a><tt class="py-lineno">2342</tt>  <tt class="py-line"><tt class="py-docstring">        Calculates the distance between this tree and the tree passed as argument.</tt> </tt>
+<a name="L2343"></a><tt class="py-lineno">2343</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L2344"></a><tt class="py-lineno">2344</tt>  <tt class="py-line"><tt class="py-docstring">        @type tree: list of Views</tt> </tt>
+<a name="L2345"></a><tt class="py-lineno">2345</tt>  <tt class="py-line"><tt class="py-docstring">        @param tree: Tree of Views</tt> </tt>
+<a name="L2346"></a><tt class="py-lineno">2346</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the distance</tt> </tt>
+<a name="L2347"></a><tt class="py-lineno">2347</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2348"></a><tt class="py-lineno">2348</tt>  <tt class="py-line">        <tt class="py-comment">################################################################</tt> </tt>
+<a name="L2349"></a><tt class="py-lineno">2349</tt>  <tt class="py-line">        <tt class="py-comment">#FIXME: this should copy the entire tree and then transform it #</tt> </tt>
+<a name="L2350"></a><tt class="py-lineno">2350</tt>  <tt class="py-line">        <tt class="py-comment">################################################################</tt> </tt>
+<a name="L2351"></a><tt class="py-lineno">2351</tt>  <tt class="py-line">        <tt class="py-name">pickleableViews</tt> <tt class="py-op">=</tt> <tt id="link-549" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-549', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-550" class="py-name" targets="Static Method com.dtmilano.android.viewclient.ViewClient.__pickleable()=com.dtmilano.android.viewclient.ViewClient-class.html#__pickleable"><a title="com.dtmilano.android.viewclient.ViewClient.__pickleable" class="py-name" href="#" onclick="return doclink('link-550', '__pickleable', 'link-550');">__pickleable</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt><tt class="py-op">)</tt> </tt>
+<a name="L2352"></a><tt class="py-lineno">2352</tt>  <tt class="py-line">        <tt class="py-name">pickleableTree</tt> <tt class="py-op">=</tt> <tt id="link-551" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-551', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-552" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.__pickleable" class="py-name" href="#" onclick="return doclink('link-552', '__pickleable', 'link-550');">__pickleable</a></tt><tt class="py-op">(</tt><tt class="py-name">tree</tt><tt class="py-op">)</tt> </tt>
+<a name="L2353"></a><tt class="py-lineno">2353</tt>  <tt class="py-line">        <tt class="py-name">s1</tt> <tt class="py-op">=</tt> <tt class="py-name">pickle</tt><tt class="py-op">.</tt><tt class="py-name">dumps</tt><tt class="py-op">(</tt><tt class="py-name">pickleableViews</tt><tt class="py-op">)</tt> </tt>
+<a name="L2354"></a><tt class="py-lineno">2354</tt>  <tt class="py-line">        <tt class="py-name">s2</tt> <tt class="py-op">=</tt> <tt class="py-name">pickle</tt><tt class="py-op">.</tt><tt class="py-name">dumps</tt><tt class="py-op">(</tt><tt class="py-name">pickleableTree</tt><tt class="py-op">)</tt> </tt>
+<a name="L2355"></a><tt class="py-lineno">2355</tt>  <tt class="py-line"> </tt>
+<a name="L2356"></a><tt class="py-lineno">2356</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-553" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_DISTANCE" class="py-name" href="#" onclick="return doclink('link-553', 'DEBUG_DISTANCE', 'link-24');">DEBUG_DISTANCE</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L2357"></a><tt class="py-lineno">2357</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"distance: calculating distance between"</tt><tt class="py-op">,</tt> <tt class="py-name">s1</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-number">20</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-string">"and"</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-number">20</tt><tt class="py-op">]</tt> </tt>
+<a name="L2358"></a><tt class="py-lineno">2358</tt>  <tt class="py-line"> </tt>
+<a name="L2359"></a><tt class="py-lineno">2359</tt>  <tt class="py-line">        <tt class="py-name">l1</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">)</tt> </tt>
+<a name="L2360"></a><tt class="py-lineno">2360</tt>  <tt class="py-line">        <tt class="py-name">l2</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">s2</tt><tt class="py-op">)</tt> </tt>
+<a name="L2361"></a><tt class="py-lineno">2361</tt>  <tt class="py-line">        <tt class="py-name">t</tt> <tt class="py-op">=</tt> <tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">max</tt><tt class="py-op">(</tt><tt class="py-name">l1</tt><tt class="py-op">,</tt> <tt class="py-name">l2</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L2362"></a><tt class="py-lineno">2362</tt>  <tt class="py-line"> </tt>
+<a name="L2363"></a><tt class="py-lineno">2363</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">l1</tt> <tt class="py-op">==</tt> <tt class="py-name">l2</tt><tt class="py-op">:</tt> </tt>
+<a name="L2364"></a><tt class="py-lineno">2364</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-554" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_DISTANCE" class="py-name" href="#" onclick="return doclink('link-554', 'DEBUG_DISTANCE', 'link-24');">DEBUG_DISTANCE</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L2365"></a><tt class="py-lineno">2365</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"distance: trees have same length, using Hamming distance"</tt> </tt>
+<a name="L2366"></a><tt class="py-lineno">2366</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt id="link-555" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-555', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-556" class="py-name" targets="Static Method com.dtmilano.android.viewclient.ViewClient.__hammingDistance()=com.dtmilano.android.viewclient.ViewClient-class.html#__hammingDistance"><a title="com.dtmilano.android.viewclient.ViewClient.__hammingDistance" class="py-name" href="#" onclick="return doclink('link-556', '__hammingDistance', 'link-556');">__hammingDistance</a></tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">)</tt><tt class="py-op">/</tt><tt class="py-name">t</tt> </tt>
+<a name="L2367"></a><tt class="py-lineno">2367</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2368"></a><tt class="py-lineno">2368</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-557" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_DISTANCE" class="py-name" href="#" onclick="return doclink('link-557', 'DEBUG_DISTANCE', 'link-24');">DEBUG_DISTANCE</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L2369"></a><tt class="py-lineno">2369</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"distance: trees have different length, using Levenshtein distance"</tt> </tt>
+<a name="L2370"></a><tt class="py-lineno">2370</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt id="link-558" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-558', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-559" class="py-name" targets="Static Method com.dtmilano.android.viewclient.ViewClient.__levenshteinDistance()=com.dtmilano.android.viewclient.ViewClient-class.html#__levenshteinDistance"><a title="com.dtmilano.android.viewclient.ViewClient.__levenshteinDistance" class="py-name" href="#" onclick="return doclink('link-559', '__levenshteinDistance', 'link-559');">__levenshteinDistance</a></tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">)</tt><tt class="py-op">/</tt><tt class="py-name">t</tt> </tt>
+</div><a name="L2371"></a><tt class="py-lineno">2371</tt>  <tt class="py-line"> </tt>
+<a name="L2372"></a><tt class="py-lineno">2372</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.__hammingDistance"></a><div id="ViewClient.__hammingDistance-def"><a name="L2373"></a><tt class="py-lineno">2373</tt> <a class="py-toggle" href="#" id="ViewClient.__hammingDistance-toggle" onclick="return toggle('ViewClient.__hammingDistance');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__hammingDistance">__hammingDistance</a><tt class="py-op">(</tt><tt class="py-param">s1</tt><tt class="py-op">,</tt> <tt class="py-param">s2</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__hammingDistance-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__hammingDistance-expanded"><a name="L2374"></a><tt class="py-lineno">2374</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2375"></a><tt class="py-lineno">2375</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the Hamming distance between two strings.</tt> </tt>
+<a name="L2376"></a><tt class="py-lineno">2376</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L2377"></a><tt class="py-lineno">2377</tt>  <tt class="py-line"><tt class="py-docstring">        @param s1: string</tt> </tt>
+<a name="L2378"></a><tt class="py-lineno">2378</tt>  <tt class="py-line"><tt class="py-docstring">        @param s2: string</tt> </tt>
+<a name="L2379"></a><tt class="py-lineno">2379</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the distance</tt> </tt>
+<a name="L2380"></a><tt class="py-lineno">2380</tt>  <tt class="py-line"><tt class="py-docstring">        @raise ValueError: if the lenght of the strings differ</tt> </tt>
+<a name="L2381"></a><tt class="py-lineno">2381</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2382"></a><tt class="py-lineno">2382</tt>  <tt class="py-line"> </tt>
+<a name="L2383"></a><tt class="py-lineno">2383</tt>  <tt class="py-line">        <tt class="py-name">l1</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">)</tt> </tt>
+<a name="L2384"></a><tt class="py-lineno">2384</tt>  <tt class="py-line">        <tt class="py-name">l2</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">s2</tt><tt class="py-op">)</tt> </tt>
+<a name="L2385"></a><tt class="py-lineno">2385</tt>  <tt class="py-line"> </tt>
+<a name="L2386"></a><tt class="py-lineno">2386</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">l1</tt> <tt class="py-op">!=</tt> <tt class="py-name">l2</tt><tt class="py-op">:</tt> </tt>
+<a name="L2387"></a><tt class="py-lineno">2387</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"Hamming distance requires strings of same size."</tt><tt class="py-op">)</tt> </tt>
+<a name="L2388"></a><tt class="py-lineno">2388</tt>  <tt class="py-line"> </tt>
+<a name="L2389"></a><tt class="py-lineno">2389</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">sum</tt><tt class="py-op">(</tt><tt class="py-name">ch1</tt> <tt class="py-op">!=</tt> <tt class="py-name">ch2</tt> <tt class="py-keyword">for</tt> <tt class="py-name">ch1</tt><tt class="py-op">,</tt> <tt class="py-name">ch2</tt> <tt class="py-keyword">in</tt> <tt class="py-name">zip</tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2390"></a><tt class="py-lineno">2390</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.hammingDistance"></a><div id="ViewClient.hammingDistance-def"><a name="L2391"></a><tt class="py-lineno">2391</tt> <a class="py-toggle" href="#" id="ViewClient.hammingDistance-toggle" onclick="return toggle('ViewClient.hammingDistance');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#hammingDistance">hammingDistance</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tree</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.hammingDistance-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.hammingDistance-expanded"><a name="L2392"></a><tt class="py-lineno">2392</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2393"></a><tt class="py-lineno">2393</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the Hamming distance between this tree and the one passed as argument.</tt> </tt>
+<a name="L2394"></a><tt class="py-lineno">2394</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2395"></a><tt class="py-lineno">2395</tt>  <tt class="py-line"> </tt>
+<a name="L2396"></a><tt class="py-lineno">2396</tt>  <tt class="py-line">        <tt class="py-name">s1</tt> <tt class="py-op">=</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">map</tt><tt class="py-op">(</tt><tt id="link-560" class="py-name"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-560', 'View', 'link-61');">View</a></tt><tt class="py-op">.</tt><tt id="link-561" class="py-name"><a title="com.dtmilano.android.adb.adbclient.Device.__str__
+com.dtmilano.android.viewclient.View.__str__
+com.dtmilano.android.viewclient.Window.__str__" class="py-name" href="#" onclick="return doclink('link-561', '__str__', 'link-290');">__str__</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L2397"></a><tt class="py-lineno">2397</tt>  <tt class="py-line">        <tt class="py-name">s2</tt> <tt class="py-op">=</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">map</tt><tt class="py-op">(</tt><tt id="link-562" class="py-name"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-562', 'View', 'link-61');">View</a></tt><tt class="py-op">.</tt><tt id="link-563" class="py-name"><a title="com.dtmilano.android.adb.adbclient.Device.__str__
+com.dtmilano.android.viewclient.View.__str__
+com.dtmilano.android.viewclient.Window.__str__" class="py-name" href="#" onclick="return doclink('link-563', '__str__', 'link-290');">__str__</a></tt><tt class="py-op">,</tt> <tt class="py-name">tree</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L2398"></a><tt class="py-lineno">2398</tt>  <tt class="py-line"> </tt>
+<a name="L2399"></a><tt class="py-lineno">2399</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-564" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-564', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-565" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.__hammingDistance" class="py-name" href="#" onclick="return doclink('link-565', '__hammingDistance', 'link-556');">__hammingDistance</a></tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2400"></a><tt class="py-lineno">2400</tt>  <tt class="py-line"> </tt>
+<a name="L2401"></a><tt class="py-lineno">2401</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.__levenshteinDistance"></a><div id="ViewClient.__levenshteinDistance-def"><a name="L2402"></a><tt class="py-lineno">2402</tt> <a class="py-toggle" href="#" id="ViewClient.__levenshteinDistance-toggle" onclick="return toggle('ViewClient.__levenshteinDistance');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__levenshteinDistance">__levenshteinDistance</a><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">,</tt> <tt class="py-param">t</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__levenshteinDistance-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__levenshteinDistance-expanded"><a name="L2403"></a><tt class="py-lineno">2403</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2404"></a><tt class="py-lineno">2404</tt>  <tt class="py-line"><tt class="py-docstring">        Find the Levenshtein distance between two Strings.</tt> </tt>
+<a name="L2405"></a><tt class="py-lineno">2405</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L2406"></a><tt class="py-lineno">2406</tt>  <tt class="py-line"><tt class="py-docstring">        Python version of Levenshtein distance method implemented in Java at</tt> </tt>
+<a name="L2407"></a><tt class="py-lineno">2407</tt>  <tt class="py-line"><tt class="py-docstring">        U{http://www.java2s.com/Code/Java/Data-Type/FindtheLevenshteindistancebetweentwoStrings.htm}.</tt> </tt>
+<a name="L2408"></a><tt class="py-lineno">2408</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L2409"></a><tt class="py-lineno">2409</tt>  <tt class="py-line"><tt class="py-docstring">        This is the number of changes needed to change one String into</tt> </tt>
+<a name="L2410"></a><tt class="py-lineno">2410</tt>  <tt class="py-line"><tt class="py-docstring">        another, where each change is a single character modification (deletion,</tt> </tt>
+<a name="L2411"></a><tt class="py-lineno">2411</tt>  <tt class="py-line"><tt class="py-docstring">        insertion or substitution).</tt> </tt>
+<a name="L2412"></a><tt class="py-lineno">2412</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L2413"></a><tt class="py-lineno">2413</tt>  <tt class="py-line"><tt class="py-docstring">        The previous implementation of the Levenshtein distance algorithm</tt> </tt>
+<a name="L2414"></a><tt class="py-lineno">2414</tt>  <tt class="py-line"><tt class="py-docstring">        was from U{http://www.merriampark.com/ld.htm}</tt> </tt>
+<a name="L2415"></a><tt class="py-lineno">2415</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L2416"></a><tt class="py-lineno">2416</tt>  <tt class="py-line"><tt class="py-docstring">        Chas Emerick has written an implementation in Java, which avoids an OutOfMemoryError</tt> </tt>
+<a name="L2417"></a><tt class="py-lineno">2417</tt>  <tt class="py-line"><tt class="py-docstring">        which can occur when my Java implementation is used with very large strings.</tt> </tt>
+<a name="L2418"></a><tt class="py-lineno">2418</tt>  <tt class="py-line"><tt class="py-docstring">        This implementation of the Levenshtein distance algorithm</tt> </tt>
+<a name="L2419"></a><tt class="py-lineno">2419</tt>  <tt class="py-line"><tt class="py-docstring">        is from U{http://www.merriampark.com/ldjava.htm}::</tt> </tt>
+<a name="L2420"></a><tt class="py-lineno">2420</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L2421"></a><tt class="py-lineno">2421</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance(null, *)             = IllegalArgumentException</tt> </tt>
+<a name="L2422"></a><tt class="py-lineno">2422</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance(*, null)             = IllegalArgumentException</tt> </tt>
+<a name="L2423"></a><tt class="py-lineno">2423</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("","")               = 0</tt> </tt>
+<a name="L2424"></a><tt class="py-lineno">2424</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("","a")              = 1</tt> </tt>
+<a name="L2425"></a><tt class="py-lineno">2425</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("aaapppp", "")       = 7</tt> </tt>
+<a name="L2426"></a><tt class="py-lineno">2426</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("frog", "fog")       = 1</tt> </tt>
+<a name="L2427"></a><tt class="py-lineno">2427</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("fly", "ant")        = 3</tt> </tt>
+<a name="L2428"></a><tt class="py-lineno">2428</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("elephant", "hippo") = 7</tt> </tt>
+<a name="L2429"></a><tt class="py-lineno">2429</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("hippo", "elephant") = 7</tt> </tt>
+<a name="L2430"></a><tt class="py-lineno">2430</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("hippo", "zzzzzzzz") = 8</tt> </tt>
+<a name="L2431"></a><tt class="py-lineno">2431</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("hello", "hallo")    = 1</tt> </tt>
+<a name="L2432"></a><tt class="py-lineno">2432</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L2433"></a><tt class="py-lineno">2433</tt>  <tt class="py-line"><tt class="py-docstring">        @param s:  the first String, must not be null</tt> </tt>
+<a name="L2434"></a><tt class="py-lineno">2434</tt>  <tt class="py-line"><tt class="py-docstring">        @param t:  the second String, must not be null</tt> </tt>
+<a name="L2435"></a><tt class="py-lineno">2435</tt>  <tt class="py-line"><tt class="py-docstring">        @return: result distance</tt> </tt>
+<a name="L2436"></a><tt class="py-lineno">2436</tt>  <tt class="py-line"><tt class="py-docstring">        @raise ValueError: if either String input C{null}</tt> </tt>
+<a name="L2437"></a><tt class="py-lineno">2437</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2438"></a><tt class="py-lineno">2438</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">s</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">or</tt> <tt class="py-name">t</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L2439"></a><tt class="py-lineno">2439</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"Strings must not be null"</tt><tt class="py-op">)</tt> </tt>
+<a name="L2440"></a><tt class="py-lineno">2440</tt>  <tt class="py-line"> </tt>
+<a name="L2441"></a><tt class="py-lineno">2441</tt>  <tt class="py-line">        <tt class="py-name">n</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
+<a name="L2442"></a><tt class="py-lineno">2442</tt>  <tt class="py-line">        <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">t</tt><tt class="py-op">)</tt> </tt>
+<a name="L2443"></a><tt class="py-lineno">2443</tt>  <tt class="py-line"> </tt>
+<a name="L2444"></a><tt class="py-lineno">2444</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">n</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L2445"></a><tt class="py-lineno">2445</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">m</tt> </tt>
+<a name="L2446"></a><tt class="py-lineno">2446</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">m</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L2447"></a><tt class="py-lineno">2447</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">n</tt> </tt>
+<a name="L2448"></a><tt class="py-lineno">2448</tt>  <tt class="py-line"> </tt>
+<a name="L2449"></a><tt class="py-lineno">2449</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">n</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L2450"></a><tt class="py-lineno">2450</tt>  <tt class="py-line">            <tt class="py-name">tmp</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> </tt>
+<a name="L2451"></a><tt class="py-lineno">2451</tt>  <tt class="py-line">            <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">t</tt> </tt>
+<a name="L2452"></a><tt class="py-lineno">2452</tt>  <tt class="py-line">            <tt class="py-name">t</tt> <tt class="py-op">=</tt> <tt class="py-name">tmp</tt> </tt>
+<a name="L2453"></a><tt class="py-lineno">2453</tt>  <tt class="py-line">            <tt class="py-name">n</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">;</tt> </tt>
+<a name="L2454"></a><tt class="py-lineno">2454</tt>  <tt class="py-line">            <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">t</tt><tt class="py-op">)</tt> </tt>
+<a name="L2455"></a><tt class="py-lineno">2455</tt>  <tt class="py-line"> </tt>
+<a name="L2456"></a><tt class="py-lineno">2456</tt>  <tt class="py-line">        <tt class="py-name">p</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">None</tt><tt class="py-op">]</tt><tt class="py-op">*</tt><tt class="py-op">(</tt><tt class="py-name">n</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L2457"></a><tt class="py-lineno">2457</tt>  <tt class="py-line">        <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">None</tt><tt class="py-op">]</tt><tt class="py-op">*</tt><tt class="py-op">(</tt><tt class="py-name">n</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L2458"></a><tt class="py-lineno">2458</tt>  <tt class="py-line"> </tt>
+<a name="L2459"></a><tt class="py-lineno">2459</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">n</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2460"></a><tt class="py-lineno">2460</tt>  <tt class="py-line">            <tt class="py-name">p</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">i</tt> </tt>
+<a name="L2461"></a><tt class="py-lineno">2461</tt>  <tt class="py-line"> </tt>
+<a name="L2462"></a><tt class="py-lineno">2462</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">j</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">m</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2463"></a><tt class="py-lineno">2463</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-566" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_DISTANCE" class="py-name" href="#" onclick="return doclink('link-566', 'DEBUG_DISTANCE', 'link-24');">DEBUG_DISTANCE</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L2464"></a><tt class="py-lineno">2464</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">j</tt> <tt class="py-op">%</tt> <tt class="py-number">100</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L2465"></a><tt class="py-lineno">2465</tt>  <tt class="py-line">                    <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"DEBUG:"</tt><tt class="py-op">,</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">j</tt><tt class="py-op">/</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">+</tt><tt class="py-number">1.0</tt><tt class="py-op">)</tt><tt class="py-op">*</tt><tt class="py-number">100</tt><tt class="py-op">)</tt><tt class="py-op">,</tt><tt class="py-string">"%\r"</tt><tt class="py-op">,</tt> </tt>
+<a name="L2466"></a><tt class="py-lineno">2466</tt>  <tt class="py-line">            <tt class="py-name">t_j</tt> <tt class="py-op">=</tt> <tt class="py-name">t</tt><tt class="py-op">[</tt><tt class="py-name">j</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L2467"></a><tt class="py-lineno">2467</tt>  <tt class="py-line">            <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">j</tt> </tt>
+<a name="L2468"></a><tt class="py-lineno">2468</tt>  <tt class="py-line"> </tt>
+<a name="L2469"></a><tt class="py-lineno">2469</tt>  <tt class="py-line">            <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">n</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2470"></a><tt class="py-lineno">2470</tt>  <tt class="py-line">                <tt class="py-name">cost</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> <tt class="py-keyword">if</tt> <tt class="py-name">s</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-name">t_j</tt> <tt class="py-keyword">else</tt> <tt class="py-number">1</tt> </tt>
+<a name="L2471"></a><tt class="py-lineno">2471</tt>  <tt class="py-line">                <tt class="py-comment">#  minimum of cell to the left+1, to the top+1, diagonally left and up +cost</tt> </tt>
+<a name="L2472"></a><tt class="py-lineno">2472</tt>  <tt class="py-line">                <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">min</tt><tt class="py-op">(</tt><tt class="py-name">min</tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">p</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">p</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">+</tt><tt class="py-name">cost</tt><tt class="py-op">)</tt> </tt>
+<a name="L2473"></a><tt class="py-lineno">2473</tt>  <tt class="py-line"> </tt>
+<a name="L2474"></a><tt class="py-lineno">2474</tt>  <tt class="py-line">            <tt class="py-name">_d</tt> <tt class="py-op">=</tt> <tt class="py-name">p</tt> </tt>
+<a name="L2475"></a><tt class="py-lineno">2475</tt>  <tt class="py-line">            <tt class="py-name">p</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt> </tt>
+<a name="L2476"></a><tt class="py-lineno">2476</tt>  <tt class="py-line">            <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">_d</tt> </tt>
+<a name="L2477"></a><tt class="py-lineno">2477</tt>  <tt class="py-line"> </tt>
+<a name="L2478"></a><tt class="py-lineno">2478</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-567" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_DISTANCE" class="py-name" href="#" onclick="return doclink('link-567', 'DEBUG_DISTANCE', 'link-24');">DEBUG_DISTANCE</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L2479"></a><tt class="py-lineno">2479</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"\n"</tt> </tt>
+<a name="L2480"></a><tt class="py-lineno">2480</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">p</tt><tt class="py-op">[</tt><tt class="py-name">n</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L2481"></a><tt class="py-lineno">2481</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.levenshteinDistance"></a><div id="ViewClient.levenshteinDistance-def"><a name="L2482"></a><tt class="py-lineno">2482</tt> <a class="py-toggle" href="#" id="ViewClient.levenshteinDistance-toggle" onclick="return toggle('ViewClient.levenshteinDistance');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#levenshteinDistance">levenshteinDistance</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tree</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.levenshteinDistance-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.levenshteinDistance-expanded"><a name="L2483"></a><tt class="py-lineno">2483</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2484"></a><tt class="py-lineno">2484</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the Levenshtein distance between this tree and the one passed as argument.</tt> </tt>
+<a name="L2485"></a><tt class="py-lineno">2485</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2486"></a><tt class="py-lineno">2486</tt>  <tt class="py-line"> </tt>
+<a name="L2487"></a><tt class="py-lineno">2487</tt>  <tt class="py-line">        <tt class="py-name">s1</tt> <tt class="py-op">=</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">map</tt><tt class="py-op">(</tt><tt id="link-568" class="py-name"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-568', 'View', 'link-61');">View</a></tt><tt class="py-op">.</tt><tt id="link-569" class="py-name" targets="Method com.dtmilano.android.viewclient.View.__microStr__()=com.dtmilano.android.viewclient.View-class.html#__microStr__"><a title="com.dtmilano.android.viewclient.View.__microStr__" class="py-name" href="#" onclick="return doclink('link-569', '__microStr__', 'link-569');">__microStr__</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L2488"></a><tt class="py-lineno">2488</tt>  <tt class="py-line">        <tt class="py-name">s2</tt> <tt class="py-op">=</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">map</tt><tt class="py-op">(</tt><tt id="link-570" class="py-name"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-570', 'View', 'link-61');">View</a></tt><tt class="py-op">.</tt><tt id="link-571" class="py-name"><a title="com.dtmilano.android.viewclient.View.__microStr__" class="py-name" href="#" onclick="return doclink('link-571', '__microStr__', 'link-569');">__microStr__</a></tt><tt class="py-op">,</tt> <tt class="py-name">tree</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L2489"></a><tt class="py-lineno">2489</tt>  <tt class="py-line"> </tt>
+<a name="L2490"></a><tt class="py-lineno">2490</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-572" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-572', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-573" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.__levenshteinDistance" class="py-name" href="#" onclick="return doclink('link-573', '__levenshteinDistance', 'link-559');">__levenshteinDistance</a></tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2491"></a><tt class="py-lineno">2491</tt>  <tt class="py-line"> </tt>
+<a name="L2492"></a><tt class="py-lineno">2492</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.excerpt"></a><div id="ViewClient.excerpt-def"><a name="L2493"></a><tt class="py-lineno">2493</tt> <a class="py-toggle" href="#" id="ViewClient.excerpt-toggle" onclick="return toggle('ViewClient.excerpt');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#excerpt">excerpt</a><tt class="py-op">(</tt><tt class="py-param">str</tt><tt class="py-op">,</tt> <tt class="py-param">execute</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.excerpt-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.excerpt-expanded"><a name="L2494"></a><tt class="py-lineno">2494</tt>  <tt class="py-line">        <tt class="py-name">code</tt> <tt class="py-op">=</tt> <tt id="link-574" class="py-name" targets="Class com.dtmilano.android.viewclient.Excerpt2Code=com.dtmilano.android.viewclient.Excerpt2Code-class.html"><a title="com.dtmilano.android.viewclient.Excerpt2Code" class="py-name" href="#" onclick="return doclink('link-574', 'Excerpt2Code', 'link-574');">Excerpt2Code</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-575" class="py-name"><a title="com.dtmilano.android.viewclient.Excerpt2Code.Parse
+com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.Parse" class="py-name" href="#" onclick="return doclink('link-575', 'Parse', 'link-309');">Parse</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">)</tt> </tt>
+<a name="L2495"></a><tt class="py-lineno">2495</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">execute</tt><tt class="py-op">:</tt> </tt>
+<a name="L2496"></a><tt class="py-lineno">2496</tt>  <tt class="py-line">            <tt class="py-keyword">exec</tt> <tt class="py-name">code</tt> </tt>
+<a name="L2497"></a><tt class="py-lineno">2497</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2498"></a><tt class="py-lineno">2498</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">code</tt> </tt>
+</div></div><a name="L2499"></a><tt class="py-lineno">2499</tt>  <tt class="py-line"> </tt>
+<a name="L2500"></a><tt class="py-lineno">2500</tt>  <tt class="py-line"> </tt>
+<a name="L2501"></a><tt class="py-lineno">2501</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">"__main__"</tt><tt class="py-op">:</tt> </tt>
+<a name="L2502"></a><tt class="py-lineno">2502</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L2503"></a><tt class="py-lineno">2503</tt>  <tt class="py-line">        <tt class="py-name">vc</tt> <tt class="py-op">=</tt> <tt id="link-576" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-576', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L2504"></a><tt class="py-lineno">2504</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L2505"></a><tt class="py-lineno">2505</tt>  <tt class="py-line">        <tt class="py-keyword">print</tt> <tt class="py-string">"%s: Don't expect this to do anything"</tt> <tt class="py-op">%</tt> <tt class="py-name">__file__</tt> </tt>
+<a name="L2506"></a><tt class="py-lineno">2506</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:36:05 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android.viewclient.EditText-class.html b/AndroidViewClient/doc/com.dtmilano.android.viewclient.EditText-class.html
new file mode 100755
index 0000000..45b8bee
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android.viewclient.EditText-class.html
@@ -0,0 +1,312 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android.viewclient.EditText</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="com.dtmilano.android.viewclient-module.html">Module&nbsp;viewclient</a> ::
+        Class&nbsp;EditText
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android.viewclient.EditText-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class EditText</h1><p class="nomargin-top"><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#EditText">source&nbsp;code</a></span></p>
+<center>
+<center>  <map id="uml_class_diagram_for_com_dtmi" name="uml_class_diagram_for_com_dtmi">
+<area shape="rect" id="node1_31" href="com.dtmilano.android.viewclient.EditText-class.html#type" title="com.dtmilano.android.viewclient.EditText.type" alt="" coords="164,716,264,735"/>
+<area shape="rect" id="node1_32" href="com.dtmilano.android.viewclient.EditText-class.html#backspace" title="com.dtmilano.android.viewclient.EditText.backspace" alt="" coords="164,735,264,753"/>
+<area shape="rect" id="node1" href="com.dtmilano.android.viewclient.EditText-class.html" title="EditText class." alt="" coords="151,683,275,759"/>
+<area shape="rect" id="node2" href="com.dtmilano.android.viewclient.TextView-class.html" title="TextView class." alt="" coords="176,619,253,663"/>
+<area shape="rect" id="node3_33" href="com.dtmilano.android.viewclient.View-class.html#map" title="The map that contains the attr,value pairs" alt="" coords="17,31,412,49"/>
+<area shape="rect" id="node3_34" href="com.dtmilano.android.viewclient.View-class.html#device" title="The MonkeyDevice" alt="" coords="17,49,412,68"/>
+<area shape="rect" id="node3_35" href="com.dtmilano.android.viewclient.View-class.html#children" title="The children of this View" alt="" coords="17,68,412,87"/>
+<area shape="rect" id="node3_36" href="com.dtmilano.android.viewclient.View-class.html#parent" title="The parent of this View" alt="" coords="17,87,412,105"/>
+<area shape="rect" id="node3_37" href="com.dtmilano.android.viewclient.View-class.html#currentFocus" title="The current focus" alt="" coords="17,105,412,124"/>
+<area shape="rect" id="node3_38" href="com.dtmilano.android.viewclient.View-class.html#build" title="Build properties" alt="" coords="17,124,412,143"/>
+<area shape="rect" id="node3_39" href="com.dtmilano.android.viewclient.View-class.html#version" title="API version number" alt="" coords="17,143,412,161"/>
+<area shape="rect" id="node3_40" href="com.dtmilano.android.viewclient.View-class.html#forceviewserveruse" title="Force ViewServer use" alt="" coords="17,161,412,180"/>
+<area shape="rect" id="node3_41" href="com.dtmilano.android.viewclient.View-class.html#useUiAutomator" title="Whether to use UIAutomator or ViewServer" alt="" coords="17,180,412,199"/>
+<area shape="rect" id="node3_42" href="com.dtmilano.android.viewclient.View-class.html#idProperty" title="The id property depending on the View attribute format" alt="" coords="17,199,412,217"/>
+<area shape="rect" id="node3_43" href="com.dtmilano.android.viewclient.View-class.html#textProperty" title="The text property depending on the View attribute format" alt="" coords="17,217,412,236"/>
+<area shape="rect" id="node3_44" href="com.dtmilano.android.viewclient.View-class.html#leftProperty" title="The left property depending on the View attribute format" alt="" coords="17,236,412,255"/>
+<area shape="rect" id="node3_45" href="com.dtmilano.android.viewclient.View-class.html#topProperty" title="The top property depending on the View attribute format" alt="" coords="17,255,412,273"/>
+<area shape="rect" id="node3_46" href="com.dtmilano.android.viewclient.View-class.html#widthProperty" title="The width property depending on the View attribute format" alt="" coords="17,273,412,292"/>
+<area shape="rect" id="node3_47" href="com.dtmilano.android.viewclient.View-class.html#heightProperty" title="The height property depending on the View attribute format" alt="" coords="17,292,412,311"/>
+<area shape="rect" id="node3_48" href="com.dtmilano.android.viewclient.View-class.html#factory" title="View factory" alt="" coords="17,313,412,332"/>
+<area shape="rect" id="node3_49" href="com.dtmilano.android.viewclient.View-class.html#__init__" title="Constructor" alt="" coords="17,332,412,351"/>
+<area shape="rect" id="node3_50" href="com.dtmilano.android.viewclient.View-class.html#__getitem__" title="com.dtmilano.android.viewclient.View.__getitem__" alt="" coords="17,351,412,369"/>
+<area shape="rect" id="node3_51" href="com.dtmilano.android.viewclient.View-class.html#__getattr__" title="com.dtmilano.android.viewclient.View.__getattr__" alt="" coords="17,369,412,388"/>
+<area shape="rect" id="node3_52" href="com.dtmilano.android.viewclient.View-class.html#__call__" title="com.dtmilano.android.viewclient.View.__call__" alt="" coords="17,388,412,407"/>
+<area shape="rect" id="node3_53" href="com.dtmilano.android.viewclient.View-class.html#getClass" title="Gets the View class" alt="" coords="17,407,412,425"/>
+<area shape="rect" id="node3_54" href="com.dtmilano.android.viewclient.View-class.html#getId" title="Gets the View Id" alt="" coords="17,425,412,444"/>
+<area shape="rect" id="node3_55" href="com.dtmilano.android.viewclient.View-class.html#getContentDescription" title="Gets the content description." alt="" coords="17,444,412,463"/>
+<area shape="rect" id="node3_56" href="com.dtmilano.android.viewclient.View-class.html#getParent" title="Gets the parent." alt="" coords="17,463,412,481"/>
+<area shape="rect" id="node3_57" href="com.dtmilano.android.viewclient.View-class.html#getText" title="Gets the text attribute." alt="" coords="17,481,412,500"/>
+<area shape="rect" id="node3_58" href="com.dtmilano.android.viewclient.View-class.html#getHeight" title="Gets the height." alt="" coords="17,500,412,519"/>
+<area shape="rect" id="node3_59" href="com.dtmilano.android.viewclient.View-class.html#getWidth" title="Gets the width." alt="" coords="17,519,412,537"/>
+<area shape="rect" id="node3_60" href="com.dtmilano.android.viewclient.View-class.html#getUniqueId" title="Gets the unique Id of this View." alt="" coords="17,537,412,556"/>
+<area shape="rect" id="node3_61" href="com.dtmilano.android.viewclient.View-class.html#__str__" title="com.dtmilano.android.viewclient.View.__str__" alt="" coords="17,575,412,593"/>
+<area shape="rect" id="node3" href="com.dtmilano.android.viewclient.View-class.html" title="View class" alt="" coords="5,6,424,599"/>
+</map>
+  <img src="uml_class_diagram_for_com_dtmi.gif" alt='' usemap="#uml_class_diagram_for_com_dtmi" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>EditText class.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="type"></a><span class="summary-sig-name">type</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">text</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#EditText.type">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="backspace"></a><span class="summary-sig-name">backspace</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#EditText.backspace">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="com.dtmilano.android.viewclient.View-class.html">View</a></code></b>:
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#__call__">__call__</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#__getattr__">__getattr__</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#__getitem__">__getitem__</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#__init__">__init__</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#__microStr__">__microStr__</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#__smallStr__">__smallStr__</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#__str__">__str__</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#__tinyStr__">__tinyStr__</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#add">add</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#allPossibleNamesWithColon">allPossibleNamesWithColon</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#containsPoint">containsPoint</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getCenter">getCenter</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getClass">getClass</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getContentDescription">getContentDescription</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getCoords">getCoords</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getHeight">getHeight</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getId">getId</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getParent">getParent</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getPositionAndSize">getPositionAndSize</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getText">getText</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getUniqueId">getUniqueId</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getVisibility">getVisibility</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getWidth">getWidth</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getX">getX</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getXY">getXY</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getY">getY</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#intersection">intersection</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#isClickable">isClickable</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#touch">touch</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#variableNameFromId">variableNameFromId</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#writeImageToFile">writeImageToFile</a></code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== STATIC METHODS ==================== -->
+<a name="section-StaticMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Static Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-StaticMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="com.dtmilano.android.viewclient.View-class.html">View</a></code></b>:
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#factory">factory</a></code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== INSTANCE VARIABLES ==================== -->
+<a name="section-InstanceVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Variables</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceVariables"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="com.dtmilano.android.viewclient.View-class.html">View</a></code></b>:
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#build">build</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#children">children</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#currentFocus">currentFocus</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#device">device</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#forceviewserveruse">forceviewserveruse</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#heightProperty">heightProperty</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#idProperty">idProperty</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#leftProperty">leftProperty</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#map">map</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#parent">parent</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#textProperty">textProperty</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#topProperty">topProperty</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#useUiAutomator">useUiAutomator</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#version">version</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#widthProperty">widthProperty</a></code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:36:00 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android.viewclient.Excerpt2Code-class.html b/AndroidViewClient/doc/com.dtmilano.android.viewclient.Excerpt2Code-class.html
new file mode 100755
index 0000000..0e75cc6
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android.viewclient.Excerpt2Code-class.html
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android.viewclient.Excerpt2Code</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="com.dtmilano.android.viewclient-module.html">Module&nbsp;viewclient</a> ::
+        Class&nbsp;Excerpt2Code
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android.viewclient.Excerpt2Code-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Excerpt2Code</h1><p class="nomargin-top"><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#Excerpt2Code">source&nbsp;code</a></span></p>
+<p>Excerpt XML to code</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__init__"></a><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#Excerpt2Code.__init__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="StartElement"></a><span class="summary-sig-name">StartElement</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>,
+        <span class="summary-sig-arg">attributes</span>)</span><br />
+      Expat start element event handler</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#Excerpt2Code.StartElement">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="EndElement"></a><span class="summary-sig-name">EndElement</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>)</span><br />
+      Expat end element event handler</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#Excerpt2Code.EndElement">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="CharacterData"></a><span class="summary-sig-name">CharacterData</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">data</span>)</span><br />
+      Expat character data event handler</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#Excerpt2Code.CharacterData">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="Parse"></a><span class="summary-sig-name">Parse</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">excerpt</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#Excerpt2Code.Parse">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:36:00 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android.viewclient.TextView-class.html b/AndroidViewClient/doc/com.dtmilano.android.viewclient.TextView-class.html
new file mode 100755
index 0000000..402a503
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android.viewclient.TextView-class.html
@@ -0,0 +1,277 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android.viewclient.TextView</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="com.dtmilano.android.viewclient-module.html">Module&nbsp;viewclient</a> ::
+        Class&nbsp;TextView
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android.viewclient.TextView-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class TextView</h1><p class="nomargin-top"><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#TextView">source&nbsp;code</a></span></p>
+<center>
+<center>  <map id="uml_class_diagram_for_com_dtmi_2" name="uml_class_diagram_for_com_dtmi_2">
+<area shape="rect" id="node1" href="com.dtmilano.android.viewclient.TextView-class.html" title="TextView class." alt="" coords="176,619,253,663"/>
+<area shape="rect" id="node3" href="com.dtmilano.android.viewclient.EditText-class.html" title="EditText class." alt="" coords="173,683,256,722"/>
+<area shape="rect" id="node2_29" href="com.dtmilano.android.viewclient.View-class.html#map" title="The map that contains the attr,value pairs" alt="" coords="17,31,412,49"/>
+<area shape="rect" id="node2_30" href="com.dtmilano.android.viewclient.View-class.html#device" title="The MonkeyDevice" alt="" coords="17,49,412,68"/>
+<area shape="rect" id="node2_31" href="com.dtmilano.android.viewclient.View-class.html#children" title="The children of this View" alt="" coords="17,68,412,87"/>
+<area shape="rect" id="node2_32" href="com.dtmilano.android.viewclient.View-class.html#parent" title="The parent of this View" alt="" coords="17,87,412,105"/>
+<area shape="rect" id="node2_33" href="com.dtmilano.android.viewclient.View-class.html#currentFocus" title="The current focus" alt="" coords="17,105,412,124"/>
+<area shape="rect" id="node2_34" href="com.dtmilano.android.viewclient.View-class.html#build" title="Build properties" alt="" coords="17,124,412,143"/>
+<area shape="rect" id="node2_35" href="com.dtmilano.android.viewclient.View-class.html#version" title="API version number" alt="" coords="17,143,412,161"/>
+<area shape="rect" id="node2_36" href="com.dtmilano.android.viewclient.View-class.html#forceviewserveruse" title="Force ViewServer use" alt="" coords="17,161,412,180"/>
+<area shape="rect" id="node2_37" href="com.dtmilano.android.viewclient.View-class.html#useUiAutomator" title="Whether to use UIAutomator or ViewServer" alt="" coords="17,180,412,199"/>
+<area shape="rect" id="node2_38" href="com.dtmilano.android.viewclient.View-class.html#idProperty" title="The id property depending on the View attribute format" alt="" coords="17,199,412,217"/>
+<area shape="rect" id="node2_39" href="com.dtmilano.android.viewclient.View-class.html#textProperty" title="The text property depending on the View attribute format" alt="" coords="17,217,412,236"/>
+<area shape="rect" id="node2_40" href="com.dtmilano.android.viewclient.View-class.html#leftProperty" title="The left property depending on the View attribute format" alt="" coords="17,236,412,255"/>
+<area shape="rect" id="node2_41" href="com.dtmilano.android.viewclient.View-class.html#topProperty" title="The top property depending on the View attribute format" alt="" coords="17,255,412,273"/>
+<area shape="rect" id="node2_42" href="com.dtmilano.android.viewclient.View-class.html#widthProperty" title="The width property depending on the View attribute format" alt="" coords="17,273,412,292"/>
+<area shape="rect" id="node2_43" href="com.dtmilano.android.viewclient.View-class.html#heightProperty" title="The height property depending on the View attribute format" alt="" coords="17,292,412,311"/>
+<area shape="rect" id="node2_44" href="com.dtmilano.android.viewclient.View-class.html#factory" title="View factory" alt="" coords="17,313,412,332"/>
+<area shape="rect" id="node2_45" href="com.dtmilano.android.viewclient.View-class.html#__init__" title="Constructor" alt="" coords="17,332,412,351"/>
+<area shape="rect" id="node2_46" href="com.dtmilano.android.viewclient.View-class.html#__getitem__" title="com.dtmilano.android.viewclient.View.__getitem__" alt="" coords="17,351,412,369"/>
+<area shape="rect" id="node2_47" href="com.dtmilano.android.viewclient.View-class.html#__getattr__" title="com.dtmilano.android.viewclient.View.__getattr__" alt="" coords="17,369,412,388"/>
+<area shape="rect" id="node2_48" href="com.dtmilano.android.viewclient.View-class.html#__call__" title="com.dtmilano.android.viewclient.View.__call__" alt="" coords="17,388,412,407"/>
+<area shape="rect" id="node2_49" href="com.dtmilano.android.viewclient.View-class.html#getClass" title="Gets the View class" alt="" coords="17,407,412,425"/>
+<area shape="rect" id="node2_50" href="com.dtmilano.android.viewclient.View-class.html#getId" title="Gets the View Id" alt="" coords="17,425,412,444"/>
+<area shape="rect" id="node2_51" href="com.dtmilano.android.viewclient.View-class.html#getContentDescription" title="Gets the content description." alt="" coords="17,444,412,463"/>
+<area shape="rect" id="node2_52" href="com.dtmilano.android.viewclient.View-class.html#getParent" title="Gets the parent." alt="" coords="17,463,412,481"/>
+<area shape="rect" id="node2_53" href="com.dtmilano.android.viewclient.View-class.html#getText" title="Gets the text attribute." alt="" coords="17,481,412,500"/>
+<area shape="rect" id="node2_54" href="com.dtmilano.android.viewclient.View-class.html#getHeight" title="Gets the height." alt="" coords="17,500,412,519"/>
+<area shape="rect" id="node2_55" href="com.dtmilano.android.viewclient.View-class.html#getWidth" title="Gets the width." alt="" coords="17,519,412,537"/>
+<area shape="rect" id="node2_56" href="com.dtmilano.android.viewclient.View-class.html#getUniqueId" title="Gets the unique Id of this View." alt="" coords="17,537,412,556"/>
+<area shape="rect" id="node2_57" href="com.dtmilano.android.viewclient.View-class.html#__str__" title="com.dtmilano.android.viewclient.View.__str__" alt="" coords="17,575,412,593"/>
+<area shape="rect" id="node2" href="com.dtmilano.android.viewclient.View-class.html" title="View class" alt="" coords="5,6,424,599"/>
+</map>
+  <img src="uml_class_diagram_for_com_dtmi_2.gif" alt='' usemap="#uml_class_diagram_for_com_dtmi_2" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>TextView class.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="com.dtmilano.android.viewclient.View-class.html">View</a></code></b>:
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#__call__">__call__</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#__getattr__">__getattr__</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#__getitem__">__getitem__</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#__init__">__init__</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#__microStr__">__microStr__</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#__smallStr__">__smallStr__</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#__str__">__str__</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#__tinyStr__">__tinyStr__</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#add">add</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#allPossibleNamesWithColon">allPossibleNamesWithColon</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#containsPoint">containsPoint</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getCenter">getCenter</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getClass">getClass</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getContentDescription">getContentDescription</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getCoords">getCoords</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getHeight">getHeight</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getId">getId</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getParent">getParent</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getPositionAndSize">getPositionAndSize</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getText">getText</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getUniqueId">getUniqueId</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getVisibility">getVisibility</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getWidth">getWidth</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getX">getX</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getXY">getXY</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#getY">getY</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#intersection">intersection</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#isClickable">isClickable</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#touch">touch</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#variableNameFromId">variableNameFromId</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#writeImageToFile">writeImageToFile</a></code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== STATIC METHODS ==================== -->
+<a name="section-StaticMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Static Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-StaticMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="com.dtmilano.android.viewclient.View-class.html">View</a></code></b>:
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#factory">factory</a></code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== INSTANCE VARIABLES ==================== -->
+<a name="section-InstanceVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Variables</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceVariables"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="com.dtmilano.android.viewclient.View-class.html">View</a></code></b>:
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#build">build</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#children">children</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#currentFocus">currentFocus</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#device">device</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#forceviewserveruse">forceviewserveruse</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#heightProperty">heightProperty</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#idProperty">idProperty</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#leftProperty">leftProperty</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#map">map</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#parent">parent</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#textProperty">textProperty</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#topProperty">topProperty</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#useUiAutomator">useUiAutomator</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#version">version</a></code>,
+      <code><a href="com.dtmilano.android.viewclient.View-class.html#widthProperty">widthProperty</a></code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:36:00 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html b/AndroidViewClient/doc/com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html
new file mode 100755
index 0000000..b78e307
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="com.dtmilano.android.viewclient-module.html">Module&nbsp;viewclient</a> ::
+        Class&nbsp;UiAutomator2AndroidViewClient
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class UiAutomator2AndroidViewClient</h1><p class="nomargin-top"><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#UiAutomator2AndroidViewClient">source&nbsp;code</a></span></p>
+<p>UiAutomator XML to AndroidViewClient</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__init__"></a><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">device</span>,
+        <span class="summary-sig-arg">version</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#UiAutomator2AndroidViewClient.__init__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="StartElement"></a><span class="summary-sig-name">StartElement</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>,
+        <span class="summary-sig-arg">attributes</span>)</span><br />
+      Expat start element event handler</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#UiAutomator2AndroidViewClient.StartElement">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="EndElement"></a><span class="summary-sig-name">EndElement</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>)</span><br />
+      Expat end element event handler</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#UiAutomator2AndroidViewClient.EndElement">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="CharacterData"></a><span class="summary-sig-name">CharacterData</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">data</span>)</span><br />
+      Expat character data event handler</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#UiAutomator2AndroidViewClient.CharacterData">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="Parse"></a><span class="summary-sig-name">Parse</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">uiautomatorxml</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#UiAutomator2AndroidViewClient.Parse">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:36:00 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android.viewclient.View-class.html b/AndroidViewClient/doc/com.dtmilano.android.viewclient.View-class.html
new file mode 100755
index 0000000..77644ef
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android.viewclient.View-class.html
@@ -0,0 +1,1326 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android.viewclient.View</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="com.dtmilano.android.viewclient-module.html">Module&nbsp;viewclient</a> ::
+        Class&nbsp;View
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class View</h1><p class="nomargin-top"><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View">source&nbsp;code</a></span></p>
+<center>
+<center>  <map id="uml_class_diagram_for_com_dtmi_3" name="uml_class_diagram_for_com_dtmi_3">
+<area shape="rect" id="node1_29" href="com.dtmilano.android.viewclient.View-class.html#map" title="The map that contains the attr,value pairs" alt="" coords="17,31,412,49"/>
+<area shape="rect" id="node1_30" href="com.dtmilano.android.viewclient.View-class.html#device" title="The MonkeyDevice" alt="" coords="17,49,412,68"/>
+<area shape="rect" id="node1_31" href="com.dtmilano.android.viewclient.View-class.html#children" title="The children of this View" alt="" coords="17,68,412,87"/>
+<area shape="rect" id="node1_32" href="com.dtmilano.android.viewclient.View-class.html#parent" title="The parent of this View" alt="" coords="17,87,412,105"/>
+<area shape="rect" id="node1_33" href="com.dtmilano.android.viewclient.View-class.html#currentFocus" title="The current focus" alt="" coords="17,105,412,124"/>
+<area shape="rect" id="node1_34" href="com.dtmilano.android.viewclient.View-class.html#build" title="Build properties" alt="" coords="17,124,412,143"/>
+<area shape="rect" id="node1_35" href="com.dtmilano.android.viewclient.View-class.html#version" title="API version number" alt="" coords="17,143,412,161"/>
+<area shape="rect" id="node1_36" href="com.dtmilano.android.viewclient.View-class.html#forceviewserveruse" title="Force ViewServer use" alt="" coords="17,161,412,180"/>
+<area shape="rect" id="node1_37" href="com.dtmilano.android.viewclient.View-class.html#useUiAutomator" title="Whether to use UIAutomator or ViewServer" alt="" coords="17,180,412,199"/>
+<area shape="rect" id="node1_38" href="com.dtmilano.android.viewclient.View-class.html#idProperty" title="The id property depending on the View attribute format" alt="" coords="17,199,412,217"/>
+<area shape="rect" id="node1_39" href="com.dtmilano.android.viewclient.View-class.html#textProperty" title="The text property depending on the View attribute format" alt="" coords="17,217,412,236"/>
+<area shape="rect" id="node1_40" href="com.dtmilano.android.viewclient.View-class.html#leftProperty" title="The left property depending on the View attribute format" alt="" coords="17,236,412,255"/>
+<area shape="rect" id="node1_41" href="com.dtmilano.android.viewclient.View-class.html#topProperty" title="The top property depending on the View attribute format" alt="" coords="17,255,412,273"/>
+<area shape="rect" id="node1_42" href="com.dtmilano.android.viewclient.View-class.html#widthProperty" title="The width property depending on the View attribute format" alt="" coords="17,273,412,292"/>
+<area shape="rect" id="node1_43" href="com.dtmilano.android.viewclient.View-class.html#heightProperty" title="The height property depending on the View attribute format" alt="" coords="17,292,412,311"/>
+<area shape="rect" id="node1_44" href="com.dtmilano.android.viewclient.View-class.html#factory" title="View factory" alt="" coords="17,313,412,332"/>
+<area shape="rect" id="node1_45" href="com.dtmilano.android.viewclient.View-class.html#__init__" title="Constructor" alt="" coords="17,332,412,351"/>
+<area shape="rect" id="node1_46" href="com.dtmilano.android.viewclient.View-class.html#__getitem__" title="com.dtmilano.android.viewclient.View.__getitem__" alt="" coords="17,351,412,369"/>
+<area shape="rect" id="node1_47" href="com.dtmilano.android.viewclient.View-class.html#__getattr__" title="com.dtmilano.android.viewclient.View.__getattr__" alt="" coords="17,369,412,388"/>
+<area shape="rect" id="node1_48" href="com.dtmilano.android.viewclient.View-class.html#__call__" title="com.dtmilano.android.viewclient.View.__call__" alt="" coords="17,388,412,407"/>
+<area shape="rect" id="node1_49" href="com.dtmilano.android.viewclient.View-class.html#getClass" title="Gets the View class" alt="" coords="17,407,412,425"/>
+<area shape="rect" id="node1_50" href="com.dtmilano.android.viewclient.View-class.html#getId" title="Gets the View Id" alt="" coords="17,425,412,444"/>
+<area shape="rect" id="node1_51" href="com.dtmilano.android.viewclient.View-class.html#getContentDescription" title="Gets the content description." alt="" coords="17,444,412,463"/>
+<area shape="rect" id="node1_52" href="com.dtmilano.android.viewclient.View-class.html#getParent" title="Gets the parent." alt="" coords="17,463,412,481"/>
+<area shape="rect" id="node1_53" href="com.dtmilano.android.viewclient.View-class.html#getText" title="Gets the text attribute." alt="" coords="17,481,412,500"/>
+<area shape="rect" id="node1_54" href="com.dtmilano.android.viewclient.View-class.html#getHeight" title="Gets the height." alt="" coords="17,500,412,519"/>
+<area shape="rect" id="node1_55" href="com.dtmilano.android.viewclient.View-class.html#getWidth" title="Gets the width." alt="" coords="17,519,412,537"/>
+<area shape="rect" id="node1_56" href="com.dtmilano.android.viewclient.View-class.html#getUniqueId" title="Gets the unique Id of this View." alt="" coords="17,537,412,556"/>
+<area shape="rect" id="node1_57" href="com.dtmilano.android.viewclient.View-class.html#__str__" title="com.dtmilano.android.viewclient.View.__str__" alt="" coords="17,575,412,593"/>
+<area shape="rect" id="node1" href="com.dtmilano.android.viewclient.View-class.html" title="View class" alt="" coords="5,6,424,599"/>
+<area shape="rect" id="node2" href="com.dtmilano.android.viewclient.TextView-class.html" title="TextView class." alt="" coords="171,619,259,658"/>
+<area shape="rect" id="node3" href="com.dtmilano.android.viewclient.EditText-class.html" title="EditText class." alt="" coords="173,678,256,717"/>
+</map>
+  <img src="uml_class_diagram_for_com_dtmi_3.gif" alt='' usemap="#uml_class_diagram_for_com_dtmi_3" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>View class</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.View-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">map</span>,
+        <span class="summary-sig-arg">device</span>,
+        <span class="summary-sig-arg">version</span>=<span class="summary-sig-default">-1</span>,
+        <span class="summary-sig-arg">forceviewserveruse</span>=<span class="summary-sig-default">False</span>)</span><br />
+      Constructor</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.__init__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__getitem__"></a><span class="summary-sig-name">__getitem__</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">key</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.__getitem__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__getattr__"></a><span class="summary-sig-name">__getattr__</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.__getattr__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__call__"></a><span class="summary-sig-name">__call__</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">*args</span>,
+        <span class="summary-sig-arg">**kwargs</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.__call__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.View-class.html#getClass" class="summary-sig-name">getClass</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the <a href="com.dtmilano.android.viewclient.View-class.html" 
+      class="link">View</a> class</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getClass">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.View-class.html#getId" class="summary-sig-name">getId</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the <a href="com.dtmilano.android.viewclient.View-class.html" 
+      class="link">View</a> Id</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getId">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getContentDescription"></a><span class="summary-sig-name">getContentDescription</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the content description.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getContentDescription">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getParent"></a><span class="summary-sig-name">getParent</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the parent.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getParent">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.View-class.html#getText" class="summary-sig-name">getText</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the text attribute.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getText">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getHeight"></a><span class="summary-sig-name">getHeight</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the height.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getHeight">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getWidth"></a><span class="summary-sig-name">getWidth</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the width.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getWidth">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.View-class.html#getUniqueId" class="summary-sig-name">getUniqueId</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the unique Id of this View.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getUniqueId">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getVisibility"></a><span class="summary-sig-name">getVisibility</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the View visibility</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getVisibility">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getX"></a><span class="summary-sig-name">getX</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the View X coordinate</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getX">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getY"></a><span class="summary-sig-name">getY</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the View Y coordinate</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getY">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.View-class.html#getXY" class="summary-sig-name">getXY</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">debug</span>=<span class="summary-sig-default">False</span>)</span><br />
+      Returns the <i>screen</i> coordinates of this <code>View</code>.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getXY">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.View-class.html#getCoords" class="summary-sig-name">getCoords</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the coords of the View</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getCoords">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.View-class.html#getPositionAndSize" class="summary-sig-name">getPositionAndSize</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the position and size (X,Y, W, H)</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getPositionAndSize">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.View-class.html#getCenter" class="summary-sig-name">getCenter</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the center coords of the View</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getCenter">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__obtainStatusBarDimensionsIfVisible"></a><span class="summary-sig-name">__obtainStatusBarDimensionsIfVisible</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.__obtainStatusBarDimensionsIfVisible">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__obtainVxVy"></a><span class="summary-sig-name">__obtainVxVy</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">m</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.__obtainVxVy">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__obtainVwVh"></a><span class="summary-sig-name">__obtainVwVh</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">m</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.__obtainVwVh">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__obtainPxPy"></a><span class="summary-sig-name">__obtainPxPy</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">m</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.__obtainPxPy">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__dumpWindowsInformation"></a><span class="summary-sig-name">__dumpWindowsInformation</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">debug</span>=<span class="summary-sig-default">False</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.__dumpWindowsInformation">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="touch"></a><span class="summary-sig-name">touch</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">type</span>=<span class="summary-sig-default">2</span>)</span><br />
+      Touches the center of this <code>View</code></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.touch">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="allPossibleNamesWithColon"></a><span class="summary-sig-name">allPossibleNamesWithColon</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.allPossibleNamesWithColon">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="intersection"></a><span class="summary-sig-name">intersection</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">l1</span>,
+        <span class="summary-sig-arg">l2</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.intersection">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="containsPoint"></a><span class="summary-sig-name">containsPoint</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">(x, y)</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.containsPoint">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.View-class.html#add" class="summary-sig-name">add</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">child</span>)</span><br />
+      Adds a child</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.add">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="isClickable"></a><span class="summary-sig-name">isClickable</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.isClickable">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="variableNameFromId"></a><span class="summary-sig-name">variableNameFromId</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.variableNameFromId">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.View-class.html#writeImageToFile" class="summary-sig-name">writeImageToFile</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">filename</span>,
+        <span class="summary-sig-arg">format</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">PNG</code><code class="variable-quote">'</code></span>)</span><br />
+      Write the View image to the specified filename in the specified 
+      format.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.writeImageToFile">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__smallStr__"></a><span class="summary-sig-name">__smallStr__</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.__smallStr__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__tinyStr__"></a><span class="summary-sig-name">__tinyStr__</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.__tinyStr__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__microStr__"></a><span class="summary-sig-name">__microStr__</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.__microStr__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__str__"></a><span class="summary-sig-name">__str__</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.__str__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Class Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-ClassMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__copy"></a><span class="summary-sig-name">__copy</span>(<span class="summary-sig-arg">cls</span>,
+        <span class="summary-sig-arg">view</span>)</span><br />
+      Copy constructor</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.__copy">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== STATIC METHODS ==================== -->
+<a name="section-StaticMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Static Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-StaticMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.View-class.html#factory" class="summary-sig-name">factory</a>(<span class="summary-sig-arg">arg1</span>,
+        <span class="summary-sig-arg">arg2</span>,
+        <span class="summary-sig-arg">version</span>=<span class="summary-sig-default">-1</span>,
+        <span class="summary-sig-arg">forceviewserveruse</span>=<span class="summary-sig-default">False</span>)</span><br />
+      View factory</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.factory">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== INSTANCE VARIABLES ==================== -->
+<a name="section-InstanceVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Variables</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceVariables"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="map"></a><span class="summary-name">map</span><br />
+      The map that contains the <code>attr</code>,<code>value</code> pairs
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="device"></a><span class="summary-name">device</span><br />
+      The MonkeyDevice
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="children"></a><span class="summary-name">children</span><br />
+      The children of this View
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="parent"></a><span class="summary-name">parent</span><br />
+      The parent of this View
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="currentFocus"></a><span class="summary-name">currentFocus</span><br />
+      The current focus
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="build"></a><span class="summary-name">build</span><br />
+      Build properties
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="version"></a><span class="summary-name">version</span><br />
+      API version number
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="forceviewserveruse"></a><span class="summary-name">forceviewserveruse</span><br />
+      Force ViewServer use
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="useUiAutomator"></a><span class="summary-name">useUiAutomator</span><br />
+      Whether to use UIAutomator or ViewServer
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="idProperty"></a><span class="summary-name">idProperty</span><br />
+      The id property depending on the View attribute format
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="textProperty"></a><span class="summary-name">textProperty</span><br />
+      The text property depending on the View attribute format
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="leftProperty"></a><span class="summary-name">leftProperty</span><br />
+      The left property depending on the View attribute format
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="topProperty"></a><span class="summary-name">topProperty</span><br />
+      The top property depending on the View attribute format
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="widthProperty"></a><span class="summary-name">widthProperty</span><br />
+      The width property depending on the View attribute format
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="heightProperty"></a><span class="summary-name">heightProperty</span><br />
+      The height property depending on the View attribute format
+    </td>
+  </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Method Details</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-MethodDetails"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+</table>
+<a name="factory"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">factory</span>(<span class="sig-arg">arg1</span>,
+        <span class="sig-arg">arg2</span>,
+        <span class="sig-arg">version</span>=<span class="sig-default">-1</span>,
+        <span class="sig-arg">forceviewserveruse</span>=<span class="sig-default">False</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.factory">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>View factory</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>arg1</code></strong> (ClassType or dict)</li>
+        <li><strong class="pname"><code>arg2</code></strong> (View instance or AdbClient)</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">map</span>,
+        <span class="sig-arg">device</span>,
+        <span class="sig-arg">version</span>=<span class="sig-default">-1</span>,
+        <span class="sig-arg">forceviewserveruse</span>=<span class="sig-default">False</span>)</span>
+    <br /><em class="fname">(Constructor)</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.__init__">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Constructor</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>map</code></strong> (map) - the map containing the (attribute, value) pairs</li>
+        <li><strong class="pname"><code>device</code></strong> (MonkeyDevice) - the device containing this View</li>
+        <li><strong class="pname"><code>version</code></strong> (int) - the Android SDK version number of the platform where this View 
+          belongs. If this is <code>-1</code> then the Android SDK version 
+          will be obtained in this constructor.</li>
+        <li><strong class="pname"><code>forceviewserveruse</code></strong> (boolean) - Force the use of <code>ViewServer</code> even if the conditions 
+          were given to use <code>UiAutomator</code>.</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="getClass"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getClass</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getClass">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Gets the <a href="com.dtmilano.android.viewclient.View-class.html" 
+  class="link">View</a> class</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>the <a href="com.dtmilano.android.viewclient.View-class.html" 
+          class="link">View</a> class or <code>None</code> if not defined</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="getId"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getId</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getId">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Gets the <a href="com.dtmilano.android.viewclient.View-class.html" 
+  class="link">View</a> Id</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>the <a href="com.dtmilano.android.viewclient.View-class.html" 
+          class="link">View</a> <code>Id</code> or <code>None</code> if not
+          defined</dd>
+  </dl>
+<div class="fields">      <p><strong>See Also:</strong>
+        <a 
+        href="com.dtmilano.android.viewclient.View-class.html#getUniqueId" 
+        class="link">getUniqueId()</a>
+      </p>
+</div></td></tr></table>
+</div>
+<a name="getText"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getText</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getText">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Gets the text attribute.</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>the text attribute or <code>None</code> if not defined</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="getUniqueId"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getUniqueId</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getUniqueId">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Gets the unique Id of this View.</p>
+  <dl class="fields">
+  </dl>
+<div class="fields">      <p><strong>See Also:</strong>
+        <a 
+        href="com.dtmilano.android.viewclient.ViewClient-class.html#__splitAttrs"
+        class="link" 
+        onclick="show_private();">ViewClient.__splitAttrs()</a> for a 
+        discussion on <b>Unique Ids</b>
+      </p>
+</div></td></tr></table>
+</div>
+<a name="getXY"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getXY</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">debug</span>=<span class="sig-default">False</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getXY">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Returns the <i>screen</i> coordinates of this <code>View</code>.</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>The <i>screen</i> coordinates of this <code>View</code></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="getCoords"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getCoords</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getCoords">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Gets the coords of the View</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>A tuple containing the View's coordinates ((L, T), (R, B))</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="getPositionAndSize"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getPositionAndSize</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getPositionAndSize">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Gets the position and size (X,Y, W, H)</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>A tuple containing the View's coordinates (X, Y, W, H)</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="getCenter"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getCenter</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.getCenter">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Gets the center coords of the View</p>
+  <dl class="fields">
+  </dl>
+<div class="fields">      <p><strong>Author:</strong>
+        <a href="https://github.com/deanmorin" target="_top">Dean Morin</a>
+      </p>
+</div></td></tr></table>
+</div>
+<a name="add"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">add</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">child</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.add">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Adds a child</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>child</code></strong> (View) - The child to add</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="writeImageToFile"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">writeImageToFile</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">filename</span>,
+        <span class="sig-arg">format</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">PNG</code><code class="variable-quote">'</code></span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#View.writeImageToFile">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Write the View image to the specified filename in the specified 
+  format.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>filename</code></strong> (str) - Absolute path and optional filename receiving the image. If this 
+          points to a directory, then the filename is determined by this 
+          View unique ID and format extension.</li>
+        <li><strong class="pname"><code>format</code></strong> (str) - Image format (default format is PNG)</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:36:01 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android.viewclient.ViewClient-class.html b/AndroidViewClient/doc/com.dtmilano.android.viewclient.ViewClient-class.html
new file mode 100755
index 0000000..d94ae33
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android.viewclient.ViewClient-class.html
@@ -0,0 +1,2453 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android.viewclient.ViewClient</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="com.dtmilano.android.viewclient-module.html">Module&nbsp;viewclient</a> ::
+        Class&nbsp;ViewClient
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class ViewClient</h1><p class="nomargin-top"><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient">source&nbsp;code</a></span></p>
+<p>ViewClient is a <i>ViewServer</i> client.</p>
+  <h1 class="heading">ViewServer backend</h1>
+    <p>If not running the ViewServer is started on the target device or 
+    emulator and then the port mapping is created.</p>
+  <h1 class="heading">UiAutomator backend</h1>
+    <p>No service is started.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">device</span>,
+        <span class="summary-sig-arg">serialno</span>,
+        <span class="summary-sig-arg">adb</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">autodump</span>=<span class="summary-sig-default">True</span>,
+        <span class="summary-sig-arg">forceviewserveruse</span>=<span class="summary-sig-default">False</span>,
+        <span class="summary-sig-arg">localport</span>=<span class="summary-sig-default">4939</span>,
+        <span class="summary-sig-arg">remoteport</span>=<span class="summary-sig-default">4939</span>,
+        <span class="summary-sig-arg">startviewserver</span>=<span class="summary-sig-default">True</span>,
+        <span class="summary-sig-arg">ignoreuiautomatorkilled</span>=<span class="summary-sig-default">False</span>)</span><br />
+      Constructor</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__init__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__del__"></a><span class="summary-sig-name">__del__</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__del__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#assertServiceResponse" class="summary-sig-name">assertServiceResponse</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">response</span>)</span><br />
+      Checks whether the response received from the server is correct or 
+      raises and Exception.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.assertServiceResponse">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#serviceResponse" class="summary-sig-name">serviceResponse</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">response</span>)</span><br />
+      Checks the response received from the <i>ViewServer</i>.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.serviceResponse">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#setViews" class="summary-sig-name">setViews</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">received</span>)</span><br />
+      Sets <a 
+      href="com.dtmilano.android.viewclient.ViewClient-class.html#views" 
+      class="link">self.views</a> to the received value splitting it into 
+      lines.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.setViews">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#setViewsFromUiAutomatorDump" class="summary-sig-name">setViewsFromUiAutomatorDump</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">received</span>)</span><br />
+      Sets <a 
+      href="com.dtmilano.android.viewclient.ViewClient-class.html#views" 
+      class="link">self.views</a> to the received value parsing the 
+      received XML.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.setViewsFromUiAutomatorDump">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__splitAttrs" class="summary-sig-name" onclick="show_private();">__splitAttrs</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">strArgs</span>)</span><br />
+      Splits the <code>View</code> attributes in <code>strArgs</code> and 
+      optionally adds the view id to the <code>viewsById</code> list.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__splitAttrs">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__parseTree" class="summary-sig-name" onclick="show_private();">__parseTree</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">receivedLines</span>)</span><br />
+      Parses the View tree contained in <code 
+      class="link">receivedLines</code>.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__parseTree">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__parseTreeFromUiAutomatorDump"></a><span class="summary-sig-name">__parseTreeFromUiAutomatorDump</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">receivedXml</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__parseTreeFromUiAutomatorDump">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#getRoot" class="summary-sig-name">getRoot</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the root node of the <code>View</code> tree</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.getRoot">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#traverse" class="summary-sig-name">traverse</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">ROOT</code><code class="variable-quote">'</code></span>,
+        <span class="summary-sig-arg">indent</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+        <span class="summary-sig-arg">transform</span>=<span class="summary-sig-default">&lt;unbound method View.__str__&gt;</span>,
+        <span class="summary-sig-arg">stream</span>=<span class="summary-sig-default">sys.stdout</span>)</span><br />
+      Traverses the <code>View</code> tree and prints its nodes.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverse">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#dump" class="summary-sig-name">dump</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">window</span>=<span class="summary-sig-default">-1</span>,
+        <span class="summary-sig-arg">sleep</span>=<span class="summary-sig-default">1</span>)</span><br />
+      Dumps the window content.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.dump">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#list" class="summary-sig-name">list</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">sleep</span>=<span class="summary-sig-default">1</span>)</span><br />
+      List the windows.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.list">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewById" class="summary-sig-name">findViewById</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">viewId</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">ROOT</code><code class="variable-quote">'</code></span>,
+        <span class="summary-sig-arg">viewFilter</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Finds the View with the specified viewId.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewById">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewByIdOrRaise" class="summary-sig-name">findViewByIdOrRaise</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">viewId</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">ROOT</code><code class="variable-quote">'</code></span>,
+        <span class="summary-sig-arg">viewFilter</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Finds the View or raise a ViewNotFoundException.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewByIdOrRaise">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="findViewByTag"></a><span class="summary-sig-name">findViewByTag</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">tag</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">ROOT</code><code class="variable-quote">'</code></span>)</span><br />
+      Finds the View with the specified tag</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewByTag">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="findViewByTagOrRaise"></a><span class="summary-sig-name">findViewByTagOrRaise</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">tag</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">ROOT</code><code class="variable-quote">'</code></span>)</span><br />
+      Finds the View with the specified tag or raise a 
+      ViewNotFoundException</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewByTagOrRaise">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__findViewWithAttributeInTree"></a><span class="summary-sig-name">__findViewWithAttributeInTree</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">attr</span>,
+        <span class="summary-sig-arg">val</span>,
+        <span class="summary-sig-arg">root</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__findViewWithAttributeInTree">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__findViewWithAttributeInTreeOrRaise"></a><span class="summary-sig-name">__findViewWithAttributeInTreeOrRaise</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">attr</span>,
+        <span class="summary-sig-arg">val</span>,
+        <span class="summary-sig-arg">root</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__findViewWithAttributeInTreeOrRaise">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__findViewWithAttributeInTreeThatMatches"></a><span class="summary-sig-name">__findViewWithAttributeInTreeThatMatches</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">attr</span>,
+        <span class="summary-sig-arg">regex</span>,
+        <span class="summary-sig-arg">root</span>,
+        <span class="summary-sig-arg">rlist</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__findViewWithAttributeInTreeThatMatches">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="findViewWithAttribute"></a><span class="summary-sig-name">findViewWithAttribute</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">attr</span>,
+        <span class="summary-sig-arg">val</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">ROOT</code><code class="variable-quote">'</code></span>)</span><br />
+      Finds the View with the specified attribute and value</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithAttribute">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttributeOrRaise" class="summary-sig-name">findViewWithAttributeOrRaise</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">attr</span>,
+        <span class="summary-sig-arg">val</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">ROOT</code><code class="variable-quote">'</code></span>)</span><br />
+      Finds the View or raise a ViewNotFoundException.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithAttributeOrRaise">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="findViewWithAttributeThatMatches"></a><span class="summary-sig-name">findViewWithAttributeThatMatches</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">attr</span>,
+        <span class="summary-sig-arg">regex</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">ROOT</code><code class="variable-quote">'</code></span>)</span><br />
+      Finds the list of Views with the specified attribute matching regex</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithAttributeThatMatches">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="findViewWithText"></a><span class="summary-sig-name">findViewWithText</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">text</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">ROOT</code><code class="variable-quote">'</code></span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithText">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithTextOrRaise" class="summary-sig-name">findViewWithTextOrRaise</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">text</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">ROOT</code><code class="variable-quote">'</code></span>)</span><br />
+      Finds the View or raise a ViewNotFoundException.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithTextOrRaise">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="findViewWithContentDescription"></a><span class="summary-sig-name">findViewWithContentDescription</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">contentdescription</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">ROOT</code><code class="variable-quote">'</code></span>)</span><br />
+      Finds the View with the specified content description</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithContentDescription">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="findViewWithContentDescriptionOrRaise"></a><span class="summary-sig-name">findViewWithContentDescriptionOrRaise</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">contentdescription</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">ROOT</code><code class="variable-quote">'</code></span>)</span><br />
+      Finds the View with the specified content description</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithContentDescriptionOrRaise">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="findViewsContainingPoint"></a><span class="summary-sig-name">findViewsContainingPoint</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">(x, y)</span>,
+        <span class="summary-sig-arg">filter</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Finds the list of Views that contain the point (x, y).</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewsContainingPoint">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#getViewIds" class="summary-sig-name">getViewIds</a>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.getViewIds">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#getViewsById" class="summary-sig-name">getViewsById</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Returns the Views map.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.getViewsById">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__getFocusedWindowPosition"></a><span class="summary-sig-name">__getFocusedWindowPosition</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__getFocusedWindowPosition">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getSdkVersion"></a><span class="summary-sig-name">getSdkVersion</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the SDK version.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.getSdkVersion">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="isKeyboardShown"></a><span class="summary-sig-name">isKeyboardShown</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Whether the keyboard is displayed.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.isKeyboardShown">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#writeImageToFile" class="summary-sig-name">writeImageToFile</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">filename</span>,
+        <span class="summary-sig-arg">format</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">PNG</code><code class="variable-quote">'</code></span>)</span><br />
+      Write the View image to the specified filename in the specified 
+      format.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.writeImageToFile">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#distance" class="summary-sig-name">distance</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">tree</span>)</span><br />
+      Calculates the distance between this tree and the tree passed as 
+      argument.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.distance">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="hammingDistance"></a><span class="summary-sig-name">hammingDistance</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">tree</span>)</span><br />
+      Finds the Hamming distance between this tree and the one passed as 
+      argument.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.hammingDistance">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="levenshteinDistance"></a><span class="summary-sig-name">levenshteinDistance</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">tree</span>)</span><br />
+      Finds the Levenshtein distance between this tree and the one passed 
+      as argument.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.levenshteinDistance">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== STATIC METHODS ==================== -->
+<a name="section-StaticMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Static Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-StaticMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__obtainAdbPath"></a><span class="summary-sig-name">__obtainAdbPath</span>()</span><br />
+      Obtains the ADB path attempting know locations for different OSs</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__obtainAdbPath">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__mapSerialNo"></a><span class="summary-sig-name">__mapSerialNo</span>(<span class="summary-sig-arg">serialno</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__mapSerialNo">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__obtainDeviceSerialNumber"></a><span class="summary-sig-name">__obtainDeviceSerialNumber</span>(<span class="summary-sig-arg">device</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__obtainDeviceSerialNumber">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="setAlarm"></a><span class="summary-sig-name">setAlarm</span>(<span class="summary-sig-arg">timeout</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.setAlarm">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#connectToDeviceOrExit" class="summary-sig-name">connectToDeviceOrExit</a>(<span class="summary-sig-arg">timeout</span>=<span class="summary-sig-default">60</span>,
+        <span class="summary-sig-arg">verbose</span>=<span class="summary-sig-default">False</span>,
+        <span class="summary-sig-arg">ignoresecuredevice</span>=<span class="summary-sig-default">False</span>,
+        <span class="summary-sig-arg">serialno</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Connects to a device which serial number is obtained from the script 
+      arguments if available or using the default regex <code>.*</code>.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.connectToDeviceOrExit">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdAndText" class="summary-sig-name">traverseShowClassIdAndText</a>(<span class="summary-sig-arg">view</span>,
+        <span class="summary-sig-arg">extraInfo</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">noextrainfo</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Shows the View class, id and text if available.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdAndText">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndUniqueId" class="summary-sig-name">traverseShowClassIdTextAndUniqueId</a>(<span class="summary-sig-arg">view</span>)</span><br />
+      Shows the View class, id, text if available and unique id.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndUniqueId">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndContentDescription" class="summary-sig-name">traverseShowClassIdTextAndContentDescription</a>(<span class="summary-sig-arg">view</span>)</span><br />
+      Shows the View class, id, text if available and unique id.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndContentDescription">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndCenter" class="summary-sig-name">traverseShowClassIdTextAndCenter</a>(<span class="summary-sig-arg">view</span>)</span><br />
+      Shows the View class, id and text if available.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndCenter">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextPositionAndSize" class="summary-sig-name">traverseShowClassIdTextPositionAndSize</a>(<span class="summary-sig-arg">view</span>)</span><br />
+      Shows the View class, id and text if available.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextPositionAndSize">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#TRAVERSE_CIT" class="summary-sig-name">TRAVERSE_CIT</a>(<span class="summary-sig-arg">view</span>,
+        <span class="summary-sig-arg">extraInfo</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">noextrainfo</span>=<span class="summary-sig-default">None</span>)</span><br />
+      An alias for <a 
+      href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdAndText"
+      class="link">traverseShowClassIdAndText(view)</a></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdAndText">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#TRAVERSE_CITUI" class="summary-sig-name">TRAVERSE_CITUI</a>(<span class="summary-sig-arg">view</span>)</span><br />
+      An alias for <a 
+      href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndUniqueId"
+      class="link">traverseShowClassIdTextAndUniqueId(view)</a></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndUniqueId">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#TRAVERSE_CITCD" class="summary-sig-name">TRAVERSE_CITCD</a>(<span class="summary-sig-arg">view</span>)</span><br />
+      An alias for <a 
+      href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndContentDescription"
+      class="link">traverseShowClassIdTextAndContentDescription(view)</a></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndContentDescription">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#TRAVERSE_CITC" class="summary-sig-name">TRAVERSE_CITC</a>(<span class="summary-sig-arg">view</span>)</span><br />
+      An alias for <a 
+      href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndCenter"
+      class="link">traverseShowClassIdTextAndCenter(view)</a></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndCenter">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#TRAVERSE_CITPS" class="summary-sig-name">TRAVERSE_CITPS</a>(<span class="summary-sig-arg">view</span>)</span><br />
+      An alias for <a 
+      href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextPositionAndSize"
+      class="link">traverseShowClassIdTextPositionAndSize(view)</a></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextPositionAndSize">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#sleep" class="summary-sig-name">sleep</a>(<span class="summary-sig-arg">secs</span>=<span class="summary-sig-default">1.0</span>)</span><br />
+      Sleeps for the specified number of seconds.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.sleep">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__traverse"></a><span class="summary-sig-name">__traverse</span>(<span class="summary-sig-arg">root</span>,
+        <span class="summary-sig-arg">indent</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+        <span class="summary-sig-arg">transform</span>=<span class="summary-sig-default">&lt;unbound method View.__str__&gt;</span>,
+        <span class="summary-sig-arg">stream</span>=<span class="summary-sig-default">sys.stdout</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__traverse">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__pickleable"></a><span class="summary-sig-name">__pickleable</span>(<span class="summary-sig-arg">tree</span>)</span><br />
+      Makes the tree pickleable.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__pickleable">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__hammingDistance" class="summary-sig-name" onclick="show_private();">__hammingDistance</a>(<span class="summary-sig-arg">s1</span>,
+        <span class="summary-sig-arg">s2</span>)</span><br />
+      Finds the Hamming distance between two strings.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__hammingDistance">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__levenshteinDistance" class="summary-sig-name" onclick="show_private();">__levenshteinDistance</a>(<span class="summary-sig-arg">s</span>,
+        <span class="summary-sig-arg">t</span>)</span><br />
+      Find the Levenshtein distance between two Strings.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__levenshteinDistance">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="excerpt"></a><span class="summary-sig-name">excerpt</span>(<span class="summary-sig-arg">str</span>,
+        <span class="summary-sig-arg">execute</span>=<span class="summary-sig-default">False</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.excerpt">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== INSTANCE VARIABLES ==================== -->
+<a name="section-InstanceVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Variables</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceVariables"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="device"></a><span class="summary-name">device</span><br />
+      The <code>MonkeyDevice</code> device instance
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="serialno"></a><span class="summary-name">serialno</span><br />
+      The serial number of the device
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="adb"></a><span class="summary-name">adb</span><br />
+      The adb command
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="root"></a><span class="summary-name">root</span><br />
+      The root node
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="viewsById"></a><span class="summary-name">viewsById</span><br />
+      The map containing all the <a 
+      href="com.dtmilano.android.viewclient.View-class.html" 
+      class="link">View</a>s indexed by their <a 
+      href="com.dtmilano.android.viewclient.View-class.html#getUniqueId" 
+      class="link">View.getUniqueId()</a>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="display"></a><span class="summary-name">display</span><br />
+      The map containing the device's display properties: width, height and
+      density
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="build"></a><span class="summary-name">build</span><br />
+      The map containing the device's build properties: version.sdk, 
+      version.release
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="ro"></a><span class="summary-name">ro</span><br />
+      The map containing the device's ro properties: secure, debuggable
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="forceViewServerUse"></a><span class="summary-name">forceViewServerUse</span><br />
+      Force the use of ViewServer even if the conditions to use UiAutomator
+      are satisfied
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="com.dtmilano.android.viewclient.ViewClient-class.html#ignoreUiAutomatorKilled" class="summary-name">ignoreUiAutomatorKilled</a><br />
+      On some devices (i.e.
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="windows"></a><span class="summary-name">windows</span><br />
+      The list of windows as obtained by <a 
+      href="com.dtmilano.android.viewclient.ViewClient-class.html#list" 
+      class="link">ViewClient.list()</a>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="com.dtmilano.android.viewclient.ViewClient-class.html#views" class="summary-name">views</a><br />
+      The list of Views represented as <code>str</code> obtained after 
+      splitting it into lines after being received from the server.
+    </td>
+  </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Method Details</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-MethodDetails"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">device</span>,
+        <span class="sig-arg">serialno</span>,
+        <span class="sig-arg">adb</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">autodump</span>=<span class="sig-default">True</span>,
+        <span class="sig-arg">forceviewserveruse</span>=<span class="sig-default">False</span>,
+        <span class="sig-arg">localport</span>=<span class="sig-default">4939</span>,
+        <span class="sig-arg">remoteport</span>=<span class="sig-default">4939</span>,
+        <span class="sig-arg">startviewserver</span>=<span class="sig-default">True</span>,
+        <span class="sig-arg">ignoreuiautomatorkilled</span>=<span class="sig-default">False</span>)</span>
+    <br /><em class="fname">(Constructor)</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__init__">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Constructor</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>device</code></strong> (MonkeyDevice) - The device running the <code>View server</code> to which this 
+          client will connect</li>
+        <li><strong class="pname"><code>serialno</code></strong> (str) - the serial number of the device or emulator to connect to</li>
+        <li><strong class="pname"><code>adb</code></strong> (str) - the path of the <code>adb</code> executable or None and 
+          <code>ViewClient</code> will try to find it</li>
+        <li><strong class="pname"><code>autodump</code></strong> (boolean) - whether an automatic dump is performed at the end of this 
+          constructor</li>
+        <li><strong class="pname"><code>forceviewserveruse</code></strong> (boolean) - Force the use of <code>ViewServer</code> even if the conditions 
+          to use <code>UiAutomator</code> are satisfied</li>
+        <li><strong class="pname"><code>localport</code></strong> (int) - the local port used in the redirection</li>
+        <li><strong class="pname"><code>remoteport</code></strong> (int) - the remote port used to start the <code>ViewServer</code> in the 
+          device or emulator</li>
+        <li><strong class="pname"><code>startviewserver</code></strong> (boolean) - Whether to start the <b>global</b> ViewServer</li>
+        <li><strong class="pname"><code>ignoreuiautomatorkilled</code></strong> (boolean) - Ignores received <b>Killed</b> message from 
+          <code>uiautomator</code></li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="connectToDeviceOrExit"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">connectToDeviceOrExit</span>(<span class="sig-arg">timeout</span>=<span class="sig-default">60</span>,
+        <span class="sig-arg">verbose</span>=<span class="sig-default">False</span>,
+        <span class="sig-arg">ignoresecuredevice</span>=<span class="sig-default">False</span>,
+        <span class="sig-arg">serialno</span>=<span class="sig-default">None</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.connectToDeviceOrExit">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Connects to a device which serial number is obtained from the script 
+  arguments if available or using the default regex <code>.*</code>.</p>
+  <p>If the connection is not successful the script exits. <code 
+  class="link">MonkeyRunner.waitForConnection()</code> returns a <code 
+  class="link">MonkeyDevice</code> even if the connection failed. Then, to 
+  detect this situation, <code>device.wake()</code> is attempted and if it 
+  fails then it is assumed the previous connection failed.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>timeout</code></strong> (int) - timeout for the connection</li>
+        <li><strong class="pname"><code>verbose</code></strong> (bool) - Verbose output</li>
+        <li><strong class="pname"><code>ignoresecuredevice</code></strong> (bool) - Ignores the check for a secure device</li>
+        <li><strong class="pname"><code>serialno</code></strong> (str) - The device or emulator serial number</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the device and serialno used for the connection</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="traverseShowClassIdAndText"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">traverseShowClassIdAndText</span>(<span class="sig-arg">view</span>,
+        <span class="sig-arg">extraInfo</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">noextrainfo</span>=<span class="sig-default">None</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdAndText">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Shows the View class, id and text if available. This function can be 
+  used as a transform function to <a 
+  href="com.dtmilano.android.viewclient.ViewClient-class.html#traverse" 
+  class="link">ViewClient.traverse()</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+        <li><strong class="pname"><code>extraInfo</code></strong> (method) - the View method to add extra info</li>
+        <li><strong class="pname"><code>noextrainfo</code></strong> (bool) - Don't add extra info</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="traverseShowClassIdTextAndUniqueId"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">traverseShowClassIdTextAndUniqueId</span>(<span class="sig-arg">view</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndUniqueId">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Shows the View class, id, text if available and unique id. This 
+  function can be used as a transform function to <a 
+  href="com.dtmilano.android.viewclient.ViewClient-class.html#traverse" 
+  class="link">ViewClient.traverse()</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available and unique
+          Id</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="traverseShowClassIdTextAndContentDescription"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">traverseShowClassIdTextAndContentDescription</span>(<span class="sig-arg">view</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndContentDescription">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Shows the View class, id, text if available and unique id. This 
+  function can be used as a transform function to <a 
+  href="com.dtmilano.android.viewclient.ViewClient-class.html#traverse" 
+  class="link">ViewClient.traverse()</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available and the 
+          content description</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="traverseShowClassIdTextAndCenter"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">traverseShowClassIdTextAndCenter</span>(<span class="sig-arg">view</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndCenter">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Shows the View class, id and text if available. This function can be 
+  used as a transform function to <a 
+  href="com.dtmilano.android.viewclient.ViewClient-class.html#traverse" 
+  class="link">ViewClient.traverse()</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="traverseShowClassIdTextPositionAndSize"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">traverseShowClassIdTextPositionAndSize</span>(<span class="sig-arg">view</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextPositionAndSize">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Shows the View class, id and text if available. This function can be 
+  used as a transform function to <a 
+  href="com.dtmilano.android.viewclient.ViewClient-class.html#traverse" 
+  class="link">ViewClient.traverse()</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="TRAVERSE_CIT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">TRAVERSE_CIT</span>(<span class="sig-arg">view</span>,
+        <span class="sig-arg">extraInfo</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">noextrainfo</span>=<span class="sig-default">None</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdAndText">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>An alias for <a 
+  href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdAndText"
+  class="link">traverseShowClassIdAndText(view)</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+        <li><strong class="pname"><code>extraInfo</code></strong> (method) - the View method to add extra info</li>
+        <li><strong class="pname"><code>noextrainfo</code></strong> (bool) - Don't add extra info</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="TRAVERSE_CITUI"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">TRAVERSE_CITUI</span>(<span class="sig-arg">view</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndUniqueId">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>An alias for <a 
+  href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndUniqueId"
+  class="link">traverseShowClassIdTextAndUniqueId(view)</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available and unique
+          Id</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="TRAVERSE_CITCD"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">TRAVERSE_CITCD</span>(<span class="sig-arg">view</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndContentDescription">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>An alias for <a 
+  href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndContentDescription"
+  class="link">traverseShowClassIdTextAndContentDescription(view)</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available and the 
+          content description</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="TRAVERSE_CITC"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">TRAVERSE_CITC</span>(<span class="sig-arg">view</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndCenter">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>An alias for <a 
+  href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndCenter"
+  class="link">traverseShowClassIdTextAndCenter(view)</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="TRAVERSE_CITPS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">TRAVERSE_CITPS</span>(<span class="sig-arg">view</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextPositionAndSize">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>An alias for <a 
+  href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextPositionAndSize"
+  class="link">traverseShowClassIdTextPositionAndSize(view)</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="sleep"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">sleep</span>(<span class="sig-arg">secs</span>=<span class="sig-default">1.0</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.sleep">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Sleeps for the specified number of seconds.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>secs</code></strong> (float) - number of seconds</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="assertServiceResponse"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">assertServiceResponse</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">response</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.assertServiceResponse">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Checks whether the response received from the server is correct or 
+  raises and Exception.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>response</code></strong> (str) - Response received from the server</li>
+    </ul></dd>
+    <dt>Raises:</dt>
+    <dd><ul class="nomargin-top">
+        <li><code><strong class='fraise'>Exception</strong></code> - If the response received from the server is invalid</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="serviceResponse"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">serviceResponse</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">response</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.serviceResponse">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Checks the response received from the <i>ViewServer</i>.</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd><code>True</code> if the response received matches <code 
+          class="link">PARCEL_TRUE</code>, <code>False</code> otherwise</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="setViews"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">setViews</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">received</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.setViews">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Sets <a 
+  href="com.dtmilano.android.viewclient.ViewClient-class.html#views" 
+  class="link">self.views</a> to the received value splitting it into 
+  lines.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>received</code></strong> (str) - the string received from the <i>View Server</i></li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="setViewsFromUiAutomatorDump"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">setViewsFromUiAutomatorDump</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">received</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.setViewsFromUiAutomatorDump">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Sets <a 
+  href="com.dtmilano.android.viewclient.ViewClient-class.html#views" 
+  class="link">self.views</a> to the received value parsing the received 
+  XML.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>received</code></strong> (str) - the string received from the <i>UI Automator</i></li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="__splitAttrs"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__splitAttrs</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">strArgs</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__splitAttrs">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Splits the <code>View</code> attributes in <code>strArgs</code> and 
+  optionally adds the view id to the <code>viewsById</code> list.</p>
+  <h1 class="heading">Unique Ids</h1>
+    <p>It is very common to find <code>View</code>s having <b>NO_ID</b> as 
+    the Id. This turns very difficult to use <a 
+    href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewById"
+    class="link">self.findViewById()</a>. To help in this situation this 
+    method assigns <b>unique Ids</b>.</p>
+    <p>The <b>unique Ids</b> are generated using the pattern 
+    <code>id/no_id/&lt;number&gt;</code> with <code>&lt;number&gt;</code> 
+    starting at 1.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>strArgs</code></strong> (str) - the string containing the raw list of attributes and values</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>Returns the attributes map.</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="__parseTree"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__parseTree</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">receivedLines</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__parseTree">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Parses the View tree contained in <code 
+  class="link">receivedLines</code>. The tree is created and the root node 
+  assigned to <a 
+  href="com.dtmilano.android.viewclient.ViewClient-class.html#root" 
+  class="link">self.root</a>. This method also assigns <a 
+  href="com.dtmilano.android.viewclient.ViewClient-class.html#viewsById" 
+  class="link">self.viewsById</a> values using <a 
+  href="com.dtmilano.android.viewclient.View-class.html#getUniqueId" 
+  class="link">View.getUniqueId</a> as the key.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>receivedLines</code></strong> (str) - the string received from <b>View Server</b></li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="getRoot"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getRoot</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.getRoot">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Gets the root node of the <code>View</code> tree</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>the root node of the <code>View</code> tree</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="traverse"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">traverse</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">root</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">ROOT</code><code class="variable-quote">'</code></span>,
+        <span class="sig-arg">indent</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+        <span class="sig-arg">transform</span>=<span class="sig-default">&lt;unbound method View.__str__&gt;</span>,
+        <span class="sig-arg">stream</span>=<span class="sig-default">sys.stdout</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverse">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Traverses the <code>View</code> tree and prints its nodes.</p>
+  <p>The nodes are printed converting them to string but other 
+  transformations can be specified by providing a method name as the 
+  <code>transform</code> parameter.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>root</code></strong> (<a href="com.dtmilano.android.viewclient.View-class.html" 
+          class="link">View</a>) - the root node from where the traverse starts</li>
+        <li><strong class="pname"><code>indent</code></strong> (str) - the indentation string to use to print the nodes</li>
+        <li><strong class="pname"><code>transform</code></strong> (method) - a method to use to transform the node before is printed</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="dump"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">dump</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">window</span>=<span class="sig-default">-1</span>,
+        <span class="sig-arg">sleep</span>=<span class="sig-default">1</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.dump">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Dumps the window content.</p>
+  <p>Sleep is useful to wait some time before obtaining the new content 
+  when something in the window has changed.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>window</code></strong> (int or str) - the window id or name of the window to dump. The <b>name</b> is 
+          the package name or the window name (i.e. StatusBar) for system 
+          windows. The window id can be provided as <code>int</code> or 
+          <code>str</code>. The <code>str</code> should represent and 
+          <code>int</code> in either base 10 or 16. Use -1 to dump all 
+          windows. This parameter only is used when the backend is 
+          <b>ViewServer</b> and it's ignored for <b>UiAutomator</b>.</li>
+        <li><strong class="pname"><code>sleep</code></strong> (int) - sleep in seconds before proceeding to dump the content</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the list of Views as <code>str</code> received from the server 
+          after being split into lines</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="list"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">list</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">sleep</span>=<span class="sig-default">1</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.list">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>List the windows.</p>
+  <p>Sleep is useful to wait some time before obtaining the new content 
+  when something in the window has changed. This also sets <a 
+  href="com.dtmilano.android.viewclient.ViewClient-class.html#windows" 
+  class="link">self.windows</a> as the list of windows.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>sleep</code></strong> (int) - sleep in seconds before proceeding to dump the content</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the list of windows</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="findViewById"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">findViewById</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">viewId</span>,
+        <span class="sig-arg">root</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">ROOT</code><code class="variable-quote">'</code></span>,
+        <span class="sig-arg">viewFilter</span>=<span class="sig-default">None</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewById">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Finds the View with the specified viewId.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>viewId</code></strong> (str) - the ID of the view to find</li>
+        <li><strong class="pname"><code>root</code></strong> (str) - the root node of the tree where the View will be searched</li>
+        <li><strong class="pname"><code>viewFilter</code></strong> - a function that will be invoked providing the candidate View as a
+          parameter and depending on the return value (<code>True</code> or
+          <code>False</code>) the View will be selected and returned as the
+          result of <code>findViewById()</code> or ignored. This can be 
+          <code>None</code> and no extra filtering is applied.</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the <code>View</code> found or <code>None</code></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="findViewByIdOrRaise"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">findViewByIdOrRaise</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">viewId</span>,
+        <span class="sig-arg">root</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">ROOT</code><code class="variable-quote">'</code></span>,
+        <span class="sig-arg">viewFilter</span>=<span class="sig-default">None</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewByIdOrRaise">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Finds the View or raise a ViewNotFoundException.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>viewId</code></strong> (str) - the ID of the view to find</li>
+        <li><strong class="pname"><code>root</code></strong> (str) - the root node of the tree where the View will be searched</li>
+        <li><strong class="pname"><code>viewFilter</code></strong> - a function that will be invoked providing the candidate View as a
+          parameter and depending on the return value (<code>True</code> or
+          <code>False</code>) the View will be selected and returned as the
+          result of <code>findViewById()</code> or ignored. This can be 
+          <code>None</code> and no extra filtering is applied.</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the View found</dd>
+    <dt>Raises:</dt>
+    <dd><ul class="nomargin-top">
+        <li><code><strong class='fraise'><a href="com.dtmilano.android.viewclient.ViewNotFoundException-class.html">ViewNotFoundException</a></strong></code> - raise the exception if View not found</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="findViewWithAttributeOrRaise"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">findViewWithAttributeOrRaise</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">attr</span>,
+        <span class="sig-arg">val</span>,
+        <span class="sig-arg">root</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">ROOT</code><code class="variable-quote">'</code></span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithAttributeOrRaise">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Finds the View or raise a ViewNotFoundException.</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>the View found</dd>
+    <dt>Raises:</dt>
+    <dd><ul class="nomargin-top">
+        <li><code><strong class='fraise'><a href="com.dtmilano.android.viewclient.ViewNotFoundException-class.html">ViewNotFoundException</a></strong></code> - raise the exception if View not found</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="findViewWithTextOrRaise"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">findViewWithTextOrRaise</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">text</span>,
+        <span class="sig-arg">root</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">ROOT</code><code class="variable-quote">'</code></span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithTextOrRaise">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Finds the View or raise a ViewNotFoundException.</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>the View found</dd>
+    <dt>Raises:</dt>
+    <dd><ul class="nomargin-top">
+        <li><code><strong class='fraise'><a href="com.dtmilano.android.viewclient.ViewNotFoundException-class.html">ViewNotFoundException</a></strong></code> - raise the exception if View not found</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="getViewIds"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getViewIds</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.getViewIds">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  
+  <dl class="fields">
+  </dl>
+<div class="fields">      <p><strong>Deprecated:</strong>
+        Use <a 
+    href="com.dtmilano.android.viewclient.ViewClient-class.html#getViewsById"
+    class="link">getViewsById</a> instead.
+    <p>Returns the Views map.</p>
+      </p>
+</div></td></tr></table>
+</div>
+<a name="getViewsById"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getViewsById</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.getViewsById">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Returns the Views map. The keys are <code>uniqueIds</code> and the 
+  values are <code>View</code>s.</p>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="writeImageToFile"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">writeImageToFile</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">filename</span>,
+        <span class="sig-arg">format</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">PNG</code><code class="variable-quote">'</code></span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.writeImageToFile">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Write the View image to the specified filename in the specified 
+  format.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>filename</code></strong> (str) - Absolute path and optional filename receiving the image. If this 
+          points to a directory, then the filename is determined by the 
+          serialno of the device and format extension.</li>
+        <li><strong class="pname"><code>format</code></strong> (str) - Image format (default format is PNG)</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="distance"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">distance</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">tree</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.distance">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Calculates the distance between this tree and the tree passed as 
+  argument.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>tree</code></strong> (list of Views) - Tree of Views</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the distance</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="__hammingDistance"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__hammingDistance</span>(<span class="sig-arg">s1</span>,
+        <span class="sig-arg">s2</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__hammingDistance">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Finds the Hamming distance between two strings.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>s1</code></strong> - string</li>
+        <li><strong class="pname"><code>s2</code></strong> - string</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the distance</dd>
+    <dt>Raises:</dt>
+    <dd><ul class="nomargin-top">
+        <li><code><strong class='fraise'>ValueError</strong></code> - if the lenght of the strings differ</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="__levenshteinDistance"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__levenshteinDistance</span>(<span class="sig-arg">s</span>,
+        <span class="sig-arg">t</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__levenshteinDistance">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Find the Levenshtein distance between two Strings.</p>
+  <p>Python version of Levenshtein distance method implemented in Java at 
+  <a 
+  href="http://www.java2s.com/Code/Java/Data-Type/FindtheLevenshteindistancebetweentwoStrings.htm"
+  
+  target="_top">http://www.java2s.com/Code/Java/Data-Type/FindtheLevenshteindistancebetweentwoStrings.htm</a>.</p>
+  <p>This is the number of changes needed to change one String into 
+  another, where each change is a single character modification (deletion, 
+  insertion or substitution).</p>
+  <p>The previous implementation of the Levenshtein distance algorithm was 
+  from <a href="http://www.merriampark.com/ld.htm" 
+  target="_top">http://www.merriampark.com/ld.htm</a></p>
+  <p>Chas Emerick has written an implementation in Java, which avoids an 
+  OutOfMemoryError which can occur when my Java implementation is used with
+  very large strings. This implementation of the Levenshtein distance 
+  algorithm is from <a href="http://www.merriampark.com/ldjava.htm" 
+  target="_top">http://www.merriampark.com/ldjava.htm</a>:</p>
+<pre class="literalblock">
+   StringUtils.getLevenshteinDistance(null, *)             = IllegalArgumentException
+   StringUtils.getLevenshteinDistance(*, null)             = IllegalArgumentException
+   StringUtils.getLevenshteinDistance(&quot;&quot;,&quot;&quot;)               = 0
+   StringUtils.getLevenshteinDistance(&quot;&quot;,&quot;a&quot;)              = 1
+   StringUtils.getLevenshteinDistance(&quot;aaapppp&quot;, &quot;&quot;)       = 7
+   StringUtils.getLevenshteinDistance(&quot;frog&quot;, &quot;fog&quot;)       = 1
+   StringUtils.getLevenshteinDistance(&quot;fly&quot;, &quot;ant&quot;)        = 3
+   StringUtils.getLevenshteinDistance(&quot;elephant&quot;, &quot;hippo&quot;) = 7
+   StringUtils.getLevenshteinDistance(&quot;hippo&quot;, &quot;elephant&quot;) = 7
+   StringUtils.getLevenshteinDistance(&quot;hippo&quot;, &quot;zzzzzzzz&quot;) = 8
+   StringUtils.getLevenshteinDistance(&quot;hello&quot;, &quot;hallo&quot;)    = 1
+</pre>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>s</code></strong> - the first String, must not be null</li>
+        <li><strong class="pname"><code>t</code></strong> - the second String, must not be null</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>result distance</dd>
+    <dt>Raises:</dt>
+    <dd><ul class="nomargin-top">
+        <li><code><strong class='fraise'>ValueError</strong></code> - if either String input <code>null</code></li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== INSTANCE VARIABLE DETAILS ==================== -->
+<a name="section-InstanceVariableDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Variable Details</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceVariableDetails"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+</table>
+<a name="ignoreUiAutomatorKilled"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">ignoreUiAutomatorKilled</h3>
+  <p>On some devices (i.e. Nexus 7 running 4.2.2) uiautomator is killed 
+  just after generating the dump file. In many cases the file is already 
+  complete so we can ask to ignore the 'Killed' message by setting <code 
+  class="link">ignoreuiautomatorkilled</code> to <code>True</code>.</p>
+  <p>Changes in v2.3.21 that uses <code>/dev/tty</code> instead of a file 
+  may have turned this variable unnecessary, however it has been kept for 
+  backward compatibility.</p>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="views"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">views</h3>
+  <p>The list of Views represented as <code>str</code> obtained after 
+  splitting it into lines after being received from the server. Done by <a 
+  href="com.dtmilano.android.viewclient.ViewClient-class.html#setViews" 
+  class="link">self.setViews()</a>.</p>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:36:01 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android.viewclient.ViewNotFoundException-class.html b/AndroidViewClient/doc/com.dtmilano.android.viewclient.ViewNotFoundException-class.html
new file mode 100755
index 0000000..612043c
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android.viewclient.ViewNotFoundException-class.html
@@ -0,0 +1,282 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android.viewclient.ViewNotFoundException</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="com.dtmilano.android.viewclient-module.html">Module&nbsp;viewclient</a> ::
+        Class&nbsp;ViewNotFoundException
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android.viewclient.ViewNotFoundException-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class ViewNotFoundException</h1><p class="nomargin-top"><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewNotFoundException">source&nbsp;code</a></span></p>
+<center>
+<center>  <map id="uml_class_diagram_for_com_dtmi_4" name="uml_class_diagram_for_com_dtmi_4">
+<area shape="rect" id="node1_14" href="com.dtmilano.android.viewclient.ViewNotFoundException-class.html#__init__" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="17,393,195,412"/>
+<area shape="rect" id="node1" href="com.dtmilano.android.viewclient.ViewNotFoundException-class.html" title="ViewNotFoundException is raised when a View is not found." alt="" coords="5,361,206,418"/>
+<area shape="rect" id="node2_15" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="43,316,169,335"/>
+<area shape="rect" id="node2" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="30,283,181,341"/>
+<area shape="rect" id="node3_16" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="28,31,185,49"/>
+<area shape="rect" id="node3_17" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="28,49,185,68"/>
+<area shape="rect" id="node3_18" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="28,71,185,89"/>
+<area shape="rect" id="node3_19" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="28,89,185,108"/>
+<area shape="rect" id="node3_20" href="javascript:void(0);" title="x[y]" alt="" coords="28,108,185,127"/>
+<area shape="rect" id="node3_21" href="javascript:void(0);" title="x[i:j]" alt="" coords="28,127,185,145"/>
+<area shape="rect" id="node3_22" href="javascript:void(0);" title="helper for pickle" alt="" coords="28,145,185,164"/>
+<area shape="rect" id="node3_23" href="javascript:void(0);" title="repr(x)" alt="" coords="28,164,185,183"/>
+<area shape="rect" id="node3_24" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="28,183,185,201"/>
+<area shape="rect" id="node3_25" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="28,201,185,220"/>
+<area shape="rect" id="node3_26" href="javascript:void(0);" title="str(x)" alt="" coords="28,220,185,239"/>
+<area shape="rect" id="node3_27" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="28,239,185,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="16,6,197,263"/>
+</map>
+  <img src="uml_class_diagram_for_com_dtmi_4.gif" alt='' usemap="#uml_class_diagram_for_com_dtmi_4" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>ViewNotFoundException is raised when a View is not found.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewNotFoundException-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">attr</span>,
+        <span class="summary-sig-arg">value</span>,
+        <span class="summary-sig-arg">root</span>)</span><br />
+      x.__init__(...) initializes x; see help(type(x)) for signature</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewNotFoundException.__init__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+      <code>__new__</code>
+      </p>
+    <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+      <code>__delattr__</code>,
+      <code>__getattribute__</code>,
+      <code>__getitem__</code>,
+      <code>__getslice__</code>,
+      <code>__reduce__</code>,
+      <code>__repr__</code>,
+      <code>__setattr__</code>,
+      <code>__setstate__</code>,
+      <code>__str__</code>,
+      <code>__unicode__</code>
+      </p>
+    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+      <code>__format__</code>,
+      <code>__hash__</code>,
+      <code>__reduce_ex__</code>,
+      <code>__sizeof__</code>,
+      <code>__subclasshook__</code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Properties</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Properties"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+      <code>args</code>,
+      <code>message</code>
+      </p>
+    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+      <code>__class__</code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Method Details</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-MethodDetails"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">attr</span>,
+        <span class="sig-arg">value</span>,
+        <span class="sig-arg">root</span>)</span>
+    <br /><em class="fname">(Constructor)</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewNotFoundException.__init__">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>x.__init__(...) initializes x; see help(type(x)) for signature</p>
+  <dl class="fields">
+    <dt>Overrides:
+        object.__init__
+        <dd><em class="note">(inherited documentation)</em></dd>
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:36:02 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/com.dtmilano.android.viewclient.Window-class.html b/AndroidViewClient/doc/com.dtmilano.android.viewclient.Window-class.html
new file mode 100755
index 0000000..d43feb5
--- /dev/null
+++ b/AndroidViewClient/doc/com.dtmilano.android.viewclient.Window-class.html
@@ -0,0 +1,242 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>com.dtmilano.android.viewclient.Window</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="com.dtmilano.android.viewclient-module.html">Module&nbsp;viewclient</a> ::
+        Class&nbsp;Window
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="com.dtmilano.android.viewclient.Window-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Window</h1><p class="nomargin-top"><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#Window">source&nbsp;code</a></span></p>
+<p>Window class</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.Window-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">num</span>,
+        <span class="summary-sig-arg">winId</span>,
+        <span class="summary-sig-arg">activity</span>,
+        <span class="summary-sig-arg">wvx</span>,
+        <span class="summary-sig-arg">wvy</span>,
+        <span class="summary-sig-arg">wvw</span>,
+        <span class="summary-sig-arg">wvh</span>,
+        <span class="summary-sig-arg">px</span>,
+        <span class="summary-sig-arg">py</span>,
+        <span class="summary-sig-arg">visibility</span>)</span><br />
+      Constructor</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#Window.__init__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__str__"></a><span class="summary-sig-name">__str__</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#Window.__str__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Method Details</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-MethodDetails"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">num</span>,
+        <span class="sig-arg">winId</span>,
+        <span class="sig-arg">activity</span>,
+        <span class="sig-arg">wvx</span>,
+        <span class="sig-arg">wvy</span>,
+        <span class="sig-arg">wvw</span>,
+        <span class="sig-arg">wvh</span>,
+        <span class="sig-arg">px</span>,
+        <span class="sig-arg">py</span>,
+        <span class="sig-arg">visibility</span>)</span>
+    <br /><em class="fname">(Constructor)</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#Window.__init__">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Constructor</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>num</code></strong> (int) - Ordering number in Window Manager</li>
+        <li><strong class="pname"><code>winId</code></strong> (str) - the window ID</li>
+        <li><strong class="pname"><code>activity</code></strong> (str) - the activity (or sometimes other component) owning the window</li>
+        <li><strong class="pname"><code>wvx</code></strong> (int) - window's virtual X</li>
+        <li><strong class="pname"><code>wvy</code></strong> (int) - window's virtual Y</li>
+        <li><strong class="pname"><code>wvw</code></strong> (int) - window's virtual width</li>
+        <li><strong class="pname"><code>wvh</code></strong> (int) - window's virtual height</li>
+        <li><strong class="pname"><code>px</code></strong> (int) - parent's X</li>
+        <li><strong class="pname"><code>py</code></strong> (int) - parent's Y</li>
+        <li><strong class="pname"><code>visibility</code></strong> (int) - visibility of the window</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:36:02 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/crarr.png b/AndroidViewClient/doc/crarr.png
new file mode 100755
index 0000000..26b43c5
--- /dev/null
+++ b/AndroidViewClient/doc/crarr.png
Binary files differ
diff --git a/AndroidViewClient/doc/deprecated-index.html b/AndroidViewClient/doc/deprecated-index.html
new file mode 100755
index 0000000..8233135
--- /dev/null
+++ b/AndroidViewClient/doc/deprecated-index.html
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>Deprecation List</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Indices&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">&nbsp;</td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="deprecated-index.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<center><b>[
+ <a href="identifier-index.html">Identifiers</a>
+| <a href="deprecated-index.html">Deprecations</a>
+]</b></center><br />
+<h1 class="epydoc"><a name="deprecated">Deprecation List</a></h1>
+<br />
+<div>
+<table width="100%" class="metadata-index" bgcolor="#e0e0e0"><tr><td class="metadata-index"><b>Deprecations in <a href="com.dtmilano.android.viewclient.ViewClient-class.html#getViewIds">com.dtmilano.android.viewclient.ViewClient.getViewIds</a></b>    <ul class="nomargin">
+      <li>Use <a 
+    href="com.dtmilano.android.viewclient.ViewClient-class.html#getViewsById"
+    class="link">getViewsById</a> instead.
+    <p>Returns the Views map.</p></li>
+    </ul>
+</table></div>
+<br /><!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Indices&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:35:57 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/epydoc.css b/AndroidViewClient/doc/epydoc.css
new file mode 100755
index 0000000..86d4170
--- /dev/null
+++ b/AndroidViewClient/doc/epydoc.css
@@ -0,0 +1,322 @@
+
+
+/* Epydoc CSS Stylesheet
+ *
+ * This stylesheet can be used to customize the appearance of epydoc's
+ * HTML output.
+ *
+ */
+
+/* Default Colors & Styles
+ *   - Set the default foreground & background color with 'body'; and 
+ *     link colors with 'a:link' and 'a:visited'.
+ *   - Use bold for decision list terms.
+ *   - The heading styles defined here are used for headings *within*
+ *     docstring descriptions.  All headings used by epydoc itself use
+ *     either class='epydoc' or class='toc' (CSS styles for both
+ *     defined below).
+ */
+body                        { background: #ffffff; color: #000000; }
+p                           { margin-top: 0.5em; margin-bottom: 0.5em; }
+a:link                      { color: #0000ff; }
+a:visited                   { color: #204080; }
+dt                          { font-weight: bold; }
+h1                          { font-size: +140%; font-style: italic;
+                              font-weight: bold; }
+h2                          { font-size: +125%; font-style: italic;
+                              font-weight: bold; }
+h3                          { font-size: +110%; font-style: italic;
+                              font-weight: normal; }
+code                        { font-size: 100%; }
+/* N.B.: class, not pseudoclass */
+a.link                      { font-family: monospace; }
+ 
+/* Page Header & Footer
+ *   - The standard page header consists of a navigation bar (with
+ *     pointers to standard pages such as 'home' and 'trees'); a
+ *     breadcrumbs list, which can be used to navigate to containing
+ *     classes or modules; options links, to show/hide private
+ *     variables and to show/hide frames; and a page title (using
+ *     <h1>).  The page title may be followed by a link to the
+ *     corresponding source code (using 'span.codelink').
+ *   - The footer consists of a navigation bar, a timestamp, and a
+ *     pointer to epydoc's homepage.
+ */ 
+h1.epydoc                   { margin: 0; font-size: +140%; font-weight: bold; }
+h2.epydoc                   { font-size: +130%; font-weight: bold; }
+h3.epydoc                   { font-size: +115%; font-weight: bold;
+                              margin-top: 0.2em; }
+td h3.epydoc                { font-size: +115%; font-weight: bold;
+                              margin-bottom: 0; }
+table.navbar                { background: #a0c0ff; color: #000000;
+                              border: 2px groove #c0d0d0; }
+table.navbar table          { color: #000000; }
+th.navbar-select            { background: #70b0ff;
+                              color: #000000; } 
+table.navbar a              { text-decoration: none; }  
+table.navbar a:link         { color: #0000ff; }
+table.navbar a:visited      { color: #204080; }
+span.breadcrumbs            { font-size: 85%; font-weight: bold; }
+span.options                { font-size: 70%; }
+span.codelink               { font-size: 85%; }
+td.footer                   { font-size: 85%; }
+
+/* Table Headers
+ *   - Each summary table and details section begins with a 'header'
+ *     row.  This row contains a section title (marked by
+ *     'span.table-header') as well as a show/hide private link
+ *     (marked by 'span.options', defined above).
+ *   - Summary tables that contain user-defined groups mark those
+ *     groups using 'group header' rows.
+ */
+td.table-header             { background: #70b0ff; color: #000000;
+                              border: 1px solid #608090; }
+td.table-header table       { color: #000000; }
+td.table-header table a:link      { color: #0000ff; }
+td.table-header table a:visited   { color: #204080; }
+span.table-header           { font-size: 120%; font-weight: bold; }
+th.group-header             { background: #c0e0f8; color: #000000;
+                              text-align: left; font-style: italic; 
+                              font-size: 115%; 
+                              border: 1px solid #608090; }
+
+/* Summary Tables (functions, variables, etc)
+ *   - Each object is described by a single row of the table with
+ *     two cells.  The left cell gives the object's type, and is
+ *     marked with 'code.summary-type'.  The right cell gives the
+ *     object's name and a summary description.
+ *   - CSS styles for the table's header and group headers are
+ *     defined above, under 'Table Headers'
+ */
+table.summary               { border-collapse: collapse;
+                              background: #e8f0f8; color: #000000;
+                              border: 1px solid #608090;
+                              margin-bottom: 0.5em; }
+td.summary                  { border: 1px solid #608090; }
+code.summary-type           { font-size: 85%; }
+table.summary a:link        { color: #0000ff; }
+table.summary a:visited     { color: #204080; }
+
+
+/* Details Tables (functions, variables, etc)
+ *   - Each object is described in its own div.
+ *   - A single-row summary table w/ table-header is used as
+ *     a header for each details section (CSS style for table-header
+ *     is defined above, under 'Table Headers').
+ */
+table.details               { border-collapse: collapse;
+                              background: #e8f0f8; color: #000000;
+                              border: 1px solid #608090;
+                              margin: .2em 0 0 0; }
+table.details table         { color: #000000; }
+table.details a:link        { color: #0000ff; }
+table.details a:visited     { color: #204080; }
+
+/* Fields */
+dl.fields                   { margin-left: 2em; margin-top: 1em;
+                              margin-bottom: 1em; }
+dl.fields dd ul             { margin-left: 0em; padding-left: 0em; }
+dl.fields dd ul li ul       { margin-left: 2em; padding-left: 0em; }
+div.fields                  { margin-left: 2em; }
+div.fields p                { margin-bottom: 0.5em; }
+
+/* Index tables (identifier index, term index, etc)
+ *   - link-index is used for indices containing lists of links
+ *     (namely, the identifier index & term index).
+ *   - index-where is used in link indices for the text indicating
+ *     the container/source for each link.
+ *   - metadata-index is used for indices containing metadata
+ *     extracted from fields (namely, the bug index & todo index).
+ */
+table.link-index            { border-collapse: collapse;
+                              background: #e8f0f8; color: #000000;
+                              border: 1px solid #608090; }
+td.link-index               { border-width: 0px; }
+table.link-index a:link     { color: #0000ff; }
+table.link-index a:visited  { color: #204080; }
+span.index-where            { font-size: 70%; }
+table.metadata-index        { border-collapse: collapse;
+                              background: #e8f0f8; color: #000000;
+                              border: 1px solid #608090; 
+                              margin: .2em 0 0 0; }
+td.metadata-index           { border-width: 1px; border-style: solid; }
+table.metadata-index a:link { color: #0000ff; }
+table.metadata-index a:visited  { color: #204080; }
+
+/* Function signatures
+ *   - sig* is used for the signature in the details section.
+ *   - .summary-sig* is used for the signature in the summary 
+ *     table, and when listing property accessor functions.
+ * */
+.sig-name                   { color: #006080; }
+.sig-arg                    { color: #008060; }
+.sig-default                { color: #602000; }
+.summary-sig                { font-family: monospace; }
+.summary-sig-name           { color: #006080; font-weight: bold; }
+table.summary a.summary-sig-name:link
+                            { color: #006080; font-weight: bold; }
+table.summary a.summary-sig-name:visited
+                            { color: #006080; font-weight: bold; }
+.summary-sig-arg            { color: #006040; }
+.summary-sig-default        { color: #501800; }
+
+/* Subclass list
+ */
+ul.subclass-list { display: inline; }
+ul.subclass-list li { display: inline; }
+
+/* To render variables, classes etc. like functions */
+table.summary .summary-name { color: #006080; font-weight: bold;
+                              font-family: monospace; }
+table.summary
+     a.summary-name:link    { color: #006080; font-weight: bold;
+                              font-family: monospace; }
+table.summary
+    a.summary-name:visited  { color: #006080; font-weight: bold;
+                              font-family: monospace; }
+
+/* Variable values
+ *   - In the 'variable details' sections, each varaible's value is
+ *     listed in a 'pre.variable' box.  The width of this box is
+ *     restricted to 80 chars; if the value's repr is longer than
+ *     this it will be wrapped, using a backslash marked with
+ *     class 'variable-linewrap'.  If the value's repr is longer
+ *     than 3 lines, the rest will be ellided; and an ellipsis
+ *     marker ('...' marked with 'variable-ellipsis') will be used.
+ *   - If the value is a string, its quote marks will be marked
+ *     with 'variable-quote'.
+ *   - If the variable is a regexp, it is syntax-highlighted using
+ *     the re* CSS classes.
+ */
+pre.variable                { padding: .5em; margin: 0;
+                              background: #dce4ec; color: #000000;
+                              border: 1px solid #708890; }
+.variable-linewrap          { color: #604000; font-weight: bold; }
+.variable-ellipsis          { color: #604000; font-weight: bold; }
+.variable-quote             { color: #604000; font-weight: bold; }
+.variable-group             { color: #008000; font-weight: bold; }
+.variable-op                { color: #604000; font-weight: bold; }
+.variable-string            { color: #006030; }
+.variable-unknown           { color: #a00000; font-weight: bold; }
+.re                         { color: #000000; }
+.re-char                    { color: #006030; }
+.re-op                      { color: #600000; }
+.re-group                   { color: #003060; }
+.re-ref                     { color: #404040; }
+
+/* Base tree
+ *   - Used by class pages to display the base class hierarchy.
+ */
+pre.base-tree               { font-size: 80%; margin: 0; }
+
+/* Frames-based table of contents headers
+ *   - Consists of two frames: one for selecting modules; and
+ *     the other listing the contents of the selected module.
+ *   - h1.toc is used for each frame's heading
+ *   - h2.toc is used for subheadings within each frame.
+ */
+h1.toc                      { text-align: center; font-size: 105%;
+                              margin: 0; font-weight: bold;
+                              padding: 0; }
+h2.toc                      { font-size: 100%; font-weight: bold; 
+                              margin: 0.5em 0 0 -0.3em; }
+
+/* Syntax Highlighting for Source Code
+ *   - doctest examples are displayed in a 'pre.py-doctest' block.
+ *     If the example is in a details table entry, then it will use
+ *     the colors specified by the 'table pre.py-doctest' line.
+ *   - Source code listings are displayed in a 'pre.py-src' block.
+ *     Each line is marked with 'span.py-line' (used to draw a line
+ *     down the left margin, separating the code from the line
+ *     numbers).  Line numbers are displayed with 'span.py-lineno'.
+ *     The expand/collapse block toggle button is displayed with
+ *     'a.py-toggle' (Note: the CSS style for 'a.py-toggle' should not
+ *     modify the font size of the text.)
+ *   - If a source code page is opened with an anchor, then the
+ *     corresponding code block will be highlighted.  The code
+ *     block's header is highlighted with 'py-highlight-hdr'; and
+ *     the code block's body is highlighted with 'py-highlight'.
+ *   - The remaining py-* classes are used to perform syntax
+ *     highlighting (py-string for string literals, py-name for names,
+ *     etc.)
+ */
+pre.py-doctest              { padding: .5em; margin: 1em;
+                              background: #e8f0f8; color: #000000;
+                              border: 1px solid #708890; }
+table pre.py-doctest        { background: #dce4ec;
+                              color: #000000; }
+pre.py-src                  { border: 2px solid #000000; 
+                              background: #f0f0f0; color: #000000; }
+.py-line                    { border-left: 2px solid #000000; 
+                              margin-left: .2em; padding-left: .4em; }
+.py-lineno                  { font-style: italic; font-size: 90%;
+                              padding-left: .5em; }
+a.py-toggle                 { text-decoration: none; }
+div.py-highlight-hdr        { border-top: 2px solid #000000;
+                              border-bottom: 2px solid #000000;
+                              background: #d8e8e8; }
+div.py-highlight            { border-bottom: 2px solid #000000;
+                              background: #d0e0e0; }
+.py-prompt                  { color: #005050; font-weight: bold;}
+.py-more                    { color: #005050; font-weight: bold;}
+.py-string                  { color: #006030; }
+.py-comment                 { color: #003060; }
+.py-keyword                 { color: #600000; }
+.py-output                  { color: #404040; }
+.py-name                    { color: #000050; }
+.py-name:link               { color: #000050 !important; }
+.py-name:visited            { color: #000050 !important; }
+.py-number                  { color: #005000; }
+.py-defname                 { color: #000060; font-weight: bold; }
+.py-def-name                { color: #000060; font-weight: bold; }
+.py-base-class              { color: #000060; }
+.py-param                   { color: #000060; }
+.py-docstring               { color: #006030; }
+.py-decorator               { color: #804020; }
+/* Use this if you don't want links to names underlined: */
+/*a.py-name                   { text-decoration: none; }*/
+
+/* Graphs & Diagrams
+ *   - These CSS styles are used for graphs & diagrams generated using
+ *     Graphviz dot.  'img.graph-without-title' is used for bare
+ *     diagrams (to remove the border created by making the image
+ *     clickable).
+ */
+img.graph-without-title     { border: none; }
+img.graph-with-title        { border: 1px solid #000000; }
+span.graph-title            { font-weight: bold; }
+span.graph-caption          { }
+
+/* General-purpose classes
+ *   - 'p.indent-wrapped-lines' defines a paragraph whose first line
+ *     is not indented, but whose subsequent lines are.
+ *   - The 'nomargin-top' class is used to remove the top margin (e.g.
+ *     from lists).  The 'nomargin' class is used to remove both the
+ *     top and bottom margin (but not the left or right margin --
+ *     for lists, that would cause the bullets to disappear.)
+ */
+p.indent-wrapped-lines      { padding: 0 0 0 7em; text-indent: -7em; 
+                              margin: 0; }
+.nomargin-top               { margin-top: 0; }
+.nomargin                   { margin-top: 0; margin-bottom: 0; }
+
+/* HTML Log */
+div.log-block               { padding: 0; margin: .5em 0 .5em 0;
+                              background: #e8f0f8; color: #000000;
+                              border: 1px solid #000000; }
+div.log-error               { padding: .1em .3em .1em .3em; margin: 4px;
+                              background: #ffb0b0; color: #000000;
+                              border: 1px solid #000000; }
+div.log-warning             { padding: .1em .3em .1em .3em; margin: 4px;
+                              background: #ffffb0; color: #000000;
+                              border: 1px solid #000000; }
+div.log-info               { padding: .1em .3em .1em .3em; margin: 4px;
+                              background: #b0ffb0; color: #000000;
+                              border: 1px solid #000000; }
+h2.log-hdr                  { background: #70b0ff; color: #000000;
+                              margin: 0; padding: 0em 0.5em 0em 0.5em;
+                              border-bottom: 1px solid #000000; font-size: 110%; }
+p.log                       { font-weight: bold; margin: .5em 0 .5em 0; }
+tr.opt-changed              { color: #000000; font-weight: bold; }
+tr.opt-default              { color: #606060; }
+pre.log                     { margin: 0; padding: 0; padding-left: 1em; }
diff --git a/AndroidViewClient/doc/epydoc.js b/AndroidViewClient/doc/epydoc.js
new file mode 100755
index 0000000..e787dbc
--- /dev/null
+++ b/AndroidViewClient/doc/epydoc.js
@@ -0,0 +1,293 @@
+function toggle_private() {
+        // Search for any private/public links on this page.  Store
+        // their old text in "cmd," so we will know what action to
+        // take; and change their text to the opposite action.
+        var cmd = "?";
+        var elts = document.getElementsByTagName("a");
+        for(var i=0; i<elts.length; i++) {
+          if (elts[i].className == "privatelink") {
+            cmd = elts[i].innerHTML;
+            elts[i].innerHTML = ((cmd && cmd.substr(0,4)=="show")?
+                                    "hide&nbsp;private":"show&nbsp;private");
+          }
+        }
+        // Update all DIVs containing private objects.
+        var elts = document.getElementsByTagName("div");
+        for(var i=0; i<elts.length; i++) {
+          if (elts[i].className == "private") {
+            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
+          }
+          else if (elts[i].className == "public") {
+            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"block":"none");
+          }
+        }
+        // Update all table rows containing private objects.  Note, we
+        // use "" instead of "block" becaue IE & firefox disagree on what
+        // this should be (block vs table-row), and "" just gives the
+        // default for both browsers.
+        var elts = document.getElementsByTagName("tr");
+        for(var i=0; i<elts.length; i++) {
+          if (elts[i].className == "private") {
+            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"");
+          }
+        }
+        // Update all list items containing private objects.
+        var elts = document.getElementsByTagName("li");
+        for(var i=0; i<elts.length; i++) {
+          if (elts[i].className == "private") {
+            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?
+                                        "none":"");
+          }
+        }
+        // Update all list items containing private objects.
+        var elts = document.getElementsByTagName("ul");
+        for(var i=0; i<elts.length; i++) {
+          if (elts[i].className == "private") {
+            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
+          }
+        }
+        // Set a cookie to remember the current option.
+        document.cookie = "EpydocPrivate="+cmd;
+      }
+function show_private() {
+        var elts = document.getElementsByTagName("a");
+        for(var i=0; i<elts.length; i++) {
+          if (elts[i].className == "privatelink") {
+            cmd = elts[i].innerHTML;
+            if (cmd && cmd.substr(0,4)=="show")
+                toggle_private();
+          }
+        }
+      }
+function getCookie(name) {
+        var dc = document.cookie;
+        var prefix = name + "=";
+        var begin = dc.indexOf("; " + prefix);
+        if (begin == -1) {
+          begin = dc.indexOf(prefix);
+          if (begin != 0) return null;
+        } else
+        { begin += 2; }
+        var end = document.cookie.indexOf(";", begin);
+        if (end == -1)
+        { end = dc.length; }
+        return unescape(dc.substring(begin + prefix.length, end));
+      }
+function setFrame(url1, url2) {
+          parent.frames[1].location.href = url1;
+          parent.frames[2].location.href = url2;
+      }
+function checkCookie() {
+        var cmd=getCookie("EpydocPrivate");
+        if (cmd && cmd.substr(0,4)!="show" && location.href.indexOf("#_") < 0)
+            toggle_private();
+      }
+function toggleCallGraph(id) {
+        var elt = document.getElementById(id);
+        if (elt.style.display == "none")
+            elt.style.display = "block";
+        else
+            elt.style.display = "none";
+      }
+function expand(id) {
+  var elt = document.getElementById(id+"-expanded");
+  if (elt) elt.style.display = "block";
+  var elt = document.getElementById(id+"-expanded-linenums");
+  if (elt) elt.style.display = "block";
+  var elt = document.getElementById(id+"-collapsed");
+  if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
+  var elt = document.getElementById(id+"-collapsed-linenums");
+  if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
+  var elt = document.getElementById(id+"-toggle");
+  if (elt) { elt.innerHTML = "-"; }
+}
+
+function collapse(id) {
+  var elt = document.getElementById(id+"-expanded");
+  if (elt) elt.style.display = "none";
+  var elt = document.getElementById(id+"-expanded-linenums");
+  if (elt) elt.style.display = "none";
+  var elt = document.getElementById(id+"-collapsed-linenums");
+  if (elt) { elt.innerHTML = "<br />"; elt.style.display="block"; }
+  var elt = document.getElementById(id+"-toggle");
+  if (elt) { elt.innerHTML = "+"; }
+  var elt = document.getElementById(id+"-collapsed");
+  if (elt) {
+    elt.style.display = "block";
+    
+    var indent = elt.getAttribute("indent");
+    var pad = elt.getAttribute("pad");
+    var s = "<tt class='py-lineno'>";
+    for (var i=0; i<pad.length; i++) { s += "&nbsp;" }
+    s += "</tt>";
+    s += "&nbsp;&nbsp;<tt class='py-line'>";
+    for (var i=0; i<indent.length; i++) { s += "&nbsp;" }
+    s += "<a href='#' onclick='expand(\"" + id;
+    s += "\");return false'>...</a></tt><br />";
+    elt.innerHTML = s;
+  }
+}
+
+function toggle(id) {
+  elt = document.getElementById(id+"-toggle");
+  if (elt.innerHTML == "-")
+      collapse(id); 
+  else
+      expand(id);
+  return false;
+}
+
+function highlight(id) {
+  var elt = document.getElementById(id+"-def");
+  if (elt) elt.className = "py-highlight-hdr";
+  var elt = document.getElementById(id+"-expanded");
+  if (elt) elt.className = "py-highlight";
+  var elt = document.getElementById(id+"-collapsed");
+  if (elt) elt.className = "py-highlight";
+}
+
+function num_lines(s) {
+  var n = 1;
+  var pos = s.indexOf("\n");
+  while ( pos > 0) {
+    n += 1;
+    pos = s.indexOf("\n", pos+1);
+  }
+  return n;
+}
+
+// Collapse all blocks that mave more than `min_lines` lines.
+function collapse_all(min_lines) {
+  var elts = document.getElementsByTagName("div");
+  for (var i=0; i<elts.length; i++) {
+    var elt = elts[i];
+    var split = elt.id.indexOf("-");
+    if (split > 0)
+      if (elt.id.substring(split, elt.id.length) == "-expanded")
+        if (num_lines(elt.innerHTML) > min_lines)
+          collapse(elt.id.substring(0, split));
+  }
+}
+
+function expandto(href) {
+  var start = href.indexOf("#")+1;
+  if (start != 0 && start != href.length) {
+    if (href.substring(start, href.length) != "-") {
+      collapse_all(4);
+      pos = href.indexOf(".", start);
+      while (pos != -1) {
+        var id = href.substring(start, pos);
+        expand(id);
+        pos = href.indexOf(".", pos+1);
+      }
+      var id = href.substring(start, href.length);
+      expand(id);
+      highlight(id);
+    }
+  }
+}
+
+function kill_doclink(id) {
+  var parent = document.getElementById(id);
+  parent.removeChild(parent.childNodes.item(0));
+}
+function auto_kill_doclink(ev) {
+  if (!ev) var ev = window.event;
+  if (!this.contains(ev.toElement)) {
+    var parent = document.getElementById(this.parentID);
+    parent.removeChild(parent.childNodes.item(0));
+  }
+}
+
+function doclink(id, name, targets_id) {
+  var elt = document.getElementById(id);
+
+  // If we already opened the box, then destroy it.
+  // (This case should never occur, but leave it in just in case.)
+  if (elt.childNodes.length > 1) {
+    elt.removeChild(elt.childNodes.item(0));
+  }
+  else {
+    // The outer box: relative + inline positioning.
+    var box1 = document.createElement("div");
+    box1.style.position = "relative";
+    box1.style.display = "inline";
+    box1.style.top = 0;
+    box1.style.left = 0;
+  
+    // A shadow for fun
+    var shadow = document.createElement("div");
+    shadow.style.position = "absolute";
+    shadow.style.left = "-1.3em";
+    shadow.style.top = "-1.3em";
+    shadow.style.background = "#404040";
+    
+    // The inner box: absolute positioning.
+    var box2 = document.createElement("div");
+    box2.style.position = "relative";
+    box2.style.border = "1px solid #a0a0a0";
+    box2.style.left = "-.2em";
+    box2.style.top = "-.2em";
+    box2.style.background = "white";
+    box2.style.padding = ".3em .4em .3em .4em";
+    box2.style.fontStyle = "normal";
+    box2.onmouseout=auto_kill_doclink;
+    box2.parentID = id;
+
+    // Get the targets
+    var targets_elt = document.getElementById(targets_id);
+    var targets = targets_elt.getAttribute("targets");
+    var links = "";
+    target_list = targets.split(",");
+    for (var i=0; i<target_list.length; i++) {
+        var target = target_list[i].split("=");
+        links += "<li><a href='" + target[1] + 
+               "' style='text-decoration:none'>" +
+               target[0] + "</a></li>";
+    }
+  
+    // Put it all together.
+    elt.insertBefore(box1, elt.childNodes.item(0));
+    //box1.appendChild(box2);
+    box1.appendChild(shadow);
+    shadow.appendChild(box2);
+    box2.innerHTML =
+        "Which <b>"+name+"</b> do you want to see documentation for?" +
+        "<ul style='margin-bottom: 0;'>" +
+        links + 
+        "<li><a href='#' style='text-decoration:none' " +
+        "onclick='kill_doclink(\""+id+"\");return false;'>"+
+        "<i>None of the above</i></a></li></ul>";
+  }
+  return false;
+}
+
+function get_anchor() {
+          var href = location.href;
+          var start = href.indexOf("#")+1;
+          if ((start != 0) && (start != href.length))
+              return href.substring(start, href.length);
+      }
+function redirect_url(dottedName) {
+          // Scan through each element of the "pages" list, and check
+          // if "name" matches with any of them.
+          for (var i=0; i<pages.length; i++) {
+
+              // Each page has the form "<pagename>-m" or "<pagename>-c";
+              // extract the <pagename> portion & compare it to dottedName.
+              var pagename = pages[i].substring(0, pages[i].length-2);
+              if (pagename == dottedName.substring(0,pagename.length)) {
+
+                  // We've found a page that matches `dottedName`;
+                  // construct its URL, using leftover `dottedName`
+                  // content to form an anchor.
+                  var pagetype = pages[i].charAt(pages[i].length-1);
+                  var url = pagename + ((pagetype=="m")?"-module.html":
+                                                        "-class.html");
+                  if (dottedName.length > pagename.length)
+                      url += "#" + dottedName.substring(pagename.length+1,
+                                                        dottedName.length);
+                  return url;
+              }
+          }
+      }
diff --git a/AndroidViewClient/doc/frames.html b/AndroidViewClient/doc/frames.html
new file mode 100755
index 0000000..050e24a
--- /dev/null
+++ b/AndroidViewClient/doc/frames.html
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+          "DTD/xhtml1-frameset.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title> API Documentation </title>
+</head>
+<frameset cols="20%,80%">
+  <frameset rows="30%,70%">
+    <frame src="toc.html" name="moduleListFrame"
+           id="moduleListFrame" />
+    <frame src="toc-everything.html" name="moduleFrame"
+           id="moduleFrame" />
+  </frameset>
+  <frame src="com.dtmilano.android-module.html" name="mainFrame" id="mainFrame" />
+</frameset>
+</html>
diff --git a/AndroidViewClient/doc/help.html b/AndroidViewClient/doc/help.html
new file mode 100755
index 0000000..e0afc93
--- /dev/null
+++ b/AndroidViewClient/doc/help.html
@@ -0,0 +1,278 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>Help</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">&nbsp;</td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="help.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+
+<h1 class="epydoc"> API Documentation </h1>
+
+<p> This document contains the API (Application Programming Interface)
+documentation for this project.  Documentation for the Python
+objects defined by the project is divided into separate pages for each
+package, module, and class.  The API documentation also includes two
+pages containing information about the project as a whole: a trees
+page, and an index page.  </p>
+
+<h2> Object Documentation </h2>
+
+  <p>Each <strong>Package Documentation</strong> page contains: </p>
+  <ul>
+    <li> A description of the package. </li>
+    <li> A list of the modules and sub-packages contained by the
+    package.  </li>
+    <li> A summary of the classes defined by the package. </li>
+    <li> A summary of the functions defined by the package. </li>
+    <li> A summary of the variables defined by the package. </li>
+    <li> A detailed description of each function defined by the
+    package. </li>
+    <li> A detailed description of each variable defined by the
+    package. </li>
+  </ul>
+  
+  <p>Each <strong>Module Documentation</strong> page contains:</p>
+  <ul>
+    <li> A description of the module. </li>
+    <li> A summary of the classes defined by the module. </li>
+    <li> A summary of the functions defined by the module. </li>
+    <li> A summary of the variables defined by the module. </li>
+    <li> A detailed description of each function defined by the
+    module. </li>
+    <li> A detailed description of each variable defined by the
+    module. </li>
+  </ul>
+  
+  <p>Each <strong>Class Documentation</strong> page contains: </p>
+  <ul>
+    <li> A class inheritance diagram. </li>
+    <li> A list of known subclasses. </li>
+    <li> A description of the class. </li>
+    <li> A summary of the methods defined by the class. </li>
+    <li> A summary of the instance variables defined by the class. </li>
+    <li> A summary of the class (static) variables defined by the
+    class. </li> 
+    <li> A detailed description of each method defined by the
+    class. </li>
+    <li> A detailed description of each instance variable defined by the
+    class. </li> 
+    <li> A detailed description of each class (static) variable defined
+    by the class. </li> 
+  </ul>
+
+<h2> Project Documentation </h2>
+
+  <p> The <strong>Trees</strong> page contains the module and class hierarchies: </p>
+  <ul>
+    <li> The <em>module hierarchy</em> lists every package and module, with
+    modules grouped into packages.  At the top level, and within each
+    package, modules and sub-packages are listed alphabetically. </li>
+    <li> The <em>class hierarchy</em> lists every class, grouped by base
+    class.  If a class has more than one base class, then it will be
+    listed under each base class.  At the top level, and under each base
+    class, classes are listed alphabetically. </li>
+  </ul>
+  
+  <p> The <strong>Index</strong> page contains indices of terms and
+  identifiers: </p>
+  <ul>
+    <li> The <em>term index</em> lists every term indexed by any object's
+    documentation.  For each term, the index provides links to each
+    place where the term is indexed. </li>
+    <li> The <em>identifier index</em> lists the (short) name of every package,
+    module, class, method, function, variable, and parameter.  For each
+    identifier, the index provides a short description, and a link to
+    its documentation. </li>
+  </ul>
+
+<h2> The Table of Contents </h2>
+
+<p> The table of contents occupies the two frames on the left side of
+the window.  The upper-left frame displays the <em>project
+contents</em>, and the lower-left frame displays the <em>module
+contents</em>: </p>
+
+<table class="help summary" border="1" cellspacing="0" cellpadding="3">
+  <tr style="height: 30%">
+    <td align="center" style="font-size: small">
+       Project<br />Contents<hr />...</td>
+    <td align="center" style="font-size: small" rowspan="2" width="70%">
+      API<br />Documentation<br />Frame<br /><br /><br />
+    </td>
+  </tr>
+  <tr>
+    <td align="center" style="font-size: small">
+      Module<br />Contents<hr />&nbsp;<br />...<br />&nbsp;
+    </td>
+  </tr>
+</table><br />
+
+<p> The <strong>project contents frame</strong> contains a list of all packages
+and modules that are defined by the project.  Clicking on an entry
+will display its contents in the module contents frame.  Clicking on a
+special entry, labeled "Everything," will display the contents of
+the entire project. </p>
+
+<p> The <strong>module contents frame</strong> contains a list of every
+submodule, class, type, exception, function, and variable defined by a
+module or package.  Clicking on an entry will display its
+documentation in the API documentation frame.  Clicking on the name of
+the module, at the top of the frame, will display the documentation
+for the module itself. </p>
+
+<p> The "<strong>frames</strong>" and "<strong>no frames</strong>" buttons below the top
+navigation bar can be used to control whether the table of contents is
+displayed or not. </p>
+
+<h2> The Navigation Bar </h2>
+
+<p> A navigation bar is located at the top and bottom of every page.
+It indicates what type of page you are currently viewing, and allows
+you to go to related pages.  The following table describes the labels
+on the navigation bar.  Note that not some labels (such as
+[Parent]) are not displayed on all pages. </p>
+
+<table class="summary" border="1" cellspacing="0" cellpadding="3" width="100%">
+<tr class="summary">
+  <th>Label</th>
+  <th>Highlighted when...</th>
+  <th>Links to...</th>
+</tr>
+  <tr><td valign="top"><strong>[Parent]</strong></td>
+      <td valign="top"><em>(never highlighted)</em></td>
+      <td valign="top"> the parent of the current package </td></tr>
+  <tr><td valign="top"><strong>[Package]</strong></td>
+      <td valign="top">viewing a package</td>
+      <td valign="top">the package containing the current object
+      </td></tr>
+  <tr><td valign="top"><strong>[Module]</strong></td>
+      <td valign="top">viewing a module</td>
+      <td valign="top">the module containing the current object
+      </td></tr> 
+  <tr><td valign="top"><strong>[Class]</strong></td>
+      <td valign="top">viewing a class </td>
+      <td valign="top">the class containing the current object</td></tr>
+  <tr><td valign="top"><strong>[Trees]</strong></td>
+      <td valign="top">viewing the trees page</td>
+      <td valign="top"> the trees page </td></tr>
+  <tr><td valign="top"><strong>[Index]</strong></td>
+      <td valign="top">viewing the index page</td>
+      <td valign="top"> the index page </td></tr>
+  <tr><td valign="top"><strong>[Help]</strong></td>
+      <td valign="top">viewing the help page</td>
+      <td valign="top"> the help page </td></tr>
+</table>
+
+<p> The "<strong>show private</strong>" and "<strong>hide private</strong>" buttons below
+the top navigation bar can be used to control whether documentation
+for private objects is displayed.  Private objects are usually defined
+as objects whose (short) names begin with a single underscore, but do
+not end with an underscore.  For example, "<code>_x</code>",
+"<code>__pprint</code>", and "<code>epydoc.epytext._tokenize</code>"
+are private objects; but "<code>re.sub</code>",
+"<code>__init__</code>", and "<code>type_</code>" are not.  However,
+if a module defines the "<code>__all__</code>" variable, then its
+contents are used to decide which objects are private. </p>
+
+<p> A timestamp below the bottom navigation bar indicates when each
+page was last updated. </p>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:35:57 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/identifier-index.html b/AndroidViewClient/doc/identifier-index.html
new file mode 100755
index 0000000..c904d74
--- /dev/null
+++ b/AndroidViewClient/doc/identifier-index.html
@@ -0,0 +1,858 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>Identifier Index</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Indices&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">&nbsp;</td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="identifier-index.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<center><b>[
+ <a href="identifier-index.html">Identifiers</a>
+| <a href="deprecated-index.html">Deprecations</a>
+]</b></center><br />
+<table border="0" width="100%">
+<tr valign="bottom"><td>
+<h1 class="epydoc">Identifier Index</h1>
+</td><td>
+[
+ <a href="#A">A</a>
+ <a href="#B">B</a>
+ <a href="#C">C</a>
+ <a href="#D">D</a>
+ <a href="#E">E</a>
+ <a href="#F">F</a>
+ <a href="#G">G</a>
+ <a href="#H">H</a>
+ <a href="#I">I</a>
+  J
+  K
+ <a href="#L">L</a>
+  M
+  N
+ <a href="#O">O</a>
+ <a href="#P">P</a>
+  Q
+  R
+ <a href="#S">S</a>
+ <a href="#T">T</a>
+ <a href="#U">U</a>
+ <a href="#V">V</a>
+ <a href="#W">W</a>
+  X
+  Y
+  Z
+ <a href="#_">_</a>
+]
+</td></table>
+<table border="0" width="100%">
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="A">A</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb-module.html">adb</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android-module.html">com.dtmilano.android</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient-module.html">com.dtmilano.android.adb.adbclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android-module.html">android</a><br />
+<span class="index-where">(in&nbsp;com.dtmilano)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#ADB_DEFAULT_PORT">ADB_DEFAULT_PORT</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#add">add()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#assertServiceResponse">assertServiceResponse()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient-module.html">adbclient</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb-module.html">com.dtmilano.android.adb</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#allPossibleNamesWithColon">allPossibleNamesWithColon()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="B">B</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.EditText-class.html#backspace">backspace()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.EditText-class.html">EditText</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="C">C</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.Excerpt2Code-class.html#CharacterData">CharacterData()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.Excerpt2Code-class.html">Excerpt2Code</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#checkVersion">checkVersion()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#containsPoint">containsPoint()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#CharacterData">CharacterData()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html">UiAutomator2AndroidViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#close">close()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#checkConnected">checkConnected()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#connectToDeviceOrExit">connectToDeviceOrExit()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="D">D</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient-module.html#DEBUG">DEBUG</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient-module.html">com.dtmilano.android.adb.adbclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#DEBUG_GETATTR">DEBUG_GETATTR</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#distance">distance()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#DEBUG">DEBUG</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#DEBUG_RECEIVED">DEBUG_RECEIVED</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient-module.html#DOWN">DOWN</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient-module.html">com.dtmilano.android.adb.adbclient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#DEBUG_BOUNDS">DEBUG_BOUNDS</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#DEBUG_STATUSBAR">DEBUG_STATUSBAR</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient-module.html#DOWN_AND_UP">DOWN_AND_UP</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient-module.html">com.dtmilano.android.adb.adbclient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#DEBUG_CALL">DEBUG_CALL</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#DEBUG_TOUCH">DEBUG_TOUCH</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#drag">drag()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#DEBUG_COORDS">DEBUG_COORDS</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#DEBUG_TREE">DEBUG_TREE</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#dump">dump()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#DEBUG_DEVICE">DEBUG_DEVICE</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#DEBUG_WINDOWS">DEBUG_WINDOWS</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#DEBUG_DISTANCE">DEBUG_DISTANCE</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.Device-class.html">Device</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient-module.html">com.dtmilano.android.adb.adbclient</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="E">E</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.EditText-class.html">EditText</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#EndElement">EndElement()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html">UiAutomator2AndroidViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.Excerpt2Code-class.html">Excerpt2Code</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.Excerpt2Code-class.html#EndElement">EndElement()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.Excerpt2Code-class.html">Excerpt2Code</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#excerpt">excerpt()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="F">F</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.Device-class.html#factory">factory()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.Device-class.html">Device</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewByTag">findViewByTag()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttributeThatMatches">findViewWithAttributeThatMatches()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#factory">factory()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewByTagOrRaise">findViewByTagOrRaise()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithContentDescription">findViewWithContentDescription()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient-module.html#FAIL">FAIL</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient-module.html">com.dtmilano.android.adb.adbclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewsContainingPoint">findViewsContainingPoint()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithContentDescriptionOrRaise">findViewWithContentDescriptionOrRaise()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewById">findViewById()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttribute">findViewWithAttribute()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithText">findViewWithText()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewByIdOrRaise">findViewByIdOrRaise()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttributeOrRaise">findViewWithAttributeOrRaise()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithTextOrRaise">findViewWithTextOrRaise()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="G">G</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#GET_VISIBILITY_PROPERTY">GET_VISIBILITY_PROPERTY</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#getPositionAndSize">getPositionAndSize()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#getViewIds">getViewIds()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#getCenter">getCenter()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#getProperty">getProperty()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#getViewsById">getViewsById()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#getClass">getClass()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#getRestrictedScreen">getRestrictedScreen()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#getVisibility">getVisibility()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#getContentDescription">getContentDescription()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#getRoot">getRoot()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#getWidth">getWidth()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#getCoords">getCoords()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#getSdkVersion">getSdkVersion()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#getX">getX()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#getDevices">getDevices()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#getSdkVersion">getSdkVersion()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#getXY">getXY()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#getHeight">getHeight()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#getSystemProperty">getSystemProperty()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#getY">getY()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#getId">getId()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#getText">getText()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#GONE">GONE</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#getParent">getParent()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#getUniqueId">getUniqueId()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="H">H</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#hammingDistance">hammingDistance()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#HEIGHT_PROPERTY_API_8">HEIGHT_PROPERTY_API_8</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#HEIGHT_PROPERTY">HEIGHT_PROPERTY</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient-module.html#HOSTNAME">HOSTNAME</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient-module.html">com.dtmilano.android.adb.adbclient</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="I">I</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#ID_PROPERTY">ID_PROPERTY</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#INVISIBLE">INVISIBLE</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#isLocked">isLocked()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#ID_PROPERTY_UI_AUTOMATOR">ID_PROPERTY_UI_AUTOMATOR</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#IP_RE">IP_RE</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#isScreenOn">isScreenOn()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#ID_RE">ID_RE</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#isClickable">isClickable()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#intersection">intersection()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#isKeyboardShown">isKeyboardShown()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="L">L</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#LAYOUT_TOP_MARGIN_PROPERTY">LAYOUT_TOP_MARGIN_PROPERTY</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#LEFT_PROPERTY_API_8">LEFT_PROPERTY_API_8</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#list">list()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#LEFT_PROPERTY">LEFT_PROPERTY</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#levenshteinDistance">levenshteinDistance()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#longPress">longPress()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="O">O</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#OFFSET">OFFSET</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient-module.html#OKAY">OKAY</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient-module.html">com.dtmilano.android.adb.adbclient</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="P">P</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.Excerpt2Code-class.html#Parse">Parse()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.Excerpt2Code-class.html">Excerpt2Code</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#percentSame">percentSame()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#press">press()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#Parse">Parse()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html">UiAutomator2AndroidViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient-module.html#PORT">PORT</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient-module.html">com.dtmilano.android.adb.adbclient</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="S">S</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#sameAs">sameAs()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#setSerialno">setSerialno()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#sleep">sleep()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#serviceResponse">serviceResponse()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#setViews">setViews()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#startActivity">startActivity()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#setAlarm">setAlarm()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#setViewsFromUiAutomatorDump">setViewsFromUiAutomatorDump()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.Excerpt2Code-class.html#StartElement">StartElement()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.Excerpt2Code-class.html">Excerpt2Code</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#setAlarm">setAlarm()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#shell">shell()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#StartElement">StartElement()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html">UiAutomator2AndroidViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#setReconnect">setReconnect()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED">SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="T">T</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#takeSnapshot">takeSnapshot()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#TOP_PROPERTY">TOP_PROPERTY</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndCenter">traverseShowClassIdTextAndCenter()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY">TEXT_PROPERTY</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#TOP_PROPERTY_API_8">TOP_PROPERTY_API_8</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndContentDescription">traverseShowClassIdTextAndContentDescription()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY_API_10">TEXT_PROPERTY_API_10</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#touch">touch()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndUniqueId">traverseShowClassIdTextAndUniqueId()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY_UI_AUTOMATOR">TEXT_PROPERTY_UI_AUTOMATOR</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#touch">touch()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextPositionAndSize">traverseShowClassIdTextPositionAndSize()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.TextView-class.html">TextView</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#traverse">traverse()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#type">type()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient-module.html#TIMEOUT">TIMEOUT</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient-module.html">com.dtmilano.android.adb.adbclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdAndText">traverseShowClassIdAndText()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.EditText-class.html#type">type()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.EditText-class.html">EditText</a>)</span></td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="U">U</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html">UiAutomator2AndroidViewClient</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient-module.html#UP">UP</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient-module.html">com.dtmilano.android.adb.adbclient</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#unlock">unlock()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES">USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="V">V</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#variableNameFromId">variableNameFromId()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html">View</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient-module.html#VERSION_RELEASE_PROPERTY">VERSION_RELEASE_PROPERTY</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient-module.html">com.dtmilano.android.adb.adbclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED">VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewNotFoundException-class.html">ViewNotFoundException</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#VERSION_RELEASE_PROPERTY">VERSION_RELEASE_PROPERTY</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#VIEW_SERVER_HOST">VIEW_SERVER_HOST</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#VISIBLE">VISIBLE</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient-module.html#VERSION_SDK_PROPERTY">VERSION_SDK_PROPERTY</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient-module.html">com.dtmilano.android.adb.adbclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#VIEW_SERVER_PORT">VIEW_SERVER_PORT</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#VERSION_SDK_PROPERTY">VERSION_SDK_PROPERTY</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html">viewclient</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android-module.html">com.dtmilano.android</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="W">W</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#wake">wake()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#WIDTH_PROPERTY_API_8">WIDTH_PROPERTY_API_8</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#writeImageToFile">writeImageToFile()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#WARNINGS">WARNINGS</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.Window-class.html">Window</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#WS">WS</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#WIDTH_PROPERTY">WIDTH_PROPERTY</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#writeImageToFile">writeImageToFile()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="_">_</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#__call__">__call__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.Device-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.Device-class.html">Device</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient-module.html">com.dtmilano.android.adb.adbclient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__checkOk">__checkOk()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.Excerpt2Code-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.Excerpt2Code-class.html">Excerpt2Code</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__connect">__connect()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html">UiAutomator2AndroidViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__parseTree">__parseTree()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#__copy">__copy()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__parseTreeFromUiAutomatorDump">__parseTreeFromUiAutomatorDump()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__del__">__del__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__pickleable">__pickleable()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__del__">__del__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewNotFoundException-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewNotFoundException-class.html">ViewNotFoundException</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__receive">__receive()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#__dumpWindowsInformation">__dumpWindowsInformation()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.Window-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.Window-class.html">Window</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__send">__send()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTree">__findViewWithAttributeInTree()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__levenshteinDistance">__levenshteinDistance()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__setTransport">__setTransport()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTreeOrRaise">__findViewWithAttributeInTreeOrRaise()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__mapSerialNo">__mapSerialNo()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#__smallStr__">__smallStr__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTreeThatMatches">__findViewWithAttributeInTreeThatMatches()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#__microStr__">__microStr__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__splitAttrs">__splitAttrs()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#__getattr__">__getattr__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__obtainAdbPath">__obtainAdbPath()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.Device-class.html#__str__">__str__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.Device-class.html">Device</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__getDisplayHeight">__getDisplayHeight()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__obtainDeviceSerialNumber">__obtainDeviceSerialNumber()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#__str__">__str__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__getDisplayWidth">__getDisplayWidth()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#__obtainPxPy">__obtainPxPy()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.Window-class.html#__str__">__str__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.Window-class.html">Window</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__getFocusedWindowPosition">__getFocusedWindowPosition()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#__obtainStatusBarDimensionsIfVisible">__obtainStatusBarDimensionsIfVisible()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#__tinyStr__">__tinyStr__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#__getitem__">__getitem__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#__obtainVwVh">__obtainVwVh()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__traverse">__traverse()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__getProp">__getProp()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.View-class.html#__obtainVxVy">__obtainVxVy()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.View-class.html">View</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#_nd">_nd()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__hammingDistance">__hammingDistance()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android-module.html">com.dtmilano.android</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#_nh">_nh()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.AdbClient-class.html">AdbClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.adb-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb-module.html">com.dtmilano.android.adb</a>)</span></td>
+<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient-module.html#_ns">_ns()</a><br />
+<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a>)</span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+<br /><br /><!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Indices&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:35:57 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/index.html b/AndroidViewClient/doc/index.html
new file mode 100755
index 0000000..050e24a
--- /dev/null
+++ b/AndroidViewClient/doc/index.html
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+          "DTD/xhtml1-frameset.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title> API Documentation </title>
+</head>
+<frameset cols="20%,80%">
+  <frameset rows="30%,70%">
+    <frame src="toc.html" name="moduleListFrame"
+           id="moduleListFrame" />
+    <frame src="toc-everything.html" name="moduleFrame"
+           id="moduleFrame" />
+  </frameset>
+  <frame src="com.dtmilano.android-module.html" name="mainFrame" id="mainFrame" />
+</frameset>
+</html>
diff --git a/AndroidViewClient/doc/module-tree.html b/AndroidViewClient/doc/module-tree.html
new file mode 100755
index 0000000..88b9dba
--- /dev/null
+++ b/AndroidViewClient/doc/module-tree.html
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>Module Hierarchy</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">&nbsp;</td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="module-tree.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<center><b>
+ [ <a href="module-tree.html">Module Hierarchy</a>
+ | <a href="class-tree.html">Class Hierarchy</a> ]
+</b></center><br />
+<h1 class="epydoc">Module Hierarchy</h1>
+<ul class="nomargin-top">
+    <li> <strong class="uidlink"><a href="com.dtmilano.android-module.html">com.dtmilano.android</a></strong>
+    <ul>
+    <li> <strong class="uidlink"><a href="com.dtmilano.android.adb-module.html">com.dtmilano.android.adb</a></strong>
+    <ul>
+    <li> <strong class="uidlink"><a href="com.dtmilano.android.adb.adbclient-module.html">com.dtmilano.android.adb.adbclient</a></strong>: <em class="summary">Copyright (C) 2012-2013  Diego Torres Milano
+Created on Dec 1, 2012</em>    </li>
+    </ul>
+    </li>
+    <li> <strong class="uidlink"><a href="com.dtmilano.android.viewclient-module.html">com.dtmilano.android.viewclient</a></strong>: <em class="summary">Copyright (C) 2012-2014  Diego Torres Milano
+Created on Feb 2, 2012</em>    </li>
+    </ul>
+    </li>
+</ul>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 22 01:35:57 2014
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/redirect.html b/AndroidViewClient/doc/redirect.html
new file mode 100755
index 0000000..5cceaab
--- /dev/null
+++ b/AndroidViewClient/doc/redirect.html
@@ -0,0 +1,38 @@
+<html><head><title>Epydoc Redirect Page</title>
+<meta http-equiv="cache-control" content="no-cache" />
+<meta http-equiv="expires" content="0" />
+<meta http-equiv="pragma" content="no-cache" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+<body>
+<script type="text/javascript">
+<!--
+var pages = ["com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-c", "com.dtmilano.android.viewclient.ViewNotFoundException-c", "com.dtmilano.android.adb.adbclient.AdbClient-c", "com.dtmilano.android.viewclient.Excerpt2Code-c", "com.dtmilano.android.viewclient.ViewClient-c", "com.dtmilano.android.adb.adbclient.Device-c", "com.dtmilano.android.viewclient.EditText-c", "com.dtmilano.android.viewclient.TextView-c", "com.dtmilano.android.viewclient.Window-c", "com.dtmilano.android.viewclient.View-c", "com.dtmilano.android.adb.adbclient-m", "com.dtmilano.android.viewclient-m", "com.dtmilano.android.adb-m", "com.dtmilano.android-m"];
+var dottedName = get_anchor();
+if (dottedName) {
+    var target = redirect_url(dottedName);
+    if (target) window.location.replace(target);
+}
+// -->
+</script>
+
+<h3>Epydoc Auto-redirect page</h3>
+
+<p>When javascript is enabled, this page will redirect URLs of
+the form <tt>redirect.html#<i>dotted.name</i></tt> to the
+documentation for the object with the given fully-qualified
+dotted name.</p>
+<p><a id="message"> &nbsp; </a></p>
+
+<script type="text/javascript">
+<!--
+if (dottedName) {
+    var msg = document.getElementById("message");
+    msg.innerHTML = "No documentation found for <tt>"+
+                    dottedName+"</tt>";
+}
+// -->
+</script>
+
+</body>
+</html>
diff --git a/AndroidViewClient/doc/src.com.dtmilano.android-module.html b/AndroidViewClient/doc/src.com.dtmilano.android-module.html
new file mode 100755
index 0000000..257bf20
--- /dev/null
+++ b/AndroidViewClient/doc/src.com.dtmilano.android-module.html
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>src.com.dtmilano.android</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;src ::
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        Package&nbsp;android
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="src.com.dtmilano.android-module.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== PACKAGE DESCRIPTION ==================== -->
+<h1 class="epydoc">Package android</h1><p class="nomargin-top"><span class="codelink"><a href="src.com.dtmilano.android-pysrc.html">source&nbsp;code</a></span></p>
+<!-- ==================== SUBMODULES ==================== -->
+<a name="section-Submodules"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Submodules</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Submodules"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr><td class="summary">
+  <ul class="nomargin">
+    <li> <strong class="uidlink"><a href="src.com.dtmilano.android.viewclient-module.html">src.com.dtmilano.android.viewclient</a></strong>: <em class="summary">Copyright (C) 2012-2013  Diego Torres Milano
+Created on Feb 2, 2012</em>    </li>
+  </ul></td></tr>
+</table>
+
+<br />
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Variables</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Variables"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="None">None</code>
+    </td>
+  </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Aug  9 01:39:53 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/src.com.dtmilano.android-pysrc.html b/AndroidViewClient/doc/src.com.dtmilano.android-pysrc.html
new file mode 100755
index 0000000..9bf6c0d
--- /dev/null
+++ b/AndroidViewClient/doc/src.com.dtmilano.android-pysrc.html
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>src.com.dtmilano.android</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;src ::
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        Package&nbsp;android
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="src.com.dtmilano.android-pysrc.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="src.com.dtmilano.android-module.html">Package src.com.dtmilano.android</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno">1</tt>  <tt class="py-line"> </tt>
+<a name="L2"></a><tt class="py-lineno">2</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Aug  9 01:39:55 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/src.com.dtmilano.android.viewclient-module.html b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient-module.html
new file mode 100755
index 0000000..a0d8a06
--- /dev/null
+++ b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient-module.html
@@ -0,0 +1,759 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>src.com.dtmilano.android.viewclient</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;src ::
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="src.com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        Module&nbsp;viewclient
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="src.com.dtmilano.android.viewclient-module.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module viewclient</h1><p class="nomargin-top"><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html">source&nbsp;code</a></span></p>
+<pre class="literalblock">
+
+Copyright (C) 2012-2013  Diego Torres Milano
+Created on Feb 2, 2012
+
+Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+@author: Diego Torres Milano
+
+</pre>
+
+<hr />
+<div class="fields">      <p><strong>Version:</strong>
+        3.2.0
+      </p>
+</div><!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Classes</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Classes"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="src.com.dtmilano.android.viewclient.Window-class.html" class="summary-name">Window</a><br />
+      Window class
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="src.com.dtmilano.android.viewclient.ViewNotFoundException-class.html" class="summary-name">ViewNotFoundException</a><br />
+      ViewNotFoundException is raised when a View is not found.
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="src.com.dtmilano.android.viewclient.View-class.html" class="summary-name">View</a><br />
+      View class
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="src.com.dtmilano.android.viewclient.TextView-class.html" class="summary-name">TextView</a><br />
+      TextView class.
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="src.com.dtmilano.android.viewclient.EditText-class.html" class="summary-name">EditText</a><br />
+      EditText class.
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html" class="summary-name">UiAutomator2AndroidViewClient</a><br />
+      UiAutomator XML to AndroidViewClient
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="src.com.dtmilano.android.viewclient.Excerpt2Code-class.html" class="summary-name">Excerpt2Code</a><br />
+      Excerpt XML to code
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="src.com.dtmilano.android.viewclient.ViewClient-class.html" class="summary-name">ViewClient</a><br />
+      ViewClient is a <i>ViewServer</i> client.
+    </td>
+  </tr>
+</table>
+<!-- ==================== FUNCTIONS ==================== -->
+<a name="section-Functions"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Functions</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Functions"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient-module.html#__nd" class="summary-sig-name" onclick="show_private();">__nd</a>(<span class="summary-sig-arg">name</span>)</span><br />
+      Returns:
+      Returns a named decimal regex</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#__nd">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient-module.html#__nh" class="summary-sig-name" onclick="show_private();">__nh</a>(<span class="summary-sig-arg">name</span>)</span><br />
+      Returns:
+      Returns a named hex regex</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#__nh">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient-module.html#__ns" class="summary-sig-name" onclick="show_private();">__ns</a>(<span class="summary-sig-arg">name</span>,
+        <span class="summary-sig-arg">greedy</span>=<span class="summary-sig-default">False</span>)</span><br />
+      NOTICE: this is using a non-greedy (or minimal) regex</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#__ns">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Variables</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Variables"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG"></a><span class="summary-name">DEBUG</span> = <code title="False">False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_DEVICE"></a><span class="summary-name">DEBUG_DEVICE</span> = <code title="DEBUG and False">DEBUG and False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_RECEIVED"></a><span class="summary-name">DEBUG_RECEIVED</span> = <code title="DEBUG and False">DEBUG and False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_TREE"></a><span class="summary-name">DEBUG_TREE</span> = <code title="DEBUG and False">DEBUG and False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_GETATTR"></a><span class="summary-name">DEBUG_GETATTR</span> = <code title="DEBUG and False">DEBUG and False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_CALL"></a><span class="summary-name">DEBUG_CALL</span> = <code title="DEBUG and False">DEBUG and False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_COORDS"></a><span class="summary-name">DEBUG_COORDS</span> = <code title="DEBUG and False">DEBUG and False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_TOUCH"></a><span class="summary-name">DEBUG_TOUCH</span> = <code title="DEBUG and False">DEBUG and False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_STATUSBAR"></a><span class="summary-name">DEBUG_STATUSBAR</span> = <code title="DEBUG and False">DEBUG and False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_WINDOWS"></a><span class="summary-name">DEBUG_WINDOWS</span> = <code title="DEBUG and False">DEBUG and False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_BOUNDS"></a><span class="summary-name">DEBUG_BOUNDS</span> = <code title="DEBUG and False">DEBUG and False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="DEBUG_DISTANCE"></a><span class="summary-name">DEBUG_DISTANCE</span> = <code title="DEBUG and False">DEBUG and False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="WARNINGS"></a><span class="summary-name">WARNINGS</span> = <code title="False">False</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="VIEW_SERVER_HOST"></a><span class="summary-name">VIEW_SERVER_HOST</span> = <code title="'localhost'">'localhost'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="VIEW_SERVER_PORT"></a><span class="summary-name">VIEW_SERVER_PORT</span> = <code title="4939">4939</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="ADB_DEFAULT_PORT"></a><span class="summary-name">ADB_DEFAULT_PORT</span> = <code title="5555">5555</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="OFFSET"></a><span class="summary-name">OFFSET</span> = <code title="25">25</code><br />
+      This assumes the smallest touchable view on the screen is 
+      approximately 50px x 50px and touches it at <i 
+      class="math">(x+OFFSET, y+OFFSET)</i>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="src.com.dtmilano.android.viewclient-module.html#USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES" class="summary-name">USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES</a> = <code title="True">True</code><br />
+      Use monkeyrunner (<code>MonkeyDevice.getProperty()</code>) to obtain 
+      the needed properties.
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="src.com.dtmilano.android.viewclient-module.html#SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED" class="summary-name">SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED</a> = <code title="False">False</code><br />
+      Skips some classes related with the Action Bar and the 
+      PhoneWindow$DecorView in the coordinates calculation
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="VERSION_SDK_PROPERTY"></a><span class="summary-name">VERSION_SDK_PROPERTY</span> = <code title="'version.sdk'">'version.sdk'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="ID_PROPERTY"></a><span class="summary-name">ID_PROPERTY</span> = <code title="'mID'">'mID'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="ID_PROPERTY_UI_AUTOMATOR"></a><span class="summary-name">ID_PROPERTY_UI_AUTOMATOR</span> = <code title="'uniqueId'">'uniqueId'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="TEXT_PROPERTY"></a><span class="summary-name">TEXT_PROPERTY</span> = <code title="'text:mText'">'text:mText'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="TEXT_PROPERTY_API_10"></a><span class="summary-name">TEXT_PROPERTY_API_10</span> = <code title="'mText'">'mText'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="TEXT_PROPERTY_UI_AUTOMATOR"></a><span class="summary-name">TEXT_PROPERTY_UI_AUTOMATOR</span> = <code title="'text'">'text'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="WS"></a><span class="summary-name">WS</span> = <code title="&quot;\xfe&quot;">&quot;\xfe&quot;</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="LEFT_PROPERTY"></a><span class="summary-name">LEFT_PROPERTY</span> = <code title="'layout:mLeft'">'layout:mLeft'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="LEFT_PROPERTY_API_8"></a><span class="summary-name">LEFT_PROPERTY_API_8</span> = <code title="'mLeft'">'mLeft'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="TOP_PROPERTY"></a><span class="summary-name">TOP_PROPERTY</span> = <code title="'layout:mTop'">'layout:mTop'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="TOP_PROPERTY_API_8"></a><span class="summary-name">TOP_PROPERTY_API_8</span> = <code title="'mTop'">'mTop'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="WIDTH_PROPERTY"></a><span class="summary-name">WIDTH_PROPERTY</span> = <code title="'layout:getWidth()'">'layout:getWidth()'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="WIDTH_PROPERTY_API_8"></a><span class="summary-name">WIDTH_PROPERTY_API_8</span> = <code title="'getWidth()'">'getWidth()'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="HEIGHT_PROPERTY"></a><span class="summary-name">HEIGHT_PROPERTY</span> = <code title="'layout:getHeight()'">'layout:getHeight()'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="HEIGHT_PROPERTY_API_8"></a><span class="summary-name">HEIGHT_PROPERTY_API_8</span> = <code title="'getHeight()'">'getHeight()'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="GET_VISIBILITY_PROPERTY"></a><span class="summary-name">GET_VISIBILITY_PROPERTY</span> = <code title="'getVisibility()'">'getVisibility()'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="LAYOUT_TOP_MARGIN_PROPERTY"></a><span class="summary-name">LAYOUT_TOP_MARGIN_PROPERTY</span> = <code title="'layout:layout_topMargin'">'layout:layout_topMargin'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="VISIBLE"></a><span class="summary-name">VISIBLE</span> = <code title="0x0">0x0</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="INVISIBLE"></a><span class="summary-name">INVISIBLE</span> = <code title="0x4">0x4</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="GONE"></a><span class="summary-name">GONE</span> = <code title="0x8">0x8</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="IP_RE"></a><span class="summary-name">IP_RE</span> = <code title="re.compile('^(\d{1,3}\.){3}\d{1,3}$')">re.compile('^(\d{1,3}\.){3}\d{1,3}$')</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="ID_RE"></a><span class="summary-name">ID_RE</span> = <code title="re.compile('id/([^/]*)(/(\d+))?')">re.compile('id/([^/]*)(/(\d+))?')</code>
+    </td>
+  </tr>
+</table>
+<!-- ==================== FUNCTION DETAILS ==================== -->
+<a name="section-FunctionDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Function Details</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-FunctionDetails"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+</table>
+<a name="__nd"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__nd</span>(<span class="sig-arg">name</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#__nd">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>Returns a named decimal regex</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="__nh"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__nh</span>(<span class="sig-arg">name</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#__nh">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>Returns a named hex regex</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="__ns"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__ns</span>(<span class="sig-arg">name</span>,
+        <span class="sig-arg">greedy</span>=<span class="sig-default">False</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#__ns">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>NOTICE: this is using a non-greedy (or minimal) regex</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>name</code></strong> (str) - the name used to tag the expression</li>
+        <li><strong class="pname"><code>greedy</code></strong> (bool) - Whether the regex is greedy or not</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>Returns a named string regex (only non-whitespace characters 
+          allowed)</dd>
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Variables Details</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-VariablesDetails"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+</table>
+<a name="USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES</h3>
+  <p>Use monkeyrunner (<code>MonkeyDevice.getProperty()</code>) to obtain 
+  the needed properties. If this is <code>False</code> then <code>adb shell
+  getprop</code> is used</p>
+  <dl class="fields">
+  </dl>
+  <dl class="fields">
+    <dt>Value:</dt>
+      <dd><table><tr><td><pre class="variable">
+True
+</pre></td></tr></table>
+</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED</h3>
+  <p>Skips some classes related with the Action Bar and the 
+  PhoneWindow$DecorView in the coordinates calculation</p>
+  <dl class="fields">
+  </dl>
+<div class="fields">      <p><strong>See Also:</strong>
+        <a href="src.com.dtmilano.android.viewclient.View-class.html#getXY"
+        class="link">View.getXY()</a>
+      </p>
+</div>  <dl class="fields">
+    <dt>Value:</dt>
+      <dd><table><tr><td><pre class="variable">
+False
+</pre></td></tr></table>
+</dd>
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Aug  9 01:39:53 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/src.com.dtmilano.android.viewclient-pysrc.html b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient-pysrc.html
new file mode 100755
index 0000000..63f1382
--- /dev/null
+++ b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient-pysrc.html
@@ -0,0 +1,2569 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>src.com.dtmilano.android.viewclient</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;src ::
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="src.com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        Module&nbsp;viewclient
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="src.com.dtmilano.android.viewclient-pysrc.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="src.com.dtmilano.android.viewclient-module.html">Module src.com.dtmilano.android.viewclient</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno">   1</tt>  <tt class="py-line"><tt class="py-comment"># -*- coding: utf-8 -*-</tt> </tt>
+<a name="L2"></a><tt class="py-lineno">   2</tt>  <tt class="py-line"><tt class="py-docstring">'''</tt> </tt>
+<a name="L3"></a><tt class="py-lineno">   3</tt>  <tt class="py-line"><tt class="py-docstring">Copyright (C) 2012-2013  Diego Torres Milano</tt> </tt>
+<a name="L4"></a><tt class="py-lineno">   4</tt>  <tt class="py-line"><tt class="py-docstring">Created on Feb 2, 2012</tt> </tt>
+<a name="L5"></a><tt class="py-lineno">   5</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L6"></a><tt class="py-lineno">   6</tt>  <tt class="py-line"><tt class="py-docstring">Licensed under the Apache License, Version 2.0 (the "License");</tt> </tt>
+<a name="L7"></a><tt class="py-lineno">   7</tt>  <tt class="py-line"><tt class="py-docstring">you may not use this file except in compliance with the License.</tt> </tt>
+<a name="L8"></a><tt class="py-lineno">   8</tt>  <tt class="py-line"><tt class="py-docstring">You may obtain a copy of the License at</tt> </tt>
+<a name="L9"></a><tt class="py-lineno">   9</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L10"></a><tt class="py-lineno">  10</tt>  <tt class="py-line"><tt class="py-docstring">       http://www.apache.org/licenses/LICENSE-2.0</tt> </tt>
+<a name="L11"></a><tt class="py-lineno">  11</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L12"></a><tt class="py-lineno">  12</tt>  <tt class="py-line"><tt class="py-docstring">Unless required by applicable law or agreed to in writing, software</tt> </tt>
+<a name="L13"></a><tt class="py-lineno">  13</tt>  <tt class="py-line"><tt class="py-docstring">distributed under the License is distributed on an "AS IS" BASIS,</tt> </tt>
+<a name="L14"></a><tt class="py-lineno">  14</tt>  <tt class="py-line"><tt class="py-docstring">WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</tt> </tt>
+<a name="L15"></a><tt class="py-lineno">  15</tt>  <tt class="py-line"><tt class="py-docstring">See the License for the specific language governing permissions and</tt> </tt>
+<a name="L16"></a><tt class="py-lineno">  16</tt>  <tt class="py-line"><tt class="py-docstring">limitations under the License.</tt> </tt>
+<a name="L17"></a><tt class="py-lineno">  17</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L18"></a><tt class="py-lineno">  18</tt>  <tt class="py-line"><tt class="py-docstring">@author: Diego Torres Milano</tt> </tt>
+<a name="L19"></a><tt class="py-lineno">  19</tt>  <tt class="py-line"><tt class="py-docstring">'''</tt> </tt>
+<a name="L20"></a><tt class="py-lineno">  20</tt>  <tt class="py-line"> </tt>
+<a name="L21"></a><tt class="py-lineno">  21</tt>  <tt class="py-line"><tt class="py-name">__version__</tt> <tt class="py-op">=</tt> <tt class="py-string">'3.2.0'</tt> </tt>
+<a name="L22"></a><tt class="py-lineno">  22</tt>  <tt class="py-line"> </tt>
+<a name="L23"></a><tt class="py-lineno">  23</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> </tt>
+<a name="L24"></a><tt class="py-lineno">  24</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">subprocess</tt> </tt>
+<a name="L25"></a><tt class="py-lineno">  25</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">re</tt> </tt>
+<a name="L26"></a><tt class="py-lineno">  26</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">socket</tt> </tt>
+<a name="L27"></a><tt class="py-lineno">  27</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
+<a name="L28"></a><tt class="py-lineno">  28</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">java</tt> </tt>
+<a name="L29"></a><tt class="py-lineno">  29</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">types</tt> </tt>
+<a name="L30"></a><tt class="py-lineno">  30</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">time</tt> </tt>
+<a name="L31"></a><tt class="py-lineno">  31</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">signal</tt> </tt>
+<a name="L32"></a><tt class="py-lineno">  32</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">warnings</tt> </tt>
+<a name="L33"></a><tt class="py-lineno">  33</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">copy</tt> </tt>
+<a name="L34"></a><tt class="py-lineno">  34</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">pickle</tt> </tt>
+<a name="L35"></a><tt class="py-lineno">  35</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">xml</tt><tt class="py-op">.</tt><tt class="py-name">parsers</tt><tt class="py-op">.</tt><tt class="py-name">expat</tt> </tt>
+<a name="L36"></a><tt class="py-lineno">  36</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">org</tt><tt class="py-op">.</tt><tt class="py-name">python</tt><tt class="py-op">.</tt><tt class="py-name">modules</tt><tt class="py-op">.</tt><tt class="py-name">sre</tt><tt class="py-op">.</tt><tt class="py-name">PatternObject</tt> </tt>
+<a name="L37"></a><tt class="py-lineno">  37</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">com</tt><tt class="py-op">.</tt><tt id="link-0" class="py-name" targets="Package src.com.dtmilano.android=src.com.dtmilano.android-module.html"><a title="src.com.dtmilano.android" class="py-name" href="#" onclick="return doclink('link-0', 'android', 'link-0');">android</a></tt><tt class="py-op">.</tt><tt class="py-name">monkeyrunner</tt> <tt class="py-keyword">import</tt> <tt class="py-name">MonkeyDevice</tt><tt class="py-op">,</tt> <tt class="py-name">MonkeyRunner</tt> </tt>
+<a name="L38"></a><tt class="py-lineno">  38</tt>  <tt class="py-line"> </tt>
+<a name="L39"></a><tt class="py-lineno">  39</tt>  <tt class="py-line"><tt id="link-1" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.DEBUG=src.com.dtmilano.android.viewclient-module.html#DEBUG"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-1', 'DEBUG', 'link-1');">DEBUG</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L40"></a><tt class="py-lineno">  40</tt>  <tt class="py-line"><tt id="link-2" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.DEBUG_DEVICE=src.com.dtmilano.android.viewclient-module.html#DEBUG_DEVICE"><a title="src.com.dtmilano.android.viewclient.DEBUG_DEVICE" class="py-name" href="#" onclick="return doclink('link-2', 'DEBUG_DEVICE', 'link-2');">DEBUG_DEVICE</a></tt> <tt class="py-op">=</tt> <tt id="link-3" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-3', 'DEBUG', 'link-1');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L41"></a><tt class="py-lineno">  41</tt>  <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.DEBUG_RECEIVED=src.com.dtmilano.android.viewclient-module.html#DEBUG_RECEIVED"><a title="src.com.dtmilano.android.viewclient.DEBUG_RECEIVED" class="py-name" href="#" onclick="return doclink('link-4', 'DEBUG_RECEIVED', 'link-4');">DEBUG_RECEIVED</a></tt> <tt class="py-op">=</tt> <tt id="link-5" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-5', 'DEBUG', 'link-1');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L42"></a><tt class="py-lineno">  42</tt>  <tt class="py-line"><tt id="link-6" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.DEBUG_TREE=src.com.dtmilano.android.viewclient-module.html#DEBUG_TREE"><a title="src.com.dtmilano.android.viewclient.DEBUG_TREE" class="py-name" href="#" onclick="return doclink('link-6', 'DEBUG_TREE', 'link-6');">DEBUG_TREE</a></tt> <tt class="py-op">=</tt> <tt id="link-7" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-7', 'DEBUG', 'link-1');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L43"></a><tt class="py-lineno">  43</tt>  <tt class="py-line"><tt id="link-8" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.DEBUG_GETATTR=src.com.dtmilano.android.viewclient-module.html#DEBUG_GETATTR"><a title="src.com.dtmilano.android.viewclient.DEBUG_GETATTR" class="py-name" href="#" onclick="return doclink('link-8', 'DEBUG_GETATTR', 'link-8');">DEBUG_GETATTR</a></tt> <tt class="py-op">=</tt> <tt id="link-9" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-9', 'DEBUG', 'link-1');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L44"></a><tt class="py-lineno">  44</tt>  <tt class="py-line"><tt id="link-10" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.DEBUG_CALL=src.com.dtmilano.android.viewclient-module.html#DEBUG_CALL"><a title="src.com.dtmilano.android.viewclient.DEBUG_CALL" class="py-name" href="#" onclick="return doclink('link-10', 'DEBUG_CALL', 'link-10');">DEBUG_CALL</a></tt> <tt class="py-op">=</tt> <tt id="link-11" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-11', 'DEBUG', 'link-1');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L45"></a><tt class="py-lineno">  45</tt>  <tt class="py-line"><tt id="link-12" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.DEBUG_COORDS=src.com.dtmilano.android.viewclient-module.html#DEBUG_COORDS"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-12', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt> <tt class="py-op">=</tt> <tt id="link-13" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-13', 'DEBUG', 'link-1');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L46"></a><tt class="py-lineno">  46</tt>  <tt class="py-line"><tt id="link-14" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.DEBUG_TOUCH=src.com.dtmilano.android.viewclient-module.html#DEBUG_TOUCH"><a title="src.com.dtmilano.android.viewclient.DEBUG_TOUCH" class="py-name" href="#" onclick="return doclink('link-14', 'DEBUG_TOUCH', 'link-14');">DEBUG_TOUCH</a></tt> <tt class="py-op">=</tt> <tt id="link-15" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-15', 'DEBUG', 'link-1');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L47"></a><tt class="py-lineno">  47</tt>  <tt class="py-line"><tt id="link-16" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.DEBUG_STATUSBAR=src.com.dtmilano.android.viewclient-module.html#DEBUG_STATUSBAR"><a title="src.com.dtmilano.android.viewclient.DEBUG_STATUSBAR" class="py-name" href="#" onclick="return doclink('link-16', 'DEBUG_STATUSBAR', 'link-16');">DEBUG_STATUSBAR</a></tt> <tt class="py-op">=</tt> <tt id="link-17" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-17', 'DEBUG', 'link-1');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L48"></a><tt class="py-lineno">  48</tt>  <tt class="py-line"><tt id="link-18" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.DEBUG_WINDOWS=src.com.dtmilano.android.viewclient-module.html#DEBUG_WINDOWS"><a title="src.com.dtmilano.android.viewclient.DEBUG_WINDOWS" class="py-name" href="#" onclick="return doclink('link-18', 'DEBUG_WINDOWS', 'link-18');">DEBUG_WINDOWS</a></tt> <tt class="py-op">=</tt> <tt id="link-19" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-19', 'DEBUG', 'link-1');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L49"></a><tt class="py-lineno">  49</tt>  <tt class="py-line"><tt id="link-20" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.DEBUG_BOUNDS=src.com.dtmilano.android.viewclient-module.html#DEBUG_BOUNDS"><a title="src.com.dtmilano.android.viewclient.DEBUG_BOUNDS" class="py-name" href="#" onclick="return doclink('link-20', 'DEBUG_BOUNDS', 'link-20');">DEBUG_BOUNDS</a></tt> <tt class="py-op">=</tt> <tt id="link-21" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-21', 'DEBUG', 'link-1');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L50"></a><tt class="py-lineno">  50</tt>  <tt class="py-line"><tt id="link-22" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.DEBUG_DISTANCE=src.com.dtmilano.android.viewclient-module.html#DEBUG_DISTANCE"><a title="src.com.dtmilano.android.viewclient.DEBUG_DISTANCE" class="py-name" href="#" onclick="return doclink('link-22', 'DEBUG_DISTANCE', 'link-22');">DEBUG_DISTANCE</a></tt> <tt class="py-op">=</tt> <tt id="link-23" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-23', 'DEBUG', 'link-1');">DEBUG</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">False</tt> </tt>
+<a name="L51"></a><tt class="py-lineno">  51</tt>  <tt class="py-line"> </tt>
+<a name="L52"></a><tt class="py-lineno">  52</tt>  <tt class="py-line"><tt id="link-24" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.WARNINGS=src.com.dtmilano.android.viewclient-module.html#WARNINGS"><a title="src.com.dtmilano.android.viewclient.WARNINGS" class="py-name" href="#" onclick="return doclink('link-24', 'WARNINGS', 'link-24');">WARNINGS</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L53"></a><tt class="py-lineno">  53</tt>  <tt class="py-line"> </tt>
+<a name="L54"></a><tt class="py-lineno">  54</tt>  <tt class="py-line"><tt id="link-25" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.VIEW_SERVER_HOST=src.com.dtmilano.android.viewclient-module.html#VIEW_SERVER_HOST"><a title="src.com.dtmilano.android.viewclient.VIEW_SERVER_HOST" class="py-name" href="#" onclick="return doclink('link-25', 'VIEW_SERVER_HOST', 'link-25');">VIEW_SERVER_HOST</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'localhost'</tt> </tt>
+<a name="L55"></a><tt class="py-lineno">  55</tt>  <tt class="py-line"><tt id="link-26" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.VIEW_SERVER_PORT=src.com.dtmilano.android.viewclient-module.html#VIEW_SERVER_PORT"><a title="src.com.dtmilano.android.viewclient.VIEW_SERVER_PORT" class="py-name" href="#" onclick="return doclink('link-26', 'VIEW_SERVER_PORT', 'link-26');">VIEW_SERVER_PORT</a></tt> <tt class="py-op">=</tt> <tt class="py-number">4939</tt> </tt>
+<a name="L56"></a><tt class="py-lineno">  56</tt>  <tt class="py-line"> </tt>
+<a name="L57"></a><tt class="py-lineno">  57</tt>  <tt class="py-line"><tt id="link-27" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.ADB_DEFAULT_PORT=src.com.dtmilano.android.viewclient-module.html#ADB_DEFAULT_PORT"><a title="src.com.dtmilano.android.viewclient.ADB_DEFAULT_PORT" class="py-name" href="#" onclick="return doclink('link-27', 'ADB_DEFAULT_PORT', 'link-27');">ADB_DEFAULT_PORT</a></tt> <tt class="py-op">=</tt> <tt class="py-number">5555</tt> </tt>
+<a name="L58"></a><tt class="py-lineno">  58</tt>  <tt class="py-line"> </tt>
+<a name="L59"></a><tt class="py-lineno">  59</tt>  <tt class="py-line"><tt id="link-28" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.OFFSET=src.com.dtmilano.android.viewclient-module.html#OFFSET"><a title="src.com.dtmilano.android.viewclient.OFFSET" class="py-name" href="#" onclick="return doclink('link-28', 'OFFSET', 'link-28');">OFFSET</a></tt> <tt class="py-op">=</tt> <tt class="py-number">25</tt> </tt>
+<a name="L60"></a><tt class="py-lineno">  60</tt>  <tt class="py-line"><tt class="py-string">''' This assumes the smallest touchable view on the screen is approximately 50px x 50px</tt> </tt>
+<a name="L61"></a><tt class="py-lineno">  61</tt>  <tt class="py-line"><tt class="py-string">    and touches it at M{(x+OFFSET, y+OFFSET)} '''</tt> </tt>
+<a name="L62"></a><tt class="py-lineno">  62</tt>  <tt class="py-line"> </tt>
+<a name="L63"></a><tt class="py-lineno">  63</tt>  <tt class="py-line"><tt id="link-29" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES=src.com.dtmilano.android.viewclient-module.html#USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES"><a title="src.com.dtmilano.android.viewclient.USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES" class="py-name" href="#" onclick="return doclink('link-29', 'USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES', 'link-29');">USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES</a></tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L64"></a><tt class="py-lineno">  64</tt>  <tt class="py-line"><tt class="py-string">''' Use monkeyrunner (C{MonkeyDevice.getProperty()}) to obtain the needed properties. If this is</tt> </tt>
+<a name="L65"></a><tt class="py-lineno">  65</tt>  <tt class="py-line"><tt class="py-string">    C{False} then C{adb shell getprop} is used '''</tt> </tt>
+<a name="L66"></a><tt class="py-lineno">  66</tt>  <tt class="py-line"> </tt>
+<a name="L67"></a><tt class="py-lineno">  67</tt>  <tt class="py-line"><tt id="link-30" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED=src.com.dtmilano.android.viewclient-module.html#SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED"><a title="src.com.dtmilano.android.viewclient.SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED" class="py-name" href="#" onclick="return doclink('link-30', 'SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED', 'link-30');">SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L68"></a><tt class="py-lineno">  68</tt>  <tt class="py-line"><tt class="py-string">''' Skips some classes related with the Action Bar and the PhoneWindow$DecorView in the</tt> </tt>
+<a name="L69"></a><tt class="py-lineno">  69</tt>  <tt class="py-line"><tt class="py-string">    coordinates calculation</tt> </tt>
+<a name="L70"></a><tt class="py-lineno">  70</tt>  <tt class="py-line"><tt class="py-string">    @see: L{View.getXY()} '''</tt> </tt>
+<a name="L71"></a><tt class="py-lineno">  71</tt>  <tt class="py-line"> </tt>
+<a name="L72"></a><tt class="py-lineno">  72</tt>  <tt class="py-line"><tt class="py-comment"># some device properties</tt> </tt>
+<a name="L73"></a><tt class="py-lineno">  73</tt>  <tt class="py-line"><tt id="link-31" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY=src.com.dtmilano.android.viewclient-module.html#VERSION_SDK_PROPERTY"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-31', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'version.sdk'</tt> </tt>
+<a name="L74"></a><tt class="py-lineno">  74</tt>  <tt class="py-line"> </tt>
+<a name="L75"></a><tt class="py-lineno">  75</tt>  <tt class="py-line"><tt class="py-comment"># some constants for the attributes</tt> </tt>
+<a name="L76"></a><tt class="py-lineno">  76</tt>  <tt class="py-line"><tt id="link-32" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.ID_PROPERTY=src.com.dtmilano.android.viewclient-module.html#ID_PROPERTY"><a title="src.com.dtmilano.android.viewclient.ID_PROPERTY" class="py-name" href="#" onclick="return doclink('link-32', 'ID_PROPERTY', 'link-32');">ID_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'mID'</tt> </tt>
+<a name="L77"></a><tt class="py-lineno">  77</tt>  <tt class="py-line"><tt id="link-33" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.ID_PROPERTY_UI_AUTOMATOR=src.com.dtmilano.android.viewclient-module.html#ID_PROPERTY_UI_AUTOMATOR"><a title="src.com.dtmilano.android.viewclient.ID_PROPERTY_UI_AUTOMATOR" class="py-name" href="#" onclick="return doclink('link-33', 'ID_PROPERTY_UI_AUTOMATOR', 'link-33');">ID_PROPERTY_UI_AUTOMATOR</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'uniqueId'</tt> </tt>
+<a name="L78"></a><tt class="py-lineno">  78</tt>  <tt class="py-line"><tt id="link-34" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.TEXT_PROPERTY=src.com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY"><a title="src.com.dtmilano.android.viewclient.TEXT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-34', 'TEXT_PROPERTY', 'link-34');">TEXT_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'text:mText'</tt> </tt>
+<a name="L79"></a><tt class="py-lineno">  79</tt>  <tt class="py-line"><tt id="link-35" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.TEXT_PROPERTY_API_10=src.com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY_API_10"><a title="src.com.dtmilano.android.viewclient.TEXT_PROPERTY_API_10" class="py-name" href="#" onclick="return doclink('link-35', 'TEXT_PROPERTY_API_10', 'link-35');">TEXT_PROPERTY_API_10</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'mText'</tt> </tt>
+<a name="L80"></a><tt class="py-lineno">  80</tt>  <tt class="py-line"><tt id="link-36" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.TEXT_PROPERTY_UI_AUTOMATOR=src.com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY_UI_AUTOMATOR"><a title="src.com.dtmilano.android.viewclient.TEXT_PROPERTY_UI_AUTOMATOR" class="py-name" href="#" onclick="return doclink('link-36', 'TEXT_PROPERTY_UI_AUTOMATOR', 'link-36');">TEXT_PROPERTY_UI_AUTOMATOR</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'text'</tt> </tt>
+<a name="L81"></a><tt class="py-lineno">  81</tt>  <tt class="py-line"><tt id="link-37" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.WS=src.com.dtmilano.android.viewclient-module.html#WS"><a title="src.com.dtmilano.android.viewclient.WS" class="py-name" href="#" onclick="return doclink('link-37', 'WS', 'link-37');">WS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"\xfe"</tt> <tt class="py-comment"># the whitespace replacement char for TEXT_PROPERTY</tt> </tt>
+<a name="L82"></a><tt class="py-lineno">  82</tt>  <tt class="py-line"><tt id="link-38" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.LEFT_PROPERTY=src.com.dtmilano.android.viewclient-module.html#LEFT_PROPERTY"><a title="src.com.dtmilano.android.viewclient.LEFT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-38', 'LEFT_PROPERTY', 'link-38');">LEFT_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'layout:mLeft'</tt> </tt>
+<a name="L83"></a><tt class="py-lineno">  83</tt>  <tt class="py-line"><tt id="link-39" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.LEFT_PROPERTY_API_8=src.com.dtmilano.android.viewclient-module.html#LEFT_PROPERTY_API_8"><a title="src.com.dtmilano.android.viewclient.LEFT_PROPERTY_API_8" class="py-name" href="#" onclick="return doclink('link-39', 'LEFT_PROPERTY_API_8', 'link-39');">LEFT_PROPERTY_API_8</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'mLeft'</tt> </tt>
+<a name="L84"></a><tt class="py-lineno">  84</tt>  <tt class="py-line"><tt id="link-40" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.TOP_PROPERTY=src.com.dtmilano.android.viewclient-module.html#TOP_PROPERTY"><a title="src.com.dtmilano.android.viewclient.TOP_PROPERTY" class="py-name" href="#" onclick="return doclink('link-40', 'TOP_PROPERTY', 'link-40');">TOP_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'layout:mTop'</tt> </tt>
+<a name="L85"></a><tt class="py-lineno">  85</tt>  <tt class="py-line"><tt id="link-41" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.TOP_PROPERTY_API_8=src.com.dtmilano.android.viewclient-module.html#TOP_PROPERTY_API_8"><a title="src.com.dtmilano.android.viewclient.TOP_PROPERTY_API_8" class="py-name" href="#" onclick="return doclink('link-41', 'TOP_PROPERTY_API_8', 'link-41');">TOP_PROPERTY_API_8</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'mTop'</tt> </tt>
+<a name="L86"></a><tt class="py-lineno">  86</tt>  <tt class="py-line"><tt id="link-42" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.WIDTH_PROPERTY=src.com.dtmilano.android.viewclient-module.html#WIDTH_PROPERTY"><a title="src.com.dtmilano.android.viewclient.WIDTH_PROPERTY" class="py-name" href="#" onclick="return doclink('link-42', 'WIDTH_PROPERTY', 'link-42');">WIDTH_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'layout:getWidth()'</tt> </tt>
+<a name="L87"></a><tt class="py-lineno">  87</tt>  <tt class="py-line"><tt id="link-43" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.WIDTH_PROPERTY_API_8=src.com.dtmilano.android.viewclient-module.html#WIDTH_PROPERTY_API_8"><a title="src.com.dtmilano.android.viewclient.WIDTH_PROPERTY_API_8" class="py-name" href="#" onclick="return doclink('link-43', 'WIDTH_PROPERTY_API_8', 'link-43');">WIDTH_PROPERTY_API_8</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'getWidth()'</tt> </tt>
+<a name="L88"></a><tt class="py-lineno">  88</tt>  <tt class="py-line"><tt id="link-44" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.HEIGHT_PROPERTY=src.com.dtmilano.android.viewclient-module.html#HEIGHT_PROPERTY"><a title="src.com.dtmilano.android.viewclient.HEIGHT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-44', 'HEIGHT_PROPERTY', 'link-44');">HEIGHT_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'layout:getHeight()'</tt> </tt>
+<a name="L89"></a><tt class="py-lineno">  89</tt>  <tt class="py-line"><tt id="link-45" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.HEIGHT_PROPERTY_API_8=src.com.dtmilano.android.viewclient-module.html#HEIGHT_PROPERTY_API_8"><a title="src.com.dtmilano.android.viewclient.HEIGHT_PROPERTY_API_8" class="py-name" href="#" onclick="return doclink('link-45', 'HEIGHT_PROPERTY_API_8', 'link-45');">HEIGHT_PROPERTY_API_8</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'getHeight()'</tt> </tt>
+<a name="L90"></a><tt class="py-lineno">  90</tt>  <tt class="py-line"><tt id="link-46" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY=src.com.dtmilano.android.viewclient-module.html#GET_VISIBILITY_PROPERTY"><a title="src.com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY" class="py-name" href="#" onclick="return doclink('link-46', 'GET_VISIBILITY_PROPERTY', 'link-46');">GET_VISIBILITY_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'getVisibility()'</tt> </tt>
+<a name="L91"></a><tt class="py-lineno">  91</tt>  <tt class="py-line"><tt id="link-47" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.LAYOUT_TOP_MARGIN_PROPERTY=src.com.dtmilano.android.viewclient-module.html#LAYOUT_TOP_MARGIN_PROPERTY"><a title="src.com.dtmilano.android.viewclient.LAYOUT_TOP_MARGIN_PROPERTY" class="py-name" href="#" onclick="return doclink('link-47', 'LAYOUT_TOP_MARGIN_PROPERTY', 'link-47');">LAYOUT_TOP_MARGIN_PROPERTY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'layout:layout_topMargin'</tt> </tt>
+<a name="L92"></a><tt class="py-lineno">  92</tt>  <tt class="py-line"> </tt>
+<a name="L93"></a><tt class="py-lineno">  93</tt>  <tt class="py-line"><tt class="py-comment"># visibility</tt> </tt>
+<a name="L94"></a><tt class="py-lineno">  94</tt>  <tt class="py-line"><tt id="link-48" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.VISIBLE=src.com.dtmilano.android.viewclient-module.html#VISIBLE"><a title="src.com.dtmilano.android.viewclient.VISIBLE" class="py-name" href="#" onclick="return doclink('link-48', 'VISIBLE', 'link-48');">VISIBLE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0x0</tt> </tt>
+<a name="L95"></a><tt class="py-lineno">  95</tt>  <tt class="py-line"><tt id="link-49" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.INVISIBLE=src.com.dtmilano.android.viewclient-module.html#INVISIBLE"><a title="src.com.dtmilano.android.viewclient.INVISIBLE" class="py-name" href="#" onclick="return doclink('link-49', 'INVISIBLE', 'link-49');">INVISIBLE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0x4</tt> </tt>
+<a name="L96"></a><tt class="py-lineno">  96</tt>  <tt class="py-line"><tt id="link-50" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.GONE=src.com.dtmilano.android.viewclient-module.html#GONE"><a title="src.com.dtmilano.android.viewclient.GONE" class="py-name" href="#" onclick="return doclink('link-50', 'GONE', 'link-50');">GONE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0x8</tt> </tt>
+<a name="L97"></a><tt class="py-lineno">  97</tt>  <tt class="py-line"> </tt>
+<a name="L98"></a><tt class="py-lineno">  98</tt>  <tt class="py-line"><tt id="link-51" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.IP_RE=src.com.dtmilano.android.viewclient-module.html#IP_RE"><a title="src.com.dtmilano.android.viewclient.IP_RE" class="py-name" href="#" onclick="return doclink('link-51', 'IP_RE', 'link-51');">IP_RE</a></tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'^(\d{1,3}\.){3}\d{1,3}$'</tt><tt class="py-op">)</tt> </tt>
+<a name="L99"></a><tt class="py-lineno">  99</tt>  <tt class="py-line"><tt id="link-52" class="py-name" targets="Variable src.com.dtmilano.android.viewclient.ID_RE=src.com.dtmilano.android.viewclient-module.html#ID_RE"><a title="src.com.dtmilano.android.viewclient.ID_RE" class="py-name" href="#" onclick="return doclink('link-52', 'ID_RE', 'link-52');">ID_RE</a></tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'id/([^/]*)(/(\d+))?'</tt><tt class="py-op">)</tt> </tt>
+<a name="__nd"></a><div id="__nd-def"><a name="L100"></a><tt class="py-lineno"> 100</tt>  <tt class="py-line"> </tt>
+<a name="L101"></a><tt class="py-lineno"> 101</tt> <a class="py-toggle" href="#" id="__nd-toggle" onclick="return toggle('__nd');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient-module.html#__nd">__nd</a><tt class="py-op">(</tt><tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="__nd-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="__nd-expanded"><a name="L102"></a><tt class="py-lineno"> 102</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L103"></a><tt class="py-lineno"> 103</tt>  <tt class="py-line"><tt class="py-docstring">    @return: Returns a named decimal regex</tt> </tt>
+<a name="L104"></a><tt class="py-lineno"> 104</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L105"></a><tt class="py-lineno"> 105</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">'(?P&lt;%s&gt;\d+)'</tt> <tt class="py-op">%</tt> <tt class="py-name">name</tt> </tt>
+</div><a name="L106"></a><tt class="py-lineno"> 106</tt>  <tt class="py-line"> </tt>
+<a name="__nh"></a><div id="__nh-def"><a name="L107"></a><tt class="py-lineno"> 107</tt> <a class="py-toggle" href="#" id="__nh-toggle" onclick="return toggle('__nh');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient-module.html#__nh">__nh</a><tt class="py-op">(</tt><tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="__nh-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="__nh-expanded"><a name="L108"></a><tt class="py-lineno"> 108</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L109"></a><tt class="py-lineno"> 109</tt>  <tt class="py-line"><tt class="py-docstring">    @return: Returns a named hex regex</tt> </tt>
+<a name="L110"></a><tt class="py-lineno"> 110</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L111"></a><tt class="py-lineno"> 111</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">'(?P&lt;%s&gt;[0-9a-f]+)'</tt> <tt class="py-op">%</tt> <tt class="py-name">name</tt> </tt>
+</div><a name="L112"></a><tt class="py-lineno"> 112</tt>  <tt class="py-line"> </tt>
+<a name="__ns"></a><div id="__ns-def"><a name="L113"></a><tt class="py-lineno"> 113</tt> <a class="py-toggle" href="#" id="__ns-toggle" onclick="return toggle('__ns');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient-module.html#__ns">__ns</a><tt class="py-op">(</tt><tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">greedy</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="__ns-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="__ns-expanded"><a name="L114"></a><tt class="py-lineno"> 114</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L115"></a><tt class="py-lineno"> 115</tt>  <tt class="py-line"><tt class="py-docstring">    NOTICE: this is using a non-greedy (or minimal) regex</tt> </tt>
+<a name="L116"></a><tt class="py-lineno"> 116</tt>  <tt class="py-line"><tt class="py-docstring">    </tt> </tt>
+<a name="L117"></a><tt class="py-lineno"> 117</tt>  <tt class="py-line"><tt class="py-docstring">    @type name: str</tt> </tt>
+<a name="L118"></a><tt class="py-lineno"> 118</tt>  <tt class="py-line"><tt class="py-docstring">    @param name: the name used to tag the expression</tt> </tt>
+<a name="L119"></a><tt class="py-lineno"> 119</tt>  <tt class="py-line"><tt class="py-docstring">    @type greedy: bool</tt> </tt>
+<a name="L120"></a><tt class="py-lineno"> 120</tt>  <tt class="py-line"><tt class="py-docstring">    @param greedy: Whether the regex is greedy or not</tt> </tt>
+<a name="L121"></a><tt class="py-lineno"> 121</tt>  <tt class="py-line"><tt class="py-docstring">    </tt> </tt>
+<a name="L122"></a><tt class="py-lineno"> 122</tt>  <tt class="py-line"><tt class="py-docstring">    @return: Returns a named string regex (only non-whitespace characters allowed)</tt> </tt>
+<a name="L123"></a><tt class="py-lineno"> 123</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L124"></a><tt class="py-lineno"> 124</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">'(?P&lt;%s&gt;\S+%s)'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt> <tt class="py-keyword">if</tt> <tt class="py-name">greedy</tt> <tt class="py-keyword">else</tt> <tt class="py-string">'?'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L125"></a><tt class="py-lineno"> 125</tt>  <tt class="py-line"> </tt>
+<a name="Window"></a><div id="Window-def"><a name="L126"></a><tt class="py-lineno"> 126</tt>  <tt class="py-line"> </tt>
+<a name="L127"></a><tt class="py-lineno"> 127</tt> <a class="py-toggle" href="#" id="Window-toggle" onclick="return toggle('Window');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.Window-class.html">Window</a><tt class="py-op">:</tt> </tt>
+</div><div id="Window-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Window-expanded"><a name="L128"></a><tt class="py-lineno"> 128</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L129"></a><tt class="py-lineno"> 129</tt>  <tt class="py-line"><tt class="py-docstring">    Window class</tt> </tt>
+<a name="L130"></a><tt class="py-lineno"> 130</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L131"></a><tt class="py-lineno"> 131</tt>  <tt class="py-line"> </tt>
+<a name="Window.__init__"></a><div id="Window.__init__-def"><a name="L132"></a><tt class="py-lineno"> 132</tt> <a class="py-toggle" href="#" id="Window.__init__-toggle" onclick="return toggle('Window.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.Window-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">num</tt><tt class="py-op">,</tt> <tt class="py-param">winId</tt><tt class="py-op">,</tt> <tt class="py-param">activity</tt><tt class="py-op">,</tt> <tt class="py-param">wvx</tt><tt class="py-op">,</tt> <tt class="py-param">wvy</tt><tt class="py-op">,</tt> <tt class="py-param">wvw</tt><tt class="py-op">,</tt> <tt class="py-param">wvh</tt><tt class="py-op">,</tt> <tt class="py-param">px</tt><tt class="py-op">,</tt> <tt class="py-param">py</tt><tt class="py-op">,</tt> <tt class="py-param">visibility</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Window.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Window.__init__-expanded"><a name="L133"></a><tt class="py-lineno"> 133</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L134"></a><tt class="py-lineno"> 134</tt>  <tt class="py-line"><tt class="py-docstring">        Constructor</tt> </tt>
+<a name="L135"></a><tt class="py-lineno"> 135</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L136"></a><tt class="py-lineno"> 136</tt>  <tt class="py-line"><tt class="py-docstring">        @type num: int</tt> </tt>
+<a name="L137"></a><tt class="py-lineno"> 137</tt>  <tt class="py-line"><tt class="py-docstring">        @param num: Ordering number in Window Manager</tt> </tt>
+<a name="L138"></a><tt class="py-lineno"> 138</tt>  <tt class="py-line"><tt class="py-docstring">        @type winId: str</tt> </tt>
+<a name="L139"></a><tt class="py-lineno"> 139</tt>  <tt class="py-line"><tt class="py-docstring">        @param winId: the window ID</tt> </tt>
+<a name="L140"></a><tt class="py-lineno"> 140</tt>  <tt class="py-line"><tt class="py-docstring">        @type activity: str</tt> </tt>
+<a name="L141"></a><tt class="py-lineno"> 141</tt>  <tt class="py-line"><tt class="py-docstring">        @param activity: the activity (or sometimes other component) owning the window</tt> </tt>
+<a name="L142"></a><tt class="py-lineno"> 142</tt>  <tt class="py-line"><tt class="py-docstring">        @type wvx: int</tt> </tt>
+<a name="L143"></a><tt class="py-lineno"> 143</tt>  <tt class="py-line"><tt class="py-docstring">        @param wvx: window's virtual X</tt> </tt>
+<a name="L144"></a><tt class="py-lineno"> 144</tt>  <tt class="py-line"><tt class="py-docstring">        @type wvy: int</tt> </tt>
+<a name="L145"></a><tt class="py-lineno"> 145</tt>  <tt class="py-line"><tt class="py-docstring">        @param wvy: window's virtual Y</tt> </tt>
+<a name="L146"></a><tt class="py-lineno"> 146</tt>  <tt class="py-line"><tt class="py-docstring">        @type wvw: int</tt> </tt>
+<a name="L147"></a><tt class="py-lineno"> 147</tt>  <tt class="py-line"><tt class="py-docstring">        @param wvw: window's virtual width</tt> </tt>
+<a name="L148"></a><tt class="py-lineno"> 148</tt>  <tt class="py-line"><tt class="py-docstring">        @type wvh: int</tt> </tt>
+<a name="L149"></a><tt class="py-lineno"> 149</tt>  <tt class="py-line"><tt class="py-docstring">        @param wvh: window's virtual height</tt> </tt>
+<a name="L150"></a><tt class="py-lineno"> 150</tt>  <tt class="py-line"><tt class="py-docstring">        @type px: int</tt> </tt>
+<a name="L151"></a><tt class="py-lineno"> 151</tt>  <tt class="py-line"><tt class="py-docstring">        @param px: parent's X</tt> </tt>
+<a name="L152"></a><tt class="py-lineno"> 152</tt>  <tt class="py-line"><tt class="py-docstring">        @type py: int</tt> </tt>
+<a name="L153"></a><tt class="py-lineno"> 153</tt>  <tt class="py-line"><tt class="py-docstring">        @param py: parent's Y</tt> </tt>
+<a name="L154"></a><tt class="py-lineno"> 154</tt>  <tt class="py-line"><tt class="py-docstring">        @type visibility: int</tt> </tt>
+<a name="L155"></a><tt class="py-lineno"> 155</tt>  <tt class="py-line"><tt class="py-docstring">        @param visibility: visibility of the window</tt> </tt>
+<a name="L156"></a><tt class="py-lineno"> 156</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L157"></a><tt class="py-lineno"> 157</tt>  <tt class="py-line"> </tt>
+<a name="L158"></a><tt class="py-lineno"> 158</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-53" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-53', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"Window(%d, %s, %s, %d, %d, %d, %d, %d, %d, %d)"</tt> <tt class="py-op">%</tt> \ </tt>
+<a name="L159"></a><tt class="py-lineno"> 159</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">num</tt><tt class="py-op">,</tt> <tt class="py-name">winId</tt><tt class="py-op">,</tt> <tt class="py-name">activity</tt><tt class="py-op">,</tt> <tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt><tt class="py-op">,</tt> <tt class="py-name">wvw</tt><tt class="py-op">,</tt> <tt class="py-name">wvh</tt><tt class="py-op">,</tt> <tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">py</tt><tt class="py-op">,</tt> <tt class="py-name">visibility</tt><tt class="py-op">)</tt> </tt>
+<a name="L160"></a><tt class="py-lineno"> 160</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">num</tt> <tt class="py-op">=</tt> <tt class="py-name">num</tt> </tt>
+<a name="L161"></a><tt class="py-lineno"> 161</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">winId</tt> <tt class="py-op">=</tt> <tt class="py-name">winId</tt> </tt>
+<a name="L162"></a><tt class="py-lineno"> 162</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">activity</tt> <tt class="py-op">=</tt> <tt class="py-name">activity</tt> </tt>
+<a name="L163"></a><tt class="py-lineno"> 163</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wvx</tt> <tt class="py-op">=</tt> <tt class="py-name">wvx</tt> </tt>
+<a name="L164"></a><tt class="py-lineno"> 164</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt> <tt class="py-op">=</tt> <tt class="py-name">wvy</tt> </tt>
+<a name="L165"></a><tt class="py-lineno"> 165</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wvw</tt> <tt class="py-op">=</tt> <tt class="py-name">wvw</tt> </tt>
+<a name="L166"></a><tt class="py-lineno"> 166</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wvh</tt> <tt class="py-op">=</tt> <tt class="py-name">wvh</tt> </tt>
+<a name="L167"></a><tt class="py-lineno"> 167</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">px</tt> <tt class="py-op">=</tt> <tt class="py-name">px</tt> </tt>
+<a name="L168"></a><tt class="py-lineno"> 168</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">py</tt> <tt class="py-op">=</tt> <tt class="py-name">py</tt> </tt>
+<a name="L169"></a><tt class="py-lineno"> 169</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">visibility</tt> <tt class="py-op">=</tt> <tt class="py-name">visibility</tt> </tt>
+</div><a name="L170"></a><tt class="py-lineno"> 170</tt>  <tt class="py-line"> </tt>
+<a name="Window.__str__"></a><div id="Window.__str__-def"><a name="L171"></a><tt class="py-lineno"> 171</tt> <a class="py-toggle" href="#" id="Window.__str__-toggle" onclick="return toggle('Window.__str__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.Window-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Window.__str__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Window.__str__-expanded"><a name="L172"></a><tt class="py-lineno"> 172</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-string">"Window(%d, wid=%s, a=%s, x=%d, y=%d, w=%d, h=%d, px=%d, py=%d, v=%d)"</tt> <tt class="py-op">%</tt> \ </tt>
+<a name="L173"></a><tt class="py-lineno"> 173</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">num</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">winId</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">activity</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wvw</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wvh</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">py</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">visibility</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L174"></a><tt class="py-lineno"> 174</tt>  <tt class="py-line"> </tt>
+<a name="ViewNotFoundException"></a><div id="ViewNotFoundException-def"><a name="L175"></a><tt class="py-lineno"> 175</tt>  <tt class="py-line"> </tt>
+<a name="L176"></a><tt class="py-lineno"> 176</tt> <a class="py-toggle" href="#" id="ViewNotFoundException-toggle" onclick="return toggle('ViewNotFoundException');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewNotFoundException-class.html">ViewNotFoundException</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewNotFoundException-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ViewNotFoundException-expanded"><a name="L177"></a><tt class="py-lineno"> 177</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L178"></a><tt class="py-lineno"> 178</tt>  <tt class="py-line"><tt class="py-docstring">    ViewNotFoundException is raised when a View is not found.</tt> </tt>
+<a name="L179"></a><tt class="py-lineno"> 179</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L180"></a><tt class="py-lineno"> 180</tt>  <tt class="py-line">     </tt>
+<a name="ViewNotFoundException.__init__"></a><div id="ViewNotFoundException.__init__-def"><a name="L181"></a><tt class="py-lineno"> 181</tt> <a class="py-toggle" href="#" id="ViewNotFoundException.__init__-toggle" onclick="return toggle('ViewNotFoundException.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewNotFoundException-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewNotFoundException.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewNotFoundException.__init__-expanded"><a name="L182"></a><tt class="py-lineno"> 182</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">org</tt><tt class="py-op">.</tt><tt class="py-name">python</tt><tt class="py-op">.</tt><tt class="py-name">modules</tt><tt class="py-op">.</tt><tt class="py-name">sre</tt><tt class="py-op">.</tt><tt class="py-name">PatternObject</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L183"></a><tt class="py-lineno"> 183</tt>  <tt class="py-line">            <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-string">"Couldn't find View with %s that matches '%s' in tree with root=%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">.</tt><tt class="py-name">pattern</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L184"></a><tt class="py-lineno"> 184</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L185"></a><tt class="py-lineno"> 185</tt>  <tt class="py-line">            <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-string">"Couldn't find View with %s='%s' in tree with root=%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L186"></a><tt class="py-lineno"> 186</tt>  <tt class="py-line">        <tt class="py-name">super</tt><tt class="py-op">(</tt><tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name" targets="Method src.com.dtmilano.android.viewclient.Excerpt2Code.__init__()=src.com.dtmilano.android.viewclient.Excerpt2Code-class.html#__init__,Method src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.__init__()=src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#__init__,Method src.com.dtmilano.android.viewclient.View.__init__()=src.com.dtmilano.android.viewclient.View-class.html#__init__,Method src.com.dtmilano.android.viewclient.ViewClient.__init__()=src.com.dtmilano.android.viewclient.ViewClient-class.html#__init__,Method src.com.dtmilano.android.viewclient.ViewNotFoundException.__init__()=src.com.dtmilano.android.viewclient.ViewNotFoundException-class.html#__init__,Method src.com.dtmilano.android.viewclient.Window.__init__()=src.com.dtmilano.android.viewclient.Window-class.html#__init__"><a title="src.com.dtmilano.android.viewclient.Excerpt2Code.__init__
+src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.__init__
+src.com.dtmilano.android.viewclient.View.__init__
+src.com.dtmilano.android.viewclient.ViewClient.__init__
+src.com.dtmilano.android.viewclient.ViewNotFoundException.__init__
+src.com.dtmilano.android.viewclient.Window.__init__" class="py-name" href="#" onclick="return doclink('link-54', '__init__', 'link-54');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L187"></a><tt class="py-lineno"> 187</tt>  <tt class="py-line"> </tt>
+<a name="View"></a><div id="View-def"><a name="L188"></a><tt class="py-lineno"> 188</tt> <a class="py-toggle" href="#" id="View-toggle" onclick="return toggle('View');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html">View</a><tt class="py-op">:</tt> </tt>
+</div><div id="View-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="View-expanded"><a name="L189"></a><tt class="py-lineno"> 189</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L190"></a><tt class="py-lineno"> 190</tt>  <tt class="py-line"><tt class="py-docstring">    View class</tt> </tt>
+<a name="L191"></a><tt class="py-lineno"> 191</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L192"></a><tt class="py-lineno"> 192</tt>  <tt class="py-line"> </tt>
+<a name="L193"></a><tt class="py-lineno"> 193</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="View.factory"></a><div id="View.factory-def"><a name="L194"></a><tt class="py-lineno"> 194</tt> <a class="py-toggle" href="#" id="View.factory-toggle" onclick="return toggle('View.factory');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#factory">factory</a><tt class="py-op">(</tt><tt class="py-param">attrs</tt><tt class="py-op">,</tt> <tt class="py-param">device</tt><tt class="py-op">,</tt> <tt class="py-param">version</tt><tt class="py-op">=</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-param">forceviewserveruse</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.factory-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.factory-expanded"><a name="L195"></a><tt class="py-lineno"> 195</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L196"></a><tt class="py-lineno"> 196</tt>  <tt class="py-line"><tt class="py-docstring">        View factory</tt> </tt>
+<a name="L197"></a><tt class="py-lineno"> 197</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L198"></a><tt class="py-lineno"> 198</tt>  <tt class="py-line">         </tt>
+<a name="L199"></a><tt class="py-lineno"> 199</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">attrs</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'class'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L200"></a><tt class="py-lineno"> 200</tt>  <tt class="py-line">            <tt class="py-name">clazz</tt> <tt class="py-op">=</tt> <tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-string">'class'</tt><tt class="py-op">]</tt> </tt>
+<a name="L201"></a><tt class="py-lineno"> 201</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">clazz</tt> <tt class="py-op">==</tt> <tt class="py-string">'android.widget.TextView'</tt><tt class="py-op">:</tt> </tt>
+<a name="L202"></a><tt class="py-lineno"> 202</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt id="link-55" class="py-name" targets="Class src.com.dtmilano.android.viewclient.TextView=src.com.dtmilano.android.viewclient.TextView-class.html"><a title="src.com.dtmilano.android.viewclient.TextView" class="py-name" href="#" onclick="return doclink('link-55', 'TextView', 'link-55');">TextView</a></tt><tt class="py-op">(</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">version</tt><tt class="py-op">,</tt> <tt class="py-name">forceviewserveruse</tt><tt class="py-op">)</tt> </tt>
+<a name="L203"></a><tt class="py-lineno"> 203</tt>  <tt class="py-line">            <tt class="py-keyword">elif</tt> <tt class="py-name">clazz</tt> <tt class="py-op">==</tt> <tt class="py-string">'android.widget.EditText'</tt><tt class="py-op">:</tt> </tt>
+<a name="L204"></a><tt class="py-lineno"> 204</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt id="link-56" class="py-name" targets="Class src.com.dtmilano.android.viewclient.EditText=src.com.dtmilano.android.viewclient.EditText-class.html"><a title="src.com.dtmilano.android.viewclient.EditText" class="py-name" href="#" onclick="return doclink('link-56', 'EditText', 'link-56');">EditText</a></tt><tt class="py-op">(</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">version</tt><tt class="py-op">,</tt> <tt class="py-name">forceviewserveruse</tt><tt class="py-op">)</tt> </tt>
+<a name="L205"></a><tt class="py-lineno"> 205</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L206"></a><tt class="py-lineno"> 206</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt id="link-57" class="py-name" targets="Class src.com.dtmilano.android.viewclient.View=src.com.dtmilano.android.viewclient.View-class.html"><a title="src.com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-57', 'View', 'link-57');">View</a></tt><tt class="py-op">(</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">version</tt><tt class="py-op">,</tt> <tt class="py-name">forceviewserveruse</tt><tt class="py-op">)</tt> </tt>
+<a name="L207"></a><tt class="py-lineno"> 207</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L208"></a><tt class="py-lineno"> 208</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt id="link-58" class="py-name"><a title="src.com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-58', 'View', 'link-57');">View</a></tt><tt class="py-op">(</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">version</tt><tt class="py-op">,</tt> <tt class="py-name">forceviewserveruse</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L209"></a><tt class="py-lineno"> 209</tt>  <tt class="py-line">     </tt>
+<a name="View.__init__"></a><div id="View.__init__-def"><a name="L210"></a><tt class="py-lineno"> 210</tt> <a class="py-toggle" href="#" id="View.__init__-toggle" onclick="return toggle('View.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">map</tt><tt class="py-op">,</tt> <tt class="py-param">device</tt><tt class="py-op">,</tt> <tt class="py-param">version</tt><tt class="py-op">=</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-param">forceviewserveruse</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__init__-expanded"><a name="L211"></a><tt class="py-lineno"> 211</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L212"></a><tt class="py-lineno"> 212</tt>  <tt class="py-line"><tt class="py-docstring">        Constructor</tt> </tt>
+<a name="L213"></a><tt class="py-lineno"> 213</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L214"></a><tt class="py-lineno"> 214</tt>  <tt class="py-line"><tt class="py-docstring">        @type map: map</tt> </tt>
+<a name="L215"></a><tt class="py-lineno"> 215</tt>  <tt class="py-line"><tt class="py-docstring">        @param map: the map containing the (attribute, value) pairs</tt> </tt>
+<a name="L216"></a><tt class="py-lineno"> 216</tt>  <tt class="py-line"><tt class="py-docstring">        @type device: MonkeyDevice</tt> </tt>
+<a name="L217"></a><tt class="py-lineno"> 217</tt>  <tt class="py-line"><tt class="py-docstring">        @param device: the device containing this View</tt> </tt>
+<a name="L218"></a><tt class="py-lineno"> 218</tt>  <tt class="py-line"><tt class="py-docstring">        @type version: int</tt> </tt>
+<a name="L219"></a><tt class="py-lineno"> 219</tt>  <tt class="py-line"><tt class="py-docstring">        @param version: the Android SDK version number of the platform where this View belongs. If</tt> </tt>
+<a name="L220"></a><tt class="py-lineno"> 220</tt>  <tt class="py-line"><tt class="py-docstring">                        this is C{-1} then the Android SDK version will be obtained in this</tt> </tt>
+<a name="L221"></a><tt class="py-lineno"> 221</tt>  <tt class="py-line"><tt class="py-docstring">                        constructor.</tt> </tt>
+<a name="L222"></a><tt class="py-lineno"> 222</tt>  <tt class="py-line"><tt class="py-docstring">        @type forceviewserveruse: boolean</tt> </tt>
+<a name="L223"></a><tt class="py-lineno"> 223</tt>  <tt class="py-line"><tt class="py-docstring">        @param forceviewserveruse: Force the use of C{ViewServer} even if the conditions were given</tt> </tt>
+<a name="L224"></a><tt class="py-lineno"> 224</tt>  <tt class="py-line"><tt class="py-docstring">                        to use C{UiAutomator}.</tt> </tt>
+<a name="L225"></a><tt class="py-lineno"> 225</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L226"></a><tt class="py-lineno"> 226</tt>  <tt class="py-line">         </tt>
+<a name="L227"></a><tt class="py-lineno"> 227</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt> <tt class="py-op">=</tt> <tt class="py-name">map</tt> </tt>
+<a name="L228"></a><tt class="py-lineno"> 228</tt>  <tt class="py-line">        <tt class="py-string">''' The map that contains the C{attr},C{value} pairs '''</tt> </tt>
+<a name="L229"></a><tt class="py-lineno"> 229</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt> </tt>
+<a name="L230"></a><tt class="py-lineno"> 230</tt>  <tt class="py-line">        <tt class="py-string">''' The MonkeyDevice '''</tt> </tt>
+<a name="L231"></a><tt class="py-lineno"> 231</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">children</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L232"></a><tt class="py-lineno"> 232</tt>  <tt class="py-line">        <tt class="py-string">''' The children of this View '''</tt> </tt>
+<a name="L233"></a><tt class="py-lineno"> 233</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L234"></a><tt class="py-lineno"> 234</tt>  <tt class="py-line">        <tt class="py-string">''' The parent of this View '''</tt> </tt>
+<a name="L235"></a><tt class="py-lineno"> 235</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L236"></a><tt class="py-lineno"> 236</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L237"></a><tt class="py-lineno"> 237</tt>  <tt class="py-line">        <tt class="py-string">''' The current focus '''</tt> </tt>
+<a name="L238"></a><tt class="py-lineno"> 238</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L239"></a><tt class="py-lineno"> 239</tt>  <tt class="py-line">        <tt class="py-string">''' Build properties '''</tt> </tt>
+<a name="L240"></a><tt class="py-lineno"> 240</tt>  <tt class="py-line"> </tt>
+<a name="L241"></a><tt class="py-lineno"> 241</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">version</tt> <tt class="py-op">!=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L242"></a><tt class="py-lineno"> 242</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-59" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-59', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">version</tt> </tt>
+<a name="L243"></a><tt class="py-lineno"> 243</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L244"></a><tt class="py-lineno"> 244</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L245"></a><tt class="py-lineno"> 245</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-60" class="py-name"><a title="src.com.dtmilano.android.viewclient.USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES" class="py-name" href="#" onclick="return doclink('link-60', 'USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES', 'link-29');">USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L246"></a><tt class="py-lineno"> 246</tt>  <tt class="py-line">                    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-61" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-61', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">getProperty</tt><tt class="py-op">(</tt><tt class="py-string">'build.'</tt> <tt class="py-op">+</tt> <tt id="link-62" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-62', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L247"></a><tt class="py-lineno"> 247</tt>  <tt class="py-line">                <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L248"></a><tt class="py-lineno"> 248</tt>  <tt class="py-line">                    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-63" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-63', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">shell</tt><tt class="py-op">(</tt><tt class="py-string">'getprop ro.build.'</tt> <tt class="py-op">+</tt> <tt id="link-64" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-64', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L249"></a><tt class="py-lineno"> 249</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L250"></a><tt class="py-lineno"> 250</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-65" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-65', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L251"></a><tt class="py-lineno"> 251</tt>  <tt class="py-line">         </tt>
+<a name="L252"></a><tt class="py-lineno"> 252</tt>  <tt class="py-line">        <tt class="py-name">version</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-66" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-66', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> </tt>
+<a name="L253"></a><tt class="py-lineno"> 253</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">version</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">forceviewserveruse</tt> </tt>
+<a name="L254"></a><tt class="py-lineno"> 254</tt>  <tt class="py-line">        <tt class="py-string">''' Whether to use UIAutomator or ViewServer '''</tt> </tt>
+<a name="L255"></a><tt class="py-lineno"> 255</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L256"></a><tt class="py-lineno"> 256</tt>  <tt class="py-line">        <tt class="py-string">''' The id property depending on the View attribute format '''</tt> </tt>
+<a name="L257"></a><tt class="py-lineno"> 257</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L258"></a><tt class="py-lineno"> 258</tt>  <tt class="py-line">        <tt class="py-string">''' The text property depending on the View attribute format '''</tt> </tt>
+<a name="L259"></a><tt class="py-lineno"> 259</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L260"></a><tt class="py-lineno"> 260</tt>  <tt class="py-line">        <tt class="py-string">''' The left property depending on the View attribute format '''</tt> </tt>
+<a name="L261"></a><tt class="py-lineno"> 261</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L262"></a><tt class="py-lineno"> 262</tt>  <tt class="py-line">        <tt class="py-string">''' The top property depending on the View attribute format '''</tt> </tt>
+<a name="L263"></a><tt class="py-lineno"> 263</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L264"></a><tt class="py-lineno"> 264</tt>  <tt class="py-line">        <tt class="py-string">''' The width property depending on the View attribute format '''</tt> </tt>
+<a name="L265"></a><tt class="py-lineno"> 265</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L266"></a><tt class="py-lineno"> 266</tt>  <tt class="py-line">        <tt class="py-string">''' The height property depending on the View attribute format '''</tt> </tt>
+<a name="L267"></a><tt class="py-lineno"> 267</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">version</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">16</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L268"></a><tt class="py-lineno"> 268</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt> <tt class="py-op">=</tt> <tt id="link-67" class="py-name"><a title="src.com.dtmilano.android.viewclient.ID_PROPERTY_UI_AUTOMATOR" class="py-name" href="#" onclick="return doclink('link-67', 'ID_PROPERTY_UI_AUTOMATOR', 'link-33');">ID_PROPERTY_UI_AUTOMATOR</a></tt> </tt>
+<a name="L269"></a><tt class="py-lineno"> 269</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-68" class="py-name"><a title="src.com.dtmilano.android.viewclient.TEXT_PROPERTY_UI_AUTOMATOR" class="py-name" href="#" onclick="return doclink('link-68', 'TEXT_PROPERTY_UI_AUTOMATOR', 'link-36');">TEXT_PROPERTY_UI_AUTOMATOR</a></tt> </tt>
+<a name="L270"></a><tt class="py-lineno"> 270</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt> <tt class="py-op">=</tt> <tt id="link-69" class="py-name"><a title="src.com.dtmilano.android.viewclient.LEFT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-69', 'LEFT_PROPERTY', 'link-38');">LEFT_PROPERTY</a></tt> </tt>
+<a name="L271"></a><tt class="py-lineno"> 271</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt> <tt class="py-op">=</tt> <tt id="link-70" class="py-name"><a title="src.com.dtmilano.android.viewclient.TOP_PROPERTY" class="py-name" href="#" onclick="return doclink('link-70', 'TOP_PROPERTY', 'link-40');">TOP_PROPERTY</a></tt> </tt>
+<a name="L272"></a><tt class="py-lineno"> 272</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt> <tt class="py-op">=</tt> <tt id="link-71" class="py-name"><a title="src.com.dtmilano.android.viewclient.WIDTH_PROPERTY" class="py-name" href="#" onclick="return doclink('link-71', 'WIDTH_PROPERTY', 'link-42');">WIDTH_PROPERTY</a></tt> </tt>
+<a name="L273"></a><tt class="py-lineno"> 273</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt> <tt class="py-op">=</tt> <tt id="link-72" class="py-name"><a title="src.com.dtmilano.android.viewclient.HEIGHT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-72', 'HEIGHT_PROPERTY', 'link-44');">HEIGHT_PROPERTY</a></tt> </tt>
+<a name="L274"></a><tt class="py-lineno"> 274</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">version</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">10</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">version</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">16</tt> <tt class="py-keyword">or</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L275"></a><tt class="py-lineno"> 275</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt> <tt class="py-op">=</tt> <tt id="link-73" class="py-name"><a title="src.com.dtmilano.android.viewclient.ID_PROPERTY" class="py-name" href="#" onclick="return doclink('link-73', 'ID_PROPERTY', 'link-32');">ID_PROPERTY</a></tt> </tt>
+<a name="L276"></a><tt class="py-lineno"> 276</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-74" class="py-name"><a title="src.com.dtmilano.android.viewclient.TEXT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-74', 'TEXT_PROPERTY', 'link-34');">TEXT_PROPERTY</a></tt> </tt>
+<a name="L277"></a><tt class="py-lineno"> 277</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt> <tt class="py-op">=</tt> <tt id="link-75" class="py-name"><a title="src.com.dtmilano.android.viewclient.LEFT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-75', 'LEFT_PROPERTY', 'link-38');">LEFT_PROPERTY</a></tt> </tt>
+<a name="L278"></a><tt class="py-lineno"> 278</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt> <tt class="py-op">=</tt> <tt id="link-76" class="py-name"><a title="src.com.dtmilano.android.viewclient.TOP_PROPERTY" class="py-name" href="#" onclick="return doclink('link-76', 'TOP_PROPERTY', 'link-40');">TOP_PROPERTY</a></tt> </tt>
+<a name="L279"></a><tt class="py-lineno"> 279</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt> <tt class="py-op">=</tt> <tt id="link-77" class="py-name"><a title="src.com.dtmilano.android.viewclient.WIDTH_PROPERTY" class="py-name" href="#" onclick="return doclink('link-77', 'WIDTH_PROPERTY', 'link-42');">WIDTH_PROPERTY</a></tt> </tt>
+<a name="L280"></a><tt class="py-lineno"> 280</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt> <tt class="py-op">=</tt> <tt id="link-78" class="py-name"><a title="src.com.dtmilano.android.viewclient.HEIGHT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-78', 'HEIGHT_PROPERTY', 'link-44');">HEIGHT_PROPERTY</a></tt> </tt>
+<a name="L281"></a><tt class="py-lineno"> 281</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">version</tt> <tt class="py-op">==</tt> <tt class="py-number">10</tt><tt class="py-op">:</tt> </tt>
+<a name="L282"></a><tt class="py-lineno"> 282</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt> <tt class="py-op">=</tt> <tt id="link-79" class="py-name"><a title="src.com.dtmilano.android.viewclient.ID_PROPERTY" class="py-name" href="#" onclick="return doclink('link-79', 'ID_PROPERTY', 'link-32');">ID_PROPERTY</a></tt> </tt>
+<a name="L283"></a><tt class="py-lineno"> 283</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-80" class="py-name"><a title="src.com.dtmilano.android.viewclient.TEXT_PROPERTY_API_10" class="py-name" href="#" onclick="return doclink('link-80', 'TEXT_PROPERTY_API_10', 'link-35');">TEXT_PROPERTY_API_10</a></tt> </tt>
+<a name="L284"></a><tt class="py-lineno"> 284</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt> <tt class="py-op">=</tt> <tt id="link-81" class="py-name"><a title="src.com.dtmilano.android.viewclient.LEFT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-81', 'LEFT_PROPERTY', 'link-38');">LEFT_PROPERTY</a></tt> </tt>
+<a name="L285"></a><tt class="py-lineno"> 285</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt> <tt class="py-op">=</tt> <tt id="link-82" class="py-name"><a title="src.com.dtmilano.android.viewclient.TOP_PROPERTY" class="py-name" href="#" onclick="return doclink('link-82', 'TOP_PROPERTY', 'link-40');">TOP_PROPERTY</a></tt> </tt>
+<a name="L286"></a><tt class="py-lineno"> 286</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt> <tt class="py-op">=</tt> <tt id="link-83" class="py-name"><a title="src.com.dtmilano.android.viewclient.WIDTH_PROPERTY" class="py-name" href="#" onclick="return doclink('link-83', 'WIDTH_PROPERTY', 'link-42');">WIDTH_PROPERTY</a></tt> </tt>
+<a name="L287"></a><tt class="py-lineno"> 287</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt> <tt class="py-op">=</tt> <tt id="link-84" class="py-name"><a title="src.com.dtmilano.android.viewclient.HEIGHT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-84', 'HEIGHT_PROPERTY', 'link-44');">HEIGHT_PROPERTY</a></tt> </tt>
+<a name="L288"></a><tt class="py-lineno"> 288</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">version</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">7</tt> <tt class="py-keyword">and</tt> <tt class="py-name">version</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">10</tt><tt class="py-op">:</tt> </tt>
+<a name="L289"></a><tt class="py-lineno"> 289</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt> <tt class="py-op">=</tt> <tt id="link-85" class="py-name"><a title="src.com.dtmilano.android.viewclient.ID_PROPERTY" class="py-name" href="#" onclick="return doclink('link-85', 'ID_PROPERTY', 'link-32');">ID_PROPERTY</a></tt> </tt>
+<a name="L290"></a><tt class="py-lineno"> 290</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-86" class="py-name"><a title="src.com.dtmilano.android.viewclient.TEXT_PROPERTY_API_10" class="py-name" href="#" onclick="return doclink('link-86', 'TEXT_PROPERTY_API_10', 'link-35');">TEXT_PROPERTY_API_10</a></tt> </tt>
+<a name="L291"></a><tt class="py-lineno"> 291</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt> <tt class="py-op">=</tt> <tt id="link-87" class="py-name"><a title="src.com.dtmilano.android.viewclient.LEFT_PROPERTY_API_8" class="py-name" href="#" onclick="return doclink('link-87', 'LEFT_PROPERTY_API_8', 'link-39');">LEFT_PROPERTY_API_8</a></tt> </tt>
+<a name="L292"></a><tt class="py-lineno"> 292</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt> <tt class="py-op">=</tt> <tt id="link-88" class="py-name"><a title="src.com.dtmilano.android.viewclient.TOP_PROPERTY_API_8" class="py-name" href="#" onclick="return doclink('link-88', 'TOP_PROPERTY_API_8', 'link-41');">TOP_PROPERTY_API_8</a></tt> </tt>
+<a name="L293"></a><tt class="py-lineno"> 293</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt> <tt class="py-op">=</tt> <tt id="link-89" class="py-name"><a title="src.com.dtmilano.android.viewclient.WIDTH_PROPERTY_API_8" class="py-name" href="#" onclick="return doclink('link-89', 'WIDTH_PROPERTY_API_8', 'link-43');">WIDTH_PROPERTY_API_8</a></tt> </tt>
+<a name="L294"></a><tt class="py-lineno"> 294</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt> <tt class="py-op">=</tt> <tt id="link-90" class="py-name"><a title="src.com.dtmilano.android.viewclient.HEIGHT_PROPERTY_API_8" class="py-name" href="#" onclick="return doclink('link-90', 'HEIGHT_PROPERTY_API_8', 'link-45');">HEIGHT_PROPERTY_API_8</a></tt> </tt>
+<a name="L295"></a><tt class="py-lineno"> 295</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">version</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> <tt class="py-name">version</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">7</tt><tt class="py-op">:</tt> </tt>
+<a name="L296"></a><tt class="py-lineno"> 296</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt> <tt class="py-op">=</tt> <tt id="link-91" class="py-name"><a title="src.com.dtmilano.android.viewclient.ID_PROPERTY" class="py-name" href="#" onclick="return doclink('link-91', 'ID_PROPERTY', 'link-32');">ID_PROPERTY</a></tt> </tt>
+<a name="L297"></a><tt class="py-lineno"> 297</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-92" class="py-name"><a title="src.com.dtmilano.android.viewclient.TEXT_PROPERTY_API_10" class="py-name" href="#" onclick="return doclink('link-92', 'TEXT_PROPERTY_API_10', 'link-35');">TEXT_PROPERTY_API_10</a></tt> </tt>
+<a name="L298"></a><tt class="py-lineno"> 298</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt> <tt class="py-op">=</tt> <tt id="link-93" class="py-name"><a title="src.com.dtmilano.android.viewclient.LEFT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-93', 'LEFT_PROPERTY', 'link-38');">LEFT_PROPERTY</a></tt> </tt>
+<a name="L299"></a><tt class="py-lineno"> 299</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt> <tt class="py-op">=</tt> <tt id="link-94" class="py-name"><a title="src.com.dtmilano.android.viewclient.TOP_PROPERTY" class="py-name" href="#" onclick="return doclink('link-94', 'TOP_PROPERTY', 'link-40');">TOP_PROPERTY</a></tt> </tt>
+<a name="L300"></a><tt class="py-lineno"> 300</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt> <tt class="py-op">=</tt> <tt id="link-95" class="py-name"><a title="src.com.dtmilano.android.viewclient.WIDTH_PROPERTY" class="py-name" href="#" onclick="return doclink('link-95', 'WIDTH_PROPERTY', 'link-42');">WIDTH_PROPERTY</a></tt> </tt>
+<a name="L301"></a><tt class="py-lineno"> 301</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt> <tt class="py-op">=</tt> <tt id="link-96" class="py-name"><a title="src.com.dtmilano.android.viewclient.HEIGHT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-96', 'HEIGHT_PROPERTY', 'link-44');">HEIGHT_PROPERTY</a></tt> </tt>
+<a name="L302"></a><tt class="py-lineno"> 302</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">version</tt> <tt class="py-op">==</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L303"></a><tt class="py-lineno"> 303</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt> <tt class="py-op">=</tt> <tt id="link-97" class="py-name"><a title="src.com.dtmilano.android.viewclient.ID_PROPERTY" class="py-name" href="#" onclick="return doclink('link-97', 'ID_PROPERTY', 'link-32');">ID_PROPERTY</a></tt> </tt>
+<a name="L304"></a><tt class="py-lineno"> 304</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-98" class="py-name"><a title="src.com.dtmilano.android.viewclient.TEXT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-98', 'TEXT_PROPERTY', 'link-34');">TEXT_PROPERTY</a></tt> </tt>
+<a name="L305"></a><tt class="py-lineno"> 305</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt> <tt class="py-op">=</tt> <tt id="link-99" class="py-name"><a title="src.com.dtmilano.android.viewclient.LEFT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-99', 'LEFT_PROPERTY', 'link-38');">LEFT_PROPERTY</a></tt> </tt>
+<a name="L306"></a><tt class="py-lineno"> 306</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt> <tt class="py-op">=</tt> <tt id="link-100" class="py-name"><a title="src.com.dtmilano.android.viewclient.TOP_PROPERTY" class="py-name" href="#" onclick="return doclink('link-100', 'TOP_PROPERTY', 'link-40');">TOP_PROPERTY</a></tt> </tt>
+<a name="L307"></a><tt class="py-lineno"> 307</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt> <tt class="py-op">=</tt> <tt id="link-101" class="py-name"><a title="src.com.dtmilano.android.viewclient.WIDTH_PROPERTY" class="py-name" href="#" onclick="return doclink('link-101', 'WIDTH_PROPERTY', 'link-42');">WIDTH_PROPERTY</a></tt> </tt>
+<a name="L308"></a><tt class="py-lineno"> 308</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt> <tt class="py-op">=</tt> <tt id="link-102" class="py-name"><a title="src.com.dtmilano.android.viewclient.HEIGHT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-102', 'HEIGHT_PROPERTY', 'link-44');">HEIGHT_PROPERTY</a></tt> </tt>
+<a name="L309"></a><tt class="py-lineno"> 309</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L310"></a><tt class="py-lineno"> 310</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt> <tt class="py-op">=</tt> <tt id="link-103" class="py-name"><a title="src.com.dtmilano.android.viewclient.ID_PROPERTY" class="py-name" href="#" onclick="return doclink('link-103', 'ID_PROPERTY', 'link-32');">ID_PROPERTY</a></tt> </tt>
+<a name="L311"></a><tt class="py-lineno"> 311</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-104" class="py-name"><a title="src.com.dtmilano.android.viewclient.TEXT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-104', 'TEXT_PROPERTY', 'link-34');">TEXT_PROPERTY</a></tt> </tt>
+<a name="L312"></a><tt class="py-lineno"> 312</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt> <tt class="py-op">=</tt> <tt id="link-105" class="py-name"><a title="src.com.dtmilano.android.viewclient.LEFT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-105', 'LEFT_PROPERTY', 'link-38');">LEFT_PROPERTY</a></tt> </tt>
+<a name="L313"></a><tt class="py-lineno"> 313</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt> <tt class="py-op">=</tt> <tt id="link-106" class="py-name"><a title="src.com.dtmilano.android.viewclient.TOP_PROPERTY" class="py-name" href="#" onclick="return doclink('link-106', 'TOP_PROPERTY', 'link-40');">TOP_PROPERTY</a></tt> </tt>
+<a name="L314"></a><tt class="py-lineno"> 314</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt> <tt class="py-op">=</tt> <tt id="link-107" class="py-name"><a title="src.com.dtmilano.android.viewclient.WIDTH_PROPERTY" class="py-name" href="#" onclick="return doclink('link-107', 'WIDTH_PROPERTY', 'link-42');">WIDTH_PROPERTY</a></tt> </tt>
+<a name="L315"></a><tt class="py-lineno"> 315</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt> <tt class="py-op">=</tt> <tt id="link-108" class="py-name"><a title="src.com.dtmilano.android.viewclient.HEIGHT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-108', 'HEIGHT_PROPERTY', 'link-44');">HEIGHT_PROPERTY</a></tt> </tt>
+</div><a name="L316"></a><tt class="py-lineno"> 316</tt>  <tt class="py-line">         </tt>
+<a name="View.__getitem__"></a><div id="View.__getitem__-def"><a name="L317"></a><tt class="py-lineno"> 317</tt> <a class="py-toggle" href="#" id="View.__getitem__-toggle" onclick="return toggle('View.__getitem__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#__getitem__">__getitem__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__getitem__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__getitem__-expanded"><a name="L318"></a><tt class="py-lineno"> 318</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L319"></a><tt class="py-lineno"> 319</tt>  <tt class="py-line">         </tt>
+<a name="View.__getattr__"></a><div id="View.__getattr__-def"><a name="L320"></a><tt class="py-lineno"> 320</tt> <a class="py-toggle" href="#" id="View.__getattr__-toggle" onclick="return toggle('View.__getattr__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#__getattr__">__getattr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__getattr__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__getattr__-expanded"><a name="L321"></a><tt class="py-lineno"> 321</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-109" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_GETATTR" class="py-name" href="#" onclick="return doclink('link-109', 'DEBUG_GETATTR', 'link-8');">DEBUG_GETATTR</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L322"></a><tt class="py-lineno"> 322</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__getattr__(%s)    version: %d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-110" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-110', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L323"></a><tt class="py-lineno"> 323</tt>  <tt class="py-line">             </tt>
+<a name="L324"></a><tt class="py-lineno"> 324</tt>  <tt class="py-line">        <tt class="py-comment"># NOTE:</tt> </tt>
+<a name="L325"></a><tt class="py-lineno"> 325</tt>  <tt class="py-line">        <tt class="py-comment"># I should try to see if 'name' is a defined method</tt> </tt>
+<a name="L326"></a><tt class="py-lineno"> 326</tt>  <tt class="py-line">        <tt class="py-comment"># but it seems that if I call locals() here an infinite loop is entered</tt> </tt>
+<a name="L327"></a><tt class="py-lineno"> 327</tt>  <tt class="py-line">         </tt>
+<a name="L328"></a><tt class="py-lineno"> 328</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L329"></a><tt class="py-lineno"> 329</tt>  <tt class="py-line">            <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> </tt>
+<a name="L330"></a><tt class="py-lineno"> 330</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">name</tt> <tt class="py-op">+</tt> <tt class="py-string">'()'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L331"></a><tt class="py-lineno"> 331</tt>  <tt class="py-line">            <tt class="py-comment"># the method names are stored in the map with their trailing '()'</tt> </tt>
+<a name="L332"></a><tt class="py-lineno"> 332</tt>  <tt class="py-line">            <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">name</tt> <tt class="py-op">+</tt> <tt class="py-string">'()'</tt><tt class="py-op">]</tt> </tt>
+<a name="L333"></a><tt class="py-lineno"> 333</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">name</tt><tt class="py-op">.</tt><tt class="py-name">count</tt><tt class="py-op">(</tt><tt class="py-string">"_"</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L334"></a><tt class="py-lineno"> 334</tt>  <tt class="py-line">            <tt class="py-name">mangledList</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-111" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.allPossibleNamesWithColon()=src.com.dtmilano.android.viewclient.View-class.html#allPossibleNamesWithColon"><a title="src.com.dtmilano.android.viewclient.View.allPossibleNamesWithColon" class="py-name" href="#" onclick="return doclink('link-111', 'allPossibleNamesWithColon', 'link-111');">allPossibleNamesWithColon</a></tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
+<a name="L335"></a><tt class="py-lineno"> 335</tt>  <tt class="py-line">            <tt class="py-name">mangledName</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.intersection()=src.com.dtmilano.android.viewclient.View-class.html#intersection"><a title="src.com.dtmilano.android.viewclient.View.intersection" class="py-name" href="#" onclick="return doclink('link-112', 'intersection', 'link-112');">intersection</a></tt><tt class="py-op">(</tt><tt class="py-name">mangledList</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L336"></a><tt class="py-lineno"> 336</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">mangledName</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">mangledName</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L337"></a><tt class="py-lineno"> 337</tt>  <tt class="py-line">                <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">mangledName</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
+<a name="L338"></a><tt class="py-lineno"> 338</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L339"></a><tt class="py-lineno"> 339</tt>  <tt class="py-line">                <tt class="py-comment"># Default behavior</tt> </tt>
+<a name="L340"></a><tt class="py-lineno"> 340</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">,</tt> <tt class="py-name">name</tt> </tt>
+<a name="L341"></a><tt class="py-lineno"> 341</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L342"></a><tt class="py-lineno"> 342</tt>  <tt class="py-line">            <tt class="py-comment"># try removing 'is' prefix</tt> </tt>
+<a name="L343"></a><tt class="py-lineno"> 343</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-113" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_GETATTR" class="py-name" href="#" onclick="return doclink('link-113', 'DEBUG_GETATTR', 'link-8');">DEBUG_GETATTR</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L344"></a><tt class="py-lineno"> 344</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    __getattr__: trying without 'is' prefix"</tt> </tt>
+<a name="L345"></a><tt class="py-lineno"> 345</tt>  <tt class="py-line">            <tt class="py-name">suffix</tt> <tt class="py-op">=</tt> <tt class="py-name">name</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L346"></a><tt class="py-lineno"> 346</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">suffix</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L347"></a><tt class="py-lineno"> 347</tt>  <tt class="py-line">                <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">suffix</tt><tt class="py-op">]</tt> </tt>
+<a name="L348"></a><tt class="py-lineno"> 348</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L349"></a><tt class="py-lineno"> 349</tt>  <tt class="py-line">                <tt class="py-comment"># Default behavior</tt> </tt>
+<a name="L350"></a><tt class="py-lineno"> 350</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">,</tt> <tt class="py-name">name</tt> </tt>
+<a name="L351"></a><tt class="py-lineno"> 351</tt>  <tt class="py-line">         </tt>
+<a name="L352"></a><tt class="py-lineno"> 352</tt>  <tt class="py-line">        <tt class="py-comment"># if the method name starts with 'is' let's assume its return value is boolean</tt> </tt>
+<a name="L353"></a><tt class="py-lineno"> 353</tt>  <tt class="py-line"><tt class="py-comment">#         if name[:2] == 'is':</tt> </tt>
+<a name="L354"></a><tt class="py-lineno"> 354</tt>  <tt class="py-line"><tt class="py-comment">#             r = True if r == 'true' else False</tt> </tt>
+<a name="L355"></a><tt class="py-lineno"> 355</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">r</tt> <tt class="py-op">==</tt> <tt class="py-string">'true'</tt><tt class="py-op">:</tt> </tt>
+<a name="L356"></a><tt class="py-lineno"> 356</tt>  <tt class="py-line">            <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L357"></a><tt class="py-lineno"> 357</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">r</tt> <tt class="py-op">==</tt> <tt class="py-string">'false'</tt><tt class="py-op">:</tt> </tt>
+<a name="L358"></a><tt class="py-lineno"> 358</tt>  <tt class="py-line">            <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L359"></a><tt class="py-lineno"> 359</tt>  <tt class="py-line">         </tt>
+<a name="L360"></a><tt class="py-lineno"> 360</tt>  <tt class="py-line">        <tt class="py-comment"># this should not cached in some way</tt> </tt>
+<a name="L361"></a><tt class="py-lineno"> 361</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">innerMethod</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L362"></a><tt class="py-lineno"> 362</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-114" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_GETATTR" class="py-name" href="#" onclick="return doclink('link-114', 'DEBUG_GETATTR', 'link-8');">DEBUG_GETATTR</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L363"></a><tt class="py-lineno"> 363</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"innerMethod: %s returning %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">innerMethod</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> <tt class="py-name">r</tt><tt class="py-op">)</tt> </tt>
+<a name="L364"></a><tt class="py-lineno"> 364</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">r</tt> </tt>
+</div><a name="L365"></a><tt class="py-lineno"> 365</tt>  <tt class="py-line">         </tt>
+<a name="L366"></a><tt class="py-lineno"> 366</tt>  <tt class="py-line">        <tt class="py-name">innerMethod</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt> <tt class="py-op">=</tt> <tt class="py-name">name</tt> </tt>
+<a name="L367"></a><tt class="py-lineno"> 367</tt>  <tt class="py-line">         </tt>
+<a name="L368"></a><tt class="py-lineno"> 368</tt>  <tt class="py-line">        <tt class="py-comment"># this should work, but then there's problems with the arguments of innerMethod </tt> </tt>
+<a name="L369"></a><tt class="py-lineno"> 369</tt>  <tt class="py-line">        <tt class="py-comment"># even if innerMethod(self) is added</tt> </tt>
+<a name="L370"></a><tt class="py-lineno"> 370</tt>  <tt class="py-line">        <tt class="py-comment">#setattr(View, innerMethod.__name__, innerMethod)</tt> </tt>
+<a name="L371"></a><tt class="py-lineno"> 371</tt>  <tt class="py-line">        <tt class="py-comment">#setattr(self, innerMethod.__name__, innerMethod)</tt> </tt>
+<a name="L372"></a><tt class="py-lineno"> 372</tt>  <tt class="py-line">         </tt>
+<a name="L373"></a><tt class="py-lineno"> 373</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">innerMethod</tt> </tt>
+</div><a name="L374"></a><tt class="py-lineno"> 374</tt>  <tt class="py-line">     </tt>
+<a name="View.__call__"></a><div id="View.__call__-def"><a name="L375"></a><tt class="py-lineno"> 375</tt> <a class="py-toggle" href="#" id="View.__call__-toggle" onclick="return toggle('View.__call__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#__call__">__call__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__call__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__call__-expanded"><a name="L376"></a><tt class="py-lineno"> 376</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-115" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_CALL" class="py-name" href="#" onclick="return doclink('link-115', 'DEBUG_CALL', 'link-10');">DEBUG_CALL</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L377"></a><tt class="py-lineno"> 377</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__call__(%s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">args</tt> <tt class="py-keyword">if</tt> <tt class="py-name">args</tt> <tt class="py-keyword">else</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L378"></a><tt class="py-lineno"> 378</tt>  <tt class="py-line">             </tt>
+<a name="View.getClass"></a><div id="View.getClass-def"><a name="L379"></a><tt class="py-lineno"> 379</tt> <a class="py-toggle" href="#" id="View.getClass-toggle" onclick="return toggle('View.getClass');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#getClass">getClass</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getClass-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getClass-expanded"><a name="L380"></a><tt class="py-lineno"> 380</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L381"></a><tt class="py-lineno"> 381</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the L{View} class</tt> </tt>
+<a name="L382"></a><tt class="py-lineno"> 382</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L383"></a><tt class="py-lineno"> 383</tt>  <tt class="py-line"><tt class="py-docstring">        @return:  the L{View} class or C{None} if not defined</tt> </tt>
+<a name="L384"></a><tt class="py-lineno"> 384</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L385"></a><tt class="py-lineno"> 385</tt>  <tt class="py-line">         </tt>
+<a name="L386"></a><tt class="py-lineno"> 386</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L387"></a><tt class="py-lineno"> 387</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'class'</tt><tt class="py-op">]</tt> </tt>
+<a name="L388"></a><tt class="py-lineno"> 388</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L389"></a><tt class="py-lineno"> 389</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L390"></a><tt class="py-lineno"> 390</tt>  <tt class="py-line"> </tt>
+<a name="View.getId"></a><div id="View.getId-def"><a name="L391"></a><tt class="py-lineno"> 391</tt> <a class="py-toggle" href="#" id="View.getId-toggle" onclick="return toggle('View.getId');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#getId">getId</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getId-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getId-expanded"><a name="L392"></a><tt class="py-lineno"> 392</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L393"></a><tt class="py-lineno"> 393</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the L{View} Id</tt> </tt>
+<a name="L394"></a><tt class="py-lineno"> 394</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L395"></a><tt class="py-lineno"> 395</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the L{View} C{Id} or C{None} if not defined</tt> </tt>
+<a name="L396"></a><tt class="py-lineno"> 396</tt>  <tt class="py-line"><tt class="py-docstring">        @see: L{getUniqueId()}</tt> </tt>
+<a name="L397"></a><tt class="py-lineno"> 397</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L398"></a><tt class="py-lineno"> 398</tt>  <tt class="py-line">         </tt>
+<a name="L399"></a><tt class="py-lineno"> 399</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L400"></a><tt class="py-lineno"> 400</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idProperty</tt><tt class="py-op">]</tt> </tt>
+<a name="L401"></a><tt class="py-lineno"> 401</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L402"></a><tt class="py-lineno"> 402</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L403"></a><tt class="py-lineno"> 403</tt>  <tt class="py-line"> </tt>
+<a name="View.getContentDescription"></a><div id="View.getContentDescription-def"><a name="L404"></a><tt class="py-lineno"> 404</tt> <a class="py-toggle" href="#" id="View.getContentDescription-toggle" onclick="return toggle('View.getContentDescription');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#getContentDescription">getContentDescription</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getContentDescription-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getContentDescription-expanded"><a name="L405"></a><tt class="py-lineno"> 405</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L406"></a><tt class="py-lineno"> 406</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the content description.</tt> </tt>
+<a name="L407"></a><tt class="py-lineno"> 407</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L408"></a><tt class="py-lineno"> 408</tt>  <tt class="py-line">         </tt>
+<a name="L409"></a><tt class="py-lineno"> 409</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L410"></a><tt class="py-lineno"> 410</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'content-desc'</tt><tt class="py-op">]</tt> </tt>
+<a name="L411"></a><tt class="py-lineno"> 411</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L412"></a><tt class="py-lineno"> 412</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L413"></a><tt class="py-lineno"> 413</tt>  <tt class="py-line">     </tt>
+<a name="View.getParent"></a><div id="View.getParent-def"><a name="L414"></a><tt class="py-lineno"> 414</tt> <a class="py-toggle" href="#" id="View.getParent-toggle" onclick="return toggle('View.getParent');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#getParent">getParent</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getParent-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getParent-expanded"><a name="L415"></a><tt class="py-lineno"> 415</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L416"></a><tt class="py-lineno"> 416</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the parent.</tt> </tt>
+<a name="L417"></a><tt class="py-lineno"> 417</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L418"></a><tt class="py-lineno"> 418</tt>  <tt class="py-line">         </tt>
+<a name="L419"></a><tt class="py-lineno"> 419</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> </tt>
+</div><a name="L420"></a><tt class="py-lineno"> 420</tt>  <tt class="py-line">     </tt>
+<a name="View.getText"></a><div id="View.getText-def"><a name="L421"></a><tt class="py-lineno"> 421</tt> <a class="py-toggle" href="#" id="View.getText-toggle" onclick="return toggle('View.getText');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#getText">getText</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getText-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getText-expanded"><a name="L422"></a><tt class="py-lineno"> 422</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L423"></a><tt class="py-lineno"> 423</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the text attribute.</tt> </tt>
+<a name="L424"></a><tt class="py-lineno"> 424</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L425"></a><tt class="py-lineno"> 425</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the text attribute or C{None} if not defined</tt> </tt>
+<a name="L426"></a><tt class="py-lineno"> 426</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L427"></a><tt class="py-lineno"> 427</tt>  <tt class="py-line">         </tt>
+<a name="L428"></a><tt class="py-lineno"> 428</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L429"></a><tt class="py-lineno"> 429</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt><tt class="py-op">]</tt> </tt>
+<a name="L430"></a><tt class="py-lineno"> 430</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">:</tt> </tt>
+<a name="L431"></a><tt class="py-lineno"> 431</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L432"></a><tt class="py-lineno"> 432</tt>  <tt class="py-line"> </tt>
+<a name="View.getHeight"></a><div id="View.getHeight-def"><a name="L433"></a><tt class="py-lineno"> 433</tt> <a class="py-toggle" href="#" id="View.getHeight-toggle" onclick="return toggle('View.getHeight');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#getHeight">getHeight</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getHeight-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getHeight-expanded"><a name="L434"></a><tt class="py-lineno"> 434</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L435"></a><tt class="py-lineno"> 435</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the height.</tt> </tt>
+<a name="L436"></a><tt class="py-lineno"> 436</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L437"></a><tt class="py-lineno"> 437</tt>  <tt class="py-line">         </tt>
+<a name="L438"></a><tt class="py-lineno"> 438</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L439"></a><tt class="py-lineno"> 439</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L440"></a><tt class="py-lineno"> 440</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L441"></a><tt class="py-lineno"> 441</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L442"></a><tt class="py-lineno"> 442</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">heightProperty</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L443"></a><tt class="py-lineno"> 443</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L444"></a><tt class="py-lineno"> 444</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-number">0</tt> </tt>
+</div><a name="L445"></a><tt class="py-lineno"> 445</tt>  <tt class="py-line"> </tt>
+<a name="View.getWidth"></a><div id="View.getWidth-def"><a name="L446"></a><tt class="py-lineno"> 446</tt> <a class="py-toggle" href="#" id="View.getWidth-toggle" onclick="return toggle('View.getWidth');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#getWidth">getWidth</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getWidth-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getWidth-expanded"><a name="L447"></a><tt class="py-lineno"> 447</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L448"></a><tt class="py-lineno"> 448</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the width.</tt> </tt>
+<a name="L449"></a><tt class="py-lineno"> 449</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L450"></a><tt class="py-lineno"> 450</tt>  <tt class="py-line">         </tt>
+<a name="L451"></a><tt class="py-lineno"> 451</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L452"></a><tt class="py-lineno"> 452</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+<a name="L453"></a><tt class="py-lineno"> 453</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L454"></a><tt class="py-lineno"> 454</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L455"></a><tt class="py-lineno"> 455</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">widthProperty</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L456"></a><tt class="py-lineno"> 456</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L457"></a><tt class="py-lineno"> 457</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-number">0</tt> </tt>
+</div><a name="L458"></a><tt class="py-lineno"> 458</tt>  <tt class="py-line"> </tt>
+<a name="View.getUniqueId"></a><div id="View.getUniqueId-def"><a name="L459"></a><tt class="py-lineno"> 459</tt> <a class="py-toggle" href="#" id="View.getUniqueId-toggle" onclick="return toggle('View.getUniqueId');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#getUniqueId">getUniqueId</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getUniqueId-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getUniqueId-expanded"><a name="L460"></a><tt class="py-lineno"> 460</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L461"></a><tt class="py-lineno"> 461</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the unique Id of this View.</tt> </tt>
+<a name="L462"></a><tt class="py-lineno"> 462</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L463"></a><tt class="py-lineno"> 463</tt>  <tt class="py-line"><tt class="py-docstring">        @see: L{ViewClient.__splitAttrs()} for a discussion on B{Unique Ids}</tt> </tt>
+<a name="L464"></a><tt class="py-lineno"> 464</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L465"></a><tt class="py-lineno"> 465</tt>  <tt class="py-line">         </tt>
+<a name="L466"></a><tt class="py-lineno"> 466</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L467"></a><tt class="py-lineno"> 467</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'uniqueId'</tt><tt class="py-op">]</tt> </tt>
+<a name="L468"></a><tt class="py-lineno"> 468</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L469"></a><tt class="py-lineno"> 469</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L470"></a><tt class="py-lineno"> 470</tt>  <tt class="py-line"> </tt>
+<a name="View.getVisibility"></a><div id="View.getVisibility-def"><a name="L471"></a><tt class="py-lineno"> 471</tt> <a class="py-toggle" href="#" id="View.getVisibility-toggle" onclick="return toggle('View.getVisibility');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#getVisibility">getVisibility</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getVisibility-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getVisibility-expanded"><a name="L472"></a><tt class="py-lineno"> 472</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L473"></a><tt class="py-lineno"> 473</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the View visibility</tt> </tt>
+<a name="L474"></a><tt class="py-lineno"> 474</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L475"></a><tt class="py-lineno"> 475</tt>  <tt class="py-line">         </tt>
+<a name="L476"></a><tt class="py-lineno"> 476</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L477"></a><tt class="py-lineno"> 477</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt id="link-116" class="py-name"><a title="src.com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY" class="py-name" href="#" onclick="return doclink('link-116', 'GET_VISIBILITY_PROPERTY', 'link-46');">GET_VISIBILITY_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'VISIBLE'</tt><tt class="py-op">:</tt> </tt>
+<a name="L478"></a><tt class="py-lineno"> 478</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt id="link-117" class="py-name"><a title="src.com.dtmilano.android.viewclient.VISIBLE" class="py-name" href="#" onclick="return doclink('link-117', 'VISIBLE', 'link-48');">VISIBLE</a></tt> </tt>
+<a name="L479"></a><tt class="py-lineno"> 479</tt>  <tt class="py-line">            <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt id="link-118" class="py-name"><a title="src.com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY" class="py-name" href="#" onclick="return doclink('link-118', 'GET_VISIBILITY_PROPERTY', 'link-46');">GET_VISIBILITY_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'INVISIBLE'</tt><tt class="py-op">:</tt> </tt>
+<a name="L480"></a><tt class="py-lineno"> 480</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt id="link-119" class="py-name"><a title="src.com.dtmilano.android.viewclient.INVISIBLE" class="py-name" href="#" onclick="return doclink('link-119', 'INVISIBLE', 'link-49');">INVISIBLE</a></tt> </tt>
+<a name="L481"></a><tt class="py-lineno"> 481</tt>  <tt class="py-line">            <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt id="link-120" class="py-name"><a title="src.com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY" class="py-name" href="#" onclick="return doclink('link-120', 'GET_VISIBILITY_PROPERTY', 'link-46');">GET_VISIBILITY_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'GONE'</tt><tt class="py-op">:</tt> </tt>
+<a name="L482"></a><tt class="py-lineno"> 482</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt id="link-121" class="py-name"><a title="src.com.dtmilano.android.viewclient.GONE" class="py-name" href="#" onclick="return doclink('link-121', 'GONE', 'link-50');">GONE</a></tt> </tt>
+<a name="L483"></a><tt class="py-lineno"> 483</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L484"></a><tt class="py-lineno"> 484</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-op">-</tt><tt class="py-number">2</tt> </tt>
+<a name="L485"></a><tt class="py-lineno"> 485</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L486"></a><tt class="py-lineno"> 486</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+</div><a name="L487"></a><tt class="py-lineno"> 487</tt>  <tt class="py-line"> </tt>
+<a name="View.getX"></a><div id="View.getX-def"><a name="L488"></a><tt class="py-lineno"> 488</tt> <a class="py-toggle" href="#" id="View.getX-toggle" onclick="return toggle('View.getX');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#getX">getX</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getX-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getX-expanded"><a name="L489"></a><tt class="py-lineno"> 489</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L490"></a><tt class="py-lineno"> 490</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the View X coordinate</tt> </tt>
+<a name="L491"></a><tt class="py-lineno"> 491</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L492"></a><tt class="py-lineno"> 492</tt>  <tt class="py-line">         </tt>
+<a name="L493"></a><tt class="py-lineno"> 493</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-122" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-122', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L494"></a><tt class="py-lineno"> 494</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"getX(%s %s ## %s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-123" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.getClass()=src.com.dtmilano.android.viewclient.View-class.html#getClass"><a title="src.com.dtmilano.android.viewclient.View.getClass" class="py-name" href="#" onclick="return doclink('link-123', 'getClass', 'link-123');">getClass</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-124" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.getId()=src.com.dtmilano.android.viewclient.View-class.html#getId"><a title="src.com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-124', 'getId', 'link-124');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-125" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.getUniqueId()=src.com.dtmilano.android.viewclient.View-class.html#getUniqueId"><a title="src.com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-125', 'getUniqueId', 'link-125');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L495"></a><tt class="py-lineno"> 495</tt>  <tt class="py-line">        <tt class="py-name">x</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L496"></a><tt class="py-lineno"> 496</tt>  <tt class="py-line">         </tt>
+<a name="L497"></a><tt class="py-lineno"> 497</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L498"></a><tt class="py-lineno"> 498</tt>  <tt class="py-line">            <tt class="py-name">x</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+<a name="L499"></a><tt class="py-lineno"> 499</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L500"></a><tt class="py-lineno"> 500</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L501"></a><tt class="py-lineno"> 501</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-126" class="py-name"><a title="src.com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY" class="py-name" href="#" onclick="return doclink('link-126', 'GET_VISIBILITY_PROPERTY', 'link-46');">GET_VISIBILITY_PROPERTY</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt id="link-127" class="py-name"><a title="src.com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY" class="py-name" href="#" onclick="return doclink('link-127', 'GET_VISIBILITY_PROPERTY', 'link-46');">GET_VISIBILITY_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'VISIBLE'</tt><tt class="py-op">:</tt> </tt>
+<a name="L502"></a><tt class="py-lineno"> 502</tt>  <tt class="py-line">                    <tt class="py-name">_x</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L503"></a><tt class="py-lineno"> 503</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt id="link-128" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-128', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getX: VISIBLE adding %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">_x</tt> </tt>
+<a name="L504"></a><tt class="py-lineno"> 504</tt>  <tt class="py-line">                    <tt class="py-name">x</tt> <tt class="py-op">+=</tt> <tt class="py-name">_x</tt> </tt>
+<a name="L505"></a><tt class="py-lineno"> 505</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L506"></a><tt class="py-lineno"> 506</tt>  <tt class="py-line">                <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"View %s has no '%s' property"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-129" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-129', 'getId', 'link-124');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">leftProperty</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L507"></a><tt class="py-lineno"> 507</tt>  <tt class="py-line">         </tt>
+<a name="L508"></a><tt class="py-lineno"> 508</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-130" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-130', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getX: returning %d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">)</tt> </tt>
+<a name="L509"></a><tt class="py-lineno"> 509</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">x</tt> </tt>
+</div><a name="L510"></a><tt class="py-lineno"> 510</tt>  <tt class="py-line">     </tt>
+<a name="View.getY"></a><div id="View.getY-def"><a name="L511"></a><tt class="py-lineno"> 511</tt> <a class="py-toggle" href="#" id="View.getY-toggle" onclick="return toggle('View.getY');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#getY">getY</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getY-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getY-expanded"><a name="L512"></a><tt class="py-lineno"> 512</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L513"></a><tt class="py-lineno"> 513</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the View Y coordinate</tt> </tt>
+<a name="L514"></a><tt class="py-lineno"> 514</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L515"></a><tt class="py-lineno"> 515</tt>  <tt class="py-line">         </tt>
+<a name="L516"></a><tt class="py-lineno"> 516</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-131" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-131', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L517"></a><tt class="py-lineno"> 517</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"getY(%s %s ## %s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-132" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getClass" class="py-name" href="#" onclick="return doclink('link-132', 'getClass', 'link-123');">getClass</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-133" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-133', 'getId', 'link-124');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-134" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-134', 'getUniqueId', 'link-125');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L518"></a><tt class="py-lineno"> 518</tt>  <tt class="py-line">        <tt class="py-name">y</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L519"></a><tt class="py-lineno"> 519</tt>  <tt class="py-line">         </tt>
+<a name="L520"></a><tt class="py-lineno"> 520</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L521"></a><tt class="py-lineno"> 521</tt>  <tt class="py-line">            <tt class="py-name">y</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L522"></a><tt class="py-lineno"> 522</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L523"></a><tt class="py-lineno"> 523</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L524"></a><tt class="py-lineno"> 524</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-135" class="py-name"><a title="src.com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY" class="py-name" href="#" onclick="return doclink('link-135', 'GET_VISIBILITY_PROPERTY', 'link-46');">GET_VISIBILITY_PROPERTY</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt id="link-136" class="py-name"><a title="src.com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY" class="py-name" href="#" onclick="return doclink('link-136', 'GET_VISIBILITY_PROPERTY', 'link-46');">GET_VISIBILITY_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'VISIBLE'</tt><tt class="py-op">:</tt> </tt>
+<a name="L525"></a><tt class="py-lineno"> 525</tt>  <tt class="py-line">                    <tt class="py-name">_y</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L526"></a><tt class="py-lineno"> 526</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt id="link-137" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-137', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getY: VISIBLE adding %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">_y</tt> </tt>
+<a name="L527"></a><tt class="py-lineno"> 527</tt>  <tt class="py-line">                    <tt class="py-name">y</tt> <tt class="py-op">+=</tt> <tt class="py-name">_y</tt> </tt>
+<a name="L528"></a><tt class="py-lineno"> 528</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L529"></a><tt class="py-lineno"> 529</tt>  <tt class="py-line">                <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"View %s has no '%s' property"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-138" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-138', 'getId', 'link-124');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topProperty</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L530"></a><tt class="py-lineno"> 530</tt>  <tt class="py-line"> </tt>
+<a name="L531"></a><tt class="py-lineno"> 531</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-139" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-139', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getY: returning %d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">y</tt><tt class="py-op">)</tt> </tt>
+<a name="L532"></a><tt class="py-lineno"> 532</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">y</tt> </tt>
+</div><a name="L533"></a><tt class="py-lineno"> 533</tt>  <tt class="py-line">     </tt>
+<a name="View.getXY"></a><div id="View.getXY-def"><a name="L534"></a><tt class="py-lineno"> 534</tt> <a class="py-toggle" href="#" id="View.getXY-toggle" onclick="return toggle('View.getXY');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#getXY">getXY</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">debug</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getXY-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getXY-expanded"><a name="L535"></a><tt class="py-lineno"> 535</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L536"></a><tt class="py-lineno"> 536</tt>  <tt class="py-line"><tt class="py-docstring">        Returns the I{screen} coordinates of this C{View}.</tt> </tt>
+<a name="L537"></a><tt class="py-lineno"> 537</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L538"></a><tt class="py-lineno"> 538</tt>  <tt class="py-line"><tt class="py-docstring">        @return: The I{screen} coordinates of this C{View}</tt> </tt>
+<a name="L539"></a><tt class="py-lineno"> 539</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L540"></a><tt class="py-lineno"> 540</tt>  <tt class="py-line">         </tt>
+<a name="L541"></a><tt class="py-lineno"> 541</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-140" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-140', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt> <tt class="py-keyword">or</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
+<a name="L542"></a><tt class="py-lineno"> 542</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L543"></a><tt class="py-lineno"> 543</tt>  <tt class="py-line">                <tt class="py-name">id</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-141" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-141', 'getId', 'link-124');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L544"></a><tt class="py-lineno"> 544</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L545"></a><tt class="py-lineno"> 545</tt>  <tt class="py-line">                <tt class="py-name">id</tt> <tt class="py-op">=</tt> <tt class="py-string">"NO_ID"</tt> </tt>
+<a name="L546"></a><tt class="py-lineno"> 546</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"getXY(%s %s ## %s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-142" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getClass" class="py-name" href="#" onclick="return doclink('link-142', 'getClass', 'link-123');">getClass</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">id</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-143" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-143', 'getUniqueId', 'link-125');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L547"></a><tt class="py-lineno"> 547</tt>  <tt class="py-line"> </tt>
+<a name="L548"></a><tt class="py-lineno"> 548</tt>  <tt class="py-line">        <tt class="py-name">x</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-144" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.getX()=src.com.dtmilano.android.viewclient.View-class.html#getX"><a title="src.com.dtmilano.android.viewclient.View.getX" class="py-name" href="#" onclick="return doclink('link-144', 'getX', 'link-144');">getX</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L549"></a><tt class="py-lineno"> 549</tt>  <tt class="py-line">        <tt class="py-name">y</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-145" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.getY()=src.com.dtmilano.android.viewclient.View-class.html#getY"><a title="src.com.dtmilano.android.viewclient.View.getY" class="py-name" href="#" onclick="return doclink('link-145', 'getY', 'link-145');">getY</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L550"></a><tt class="py-lineno"> 550</tt>  <tt class="py-line">        <tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> </tt>
+<a name="L551"></a><tt class="py-lineno"> 551</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-146" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-146', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getXY: x=%s y=%s parent=%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">,</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-147" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-147', 'getUniqueId', 'link-125');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">if</tt> <tt class="py-name">parent</tt> <tt class="py-keyword">else</tt> <tt class="py-string">"None"</tt><tt class="py-op">)</tt> </tt>
+<a name="L552"></a><tt class="py-lineno"> 552</tt>  <tt class="py-line">        <tt class="py-name">hx</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L553"></a><tt class="py-lineno"> 553</tt>  <tt class="py-line">        <tt class="py-string">''' Hierarchy accumulated X '''</tt> </tt>
+<a name="L554"></a><tt class="py-lineno"> 554</tt>  <tt class="py-line">        <tt class="py-name">hy</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L555"></a><tt class="py-lineno"> 555</tt>  <tt class="py-line">        <tt class="py-string">''' Hierarchy accumulated Y '''</tt> </tt>
+<a name="L556"></a><tt class="py-lineno"> 556</tt>  <tt class="py-line">         </tt>
+<a name="L557"></a><tt class="py-lineno"> 557</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L558"></a><tt class="py-lineno"> 558</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-148" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-148', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getXY: not using UiAutomator, calculating ancestors coordinates"</tt> </tt>
+<a name="L559"></a><tt class="py-lineno"> 559</tt>  <tt class="py-line">            <tt class="py-keyword">while</tt> <tt class="py-name">parent</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L560"></a><tt class="py-lineno"> 560</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-149" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-149', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"      getXY: parent: %s %s &lt;&lt;&lt;&lt;"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-150" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getClass" class="py-name" href="#" onclick="return doclink('link-150', 'getClass', 'link-123');">getClass</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">if</tt> <tt class="py-name">parent</tt> <tt class="py-keyword">else</tt> <tt class="py-string">"None"</tt><tt class="py-op">,</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-151" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-151', 'getUniqueId', 'link-125');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">if</tt> <tt class="py-name">parent</tt> <tt class="py-keyword">else</tt> <tt class="py-string">"None"</tt><tt class="py-op">)</tt> </tt>
+<a name="L561"></a><tt class="py-lineno"> 561</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-152" class="py-name"><a title="src.com.dtmilano.android.viewclient.SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED" class="py-name" href="#" onclick="return doclink('link-152', 'SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED', 'link-30');">SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L562"></a><tt class="py-lineno"> 562</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-153" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getClass" class="py-name" href="#" onclick="return doclink('link-153', 'getClass', 'link-123');">getClass</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt> <tt class="py-string">'com.android.internal.widget.ActionBarView'</tt><tt class="py-op">,</tt> </tt>
+<a name="L563"></a><tt class="py-lineno"> 563</tt>  <tt class="py-line">                                       <tt class="py-string">'com.android.internal.widget.ActionBarContextView'</tt><tt class="py-op">,</tt> </tt>
+<a name="L564"></a><tt class="py-lineno"> 564</tt>  <tt class="py-line">                                       <tt class="py-string">'com.android.internal.view.menu.ActionMenuView'</tt><tt class="py-op">,</tt> </tt>
+<a name="L565"></a><tt class="py-lineno"> 565</tt>  <tt class="py-line">                                       <tt class="py-string">'com.android.internal.policy.impl.PhoneWindow$DecorView'</tt> <tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L566"></a><tt class="py-lineno"> 566</tt>  <tt class="py-line">                        <tt class="py-keyword">if</tt> <tt id="link-154" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-154', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getXY: skipping %s %s (%d,%d)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-155" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getClass" class="py-name" href="#" onclick="return doclink('link-155', 'getClass', 'link-123');">getClass</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-156" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-156', 'getUniqueId', 'link-125');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-157" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getX" class="py-name" href="#" onclick="return doclink('link-157', 'getX', 'link-144');">getX</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-158" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getY" class="py-name" href="#" onclick="return doclink('link-158', 'getY', 'link-145');">getY</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L567"></a><tt class="py-lineno"> 567</tt>  <tt class="py-line">                        <tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> </tt>
+<a name="L568"></a><tt class="py-lineno"> 568</tt>  <tt class="py-line">                        <tt class="py-keyword">continue</tt> </tt>
+<a name="L569"></a><tt class="py-lineno"> 569</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-159" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-159', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getXY: parent=%s x=%d hx=%d y=%d hy=%d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-160" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-160', 'getUniqueId', 'link-125');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-161" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getX" class="py-name" href="#" onclick="return doclink('link-161', 'getX', 'link-144');">getX</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">hx</tt><tt class="py-op">,</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-162" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getY" class="py-name" href="#" onclick="return doclink('link-162', 'getY', 'link-145');">getY</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">hy</tt><tt class="py-op">)</tt> </tt>
+<a name="L570"></a><tt class="py-lineno"> 570</tt>  <tt class="py-line">                <tt class="py-name">hx</tt> <tt class="py-op">+=</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-163" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getX" class="py-name" href="#" onclick="return doclink('link-163', 'getX', 'link-144');">getX</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L571"></a><tt class="py-lineno"> 571</tt>  <tt class="py-line">                <tt class="py-name">hy</tt> <tt class="py-op">+=</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-164" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getY" class="py-name" href="#" onclick="return doclink('link-164', 'getY', 'link-145');">getY</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L572"></a><tt class="py-lineno"> 572</tt>  <tt class="py-line">                <tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> </tt>
+<a name="L573"></a><tt class="py-lineno"> 573</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-165" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-165', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getXY: parent=%s hx=%d hy=%d (end of loop)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-166" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-166', 'getUniqueId', 'link-125');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">if</tt> <tt class="py-name">parent</tt> <tt class="py-keyword">else</tt> <tt class="py-string">"None"</tt><tt class="py-op">,</tt> <tt class="py-name">hx</tt><tt class="py-op">,</tt> <tt class="py-name">hy</tt><tt class="py-op">)</tt> </tt>
+<a name="L574"></a><tt class="py-lineno"> 574</tt>  <tt class="py-line"> </tt>
+<a name="L575"></a><tt class="py-lineno"> 575</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-167" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.__dumpWindowsInformation()=src.com.dtmilano.android.viewclient.View-class.html#__dumpWindowsInformation"><a title="src.com.dtmilano.android.viewclient.View.__dumpWindowsInformation" class="py-name" href="#" onclick="return doclink('link-167', '__dumpWindowsInformation', 'link-167');">__dumpWindowsInformation</a></tt><tt class="py-op">(</tt><tt class="py-name">debug</tt><tt class="py-op">=</tt><tt class="py-name">debug</tt><tt class="py-op">)</tt> </tt>
+<a name="L576"></a><tt class="py-lineno"> 576</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-168" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-168', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt> <tt class="py-keyword">or</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
+<a name="L577"></a><tt class="py-lineno"> 577</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getXY: wv=(%d, %d) (windows information)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt><tt class="py-op">)</tt> </tt>
+<a name="L578"></a><tt class="py-lineno"> 578</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L579"></a><tt class="py-lineno"> 579</tt>  <tt class="py-line">            <tt class="py-name">fw</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt><tt class="py-op">]</tt> </tt>
+<a name="L580"></a><tt class="py-lineno"> 580</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-169" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_STATUSBAR" class="py-name" href="#" onclick="return doclink('link-169', 'DEBUG_STATUSBAR', 'link-16');">DEBUG_STATUSBAR</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L581"></a><tt class="py-lineno"> 581</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    getXY: focused window="</tt><tt class="py-op">,</tt> <tt class="py-name">fw</tt> </tt>
+<a name="L582"></a><tt class="py-lineno"> 582</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    getXY: deciding whether to consider statusbar offset because current focused windows is at"</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">"parent"</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">py</tt><tt class="py-op">)</tt> </tt>
+<a name="L583"></a><tt class="py-lineno"> 583</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">KeyError</tt><tt class="py-op">:</tt> </tt>
+<a name="L584"></a><tt class="py-lineno"> 584</tt>  <tt class="py-line">            <tt class="py-name">fw</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L585"></a><tt class="py-lineno"> 585</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">sbw</tt><tt class="py-op">,</tt> <tt class="py-name">sbh</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-170" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.__obtainStatusBarDimensionsIfVisible()=src.com.dtmilano.android.viewclient.View-class.html#__obtainStatusBarDimensionsIfVisible"><a title="src.com.dtmilano.android.viewclient.View.__obtainStatusBarDimensionsIfVisible" class="py-name" href="#" onclick="return doclink('link-170', '__obtainStatusBarDimensionsIfVisible', 'link-170');">__obtainStatusBarDimensionsIfVisible</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L586"></a><tt class="py-lineno"> 586</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-171" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-171', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt> <tt class="py-keyword">or</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
+<a name="L587"></a><tt class="py-lineno"> 587</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getXY: sb=(%d, %d) (statusbar dimensions)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">sbw</tt><tt class="py-op">,</tt> <tt class="py-name">sbh</tt><tt class="py-op">)</tt> </tt>
+<a name="L588"></a><tt class="py-lineno"> 588</tt>  <tt class="py-line">        <tt class="py-name">statusBarOffset</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L589"></a><tt class="py-lineno"> 589</tt>  <tt class="py-line">        <tt class="py-name">pwx</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L590"></a><tt class="py-lineno"> 590</tt>  <tt class="py-line">        <tt class="py-name">pwy</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L591"></a><tt class="py-lineno"> 591</tt>  <tt class="py-line">         </tt>
+<a name="L592"></a><tt class="py-lineno"> 592</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">fw</tt><tt class="py-op">:</tt> </tt>
+<a name="L593"></a><tt class="py-lineno"> 593</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-172" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-172', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L594"></a><tt class="py-lineno"> 594</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    getXY: focused window="</tt><tt class="py-op">,</tt> <tt class="py-name">fw</tt><tt class="py-op">,</tt> <tt class="py-string">"sb="</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">sbw</tt><tt class="py-op">,</tt> <tt class="py-name">sbh</tt><tt class="py-op">)</tt> </tt>
+<a name="L595"></a><tt class="py-lineno"> 595</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">sbh</tt><tt class="py-op">:</tt> <tt class="py-comment"># it's very unlikely that fw.wvy &lt; sbh, that is a window over the statusbar</tt> </tt>
+<a name="L596"></a><tt class="py-lineno"> 596</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-173" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_STATUSBAR" class="py-name" href="#" onclick="return doclink('link-173', 'DEBUG_STATUSBAR', 'link-16');">DEBUG_STATUSBAR</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"        getXY: yes, considering offset="</tt><tt class="py-op">,</tt> <tt class="py-name">sbh</tt> </tt>
+<a name="L597"></a><tt class="py-lineno"> 597</tt>  <tt class="py-line">                <tt class="py-name">statusBarOffset</tt> <tt class="py-op">=</tt> <tt class="py-name">sbh</tt> </tt>
+<a name="L598"></a><tt class="py-lineno"> 598</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L599"></a><tt class="py-lineno"> 599</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-174" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_STATUSBAR" class="py-name" href="#" onclick="return doclink('link-174', 'DEBUG_STATUSBAR', 'link-16');">DEBUG_STATUSBAR</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"        getXY: no, ignoring statusbar offset fw.wvy="</tt><tt class="py-op">,</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt><tt class="py-op">,</tt> <tt class="py-string">"&gt;"</tt><tt class="py-op">,</tt> <tt class="py-name">sbh</tt> </tt>
+<a name="L600"></a><tt class="py-lineno"> 600</tt>  <tt class="py-line">                 </tt>
+<a name="L601"></a><tt class="py-lineno"> 601</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">py</tt> <tt class="py-op">==</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt><tt class="py-op">:</tt> </tt>
+<a name="L602"></a><tt class="py-lineno"> 602</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-175" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_STATUSBAR" class="py-name" href="#" onclick="return doclink('link-175', 'DEBUG_STATUSBAR', 'link-16');">DEBUG_STATUSBAR</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"        getXY: but wait, fw.py == fw.wvy so we are adjusting by "</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">py</tt><tt class="py-op">)</tt> </tt>
+<a name="L603"></a><tt class="py-lineno"> 603</tt>  <tt class="py-line">                <tt class="py-name">pwx</tt> <tt class="py-op">=</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">px</tt> </tt>
+<a name="L604"></a><tt class="py-lineno"> 604</tt>  <tt class="py-line">                <tt class="py-name">pwy</tt> <tt class="py-op">=</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">py</tt> </tt>
+<a name="L605"></a><tt class="py-lineno"> 605</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L606"></a><tt class="py-lineno"> 606</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-176" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_STATUSBAR" class="py-name" href="#" onclick="return doclink('link-176', 'DEBUG_STATUSBAR', 'link-16');">DEBUG_STATUSBAR</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    getXY: fw.py=%d &lt;= fw.wvy=%d, no adjustment"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">py</tt><tt class="py-op">,</tt> <tt class="py-name">fw</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt><tt class="py-op">)</tt> </tt>
+<a name="L607"></a><tt class="py-lineno"> 607</tt>  <tt class="py-line">             </tt>
+<a name="L608"></a><tt class="py-lineno"> 608</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-177" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-177', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt> <tt class="py-keyword">or</tt> <tt id="link-178" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_STATUSBAR" class="py-name" href="#" onclick="return doclink('link-178', 'DEBUG_STATUSBAR', 'link-16');">DEBUG_STATUSBAR</a></tt> <tt class="py-keyword">or</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
+<a name="L609"></a><tt class="py-lineno"> 609</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"   getXY: returning (%d, %d) ***"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">+</tt><tt class="py-name">hx</tt><tt class="py-op">+</tt><tt class="py-name">wvx</tt><tt class="py-op">+</tt><tt class="py-name">pwx</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">+</tt><tt class="py-name">hy</tt><tt class="py-op">+</tt><tt class="py-name">wvy</tt><tt class="py-op">-</tt><tt class="py-name">statusBarOffset</tt><tt class="py-op">+</tt><tt class="py-name">pwy</tt><tt class="py-op">)</tt> </tt>
+<a name="L610"></a><tt class="py-lineno"> 610</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"                     x=%d+%d+%d+%d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt><tt class="py-name">hx</tt><tt class="py-op">,</tt><tt class="py-name">wvx</tt><tt class="py-op">,</tt><tt class="py-name">pwx</tt><tt class="py-op">)</tt> </tt>
+<a name="L611"></a><tt class="py-lineno"> 611</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"                     y=%d+%d+%d-%d+%d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">y</tt><tt class="py-op">,</tt><tt class="py-name">hy</tt><tt class="py-op">,</tt><tt class="py-name">wvy</tt><tt class="py-op">,</tt><tt class="py-name">statusBarOffset</tt><tt class="py-op">,</tt><tt class="py-name">pwy</tt><tt class="py-op">)</tt> </tt>
+<a name="L612"></a><tt class="py-lineno"> 612</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">+</tt><tt class="py-name">hx</tt><tt class="py-op">+</tt><tt class="py-name">wvx</tt><tt class="py-op">+</tt><tt class="py-name">pwx</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">+</tt><tt class="py-name">hy</tt><tt class="py-op">+</tt><tt class="py-name">wvy</tt><tt class="py-op">-</tt><tt class="py-name">statusBarOffset</tt><tt class="py-op">+</tt><tt class="py-name">pwy</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L613"></a><tt class="py-lineno"> 613</tt>  <tt class="py-line"> </tt>
+<a name="View.getCoords"></a><div id="View.getCoords-def"><a name="L614"></a><tt class="py-lineno"> 614</tt> <a class="py-toggle" href="#" id="View.getCoords-toggle" onclick="return toggle('View.getCoords');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#getCoords">getCoords</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getCoords-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getCoords-expanded"><a name="L615"></a><tt class="py-lineno"> 615</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L616"></a><tt class="py-lineno"> 616</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the coords of the View</tt> </tt>
+<a name="L617"></a><tt class="py-lineno"> 617</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L618"></a><tt class="py-lineno"> 618</tt>  <tt class="py-line"><tt class="py-docstring">        @return: A tuple containing the View's coordinates ((L, T), (R, B))</tt> </tt>
+<a name="L619"></a><tt class="py-lineno"> 619</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L620"></a><tt class="py-lineno"> 620</tt>  <tt class="py-line">         </tt>
+<a name="L621"></a><tt class="py-lineno"> 621</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-179" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-179', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L622"></a><tt class="py-lineno"> 622</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"getCoords(%s %s ## %s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-180" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getClass" class="py-name" href="#" onclick="return doclink('link-180', 'getClass', 'link-123');">getClass</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-181" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-181', 'getId', 'link-124');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-182" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-182', 'getUniqueId', 'link-125');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L623"></a><tt class="py-lineno"> 623</tt>  <tt class="py-line"> </tt>
+<a name="L624"></a><tt class="py-lineno"> 624</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-183" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.getXY()=src.com.dtmilano.android.viewclient.View-class.html#getXY"><a title="src.com.dtmilano.android.viewclient.View.getXY" class="py-name" href="#" onclick="return doclink('link-183', 'getXY', 'link-183');">getXY</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">;</tt> </tt>
+<a name="L625"></a><tt class="py-lineno"> 625</tt>  <tt class="py-line">        <tt class="py-name">w</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-184" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.getWidth()=src.com.dtmilano.android.viewclient.View-class.html#getWidth"><a title="src.com.dtmilano.android.viewclient.View.getWidth" class="py-name" href="#" onclick="return doclink('link-184', 'getWidth', 'link-184');">getWidth</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L626"></a><tt class="py-lineno"> 626</tt>  <tt class="py-line">        <tt class="py-name">h</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-185" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.getHeight()=src.com.dtmilano.android.viewclient.View-class.html#getHeight"><a title="src.com.dtmilano.android.viewclient.View.getHeight" class="py-name" href="#" onclick="return doclink('link-185', 'getHeight', 'link-185');">getHeight</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L627"></a><tt class="py-lineno"> 627</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">+</tt><tt class="py-name">w</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">+</tt><tt class="py-name">h</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L628"></a><tt class="py-lineno"> 628</tt>  <tt class="py-line"> </tt>
+<a name="View.getPositionAndSize"></a><div id="View.getPositionAndSize-def"><a name="L629"></a><tt class="py-lineno"> 629</tt> <a class="py-toggle" href="#" id="View.getPositionAndSize-toggle" onclick="return toggle('View.getPositionAndSize');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#getPositionAndSize">getPositionAndSize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getPositionAndSize-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getPositionAndSize-expanded"><a name="L630"></a><tt class="py-lineno"> 630</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L631"></a><tt class="py-lineno"> 631</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the position and size (X,Y, W, H)</tt> </tt>
+<a name="L632"></a><tt class="py-lineno"> 632</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L633"></a><tt class="py-lineno"> 633</tt>  <tt class="py-line"><tt class="py-docstring">        @return: A tuple containing the View's coordinates (X, Y, W, H)</tt> </tt>
+<a name="L634"></a><tt class="py-lineno"> 634</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L635"></a><tt class="py-lineno"> 635</tt>  <tt class="py-line">         </tt>
+<a name="L636"></a><tt class="py-lineno"> 636</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-186" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getXY" class="py-name" href="#" onclick="return doclink('link-186', 'getXY', 'link-183');">getXY</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">;</tt> </tt>
+<a name="L637"></a><tt class="py-lineno"> 637</tt>  <tt class="py-line">        <tt class="py-name">w</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-187" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getWidth" class="py-name" href="#" onclick="return doclink('link-187', 'getWidth', 'link-184');">getWidth</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L638"></a><tt class="py-lineno"> 638</tt>  <tt class="py-line">        <tt class="py-name">h</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-188" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getHeight" class="py-name" href="#" onclick="return doclink('link-188', 'getHeight', 'link-185');">getHeight</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L639"></a><tt class="py-lineno"> 639</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">,</tt> <tt class="py-name">w</tt><tt class="py-op">,</tt> <tt class="py-name">h</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L640"></a><tt class="py-lineno"> 640</tt>  <tt class="py-line"> </tt>
+<a name="L641"></a><tt class="py-lineno"> 641</tt>  <tt class="py-line">         </tt>
+<a name="View.getCenter"></a><div id="View.getCenter-def"><a name="L642"></a><tt class="py-lineno"> 642</tt> <a class="py-toggle" href="#" id="View.getCenter-toggle" onclick="return toggle('View.getCenter');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#getCenter">getCenter</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.getCenter-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.getCenter-expanded"><a name="L643"></a><tt class="py-lineno"> 643</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L644"></a><tt class="py-lineno"> 644</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the center coords of the View</tt> </tt>
+<a name="L645"></a><tt class="py-lineno"> 645</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L646"></a><tt class="py-lineno"> 646</tt>  <tt class="py-line"><tt class="py-docstring">        @author: U{Dean Morin &lt;https://github.com/deanmorin&gt;}</tt> </tt>
+<a name="L647"></a><tt class="py-lineno"> 647</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L648"></a><tt class="py-lineno"> 648</tt>  <tt class="py-line">         </tt>
+<a name="L649"></a><tt class="py-lineno"> 649</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">left</tt><tt class="py-op">,</tt> <tt class="py-name">top</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">right</tt><tt class="py-op">,</tt> <tt class="py-name">bottom</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-189" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.getCoords()=src.com.dtmilano.android.viewclient.View-class.html#getCoords"><a title="src.com.dtmilano.android.viewclient.View.getCoords" class="py-name" href="#" onclick="return doclink('link-189', 'getCoords', 'link-189');">getCoords</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L650"></a><tt class="py-lineno"> 650</tt>  <tt class="py-line">        <tt class="py-name">x</tt> <tt class="py-op">=</tt> <tt class="py-name">left</tt> <tt class="py-op">+</tt> <tt class="py-op">(</tt><tt class="py-name">right</tt> <tt class="py-op">-</tt> <tt class="py-name">left</tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-number">2</tt> </tt>
+<a name="L651"></a><tt class="py-lineno"> 651</tt>  <tt class="py-line">        <tt class="py-name">y</tt> <tt class="py-op">=</tt> <tt class="py-name">top</tt> <tt class="py-op">+</tt> <tt class="py-op">(</tt><tt class="py-name">bottom</tt> <tt class="py-op">-</tt> <tt class="py-name">top</tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-number">2</tt> </tt>
+<a name="L652"></a><tt class="py-lineno"> 652</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L653"></a><tt class="py-lineno"> 653</tt>  <tt class="py-line"> </tt>
+<a name="View.__obtainStatusBarDimensionsIfVisible"></a><div id="View.__obtainStatusBarDimensionsIfVisible-def"><a name="L654"></a><tt class="py-lineno"> 654</tt> <a class="py-toggle" href="#" id="View.__obtainStatusBarDimensionsIfVisible-toggle" onclick="return toggle('View.__obtainStatusBarDimensionsIfVisible');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#__obtainStatusBarDimensionsIfVisible">__obtainStatusBarDimensionsIfVisible</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__obtainStatusBarDimensionsIfVisible-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__obtainStatusBarDimensionsIfVisible-expanded"><a name="L655"></a><tt class="py-lineno"> 655</tt>  <tt class="py-line">        <tt class="py-name">sbw</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L656"></a><tt class="py-lineno"> 656</tt>  <tt class="py-line">        <tt class="py-name">sbh</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L657"></a><tt class="py-lineno"> 657</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">winId</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">:</tt> </tt>
+<a name="L658"></a><tt class="py-lineno"> 658</tt>  <tt class="py-line">            <tt class="py-name">w</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">[</tt><tt class="py-name">winId</tt><tt class="py-op">]</tt> </tt>
+<a name="L659"></a><tt class="py-lineno"> 659</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-190" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-190', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"      __obtainStatusBarDimensionsIfVisible: w="</tt><tt class="py-op">,</tt> <tt class="py-name">w</tt><tt class="py-op">,</tt> <tt class="py-string">"   w.activity="</tt><tt class="py-op">,</tt> <tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">activity</tt><tt class="py-op">,</tt> <tt class="py-string">"%%%"</tt> </tt>
+<a name="L660"></a><tt class="py-lineno"> 660</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">activity</tt> <tt class="py-op">==</tt> <tt class="py-string">'StatusBar'</tt><tt class="py-op">:</tt> </tt>
+<a name="L661"></a><tt class="py-lineno"> 661</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> <tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">visibility</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L662"></a><tt class="py-lineno"> 662</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt id="link-191" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-191', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"      __obtainStatusBarDimensionsIfVisible: statusBar="</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">wvw</tt><tt class="py-op">,</tt> <tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">wvh</tt><tt class="py-op">)</tt> </tt>
+<a name="L663"></a><tt class="py-lineno"> 663</tt>  <tt class="py-line">                    <tt class="py-name">sbw</tt> <tt class="py-op">=</tt> <tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">wvw</tt> </tt>
+<a name="L664"></a><tt class="py-lineno"> 664</tt>  <tt class="py-line">                    <tt class="py-name">sbh</tt> <tt class="py-op">=</tt> <tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">wvh</tt> </tt>
+<a name="L665"></a><tt class="py-lineno"> 665</tt>  <tt class="py-line">                <tt class="py-keyword">break</tt> </tt>
+<a name="L666"></a><tt class="py-lineno"> 666</tt>  <tt class="py-line"> </tt>
+<a name="L667"></a><tt class="py-lineno"> 667</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">sbw</tt><tt class="py-op">,</tt> <tt class="py-name">sbh</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L668"></a><tt class="py-lineno"> 668</tt>  <tt class="py-line"> </tt>
+<a name="View.__obtainVxVy"></a><div id="View.__obtainVxVy-def"><a name="L669"></a><tt class="py-lineno"> 669</tt> <a class="py-toggle" href="#" id="View.__obtainVxVy-toggle" onclick="return toggle('View.__obtainVxVy');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#__obtainVxVy">__obtainVxVy</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">m</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__obtainVxVy-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__obtainVxVy-expanded"><a name="L670"></a><tt class="py-lineno"> 670</tt>  <tt class="py-line">        <tt class="py-name">wvx</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'vx'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L671"></a><tt class="py-lineno"> 671</tt>  <tt class="py-line">        <tt class="py-name">wvy</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'vy'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L672"></a><tt class="py-lineno"> 672</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt> </tt>
+</div><a name="L673"></a><tt class="py-lineno"> 673</tt>  <tt class="py-line"> </tt>
+<a name="View.__obtainVwVh"></a><div id="View.__obtainVwVh-def"><a name="L674"></a><tt class="py-lineno"> 674</tt> <a class="py-toggle" href="#" id="View.__obtainVwVh-toggle" onclick="return toggle('View.__obtainVwVh');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#__obtainVwVh">__obtainVwVh</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">m</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__obtainVwVh-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__obtainVwVh-expanded"><a name="L675"></a><tt class="py-lineno"> 675</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-192" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.__obtainVxVy()=src.com.dtmilano.android.viewclient.View-class.html#__obtainVxVy"><a title="src.com.dtmilano.android.viewclient.View.__obtainVxVy" class="py-name" href="#" onclick="return doclink('link-192', '__obtainVxVy', 'link-192');">__obtainVxVy</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L676"></a><tt class="py-lineno"> 676</tt>  <tt class="py-line">        <tt class="py-name">wvx1</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'vx1'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L677"></a><tt class="py-lineno"> 677</tt>  <tt class="py-line">        <tt class="py-name">wvy1</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'vy1'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L678"></a><tt class="py-lineno"> 678</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">wvx1</tt><tt class="py-op">-</tt><tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy1</tt><tt class="py-op">-</tt><tt class="py-name">wvy</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L679"></a><tt class="py-lineno"> 679</tt>  <tt class="py-line"> </tt>
+<a name="View.__obtainPxPy"></a><div id="View.__obtainPxPy-def"><a name="L680"></a><tt class="py-lineno"> 680</tt> <a class="py-toggle" href="#" id="View.__obtainPxPy-toggle" onclick="return toggle('View.__obtainPxPy');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#__obtainPxPy">__obtainPxPy</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">m</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__obtainPxPy-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__obtainPxPy-expanded"><a name="L681"></a><tt class="py-lineno"> 681</tt>  <tt class="py-line">        <tt class="py-name">px</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'px'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L682"></a><tt class="py-lineno"> 682</tt>  <tt class="py-line">        <tt class="py-name">py</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'py'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L683"></a><tt class="py-lineno"> 683</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">py</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L684"></a><tt class="py-lineno"> 684</tt>  <tt class="py-line">     </tt>
+<a name="View.__dumpWindowsInformation"></a><div id="View.__dumpWindowsInformation-def"><a name="L685"></a><tt class="py-lineno"> 685</tt> <a class="py-toggle" href="#" id="View.__dumpWindowsInformation-toggle" onclick="return toggle('View.__dumpWindowsInformation');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#__dumpWindowsInformation">__dumpWindowsInformation</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">debug</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__dumpWindowsInformation-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__dumpWindowsInformation-expanded"><a name="L686"></a><tt class="py-lineno"> 686</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L687"></a><tt class="py-lineno"> 687</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L688"></a><tt class="py-lineno"> 688</tt>  <tt class="py-line">        <tt class="py-name">dww</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">shell</tt><tt class="py-op">(</tt><tt class="py-string">'dumpsys window windows'</tt><tt class="py-op">)</tt> </tt>
+<a name="L689"></a><tt class="py-lineno"> 689</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-193" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_WINDOWS" class="py-name" href="#" onclick="return doclink('link-193', 'DEBUG_WINDOWS', 'link-18');">DEBUG_WINDOWS</a></tt> <tt class="py-keyword">or</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">dww</tt> </tt>
+<a name="L690"></a><tt class="py-lineno"> 690</tt>  <tt class="py-line">        <tt class="py-name">lines</tt> <tt class="py-op">=</tt> <tt class="py-name">dww</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">)</tt> </tt>
+<a name="L691"></a><tt class="py-lineno"> 691</tt>  <tt class="py-line">        <tt class="py-name">widRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'^ *Window #%s Window{%s (u\d+ )?%s?.*}:'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L692"></a><tt class="py-lineno"> 692</tt>  <tt class="py-line">                            <tt class="py-op">(</tt><tt id="link-194" class="py-name" targets="Function src.com.dtmilano.android.viewclient.__nd()=src.com.dtmilano.android.viewclient-module.html#__nd"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-194', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'num'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-195" class="py-name" targets="Function src.com.dtmilano.android.viewclient.__nh()=src.com.dtmilano.android.viewclient-module.html#__nh"><a title="src.com.dtmilano.android.viewclient.__nh" class="py-name" href="#" onclick="return doclink('link-195', '__nh', 'link-195');">__nh</a></tt><tt class="py-op">(</tt><tt class="py-string">'winId'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-196" class="py-name" targets="Function src.com.dtmilano.android.viewclient.__ns()=src.com.dtmilano.android.viewclient-module.html#__ns"><a title="src.com.dtmilano.android.viewclient.__ns" class="py-name" href="#" onclick="return doclink('link-196', '__ns', 'link-196');">__ns</a></tt><tt class="py-op">(</tt><tt class="py-string">'activity'</tt><tt class="py-op">,</tt> <tt class="py-name">greedy</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L693"></a><tt class="py-lineno"> 693</tt>  <tt class="py-line">        <tt class="py-name">currentFocusRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'^  mCurrentFocus=Window{%s .*'</tt> <tt class="py-op">%</tt> <tt id="link-197" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nh" class="py-name" href="#" onclick="return doclink('link-197', '__nh', 'link-195');">__nh</a></tt><tt class="py-op">(</tt><tt class="py-string">'winId'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L694"></a><tt class="py-lineno"> 694</tt>  <tt class="py-line">        <tt class="py-name">viewVisibilityRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">' mViewVisibility=0x%s '</tt> <tt class="py-op">%</tt> <tt id="link-198" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nh" class="py-name" href="#" onclick="return doclink('link-198', '__nh', 'link-195');">__nh</a></tt><tt class="py-op">(</tt><tt class="py-string">'visibility'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L695"></a><tt class="py-lineno"> 695</tt>  <tt class="py-line">        <tt class="py-comment"># This is for 4.0.4 API-15</tt> </tt>
+<a name="L696"></a><tt class="py-lineno"> 696</tt>  <tt class="py-line">        <tt class="py-name">containingFrameRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'^   *mContainingFrame=\[%s,%s\]\[%s,%s\] mParentFrame=\[%s,%s\]\[%s,%s\]'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L697"></a><tt class="py-lineno"> 697</tt>  <tt class="py-line">                             <tt class="py-op">(</tt><tt id="link-199" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-199', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'cx'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-200" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-200', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'cy'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-201" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-201', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'cw'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-202" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-202', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'ch'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-203" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-203', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'px'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-204" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-204', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'py'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-205" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-205', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'pw'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-206" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-206', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'ph'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L698"></a><tt class="py-lineno"> 698</tt>  <tt class="py-line">        <tt class="py-name">contentFrameRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'^   *mContentFrame=\[%s,%s\]\[%s,%s\] mVisibleFrame=\[%s,%s\]\[%s,%s\]'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L699"></a><tt class="py-lineno"> 699</tt>  <tt class="py-line">                             <tt class="py-op">(</tt><tt id="link-207" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-207', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'x'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-208" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-208', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'y'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-209" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-209', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'w'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-210" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-210', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'h'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-211" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-211', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'vx'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-212" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-212', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'vy'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-213" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-213', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'vx1'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-214" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-214', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'vy1'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L700"></a><tt class="py-lineno"> 700</tt>  <tt class="py-line">        <tt class="py-comment"># This is for 4.1 API-16</tt> </tt>
+<a name="L701"></a><tt class="py-lineno"> 701</tt>  <tt class="py-line">        <tt class="py-name">framesRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'^   *Frames: containing=\[%s,%s\]\[%s,%s\] parent=\[%s,%s\]\[%s,%s\]'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L702"></a><tt class="py-lineno"> 702</tt>  <tt class="py-line">                               <tt class="py-op">(</tt><tt id="link-215" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-215', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'cx'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-216" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-216', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'cy'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-217" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-217', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'cw'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-218" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-218', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'ch'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-219" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-219', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'px'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-220" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-220', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'py'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-221" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-221', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'pw'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-222" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-222', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'ph'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L703"></a><tt class="py-lineno"> 703</tt>  <tt class="py-line">        <tt class="py-name">contentRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'^     *content=\[%s,%s\]\[%s,%s\] visible=\[%s,%s\]\[%s,%s\]'</tt> <tt class="py-op">%</tt>  </tt>
+<a name="L704"></a><tt class="py-lineno"> 704</tt>  <tt class="py-line">                               <tt class="py-op">(</tt><tt id="link-223" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-223', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'x'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-224" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-224', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'y'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-225" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-225', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'w'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-226" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-226', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'h'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-227" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-227', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'vx'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-228" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-228', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'vy'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-229" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-229', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'vx1'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-230" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-230', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'vy1'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L705"></a><tt class="py-lineno"> 705</tt>  <tt class="py-line">        <tt class="py-name">policyVisibilityRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'mPolicyVisibility=%s '</tt> <tt class="py-op">%</tt> <tt id="link-231" class="py-name"><a title="src.com.dtmilano.android.viewclient.__ns" class="py-name" href="#" onclick="return doclink('link-231', '__ns', 'link-196');">__ns</a></tt><tt class="py-op">(</tt><tt class="py-string">'policyVisibility'</tt><tt class="py-op">,</tt> <tt class="py-name">greedy</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L706"></a><tt class="py-lineno"> 706</tt>  <tt class="py-line">         </tt>
+<a name="L707"></a><tt class="py-lineno"> 707</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">l</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L708"></a><tt class="py-lineno"> 708</tt>  <tt class="py-line">            <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">widRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L709"></a><tt class="py-lineno"> 709</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L710"></a><tt class="py-lineno"> 710</tt>  <tt class="py-line">                <tt class="py-name">num</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'num'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L711"></a><tt class="py-lineno"> 711</tt>  <tt class="py-line">                <tt class="py-name">winId</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'winId'</tt><tt class="py-op">)</tt> </tt>
+<a name="L712"></a><tt class="py-lineno"> 712</tt>  <tt class="py-line">                <tt class="py-name">activity</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'activity'</tt><tt class="py-op">)</tt> </tt>
+<a name="L713"></a><tt class="py-lineno"> 713</tt>  <tt class="py-line">                <tt class="py-name">wvx</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L714"></a><tt class="py-lineno"> 714</tt>  <tt class="py-line">                <tt class="py-name">wvy</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L715"></a><tt class="py-lineno"> 715</tt>  <tt class="py-line">                <tt class="py-name">wvw</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L716"></a><tt class="py-lineno"> 716</tt>  <tt class="py-line">                <tt class="py-name">wvh</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L717"></a><tt class="py-lineno"> 717</tt>  <tt class="py-line">                <tt class="py-name">px</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L718"></a><tt class="py-lineno"> 718</tt>  <tt class="py-line">                <tt class="py-name">py</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L719"></a><tt class="py-lineno"> 719</tt>  <tt class="py-line">                <tt class="py-name">visibility</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L720"></a><tt class="py-lineno"> 720</tt>  <tt class="py-line">                <tt class="py-name">policyVisibility</tt> <tt class="py-op">=</tt> <tt class="py-number">0x0</tt> </tt>
+<a name="L721"></a><tt class="py-lineno"> 721</tt>  <tt class="py-line">                 </tt>
+<a name="L722"></a><tt class="py-lineno"> 722</tt>  <tt class="py-line">                <tt class="py-keyword">for</tt> <tt class="py-name">l2</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">l</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L723"></a><tt class="py-lineno"> 723</tt>  <tt class="py-line">                    <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">widRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L724"></a><tt class="py-lineno"> 724</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L725"></a><tt class="py-lineno"> 725</tt>  <tt class="py-line">                        <tt class="py-name">l</tt> <tt class="py-op">+=</tt> <tt class="py-op">(</tt><tt class="py-name">l2</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L726"></a><tt class="py-lineno"> 726</tt>  <tt class="py-line">                        <tt class="py-keyword">break</tt> </tt>
+<a name="L727"></a><tt class="py-lineno"> 727</tt>  <tt class="py-line">                    <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">viewVisibilityRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L728"></a><tt class="py-lineno"> 728</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L729"></a><tt class="py-lineno"> 729</tt>  <tt class="py-line">                        <tt class="py-name">visibility</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'visibility'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L730"></a><tt class="py-lineno"> 730</tt>  <tt class="py-line">                        <tt class="py-keyword">if</tt> <tt id="link-232" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-232', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__dumpWindowsInformation: visibility="</tt><tt class="py-op">,</tt> <tt class="py-name">visibility</tt> </tt>
+<a name="L731"></a><tt class="py-lineno"> 731</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-233" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-233', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">17</tt><tt class="py-op">:</tt> </tt>
+<a name="L732"></a><tt class="py-lineno"> 732</tt>  <tt class="py-line">                        <tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L733"></a><tt class="py-lineno"> 733</tt>  <tt class="py-line">                        <tt class="py-name">wvw</tt><tt class="py-op">,</tt> <tt class="py-name">wvh</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L734"></a><tt class="py-lineno"> 734</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-234" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-234', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">16</tt><tt class="py-op">:</tt> </tt>
+<a name="L735"></a><tt class="py-lineno"> 735</tt>  <tt class="py-line">                        <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">framesRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L736"></a><tt class="py-lineno"> 736</tt>  <tt class="py-line">                        <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L737"></a><tt class="py-lineno"> 737</tt>  <tt class="py-line">                            <tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">py</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-235" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.__obtainPxPy()=src.com.dtmilano.android.viewclient.View-class.html#__obtainPxPy"><a title="src.com.dtmilano.android.viewclient.View.__obtainPxPy" class="py-name" href="#" onclick="return doclink('link-235', '__obtainPxPy', 'link-235');">__obtainPxPy</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L738"></a><tt class="py-lineno"> 738</tt>  <tt class="py-line">                            <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">contentRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L739"></a><tt class="py-lineno"> 739</tt>  <tt class="py-line">                            <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L740"></a><tt class="py-lineno"> 740</tt>  <tt class="py-line">                                <tt class="py-comment"># FIXME: the information provided by 'dumpsys window windows' in 4.2.1 (API 16)</tt> </tt>
+<a name="L741"></a><tt class="py-lineno"> 741</tt>  <tt class="py-line">                                <tt class="py-comment"># when there's a system dialog may not be correct and causes the View coordinates</tt> </tt>
+<a name="L742"></a><tt class="py-lineno"> 742</tt>  <tt class="py-line">                                <tt class="py-comment"># be offset by this amount, see</tt> </tt>
+<a name="L743"></a><tt class="py-lineno"> 743</tt>  <tt class="py-line">                                <tt class="py-comment"># https://github.com/dtmilano/AndroidViewClient/issues/29</tt> </tt>
+<a name="L744"></a><tt class="py-lineno"> 744</tt>  <tt class="py-line">                                <tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-236" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__obtainVxVy" class="py-name" href="#" onclick="return doclink('link-236', '__obtainVxVy', 'link-192');">__obtainVxVy</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L745"></a><tt class="py-lineno"> 745</tt>  <tt class="py-line">                                <tt class="py-name">wvw</tt><tt class="py-op">,</tt> <tt class="py-name">wvh</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-237" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.__obtainVwVh()=src.com.dtmilano.android.viewclient.View-class.html#__obtainVwVh"><a title="src.com.dtmilano.android.viewclient.View.__obtainVwVh" class="py-name" href="#" onclick="return doclink('link-237', '__obtainVwVh', 'link-237');">__obtainVwVh</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L746"></a><tt class="py-lineno"> 746</tt>  <tt class="py-line">                    <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-238" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-238', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-number">15</tt><tt class="py-op">:</tt> </tt>
+<a name="L747"></a><tt class="py-lineno"> 747</tt>  <tt class="py-line">                        <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">containingFrameRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L748"></a><tt class="py-lineno"> 748</tt>  <tt class="py-line">                        <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L749"></a><tt class="py-lineno"> 749</tt>  <tt class="py-line">                            <tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">py</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-239" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__obtainPxPy" class="py-name" href="#" onclick="return doclink('link-239', '__obtainPxPy', 'link-235');">__obtainPxPy</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L750"></a><tt class="py-lineno"> 750</tt>  <tt class="py-line">                            <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">contentFrameRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L751"></a><tt class="py-lineno"> 751</tt>  <tt class="py-line">                            <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L752"></a><tt class="py-lineno"> 752</tt>  <tt class="py-line">                                <tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-240" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__obtainVxVy" class="py-name" href="#" onclick="return doclink('link-240', '__obtainVxVy', 'link-192');">__obtainVxVy</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L753"></a><tt class="py-lineno"> 753</tt>  <tt class="py-line">                                <tt class="py-name">wvw</tt><tt class="py-op">,</tt> <tt class="py-name">wvh</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-241" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__obtainVwVh" class="py-name" href="#" onclick="return doclink('link-241', '__obtainVwVh', 'link-237');">__obtainVwVh</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L754"></a><tt class="py-lineno"> 754</tt>  <tt class="py-line">                    <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-242" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-242', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-number">10</tt><tt class="py-op">:</tt> </tt>
+<a name="L755"></a><tt class="py-lineno"> 755</tt>  <tt class="py-line">                        <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">containingFrameRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L756"></a><tt class="py-lineno"> 756</tt>  <tt class="py-line">                        <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L757"></a><tt class="py-lineno"> 757</tt>  <tt class="py-line">                            <tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">py</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-243" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__obtainPxPy" class="py-name" href="#" onclick="return doclink('link-243', '__obtainPxPy', 'link-235');">__obtainPxPy</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L758"></a><tt class="py-lineno"> 758</tt>  <tt class="py-line">                            <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">contentFrameRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L759"></a><tt class="py-lineno"> 759</tt>  <tt class="py-line">                            <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L760"></a><tt class="py-lineno"> 760</tt>  <tt class="py-line">                                <tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-244" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__obtainVxVy" class="py-name" href="#" onclick="return doclink('link-244', '__obtainVxVy', 'link-192');">__obtainVxVy</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L761"></a><tt class="py-lineno"> 761</tt>  <tt class="py-line">                                <tt class="py-name">wvw</tt><tt class="py-op">,</tt> <tt class="py-name">wvh</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-245" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__obtainVwVh" class="py-name" href="#" onclick="return doclink('link-245', '__obtainVwVh', 'link-237');">__obtainVwVh</a></tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
+<a name="L762"></a><tt class="py-lineno"> 762</tt>  <tt class="py-line">                    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L763"></a><tt class="py-lineno"> 763</tt>  <tt class="py-line">                        <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Unsupported Android version %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-246" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-246', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L764"></a><tt class="py-lineno"> 764</tt>  <tt class="py-line">                     </tt>
+<a name="L765"></a><tt class="py-lineno"> 765</tt>  <tt class="py-line">                    <tt class="py-comment">#print &gt;&gt; sys.stderr, "Searching policyVisibility in", lines[l2]</tt> </tt>
+<a name="L766"></a><tt class="py-lineno"> 766</tt>  <tt class="py-line">                    <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">policyVisibilityRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L767"></a><tt class="py-lineno"> 767</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L768"></a><tt class="py-lineno"> 768</tt>  <tt class="py-line">                        <tt class="py-name">policyVisibility</tt> <tt class="py-op">=</tt> <tt class="py-number">0x0</tt> <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'policyVisibility'</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'true'</tt> <tt class="py-keyword">else</tt> <tt class="py-number">0x8</tt> </tt>
+<a name="L769"></a><tt class="py-lineno"> 769</tt>  <tt class="py-line">                 </tt>
+<a name="L770"></a><tt class="py-lineno"> 770</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">[</tt><tt class="py-name">winId</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-247" class="py-name" targets="Class src.com.dtmilano.android.viewclient.Window=src.com.dtmilano.android.viewclient.Window-class.html"><a title="src.com.dtmilano.android.viewclient.Window" class="py-name" href="#" onclick="return doclink('link-247', 'Window', 'link-247');">Window</a></tt><tt class="py-op">(</tt><tt class="py-name">num</tt><tt class="py-op">,</tt> <tt class="py-name">winId</tt><tt class="py-op">,</tt> <tt class="py-name">activity</tt><tt class="py-op">,</tt> <tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">wvy</tt><tt class="py-op">,</tt> <tt class="py-name">wvw</tt><tt class="py-op">,</tt> <tt class="py-name">wvh</tt><tt class="py-op">,</tt> <tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">py</tt><tt class="py-op">,</tt> <tt class="py-name">visibility</tt> <tt class="py-op">+</tt> <tt class="py-name">policyVisibility</tt><tt class="py-op">)</tt> </tt>
+<a name="L771"></a><tt class="py-lineno"> 771</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L772"></a><tt class="py-lineno"> 772</tt>  <tt class="py-line">                <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">currentFocusRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">l</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L773"></a><tt class="py-lineno"> 773</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L774"></a><tt class="py-lineno"> 774</tt>  <tt class="py-line">                    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'winId'</tt><tt class="py-op">)</tt> </tt>
+<a name="L775"></a><tt class="py-lineno"> 775</tt>  <tt class="py-line">         </tt>
+<a name="L776"></a><tt class="py-lineno"> 776</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">visibility</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L777"></a><tt class="py-lineno"> 777</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-248" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-248', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt> <tt class="py-keyword">or</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
+<a name="L778"></a><tt class="py-lineno"> 778</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__dumpWindowsInformation: focus="</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt> </tt>
+<a name="L779"></a><tt class="py-lineno"> 779</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__dumpWindowsInformation:"</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt><tt class="py-op">]</tt> </tt>
+<a name="L780"></a><tt class="py-lineno"> 780</tt>  <tt class="py-line">            <tt class="py-name">w</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">currentFocus</tt><tt class="py-op">]</tt> </tt>
+<a name="L781"></a><tt class="py-lineno"> 781</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">wvx</tt><tt class="py-op">,</tt> <tt class="py-name">w</tt><tt class="py-op">.</tt><tt class="py-name">wvy</tt><tt class="py-op">)</tt> </tt>
+<a name="L782"></a><tt class="py-lineno"> 782</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L783"></a><tt class="py-lineno"> 783</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-249" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_COORDS" class="py-name" href="#" onclick="return doclink('link-249', 'DEBUG_COORDS', 'link-12');">DEBUG_COORDS</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__dumpWindowsInformation: (0,0)"</tt> </tt>
+<a name="L784"></a><tt class="py-lineno"> 784</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L785"></a><tt class="py-lineno"> 785</tt>  <tt class="py-line">     </tt>
+<a name="View.touch"></a><div id="View.touch-def"><a name="L786"></a><tt class="py-lineno"> 786</tt> <a class="py-toggle" href="#" id="View.touch-toggle" onclick="return toggle('View.touch');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#touch">touch</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">type</tt><tt class="py-op">=</tt><tt class="py-name">MonkeyDevice</tt><tt class="py-op">.</tt><tt class="py-name">DOWN_AND_UP</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.touch-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.touch-expanded"><a name="L787"></a><tt class="py-lineno"> 787</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L788"></a><tt class="py-lineno"> 788</tt>  <tt class="py-line"><tt class="py-docstring">        Touches the center of this C{View}</tt> </tt>
+<a name="L789"></a><tt class="py-lineno"> 789</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L790"></a><tt class="py-lineno"> 790</tt>  <tt class="py-line">         </tt>
+<a name="L791"></a><tt class="py-lineno"> 791</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-250" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.getCenter()=src.com.dtmilano.android.viewclient.View-class.html#getCenter"><a title="src.com.dtmilano.android.viewclient.View.getCenter" class="py-name" href="#" onclick="return doclink('link-250', 'getCenter', 'link-250');">getCenter</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L792"></a><tt class="py-lineno"> 792</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-251" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_TOUCH" class="py-name" href="#" onclick="return doclink('link-251', 'DEBUG_TOUCH', 'link-14');">DEBUG_TOUCH</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L793"></a><tt class="py-lineno"> 793</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"should touch @ (%d, %d)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">)</tt> </tt>
+<a name="L794"></a><tt class="py-lineno"> 794</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-252" class="py-name" targets="Method src.com.dtmilano.android.viewclient.EditText.type()=src.com.dtmilano.android.viewclient.EditText-class.html#type"><a title="src.com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-252', 'type', 'link-252');">type</a></tt> <tt class="py-op">==</tt> <tt class="py-name">MonkeyDevice</tt><tt class="py-op">.</tt><tt class="py-name">DOWN_AND_UP</tt><tt class="py-op">:</tt> </tt>
+<a name="L795"></a><tt class="py-lineno"> 795</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-253" class="py-name"><a title="src.com.dtmilano.android.viewclient.WARNINGS" class="py-name" href="#" onclick="return doclink('link-253', 'WARNINGS', 'link-24');">WARNINGS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L796"></a><tt class="py-lineno"> 796</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ViewClient: touch workaround enabled"</tt> </tt>
+<a name="L797"></a><tt class="py-lineno"> 797</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-254" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.touch()=src.com.dtmilano.android.viewclient.View-class.html#touch"><a title="src.com.dtmilano.android.viewclient.View.touch" class="py-name" href="#" onclick="return doclink('link-254', 'touch', 'link-254');">touch</a></tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">,</tt> <tt class="py-name">MonkeyDevice</tt><tt class="py-op">.</tt><tt class="py-name">DOWN</tt><tt class="py-op">)</tt> </tt>
+<a name="L798"></a><tt class="py-lineno"> 798</tt>  <tt class="py-line">            <tt class="py-name">time</tt><tt class="py-op">.</tt><tt id="link-255" class="py-name" targets="Static Method src.com.dtmilano.android.viewclient.ViewClient.sleep()=src.com.dtmilano.android.viewclient.ViewClient-class.html#sleep"><a title="src.com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-255', 'sleep', 'link-255');">sleep</a></tt><tt class="py-op">(</tt><tt class="py-number">50</tt><tt class="py-op">/</tt><tt class="py-number">1000.0</tt><tt class="py-op">)</tt> </tt>
+<a name="L799"></a><tt class="py-lineno"> 799</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-256" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.touch" class="py-name" href="#" onclick="return doclink('link-256', 'touch', 'link-254');">touch</a></tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">+</tt><tt class="py-number">10</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">+</tt><tt class="py-number">10</tt><tt class="py-op">,</tt> <tt class="py-name">MonkeyDevice</tt><tt class="py-op">.</tt><tt class="py-name">UP</tt><tt class="py-op">)</tt> </tt>
+<a name="L800"></a><tt class="py-lineno"> 800</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L801"></a><tt class="py-lineno"> 801</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-257" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.touch" class="py-name" href="#" onclick="return doclink('link-257', 'touch', 'link-254');">touch</a></tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">,</tt> <tt id="link-258" class="py-name"><a title="src.com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-258', 'type', 'link-252');">type</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L802"></a><tt class="py-lineno"> 802</tt>  <tt class="py-line">     </tt>
+<a name="View.allPossibleNamesWithColon"></a><div id="View.allPossibleNamesWithColon-def"><a name="L803"></a><tt class="py-lineno"> 803</tt> <a class="py-toggle" href="#" id="View.allPossibleNamesWithColon-toggle" onclick="return toggle('View.allPossibleNamesWithColon');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#allPossibleNamesWithColon">allPossibleNamesWithColon</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.allPossibleNamesWithColon-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.allPossibleNamesWithColon-expanded"><a name="L804"></a><tt class="py-lineno"> 804</tt>  <tt class="py-line">        <tt class="py-name">l</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L805"></a><tt class="py-lineno"> 805</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">.</tt><tt class="py-name">count</tt><tt class="py-op">(</tt><tt class="py-string">"_"</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L806"></a><tt class="py-lineno"> 806</tt>  <tt class="py-line">            <tt class="py-name">name</tt> <tt class="py-op">=</tt> <tt class="py-name">name</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">"_"</tt><tt class="py-op">,</tt> <tt class="py-string">":"</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L807"></a><tt class="py-lineno"> 807</tt>  <tt class="py-line">            <tt class="py-name">l</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
+<a name="L808"></a><tt class="py-lineno"> 808</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">l</tt> </tt>
+</div><a name="L809"></a><tt class="py-lineno"> 809</tt>  <tt class="py-line"> </tt>
+<a name="View.intersection"></a><div id="View.intersection-def"><a name="L810"></a><tt class="py-lineno"> 810</tt> <a class="py-toggle" href="#" id="View.intersection-toggle" onclick="return toggle('View.intersection');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#intersection">intersection</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">l1</tt><tt class="py-op">,</tt> <tt class="py-param">l2</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.intersection-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.intersection-expanded"><a name="L811"></a><tt class="py-lineno"> 811</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-259" class="py-name" targets="Method src.com.dtmilano.android.viewclient.ViewClient.list()=src.com.dtmilano.android.viewclient.ViewClient-class.html#list"><a title="src.com.dtmilano.android.viewclient.ViewClient.list" class="py-name" href="#" onclick="return doclink('link-259', 'list', 'link-259');">list</a></tt><tt class="py-op">(</tt><tt class="py-name">set</tt><tt class="py-op">(</tt><tt class="py-name">l1</tt><tt class="py-op">)</tt> <tt class="py-op">&amp;</tt> <tt class="py-name">set</tt><tt class="py-op">(</tt><tt class="py-name">l2</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L812"></a><tt class="py-lineno"> 812</tt>  <tt class="py-line">     </tt>
+<a name="View.containsPoint"></a><div id="View.containsPoint-def"><a name="L813"></a><tt class="py-lineno"> 813</tt> <a class="py-toggle" href="#" id="View.containsPoint-toggle" onclick="return toggle('View.containsPoint');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#containsPoint">containsPoint</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-param">x</tt><tt class="py-op">,</tt> <tt class="py-param">y</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.containsPoint-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.containsPoint-expanded"><a name="L814"></a><tt class="py-lineno"> 814</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">X</tt><tt class="py-op">,</tt> <tt class="py-name">Y</tt><tt class="py-op">,</tt> <tt class="py-name">W</tt><tt class="py-op">,</tt> <tt class="py-name">H</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-260" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.getPositionAndSize()=src.com.dtmilano.android.viewclient.View-class.html#getPositionAndSize"><a title="src.com.dtmilano.android.viewclient.View.getPositionAndSize" class="py-name" href="#" onclick="return doclink('link-260', 'getPositionAndSize', 'link-260');">getPositionAndSize</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L815"></a><tt class="py-lineno"> 815</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">x</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">X</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">x</tt> <tt class="py-op">&lt;=</tt> <tt class="py-op">(</tt><tt class="py-name">X</tt><tt class="py-op">+</tt><tt class="py-name">W</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">y</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">Y</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">y</tt> <tt class="py-op">&lt;=</tt> <tt class="py-op">(</tt><tt class="py-name">Y</tt><tt class="py-op">+</tt><tt class="py-name">H</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L816"></a><tt class="py-lineno"> 816</tt>  <tt class="py-line">     </tt>
+<a name="View.add"></a><div id="View.add-def"><a name="L817"></a><tt class="py-lineno"> 817</tt> <a class="py-toggle" href="#" id="View.add-toggle" onclick="return toggle('View.add');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#add">add</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">child</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.add-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.add-expanded"><a name="L818"></a><tt class="py-lineno"> 818</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L819"></a><tt class="py-lineno"> 819</tt>  <tt class="py-line"><tt class="py-docstring">        Adds a child</tt> </tt>
+<a name="L820"></a><tt class="py-lineno"> 820</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L821"></a><tt class="py-lineno"> 821</tt>  <tt class="py-line"><tt class="py-docstring">        @type child: View</tt> </tt>
+<a name="L822"></a><tt class="py-lineno"> 822</tt>  <tt class="py-line"><tt class="py-docstring">        @param child: The child to add</tt> </tt>
+<a name="L823"></a><tt class="py-lineno"> 823</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L824"></a><tt class="py-lineno"> 824</tt>  <tt class="py-line">        <tt class="py-name">child</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt> </tt>
+<a name="L825"></a><tt class="py-lineno"> 825</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">children</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L826"></a><tt class="py-lineno"> 826</tt>  <tt class="py-line">     </tt>
+<a name="View.isClickable"></a><div id="View.isClickable-def"><a name="L827"></a><tt class="py-lineno"> 827</tt> <a class="py-toggle" href="#" id="View.isClickable-toggle" onclick="return toggle('View.isClickable');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#isClickable">isClickable</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.isClickable-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.isClickable-expanded"><a name="L828"></a><tt class="py-lineno"> 828</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-261" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.__getattr__()=src.com.dtmilano.android.viewclient.View-class.html#__getattr__"><a title="src.com.dtmilano.android.viewclient.View.__getattr__" class="py-name" href="#" onclick="return doclink('link-261', '__getattr__', 'link-261');">__getattr__</a></tt><tt class="py-op">(</tt><tt class="py-string">'isClickable'</tt><tt class="py-op">)</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L829"></a><tt class="py-lineno"> 829</tt>  <tt class="py-line">     </tt>
+<a name="View.variableNameFromId"></a><div id="View.variableNameFromId-def"><a name="L830"></a><tt class="py-lineno"> 830</tt> <a class="py-toggle" href="#" id="View.variableNameFromId-toggle" onclick="return toggle('View.variableNameFromId');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#variableNameFromId">variableNameFromId</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.variableNameFromId-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.variableNameFromId-expanded"><a name="L831"></a><tt class="py-lineno"> 831</tt>  <tt class="py-line">        <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt id="link-262" class="py-name"><a title="src.com.dtmilano.android.viewclient.ID_RE" class="py-name" href="#" onclick="return doclink('link-262', 'ID_RE', 'link-52');">ID_RE</a></tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-263" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-263', 'getUniqueId', 'link-125');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L832"></a><tt class="py-lineno"> 832</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L833"></a><tt class="py-lineno"> 833</tt>  <tt class="py-line">            <tt class="py-name">var</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L834"></a><tt class="py-lineno"> 834</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L835"></a><tt class="py-lineno"> 835</tt>  <tt class="py-line">                <tt class="py-name">var</tt> <tt class="py-op">+=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">)</tt> </tt>
+<a name="L836"></a><tt class="py-lineno"> 836</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-string">'^\d'</tt><tt class="py-op">,</tt> <tt class="py-name">var</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L837"></a><tt class="py-lineno"> 837</tt>  <tt class="py-line">                <tt class="py-name">var</tt> <tt class="py-op">=</tt> <tt class="py-string">'id_'</tt> <tt class="py-op">+</tt> <tt class="py-name">var</tt> </tt>
+<a name="L838"></a><tt class="py-lineno"> 838</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">var</tt> </tt>
+</div><a name="L839"></a><tt class="py-lineno"> 839</tt>  <tt class="py-line">             </tt>
+<a name="View.writeImageToFile"></a><div id="View.writeImageToFile-def"><a name="L840"></a><tt class="py-lineno"> 840</tt> <a class="py-toggle" href="#" id="View.writeImageToFile-toggle" onclick="return toggle('View.writeImageToFile');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#writeImageToFile">writeImageToFile</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filename</tt><tt class="py-op">,</tt> <tt class="py-param">format</tt><tt class="py-op">=</tt><tt class="py-string">"PNG"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.writeImageToFile-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.writeImageToFile-expanded"><a name="L841"></a><tt class="py-lineno"> 841</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L842"></a><tt class="py-lineno"> 842</tt>  <tt class="py-line"><tt class="py-docstring">        Write the View image to the specified filename in the specified format.</tt> </tt>
+<a name="L843"></a><tt class="py-lineno"> 843</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L844"></a><tt class="py-lineno"> 844</tt>  <tt class="py-line"><tt class="py-docstring">        @type filename: str</tt> </tt>
+<a name="L845"></a><tt class="py-lineno"> 845</tt>  <tt class="py-line"><tt class="py-docstring">        @param filename: Absolute path and optional filename receiving the image. If this points to</tt> </tt>
+<a name="L846"></a><tt class="py-lineno"> 846</tt>  <tt class="py-line"><tt class="py-docstring">                         a directory, then the filename is determined by this View unique ID and</tt> </tt>
+<a name="L847"></a><tt class="py-lineno"> 847</tt>  <tt class="py-line"><tt class="py-docstring">                         format extension.</tt> </tt>
+<a name="L848"></a><tt class="py-lineno"> 848</tt>  <tt class="py-line"><tt class="py-docstring">        @type format: str</tt> </tt>
+<a name="L849"></a><tt class="py-lineno"> 849</tt>  <tt class="py-line"><tt class="py-docstring">        @param format: Image format (default format is PNG)</tt> </tt>
+<a name="L850"></a><tt class="py-lineno"> 850</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L851"></a><tt class="py-lineno"> 851</tt>  <tt class="py-line">         </tt>
+<a name="L852"></a><tt class="py-lineno"> 852</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">isabs</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L853"></a><tt class="py-lineno"> 853</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"writeImageToFile expects an absolute path"</tt><tt class="py-op">)</tt>  </tt>
+<a name="L854"></a><tt class="py-lineno"> 854</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">isdir</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L855"></a><tt class="py-lineno"> 855</tt>  <tt class="py-line">            <tt class="py-name">filename</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-264" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.variableNameFromId()=src.com.dtmilano.android.viewclient.View-class.html#variableNameFromId"><a title="src.com.dtmilano.android.viewclient.View.variableNameFromId" class="py-name" href="#" onclick="return doclink('link-264', 'variableNameFromId', 'link-264');">variableNameFromId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">'.'</tt> <tt class="py-op">+</tt> <tt class="py-name">format</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L856"></a><tt class="py-lineno"> 856</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-265" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-265', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L857"></a><tt class="py-lineno"> 857</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"writeImageToFile: saving image to '%s' in %s format"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-name">format</tt><tt class="py-op">)</tt>  </tt>
+<a name="L858"></a><tt class="py-lineno"> 858</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">takeSnapshot</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">getSubImage</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-266" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getPositionAndSize" class="py-name" href="#" onclick="return doclink('link-266', 'getPositionAndSize', 'link-260');">getPositionAndSize</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">writeToFile</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-name">format</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L859"></a><tt class="py-lineno"> 859</tt>  <tt class="py-line"> </tt>
+<a name="View.__smallStr__"></a><div id="View.__smallStr__-def"><a name="L860"></a><tt class="py-lineno"> 860</tt> <a class="py-toggle" href="#" id="View.__smallStr__-toggle" onclick="return toggle('View.__smallStr__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#__smallStr__">__smallStr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__smallStr__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__smallStr__-expanded"><a name="L861"></a><tt class="py-lineno"> 861</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">=</tt> <tt class="py-name">unicode</tt><tt class="py-op">(</tt><tt class="py-string">"View["</tt><tt class="py-op">,</tt> <tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-string">'replace'</tt><tt class="py-op">)</tt> </tt>
+<a name="L862"></a><tt class="py-lineno"> 862</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">"class"</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">:</tt> </tt>
+<a name="L863"></a><tt class="py-lineno"> 863</tt>  <tt class="py-line">            <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">" class="</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'class'</tt><tt class="py-op">]</tt> </tt>
+<a name="L864"></a><tt class="py-lineno"> 864</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">" id=%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-267" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-267', 'getId', 'link-124');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L865"></a><tt class="py-lineno"> 865</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">" ]   parent="</tt> </tt>
+<a name="L866"></a><tt class="py-lineno"> 866</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-keyword">and</tt> <tt class="py-string">"class"</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">:</tt> </tt>
+<a name="L867"></a><tt class="py-lineno"> 867</tt>  <tt class="py-line">            <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">"%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">"class"</tt><tt class="py-op">]</tt> </tt>
+<a name="L868"></a><tt class="py-lineno"> 868</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L869"></a><tt class="py-lineno"> 869</tt>  <tt class="py-line">            <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">"None"</tt> </tt>
+<a name="L870"></a><tt class="py-lineno"> 870</tt>  <tt class="py-line"> </tt>
+<a name="L871"></a><tt class="py-lineno"> 871</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">__str</tt> </tt>
+</div><a name="L872"></a><tt class="py-lineno"> 872</tt>  <tt class="py-line">             </tt>
+<a name="View.__tinyStr__"></a><div id="View.__tinyStr__-def"><a name="L873"></a><tt class="py-lineno"> 873</tt> <a class="py-toggle" href="#" id="View.__tinyStr__-toggle" onclick="return toggle('View.__tinyStr__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#__tinyStr__">__tinyStr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__tinyStr__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__tinyStr__-expanded"><a name="L874"></a><tt class="py-lineno"> 874</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">=</tt> <tt class="py-name">unicode</tt><tt class="py-op">(</tt><tt class="py-string">"View["</tt><tt class="py-op">,</tt> <tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-string">'replace'</tt><tt class="py-op">)</tt> </tt>
+<a name="L875"></a><tt class="py-lineno"> 875</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">"class"</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">:</tt> </tt>
+<a name="L876"></a><tt class="py-lineno"> 876</tt>  <tt class="py-line">            <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">" class="</tt> <tt class="py-op">+</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt><tt class="py-op">(</tt><tt class="py-string">'.*\.'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'class'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L877"></a><tt class="py-lineno"> 877</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">" id=%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-268" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-268', 'getId', 'link-124');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L878"></a><tt class="py-lineno"> 878</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">" ]"</tt> </tt>
+<a name="L879"></a><tt class="py-lineno"> 879</tt>  <tt class="py-line"> </tt>
+<a name="L880"></a><tt class="py-lineno"> 880</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">__str</tt> </tt>
+</div><a name="L881"></a><tt class="py-lineno"> 881</tt>  <tt class="py-line">     </tt>
+<a name="View.__microStr__"></a><div id="View.__microStr__-def"><a name="L882"></a><tt class="py-lineno"> 882</tt> <a class="py-toggle" href="#" id="View.__microStr__-toggle" onclick="return toggle('View.__microStr__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#__microStr__">__microStr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__microStr__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__microStr__-expanded"><a name="L883"></a><tt class="py-lineno"> 883</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">=</tt> <tt class="py-name">unicode</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-string">'replace'</tt><tt class="py-op">)</tt> </tt>
+<a name="L884"></a><tt class="py-lineno"> 884</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">"class"</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">:</tt> </tt>
+<a name="L885"></a><tt class="py-lineno"> 885</tt>  <tt class="py-line">            <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt><tt class="py-op">(</tt><tt class="py-string">'.*\.'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">'class'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L886"></a><tt class="py-lineno"> 886</tt>  <tt class="py-line">        <tt class="py-name">id</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-269" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-269', 'getId', 'link-124');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'id/no_id/'</tt><tt class="py-op">,</tt> <tt class="py-string">'-'</tt><tt class="py-op">)</tt> </tt>
+<a name="L887"></a><tt class="py-lineno"> 887</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-name">id</tt> </tt>
+<a name="L888"></a><tt class="py-lineno"> 888</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">L</tt><tt class="py-op">,</tt> <tt class="py-name">T</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">R</tt><tt class="py-op">,</tt> <tt class="py-name">B</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-270" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getCoords" class="py-name" href="#" onclick="return doclink('link-270', 'getCoords', 'link-189');">getCoords</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L889"></a><tt class="py-lineno"> 889</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">'@%04d%04d%04d%04d'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">L</tt><tt class="py-op">,</tt> <tt class="py-name">T</tt><tt class="py-op">,</tt> <tt class="py-name">R</tt><tt class="py-op">,</tt> <tt class="py-name">B</tt><tt class="py-op">)</tt> </tt>
+<a name="L890"></a><tt class="py-lineno"> 890</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L891"></a><tt class="py-lineno"> 891</tt>  <tt class="py-line">         </tt>
+<a name="L892"></a><tt class="py-lineno"> 892</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">__str</tt> </tt>
+</div><a name="L893"></a><tt class="py-lineno"> 893</tt>  <tt class="py-line">         </tt>
+<a name="L894"></a><tt class="py-lineno"> 894</tt>  <tt class="py-line">             </tt>
+<a name="View.__str__"></a><div id="View.__str__-def"><a name="L895"></a><tt class="py-lineno"> 895</tt> <a class="py-toggle" href="#" id="View.__str__-toggle" onclick="return toggle('View.__str__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.View-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="View.__str__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="View.__str__-expanded"><a name="L896"></a><tt class="py-lineno"> 896</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">=</tt> <tt class="py-name">unicode</tt><tt class="py-op">(</tt><tt class="py-string">"View["</tt><tt class="py-op">,</tt> <tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-string">'replace'</tt><tt class="py-op">)</tt> </tt>
+<a name="L897"></a><tt class="py-lineno"> 897</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">"class"</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">:</tt> </tt>
+<a name="L898"></a><tt class="py-lineno"> 898</tt>  <tt class="py-line">            <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">" class="</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">"class"</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt id="link-271" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.__str__()=src.com.dtmilano.android.viewclient.View-class.html#__str__,Method src.com.dtmilano.android.viewclient.Window.__str__()=src.com.dtmilano.android.viewclient.Window-class.html#__str__"><a title="src.com.dtmilano.android.viewclient.View.__str__
+src.com.dtmilano.android.viewclient.Window.__str__" class="py-name" href="#" onclick="return doclink('link-271', '__str__', 'link-271');">__str__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">" "</tt> </tt>
+<a name="L899"></a><tt class="py-lineno"> 899</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">a</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">:</tt> </tt>
+<a name="L900"></a><tt class="py-lineno"> 900</tt>  <tt class="py-line">            <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-name">a</tt> <tt class="py-op">+</tt> <tt class="py-string">"="</tt> <tt class="py-op">+</tt> <tt class="py-name">unicode</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">a</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-string">'replace'</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">" "</tt> </tt>
+<a name="L901"></a><tt class="py-lineno"> 901</tt>  <tt class="py-line">        <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">"]   parent="</tt> </tt>
+<a name="L902"></a><tt class="py-lineno"> 902</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">:</tt> </tt>
+<a name="L903"></a><tt class="py-lineno"> 903</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-string">"class"</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">:</tt> </tt>
+<a name="L904"></a><tt class="py-lineno"> 904</tt>  <tt class="py-line">                <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">"%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-string">"class"</tt><tt class="py-op">]</tt> </tt>
+<a name="L905"></a><tt class="py-lineno"> 905</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L906"></a><tt class="py-lineno"> 906</tt>  <tt class="py-line">                <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-272" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-272', 'getId', 'link-124');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-273" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__str__
+src.com.dtmilano.android.viewclient.Window.__str__" class="py-name" href="#" onclick="return doclink('link-273', '__str__', 'link-271');">__str__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L907"></a><tt class="py-lineno"> 907</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L908"></a><tt class="py-lineno"> 908</tt>  <tt class="py-line">            <tt class="py-name">__str</tt> <tt class="py-op">+=</tt> <tt class="py-string">"None"</tt> </tt>
+<a name="L909"></a><tt class="py-lineno"> 909</tt>  <tt class="py-line"> </tt>
+<a name="L910"></a><tt class="py-lineno"> 910</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">__str</tt> </tt>
+</div></div><a name="L911"></a><tt class="py-lineno"> 911</tt>  <tt class="py-line"> </tt>
+<a name="TextView"></a><div id="TextView-def"><a name="L912"></a><tt class="py-lineno"> 912</tt> <a class="py-toggle" href="#" id="TextView-toggle" onclick="return toggle('TextView');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.TextView-class.html">TextView</a><tt class="py-op">(</tt><tt class="py-base-class">View</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="TextView-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="TextView-expanded"><a name="L913"></a><tt class="py-lineno"> 913</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L914"></a><tt class="py-lineno"> 914</tt>  <tt class="py-line"><tt class="py-docstring">    TextView class.</tt> </tt>
+<a name="L915"></a><tt class="py-lineno"> 915</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L916"></a><tt class="py-lineno"> 916</tt>  <tt class="py-line">     </tt>
+<a name="L917"></a><tt class="py-lineno"> 917</tt>  <tt class="py-line">    <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L918"></a><tt class="py-lineno"> 918</tt>  <tt class="py-line"> </tt>
+<a name="EditText"></a><div id="EditText-def"><a name="L919"></a><tt class="py-lineno"> 919</tt> <a class="py-toggle" href="#" id="EditText-toggle" onclick="return toggle('EditText');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.EditText-class.html">EditText</a><tt class="py-op">(</tt><tt class="py-base-class">TextView</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="EditText-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="EditText-expanded"><a name="L920"></a><tt class="py-lineno"> 920</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L921"></a><tt class="py-lineno"> 921</tt>  <tt class="py-line"><tt class="py-docstring">    EditText class.</tt> </tt>
+<a name="L922"></a><tt class="py-lineno"> 922</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L923"></a><tt class="py-lineno"> 923</tt>  <tt class="py-line">     </tt>
+<a name="EditText.type"></a><div id="EditText.type-def"><a name="L924"></a><tt class="py-lineno"> 924</tt> <a class="py-toggle" href="#" id="EditText.type-toggle" onclick="return toggle('EditText.type');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.EditText-class.html#type">type</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">text</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="EditText.type-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="EditText.type-expanded"><a name="L925"></a><tt class="py-lineno"> 925</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-274" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.touch" class="py-name" href="#" onclick="return doclink('link-274', 'touch', 'link-254');">touch</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L926"></a><tt class="py-lineno"> 926</tt>  <tt class="py-line">        <tt class="py-name">MonkeyRunner</tt><tt class="py-op">.</tt><tt id="link-275" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-275', 'sleep', 'link-255');">sleep</a></tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L927"></a><tt class="py-lineno"> 927</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">text</tt><tt class="py-op">:</tt> </tt>
+<a name="L928"></a><tt class="py-lineno"> 928</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">c</tt> <tt class="py-op">!=</tt> <tt class="py-string">' '</tt><tt class="py-op">:</tt> </tt>
+<a name="L929"></a><tt class="py-lineno"> 929</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt id="link-276" class="py-name"><a title="src.com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-276', 'type', 'link-252');">type</a></tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> </tt>
+<a name="L930"></a><tt class="py-lineno"> 930</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L931"></a><tt class="py-lineno"> 931</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">press</tt><tt class="py-op">(</tt><tt class="py-string">'KEYCODE_SPACE'</tt><tt class="py-op">,</tt> <tt class="py-name">MonkeyDevice</tt><tt class="py-op">.</tt><tt class="py-name">DOWN_AND_UP</tt><tt class="py-op">)</tt> </tt>
+<a name="L932"></a><tt class="py-lineno"> 932</tt>  <tt class="py-line">        <tt class="py-name">MonkeyRunner</tt><tt class="py-op">.</tt><tt id="link-277" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-277', 'sleep', 'link-255');">sleep</a></tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L933"></a><tt class="py-lineno"> 933</tt>  <tt class="py-line"> </tt>
+<a name="EditText.backspace"></a><div id="EditText.backspace-def"><a name="L934"></a><tt class="py-lineno"> 934</tt> <a class="py-toggle" href="#" id="EditText.backspace-toggle" onclick="return toggle('EditText.backspace');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.EditText-class.html#backspace">backspace</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="EditText.backspace-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="EditText.backspace-expanded"><a name="L935"></a><tt class="py-lineno"> 935</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-278" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.touch" class="py-name" href="#" onclick="return doclink('link-278', 'touch', 'link-254');">touch</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L936"></a><tt class="py-lineno"> 936</tt>  <tt class="py-line">        <tt class="py-name">MonkeyRunner</tt><tt class="py-op">.</tt><tt id="link-279" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-279', 'sleep', 'link-255');">sleep</a></tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L937"></a><tt class="py-lineno"> 937</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">press</tt><tt class="py-op">(</tt><tt class="py-string">'KEYCODE_DEL'</tt><tt class="py-op">,</tt> <tt class="py-name">MonkeyDevice</tt><tt class="py-op">.</tt><tt class="py-name">DOWN_AND_UP</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L938"></a><tt class="py-lineno"> 938</tt>  <tt class="py-line"> </tt>
+<a name="UiAutomator2AndroidViewClient"></a><div id="UiAutomator2AndroidViewClient-def"><a name="L939"></a><tt class="py-lineno"> 939</tt> <a class="py-toggle" href="#" id="UiAutomator2AndroidViewClient-toggle" onclick="return toggle('UiAutomator2AndroidViewClient');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html">UiAutomator2AndroidViewClient</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UiAutomator2AndroidViewClient-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="UiAutomator2AndroidViewClient-expanded"><a name="L940"></a><tt class="py-lineno"> 940</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L941"></a><tt class="py-lineno"> 941</tt>  <tt class="py-line"><tt class="py-docstring">    UiAutomator XML to AndroidViewClient</tt> </tt>
+<a name="L942"></a><tt class="py-lineno"> 942</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L943"></a><tt class="py-lineno"> 943</tt>  <tt class="py-line">     </tt>
+<a name="UiAutomator2AndroidViewClient.__init__"></a><div id="UiAutomator2AndroidViewClient.__init__-def"><a name="L944"></a><tt class="py-lineno"> 944</tt> <a class="py-toggle" href="#" id="UiAutomator2AndroidViewClient.__init__-toggle" onclick="return toggle('UiAutomator2AndroidViewClient.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">device</tt><tt class="py-op">,</tt> <tt class="py-param">version</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UiAutomator2AndroidViewClient.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="UiAutomator2AndroidViewClient.__init__-expanded"><a name="L945"></a><tt class="py-lineno"> 945</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt> </tt>
+<a name="L946"></a><tt class="py-lineno"> 946</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">version</tt> <tt class="py-op">=</tt> <tt class="py-name">version</tt> </tt>
+<a name="L947"></a><tt class="py-lineno"> 947</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L948"></a><tt class="py-lineno"> 948</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodeStack</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L949"></a><tt class="py-lineno"> 949</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L950"></a><tt class="py-lineno"> 950</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L951"></a><tt class="py-lineno"> 951</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idCount</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+</div><a name="L952"></a><tt class="py-lineno"> 952</tt>  <tt class="py-line"> </tt>
+<a name="UiAutomator2AndroidViewClient.StartElement"></a><div id="UiAutomator2AndroidViewClient.StartElement-def"><a name="L953"></a><tt class="py-lineno"> 953</tt> <a class="py-toggle" href="#" id="UiAutomator2AndroidViewClient.StartElement-toggle" onclick="return toggle('UiAutomator2AndroidViewClient.StartElement');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#StartElement">StartElement</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">attributes</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UiAutomator2AndroidViewClient.StartElement-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="UiAutomator2AndroidViewClient.StartElement-expanded"><a name="L954"></a><tt class="py-lineno"> 954</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L955"></a><tt class="py-lineno"> 955</tt>  <tt class="py-line"><tt class="py-docstring">        Expat start element event handler</tt> </tt>
+<a name="L956"></a><tt class="py-lineno"> 956</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L957"></a><tt class="py-lineno"> 957</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-op">==</tt> <tt class="py-string">'hierarchy'</tt><tt class="py-op">:</tt> </tt>
+<a name="L958"></a><tt class="py-lineno"> 958</tt>  <tt class="py-line">            <tt class="py-keyword">pass</tt> </tt>
+<a name="L959"></a><tt class="py-lineno"> 959</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">name</tt> <tt class="py-op">==</tt> <tt class="py-string">'node'</tt><tt class="py-op">:</tt> </tt>
+<a name="L960"></a><tt class="py-lineno"> 960</tt>  <tt class="py-line">            <tt class="py-comment"># Instantiate an Element object</tt> </tt>
+<a name="L961"></a><tt class="py-lineno"> 961</tt>  <tt class="py-line">            <tt class="py-name">attributes</tt><tt class="py-op">[</tt><tt class="py-string">'uniqueId'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'id/no_id/%d'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idCount</tt> </tt>
+<a name="L962"></a><tt class="py-lineno"> 962</tt>  <tt class="py-line">            <tt class="py-name">bounds</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'[\][,]'</tt><tt class="py-op">,</tt> <tt class="py-name">attributes</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L963"></a><tt class="py-lineno"> 963</tt>  <tt class="py-line">            <tt class="py-name">attributes</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">bounds</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">bounds</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">bounds</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">bounds</tt><tt class="py-op">[</tt><tt class="py-number">5</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L964"></a><tt class="py-lineno"> 964</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-280" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_BOUNDS" class="py-name" href="#" onclick="return doclink('link-280', 'DEBUG_BOUNDS', 'link-20');">DEBUG_BOUNDS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L965"></a><tt class="py-lineno"> 965</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"bounds="</tt><tt class="py-op">,</tt> <tt class="py-name">attributes</tt><tt class="py-op">[</tt><tt class="py-string">'bounds'</tt><tt class="py-op">]</tt> </tt>
+<a name="L966"></a><tt class="py-lineno"> 966</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">idCount</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt>  </tt>
+<a name="L967"></a><tt class="py-lineno"> 967</tt>  <tt class="py-line">            <tt class="py-name">child</tt> <tt class="py-op">=</tt> <tt id="link-281" class="py-name"><a title="src.com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-281', 'View', 'link-57');">View</a></tt><tt class="py-op">.</tt><tt id="link-282" class="py-name" targets="Static Method src.com.dtmilano.android.viewclient.View.factory()=src.com.dtmilano.android.viewclient.View-class.html#factory"><a title="src.com.dtmilano.android.viewclient.View.factory" class="py-name" href="#" onclick="return doclink('link-282', 'factory', 'link-282');">factory</a></tt><tt class="py-op">(</tt><tt class="py-name">attributes</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">version</tt><tt class="py-op">)</tt> </tt>
+<a name="L968"></a><tt class="py-lineno"> 968</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">)</tt> </tt>
+<a name="L969"></a><tt class="py-lineno"> 969</tt>  <tt class="py-line">            <tt class="py-comment"># Push element onto the stack and make it a child of parent</tt> </tt>
+<a name="L970"></a><tt class="py-lineno"> 970</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodeStack</tt><tt class="py-op">:</tt> </tt>
+<a name="L971"></a><tt class="py-lineno"> 971</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">child</tt> </tt>
+<a name="L972"></a><tt class="py-lineno"> 972</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L973"></a><tt class="py-lineno"> 973</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodeStack</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L974"></a><tt class="py-lineno"> 974</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-283" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.add()=src.com.dtmilano.android.viewclient.View-class.html#add"><a title="src.com.dtmilano.android.viewclient.View.add" class="py-name" href="#" onclick="return doclink('link-283', 'add', 'link-283');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">)</tt> </tt>
+<a name="L975"></a><tt class="py-lineno"> 975</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodeStack</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L976"></a><tt class="py-lineno"> 976</tt>  <tt class="py-line"> </tt>
+<a name="UiAutomator2AndroidViewClient.EndElement"></a><div id="UiAutomator2AndroidViewClient.EndElement-def"><a name="L977"></a><tt class="py-lineno"> 977</tt> <a class="py-toggle" href="#" id="UiAutomator2AndroidViewClient.EndElement-toggle" onclick="return toggle('UiAutomator2AndroidViewClient.EndElement');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#EndElement">EndElement</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UiAutomator2AndroidViewClient.EndElement-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="UiAutomator2AndroidViewClient.EndElement-expanded"><a name="L978"></a><tt class="py-lineno"> 978</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L979"></a><tt class="py-lineno"> 979</tt>  <tt class="py-line"><tt class="py-docstring">        Expat end element event handler</tt> </tt>
+<a name="L980"></a><tt class="py-lineno"> 980</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L981"></a><tt class="py-lineno"> 981</tt>  <tt class="py-line"> </tt>
+<a name="L982"></a><tt class="py-lineno"> 982</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-op">==</tt> <tt class="py-string">'hierarchy'</tt><tt class="py-op">:</tt> </tt>
+<a name="L983"></a><tt class="py-lineno"> 983</tt>  <tt class="py-line">            <tt class="py-keyword">pass</tt> </tt>
+<a name="L984"></a><tt class="py-lineno"> 984</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">name</tt> <tt class="py-op">==</tt> <tt class="py-string">'node'</tt><tt class="py-op">:</tt> </tt>
+<a name="L985"></a><tt class="py-lineno"> 985</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodeStack</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L986"></a><tt class="py-lineno"> 986</tt>  <tt class="py-line"> </tt>
+<a name="UiAutomator2AndroidViewClient.CharacterData"></a><div id="UiAutomator2AndroidViewClient.CharacterData-def"><a name="L987"></a><tt class="py-lineno"> 987</tt> <a class="py-toggle" href="#" id="UiAutomator2AndroidViewClient.CharacterData-toggle" onclick="return toggle('UiAutomator2AndroidViewClient.CharacterData');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#CharacterData">CharacterData</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UiAutomator2AndroidViewClient.CharacterData-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="UiAutomator2AndroidViewClient.CharacterData-expanded"><a name="L988"></a><tt class="py-lineno"> 988</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L989"></a><tt class="py-lineno"> 989</tt>  <tt class="py-line"><tt class="py-docstring">        Expat character data event handler</tt> </tt>
+<a name="L990"></a><tt class="py-lineno"> 990</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L991"></a><tt class="py-lineno"> 991</tt>  <tt class="py-line">         </tt>
+<a name="L992"></a><tt class="py-lineno"> 992</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">data</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L993"></a><tt class="py-lineno"> 993</tt>  <tt class="py-line">            <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L994"></a><tt class="py-lineno"> 994</tt>  <tt class="py-line">            <tt class="py-name">element</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodeStack</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L995"></a><tt class="py-lineno"> 995</tt>  <tt class="py-line">            <tt class="py-name">element</tt><tt class="py-op">.</tt><tt class="py-name">cdata</tt> <tt class="py-op">+=</tt> <tt class="py-name">data</tt> </tt>
+</div><a name="L996"></a><tt class="py-lineno"> 996</tt>  <tt class="py-line"> </tt>
+<a name="UiAutomator2AndroidViewClient.Parse"></a><div id="UiAutomator2AndroidViewClient.Parse-def"><a name="L997"></a><tt class="py-lineno"> 997</tt> <a class="py-toggle" href="#" id="UiAutomator2AndroidViewClient.Parse-toggle" onclick="return toggle('UiAutomator2AndroidViewClient.Parse');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#Parse">Parse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">uiautomatorxml</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UiAutomator2AndroidViewClient.Parse-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="UiAutomator2AndroidViewClient.Parse-expanded"><a name="L998"></a><tt class="py-lineno"> 998</tt>  <tt class="py-line">        <tt class="py-comment"># Create an Expat parser</tt> </tt>
+<a name="L999"></a><tt class="py-lineno"> 999</tt>  <tt class="py-line">        <tt class="py-name">parser</tt> <tt class="py-op">=</tt> <tt class="py-name">xml</tt><tt class="py-op">.</tt><tt class="py-name">parsers</tt><tt class="py-op">.</tt><tt class="py-name">expat</tt><tt class="py-op">.</tt><tt class="py-name">ParserCreate</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1000"></a><tt class="py-lineno">1000</tt>  <tt class="py-line">        <tt class="py-comment"># Set the Expat event handlers to our methods</tt> </tt>
+<a name="L1001"></a><tt class="py-lineno">1001</tt>  <tt class="py-line">        <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">StartElementHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-284" class="py-name" targets="Method src.com.dtmilano.android.viewclient.Excerpt2Code.StartElement()=src.com.dtmilano.android.viewclient.Excerpt2Code-class.html#StartElement,Method src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.StartElement()=src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#StartElement"><a title="src.com.dtmilano.android.viewclient.Excerpt2Code.StartElement
+src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.StartElement" class="py-name" href="#" onclick="return doclink('link-284', 'StartElement', 'link-284');">StartElement</a></tt> </tt>
+<a name="L1002"></a><tt class="py-lineno">1002</tt>  <tt class="py-line">        <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">EndElementHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-285" class="py-name" targets="Method src.com.dtmilano.android.viewclient.Excerpt2Code.EndElement()=src.com.dtmilano.android.viewclient.Excerpt2Code-class.html#EndElement,Method src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.EndElement()=src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#EndElement"><a title="src.com.dtmilano.android.viewclient.Excerpt2Code.EndElement
+src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.EndElement" class="py-name" href="#" onclick="return doclink('link-285', 'EndElement', 'link-285');">EndElement</a></tt> </tt>
+<a name="L1003"></a><tt class="py-lineno">1003</tt>  <tt class="py-line">        <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">CharacterDataHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-286" class="py-name" targets="Method src.com.dtmilano.android.viewclient.Excerpt2Code.CharacterData()=src.com.dtmilano.android.viewclient.Excerpt2Code-class.html#CharacterData,Method src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.CharacterData()=src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#CharacterData"><a title="src.com.dtmilano.android.viewclient.Excerpt2Code.CharacterData
+src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.CharacterData" class="py-name" href="#" onclick="return doclink('link-286', 'CharacterData', 'link-286');">CharacterData</a></tt> </tt>
+<a name="L1004"></a><tt class="py-lineno">1004</tt>  <tt class="py-line">        <tt class="py-comment"># Parse the XML File</tt> </tt>
+<a name="L1005"></a><tt class="py-lineno">1005</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1006"></a><tt class="py-lineno">1006</tt>  <tt class="py-line">            <tt class="py-name">parserStatus</tt> <tt class="py-op">=</tt> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt id="link-287" class="py-name" targets="Method src.com.dtmilano.android.viewclient.Excerpt2Code.Parse()=src.com.dtmilano.android.viewclient.Excerpt2Code-class.html#Parse,Method src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.Parse()=src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html#Parse"><a title="src.com.dtmilano.android.viewclient.Excerpt2Code.Parse
+src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.Parse" class="py-name" href="#" onclick="return doclink('link-287', 'Parse', 'link-287');">Parse</a></tt><tt class="py-op">(</tt><tt class="py-name">uiautomatorxml</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L1007"></a><tt class="py-lineno">1007</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">xml</tt><tt class="py-op">.</tt><tt class="py-name">parsers</tt><tt class="py-op">.</tt><tt class="py-name">expat</tt><tt class="py-op">.</tt><tt class="py-name">ExpatError</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">:</tt> </tt>
+<a name="L1008"></a><tt class="py-lineno">1008</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: Offending XML:\n"</tt><tt class="py-op">,</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">uiautomatorxml</tt><tt class="py-op">)</tt> </tt>
+<a name="L1009"></a><tt class="py-lineno">1009</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-name">ex</tt><tt class="py-op">)</tt> </tt>
+<a name="L1010"></a><tt class="py-lineno">1010</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> </tt>
+</div></div><a name="L1011"></a><tt class="py-lineno">1011</tt>  <tt class="py-line"> </tt>
+<a name="Excerpt2Code"></a><div id="Excerpt2Code-def"><a name="L1012"></a><tt class="py-lineno">1012</tt> <a class="py-toggle" href="#" id="Excerpt2Code-toggle" onclick="return toggle('Excerpt2Code');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.Excerpt2Code-class.html">Excerpt2Code</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Excerpt2Code-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Excerpt2Code-expanded"><a name="L1013"></a><tt class="py-lineno">1013</tt>  <tt class="py-line">    <tt class="py-docstring">''' Excerpt XML to code '''</tt> </tt>
+<a name="L1014"></a><tt class="py-lineno">1014</tt>  <tt class="py-line"> </tt>
+<a name="Excerpt2Code.__init__"></a><div id="Excerpt2Code.__init__-def"><a name="L1015"></a><tt class="py-lineno">1015</tt> <a class="py-toggle" href="#" id="Excerpt2Code.__init__-toggle" onclick="return toggle('Excerpt2Code.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.Excerpt2Code-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Excerpt2Code.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Excerpt2Code.__init__-expanded"><a name="L1016"></a><tt class="py-lineno">1016</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L1017"></a><tt class="py-lineno">1017</tt>  <tt class="py-line"> </tt>
+<a name="Excerpt2Code.StartElement"></a><div id="Excerpt2Code.StartElement-def"><a name="L1018"></a><tt class="py-lineno">1018</tt> <a class="py-toggle" href="#" id="Excerpt2Code.StartElement-toggle" onclick="return toggle('Excerpt2Code.StartElement');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.Excerpt2Code-class.html#StartElement">StartElement</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">attributes</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Excerpt2Code.StartElement-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Excerpt2Code.StartElement-expanded"><a name="L1019"></a><tt class="py-lineno">1019</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1020"></a><tt class="py-lineno">1020</tt>  <tt class="py-line"><tt class="py-docstring">        Expat start element event handler</tt> </tt>
+<a name="L1021"></a><tt class="py-lineno">1021</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1022"></a><tt class="py-lineno">1022</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-op">==</tt> <tt class="py-string">'excerpt'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1023"></a><tt class="py-lineno">1023</tt>  <tt class="py-line">            <tt class="py-keyword">pass</tt> </tt>
+<a name="L1024"></a><tt class="py-lineno">1024</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1025"></a><tt class="py-lineno">1025</tt>  <tt class="py-line">            <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Unexpected element: '%s'"</tt> <tt class="py-op">%</tt> <tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1026"></a><tt class="py-lineno">1026</tt>  <tt class="py-line"> </tt>
+<a name="Excerpt2Code.EndElement"></a><div id="Excerpt2Code.EndElement-def"><a name="L1027"></a><tt class="py-lineno">1027</tt> <a class="py-toggle" href="#" id="Excerpt2Code.EndElement-toggle" onclick="return toggle('Excerpt2Code.EndElement');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.Excerpt2Code-class.html#EndElement">EndElement</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Excerpt2Code.EndElement-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Excerpt2Code.EndElement-expanded"><a name="L1028"></a><tt class="py-lineno">1028</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1029"></a><tt class="py-lineno">1029</tt>  <tt class="py-line"><tt class="py-docstring">        Expat end element event handler</tt> </tt>
+<a name="L1030"></a><tt class="py-lineno">1030</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1031"></a><tt class="py-lineno">1031</tt>  <tt class="py-line"> </tt>
+<a name="L1032"></a><tt class="py-lineno">1032</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-op">==</tt> <tt class="py-string">'excerpt'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1033"></a><tt class="py-lineno">1033</tt>  <tt class="py-line">            <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L1034"></a><tt class="py-lineno">1034</tt>  <tt class="py-line"> </tt>
+<a name="Excerpt2Code.CharacterData"></a><div id="Excerpt2Code.CharacterData-def"><a name="L1035"></a><tt class="py-lineno">1035</tt> <a class="py-toggle" href="#" id="Excerpt2Code.CharacterData-toggle" onclick="return toggle('Excerpt2Code.CharacterData');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.Excerpt2Code-class.html#CharacterData">CharacterData</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Excerpt2Code.CharacterData-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Excerpt2Code.CharacterData-expanded"><a name="L1036"></a><tt class="py-lineno">1036</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1037"></a><tt class="py-lineno">1037</tt>  <tt class="py-line"><tt class="py-docstring">        Expat character data event handler</tt> </tt>
+<a name="L1038"></a><tt class="py-lineno">1038</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1039"></a><tt class="py-lineno">1039</tt>  <tt class="py-line"> </tt>
+<a name="L1040"></a><tt class="py-lineno">1040</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">data</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1041"></a><tt class="py-lineno">1041</tt>  <tt class="py-line">            <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1042"></a><tt class="py-lineno">1042</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">:</tt> </tt>
+<a name="L1043"></a><tt class="py-lineno">1043</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt> </tt>
+<a name="L1044"></a><tt class="py-lineno">1044</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1045"></a><tt class="py-lineno">1045</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> <tt class="py-op">+=</tt> <tt class="py-name">data</tt> </tt>
+</div><a name="L1046"></a><tt class="py-lineno">1046</tt>  <tt class="py-line"> </tt>
+<a name="Excerpt2Code.Parse"></a><div id="Excerpt2Code.Parse-def"><a name="L1047"></a><tt class="py-lineno">1047</tt> <a class="py-toggle" href="#" id="Excerpt2Code.Parse-toggle" onclick="return toggle('Excerpt2Code.Parse');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.Excerpt2Code-class.html#Parse">Parse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">excerpt</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Excerpt2Code.Parse-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Excerpt2Code.Parse-expanded"><a name="L1048"></a><tt class="py-lineno">1048</tt>  <tt class="py-line">        <tt class="py-comment"># Create an Expat parser</tt> </tt>
+<a name="L1049"></a><tt class="py-lineno">1049</tt>  <tt class="py-line">        <tt class="py-name">parser</tt> <tt class="py-op">=</tt> <tt class="py-name">xml</tt><tt class="py-op">.</tt><tt class="py-name">parsers</tt><tt class="py-op">.</tt><tt class="py-name">expat</tt><tt class="py-op">.</tt><tt class="py-name">ParserCreate</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1050"></a><tt class="py-lineno">1050</tt>  <tt class="py-line">        <tt class="py-comment"># Set the Expat event handlers to our methods</tt> </tt>
+<a name="L1051"></a><tt class="py-lineno">1051</tt>  <tt class="py-line">        <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">StartElementHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-288" class="py-name"><a title="src.com.dtmilano.android.viewclient.Excerpt2Code.StartElement
+src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.StartElement" class="py-name" href="#" onclick="return doclink('link-288', 'StartElement', 'link-284');">StartElement</a></tt> </tt>
+<a name="L1052"></a><tt class="py-lineno">1052</tt>  <tt class="py-line">        <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">EndElementHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-289" class="py-name"><a title="src.com.dtmilano.android.viewclient.Excerpt2Code.EndElement
+src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.EndElement" class="py-name" href="#" onclick="return doclink('link-289', 'EndElement', 'link-285');">EndElement</a></tt> </tt>
+<a name="L1053"></a><tt class="py-lineno">1053</tt>  <tt class="py-line">        <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">CharacterDataHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-290" class="py-name"><a title="src.com.dtmilano.android.viewclient.Excerpt2Code.CharacterData
+src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.CharacterData" class="py-name" href="#" onclick="return doclink('link-290', 'CharacterData', 'link-286');">CharacterData</a></tt> </tt>
+<a name="L1054"></a><tt class="py-lineno">1054</tt>  <tt class="py-line">        <tt class="py-comment"># Parse the XML</tt> </tt>
+<a name="L1055"></a><tt class="py-lineno">1055</tt>  <tt class="py-line">        <tt class="py-name">parserStatus</tt> <tt class="py-op">=</tt> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt id="link-291" class="py-name"><a title="src.com.dtmilano.android.viewclient.Excerpt2Code.Parse
+src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.Parse" class="py-name" href="#" onclick="return doclink('link-291', 'Parse', 'link-287');">Parse</a></tt><tt class="py-op">(</tt><tt id="link-292" class="py-name" targets="Static Method src.com.dtmilano.android.viewclient.ViewClient.excerpt()=src.com.dtmilano.android.viewclient.ViewClient-class.html#excerpt"><a title="src.com.dtmilano.android.viewclient.ViewClient.excerpt" class="py-name" href="#" onclick="return doclink('link-292', 'excerpt', 'link-292');">excerpt</a></tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L1056"></a><tt class="py-lineno">1056</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> </tt>
+</div></div><a name="L1057"></a><tt class="py-lineno">1057</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient"></a><div id="ViewClient-def"><a name="L1058"></a><tt class="py-lineno">1058</tt> <a class="py-toggle" href="#" id="ViewClient-toggle" onclick="return toggle('ViewClient');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ViewClient-expanded"><a name="L1059"></a><tt class="py-lineno">1059</tt>  <tt class="py-line">    <tt class="py-docstring">'''</tt> </tt>
+<a name="L1060"></a><tt class="py-lineno">1060</tt>  <tt class="py-line"><tt class="py-docstring">    ViewClient is a I{ViewServer} client.</tt> </tt>
+<a name="L1061"></a><tt class="py-lineno">1061</tt>  <tt class="py-line"><tt class="py-docstring">    </tt> </tt>
+<a name="L1062"></a><tt class="py-lineno">1062</tt>  <tt class="py-line"><tt class="py-docstring">    ViewServer backend</tt> </tt>
+<a name="L1063"></a><tt class="py-lineno">1063</tt>  <tt class="py-line"><tt class="py-docstring">    ==================</tt> </tt>
+<a name="L1064"></a><tt class="py-lineno">1064</tt>  <tt class="py-line"><tt class="py-docstring">    If not running the ViewServer is started on the target device or emulator and then the port</tt> </tt>
+<a name="L1065"></a><tt class="py-lineno">1065</tt>  <tt class="py-line"><tt class="py-docstring">    mapping is created.</tt> </tt>
+<a name="L1066"></a><tt class="py-lineno">1066</tt>  <tt class="py-line"><tt class="py-docstring">    </tt> </tt>
+<a name="L1067"></a><tt class="py-lineno">1067</tt>  <tt class="py-line"><tt class="py-docstring">    UiAutomator backend</tt> </tt>
+<a name="L1068"></a><tt class="py-lineno">1068</tt>  <tt class="py-line"><tt class="py-docstring">    ===================</tt> </tt>
+<a name="L1069"></a><tt class="py-lineno">1069</tt>  <tt class="py-line"><tt class="py-docstring">    No service is started.</tt> </tt>
+<a name="L1070"></a><tt class="py-lineno">1070</tt>  <tt class="py-line"><tt class="py-docstring">    '''</tt> </tt>
+<a name="L1071"></a><tt class="py-lineno">1071</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.__init__"></a><div id="ViewClient.__init__-def"><a name="L1072"></a><tt class="py-lineno">1072</tt> <a class="py-toggle" href="#" id="ViewClient.__init__-toggle" onclick="return toggle('ViewClient.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">device</tt><tt class="py-op">,</tt> <tt class="py-param">serialno</tt><tt class="py-op">,</tt> <tt class="py-param">adb</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">autodump</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-param">forceviewserveruse</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-param">localport</tt><tt class="py-op">=</tt><tt id="link-293" class="py-name"><a title="src.com.dtmilano.android.viewclient.VIEW_SERVER_PORT" class="py-name" href="#" onclick="return doclink('link-293', 'VIEW_SERVER_PORT', 'link-26');">VIEW_SERVER_PORT</a></tt><tt class="py-op">,</tt> <tt class="py-param">remoteport</tt><tt class="py-op">=</tt><tt id="link-294" class="py-name"><a title="src.com.dtmilano.android.viewclient.VIEW_SERVER_PORT" class="py-name" href="#" onclick="return doclink('link-294', 'VIEW_SERVER_PORT', 'link-26');">VIEW_SERVER_PORT</a></tt><tt class="py-op">,</tt> <tt class="py-param">startviewserver</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-param">ignoreuiautomatorkilled</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__init__-expanded"><a name="L1073"></a><tt class="py-lineno">1073</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1074"></a><tt class="py-lineno">1074</tt>  <tt class="py-line"><tt class="py-docstring">        Constructor</tt> </tt>
+<a name="L1075"></a><tt class="py-lineno">1075</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1076"></a><tt class="py-lineno">1076</tt>  <tt class="py-line"><tt class="py-docstring">        @type device: MonkeyDevice</tt> </tt>
+<a name="L1077"></a><tt class="py-lineno">1077</tt>  <tt class="py-line"><tt class="py-docstring">        @param device: The device running the C{View server} to which this client will connect</tt> </tt>
+<a name="L1078"></a><tt class="py-lineno">1078</tt>  <tt class="py-line"><tt class="py-docstring">        @type serialno: str</tt> </tt>
+<a name="L1079"></a><tt class="py-lineno">1079</tt>  <tt class="py-line"><tt class="py-docstring">        @param serialno: the serial number of the device or emulator to connect to</tt> </tt>
+<a name="L1080"></a><tt class="py-lineno">1080</tt>  <tt class="py-line"><tt class="py-docstring">        @type adb: str</tt> </tt>
+<a name="L1081"></a><tt class="py-lineno">1081</tt>  <tt class="py-line"><tt class="py-docstring">        @param adb: the path of the C{adb} executable or None and C{ViewClient} will try to find it</tt> </tt>
+<a name="L1082"></a><tt class="py-lineno">1082</tt>  <tt class="py-line"><tt class="py-docstring">        @type autodump: boolean</tt> </tt>
+<a name="L1083"></a><tt class="py-lineno">1083</tt>  <tt class="py-line"><tt class="py-docstring">        @param autodump: whether an automatic dump is performed at the end of this constructor</tt> </tt>
+<a name="L1084"></a><tt class="py-lineno">1084</tt>  <tt class="py-line"><tt class="py-docstring">        @type forceviewserveruse: boolean</tt> </tt>
+<a name="L1085"></a><tt class="py-lineno">1085</tt>  <tt class="py-line"><tt class="py-docstring">        @param forceviewserveruse: Force the use of C{ViewServer} even if the conditions to use</tt> </tt>
+<a name="L1086"></a><tt class="py-lineno">1086</tt>  <tt class="py-line"><tt class="py-docstring">                            C{UiAutomator} are satisfied </tt> </tt>
+<a name="L1087"></a><tt class="py-lineno">1087</tt>  <tt class="py-line"><tt class="py-docstring">        @type localport: int</tt> </tt>
+<a name="L1088"></a><tt class="py-lineno">1088</tt>  <tt class="py-line"><tt class="py-docstring">        @param localport: the local port used in the redirection</tt> </tt>
+<a name="L1089"></a><tt class="py-lineno">1089</tt>  <tt class="py-line"><tt class="py-docstring">        @type remoteport: int</tt> </tt>
+<a name="L1090"></a><tt class="py-lineno">1090</tt>  <tt class="py-line"><tt class="py-docstring">        @param remoteport: the remote port used to start the C{ViewServer} in the device or</tt> </tt>
+<a name="L1091"></a><tt class="py-lineno">1091</tt>  <tt class="py-line"><tt class="py-docstring">                           emulator</tt> </tt>
+<a name="L1092"></a><tt class="py-lineno">1092</tt>  <tt class="py-line"><tt class="py-docstring">        @type startviewserver: boolean</tt> </tt>
+<a name="L1093"></a><tt class="py-lineno">1093</tt>  <tt class="py-line"><tt class="py-docstring">        @param startviewserver: Whether to start the B{global} ViewServer</tt> </tt>
+<a name="L1094"></a><tt class="py-lineno">1094</tt>  <tt class="py-line"><tt class="py-docstring">        @type ignoreuiautomatorkilled: boolean</tt> </tt>
+<a name="L1095"></a><tt class="py-lineno">1095</tt>  <tt class="py-line"><tt class="py-docstring">        @param ignoreuiautomatorkilled: Ignores received B{Killed} message from C{uiautomator}</tt> </tt>
+<a name="L1096"></a><tt class="py-lineno">1096</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1097"></a><tt class="py-lineno">1097</tt>  <tt class="py-line"> </tt>
+<a name="L1098"></a><tt class="py-lineno">1098</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">device</tt><tt class="py-op">:</tt> </tt>
+<a name="L1099"></a><tt class="py-lineno">1099</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">'Device is not connected'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1100"></a><tt class="py-lineno">1100</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt> </tt>
+<a name="L1101"></a><tt class="py-lineno">1101</tt>  <tt class="py-line">        <tt class="py-string">''' The C{MonkeyDevice} device instance '''</tt> </tt>
+<a name="L1102"></a><tt class="py-lineno">1102</tt>  <tt class="py-line">         </tt>
+<a name="L1103"></a><tt class="py-lineno">1103</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">serialno</tt><tt class="py-op">:</tt> </tt>
+<a name="L1104"></a><tt class="py-lineno">1104</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"Serialno cannot be None"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1105"></a><tt class="py-lineno">1105</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-295" class="py-name" targets="Static Method src.com.dtmilano.android.viewclient.ViewClient.__mapSerialNo()=src.com.dtmilano.android.viewclient.ViewClient-class.html#__mapSerialNo"><a title="src.com.dtmilano.android.viewclient.ViewClient.__mapSerialNo" class="py-name" href="#" onclick="return doclink('link-295', '__mapSerialNo', 'link-295');">__mapSerialNo</a></tt><tt class="py-op">(</tt><tt class="py-name">serialno</tt><tt class="py-op">)</tt> </tt>
+<a name="L1106"></a><tt class="py-lineno">1106</tt>  <tt class="py-line">        <tt class="py-string">''' The serial number of the device '''</tt> </tt>
+<a name="L1107"></a><tt class="py-lineno">1107</tt>  <tt class="py-line">         </tt>
+<a name="L1108"></a><tt class="py-lineno">1108</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-296" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_DEVICE" class="py-name" href="#" onclick="return doclink('link-296', 'DEBUG_DEVICE', 'link-2');">DEBUG_DEVICE</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ViewClient: using device with serialno"</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt> </tt>
+<a name="L1109"></a><tt class="py-lineno">1109</tt>  <tt class="py-line">         </tt>
+<a name="L1110"></a><tt class="py-lineno">1110</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">adb</tt><tt class="py-op">:</tt> </tt>
+<a name="L1111"></a><tt class="py-lineno">1111</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">access</tt><tt class="py-op">(</tt><tt class="py-name">adb</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">X_OK</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1112"></a><tt class="py-lineno">1112</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">'adb="%s" is not executable'</tt> <tt class="py-op">%</tt> <tt class="py-name">adb</tt><tt class="py-op">)</tt> </tt>
+<a name="L1113"></a><tt class="py-lineno">1113</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1114"></a><tt class="py-lineno">1114</tt>  <tt class="py-line">            <tt class="py-name">adb</tt> <tt class="py-op">=</tt> <tt id="link-297" class="py-name" targets="Class src.com.dtmilano.android.viewclient.ViewClient=src.com.dtmilano.android.viewclient.ViewClient-class.html"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-297', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-298" class="py-name" targets="Static Method src.com.dtmilano.android.viewclient.ViewClient.__obtainAdbPath()=src.com.dtmilano.android.viewclient.ViewClient-class.html#__obtainAdbPath"><a title="src.com.dtmilano.android.viewclient.ViewClient.__obtainAdbPath" class="py-name" href="#" onclick="return doclink('link-298', '__obtainAdbPath', 'link-298');">__obtainAdbPath</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1115"></a><tt class="py-lineno">1115</tt>  <tt class="py-line"> </tt>
+<a name="L1116"></a><tt class="py-lineno">1116</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">adb</tt> <tt class="py-op">=</tt> <tt class="py-name">adb</tt> </tt>
+<a name="L1117"></a><tt class="py-lineno">1117</tt>  <tt class="py-line">        <tt class="py-string">''' The adb command '''</tt> </tt>
+<a name="L1118"></a><tt class="py-lineno">1118</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1119"></a><tt class="py-lineno">1119</tt>  <tt class="py-line">        <tt class="py-string">''' The root node '''</tt> </tt>
+<a name="L1120"></a><tt class="py-lineno">1120</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1121"></a><tt class="py-lineno">1121</tt>  <tt class="py-line">        <tt class="py-string">''' The map containing all the L{View}s indexed by their L{View.getUniqueId()} '''</tt> </tt>
+<a name="L1122"></a><tt class="py-lineno">1122</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">display</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1123"></a><tt class="py-lineno">1123</tt>  <tt class="py-line">        <tt class="py-string">''' The map containing the device's display properties: width, height and density '''</tt> </tt>
+<a name="L1124"></a><tt class="py-lineno">1124</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">prop</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt> <tt class="py-string">'width'</tt><tt class="py-op">,</tt> <tt class="py-string">'height'</tt><tt class="py-op">,</tt> <tt class="py-string">'density'</tt> <tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L1125"></a><tt class="py-lineno">1125</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">display</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L1126"></a><tt class="py-lineno">1126</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-299" class="py-name"><a title="src.com.dtmilano.android.viewclient.USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES" class="py-name" href="#" onclick="return doclink('link-299', 'USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES', 'link-29');">USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1127"></a><tt class="py-lineno">1127</tt>  <tt class="py-line">                <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1128"></a><tt class="py-lineno">1128</tt>  <tt class="py-line">                    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">display</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">getProperty</tt><tt class="py-op">(</tt><tt class="py-string">'display.'</tt> <tt class="py-op">+</tt> <tt class="py-name">prop</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1129"></a><tt class="py-lineno">1129</tt>  <tt class="py-line">                <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L1130"></a><tt class="py-lineno">1130</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt id="link-300" class="py-name"><a title="src.com.dtmilano.android.viewclient.WARNINGS" class="py-name" href="#" onclick="return doclink('link-300', 'WARNINGS', 'link-24');">WARNINGS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1131"></a><tt class="py-lineno">1131</tt>  <tt class="py-line">                        <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Couldn't determine display %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">prop</tt><tt class="py-op">)</tt> </tt>
+<a name="L1132"></a><tt class="py-lineno">1132</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1133"></a><tt class="py-lineno">1133</tt>  <tt class="py-line">                <tt class="py-comment"># these values are usually not defined as properties, so we stick to the -1 set</tt> </tt>
+<a name="L1134"></a><tt class="py-lineno">1134</tt>  <tt class="py-line">                <tt class="py-comment"># before</tt> </tt>
+<a name="L1135"></a><tt class="py-lineno">1135</tt>  <tt class="py-line">                <tt class="py-keyword">pass</tt> </tt>
+<a name="L1136"></a><tt class="py-lineno">1136</tt>  <tt class="py-line"> </tt>
+<a name="L1137"></a><tt class="py-lineno">1137</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1138"></a><tt class="py-lineno">1138</tt>  <tt class="py-line">        <tt class="py-string">''' The map containing the device's build properties: version.sdk, version.release '''</tt> </tt>
+<a name="L1139"></a><tt class="py-lineno">1139</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">prop</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt id="link-301" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-301', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">,</tt> <tt class="py-string">'version.release'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L1140"></a><tt class="py-lineno">1140</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L1141"></a><tt class="py-lineno">1141</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1142"></a><tt class="py-lineno">1142</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-302" class="py-name"><a title="src.com.dtmilano.android.viewclient.USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES" class="py-name" href="#" onclick="return doclink('link-302', 'USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES', 'link-29');">USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1143"></a><tt class="py-lineno">1143</tt>  <tt class="py-line">                    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">getProperty</tt><tt class="py-op">(</tt><tt class="py-string">'build.'</tt> <tt class="py-op">+</tt> <tt class="py-name">prop</tt><tt class="py-op">)</tt> </tt>
+<a name="L1144"></a><tt class="py-lineno">1144</tt>  <tt class="py-line">                <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1145"></a><tt class="py-lineno">1145</tt>  <tt class="py-line">                    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">shell</tt><tt class="py-op">(</tt><tt class="py-string">'getprop ro.build.'</tt> <tt class="py-op">+</tt> <tt class="py-name">prop</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
+<a name="L1146"></a><tt class="py-lineno">1146</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L1147"></a><tt class="py-lineno">1147</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-303" class="py-name"><a title="src.com.dtmilano.android.viewclient.WARNINGS" class="py-name" href="#" onclick="return doclink('link-303', 'WARNINGS', 'link-24');">WARNINGS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1148"></a><tt class="py-lineno">1148</tt>  <tt class="py-line">                    <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Couldn't determine build %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">prop</tt><tt class="py-op">)</tt> </tt>
+<a name="L1149"></a><tt class="py-lineno">1149</tt>  <tt class="py-line">                 </tt>
+<a name="L1150"></a><tt class="py-lineno">1150</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">prop</tt> <tt class="py-op">==</tt> <tt id="link-304" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-304', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1151"></a><tt class="py-lineno">1151</tt>  <tt class="py-line">                <tt class="py-comment"># we expect it to be an int</tt> </tt>
+<a name="L1152"></a><tt class="py-lineno">1152</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-keyword">else</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L1153"></a><tt class="py-lineno">1153</tt>  <tt class="py-line"> </tt>
+<a name="L1154"></a><tt class="py-lineno">1154</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ro</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1155"></a><tt class="py-lineno">1155</tt>  <tt class="py-line">        <tt class="py-string">''' The map containing the device's ro properties: secure, debuggable '''</tt> </tt>
+<a name="L1156"></a><tt class="py-lineno">1156</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">prop</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt class="py-string">'secure'</tt><tt class="py-op">,</tt> <tt class="py-string">'debuggable'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L1157"></a><tt class="py-lineno">1157</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1158"></a><tt class="py-lineno">1158</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ro</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">shell</tt><tt class="py-op">(</tt><tt class="py-string">'getprop ro.'</tt> <tt class="py-op">+</tt> <tt class="py-name">prop</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
+<a name="L1159"></a><tt class="py-lineno">1159</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L1160"></a><tt class="py-lineno">1160</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-305" class="py-name"><a title="src.com.dtmilano.android.viewclient.WARNINGS" class="py-name" href="#" onclick="return doclink('link-305', 'WARNINGS', 'link-24');">WARNINGS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1161"></a><tt class="py-lineno">1161</tt>  <tt class="py-line">                    <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Couldn't determine ro %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">prop</tt><tt class="py-op">)</tt> </tt>
+<a name="L1162"></a><tt class="py-lineno">1162</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ro</tt><tt class="py-op">[</tt><tt class="py-name">prop</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'UNKNOWN'</tt> </tt>
+<a name="L1163"></a><tt class="py-lineno">1163</tt>  <tt class="py-line"> </tt>
+<a name="L1164"></a><tt class="py-lineno">1164</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">forceViewServerUse</tt> <tt class="py-op">=</tt> <tt class="py-name">forceviewserveruse</tt> </tt>
+<a name="L1165"></a><tt class="py-lineno">1165</tt>  <tt class="py-line">        <tt class="py-string">''' Force the use of ViewServer even if the conditions to use UiAutomator are satisfied '''</tt> </tt>
+<a name="L1166"></a><tt class="py-lineno">1166</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-306" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-306', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">forceviewserveruse</tt> <tt class="py-comment"># jelly bean 4.1 &amp; 4.2</tt> </tt>
+<a name="L1167"></a><tt class="py-lineno">1167</tt>  <tt class="py-line">        <tt class="py-string">''' If UIAutomator is supported by the device it will be used '''</tt> </tt>
+<a name="L1168"></a><tt class="py-lineno">1168</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ignoreUiAutomatorKilled</tt> <tt class="py-op">=</tt> <tt class="py-name">ignoreuiautomatorkilled</tt> </tt>
+<a name="L1169"></a><tt class="py-lineno">1169</tt>  <tt class="py-line">        <tt class="py-string">''' On some devices (i.e. Nexus 7 running 4.2.2) uiautomator is killed just after generating</tt> </tt>
+<a name="L1170"></a><tt class="py-lineno">1170</tt>  <tt class="py-line"><tt class="py-string">        the dump file. In many cases the file is already complete so we can ask to ignore the 'Killed'</tt> </tt>
+<a name="L1171"></a><tt class="py-lineno">1171</tt>  <tt class="py-line"><tt class="py-string">        message by setting L{ignoreuiautomatorkilled} to C{True}.</tt> </tt>
+<a name="L1172"></a><tt class="py-lineno">1172</tt>  <tt class="py-line"><tt class="py-string">        </tt> </tt>
+<a name="L1173"></a><tt class="py-lineno">1173</tt>  <tt class="py-line"><tt class="py-string">        Changes in 2.3.21 that uses C{/dev/tty} instead of a file may have turned this variable</tt> </tt>
+<a name="L1174"></a><tt class="py-lineno">1174</tt>  <tt class="py-line"><tt class="py-string">        unnnecessary, however it has been kept for backward compatibility.</tt> </tt>
+<a name="L1175"></a><tt class="py-lineno">1175</tt>  <tt class="py-line"><tt class="py-string">        '''</tt> </tt>
+<a name="L1176"></a><tt class="py-lineno">1176</tt>  <tt class="py-line"> </tt>
+<a name="L1177"></a><tt class="py-lineno">1177</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L1178"></a><tt class="py-lineno">1178</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-307" class="py-name"><a title="src.com.dtmilano.android.viewclient.TEXT_PROPERTY_UI_AUTOMATOR" class="py-name" href="#" onclick="return doclink('link-307', 'TEXT_PROPERTY_UI_AUTOMATOR', 'link-36');">TEXT_PROPERTY_UI_AUTOMATOR</a></tt> </tt>
+<a name="L1179"></a><tt class="py-lineno">1179</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1180"></a><tt class="py-lineno">1180</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-308" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-308', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">10</tt><tt class="py-op">:</tt> </tt>
+<a name="L1181"></a><tt class="py-lineno">1181</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-309" class="py-name"><a title="src.com.dtmilano.android.viewclient.TEXT_PROPERTY_API_10" class="py-name" href="#" onclick="return doclink('link-309', 'TEXT_PROPERTY_API_10', 'link-35');">TEXT_PROPERTY_API_10</a></tt> </tt>
+<a name="L1182"></a><tt class="py-lineno">1182</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1183"></a><tt class="py-lineno">1183</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt> <tt class="py-op">=</tt> <tt id="link-310" class="py-name"><a title="src.com.dtmilano.android.viewclient.TEXT_PROPERTY" class="py-name" href="#" onclick="return doclink('link-310', 'TEXT_PROPERTY', 'link-34');">TEXT_PROPERTY</a></tt> </tt>
+<a name="L1184"></a><tt class="py-lineno">1184</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">startviewserver</tt><tt class="py-op">:</tt> </tt>
+<a name="L1185"></a><tt class="py-lineno">1185</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-311" class="py-name" targets="Method src.com.dtmilano.android.viewclient.ViewClient.serviceResponse()=src.com.dtmilano.android.viewclient.ViewClient-class.html#serviceResponse"><a title="src.com.dtmilano.android.viewclient.ViewClient.serviceResponse" class="py-name" href="#" onclick="return doclink('link-311', 'serviceResponse', 'link-311');">serviceResponse</a></tt><tt class="py-op">(</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">shell</tt><tt class="py-op">(</tt><tt class="py-string">'service call window 3'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1186"></a><tt class="py-lineno">1186</tt>  <tt class="py-line">                    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1187"></a><tt class="py-lineno">1187</tt>  <tt class="py-line">                        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-312" class="py-name" targets="Method src.com.dtmilano.android.viewclient.ViewClient.assertServiceResponse()=src.com.dtmilano.android.viewclient.ViewClient-class.html#assertServiceResponse"><a title="src.com.dtmilano.android.viewclient.ViewClient.assertServiceResponse" class="py-name" href="#" onclick="return doclink('link-312', 'assertServiceResponse', 'link-312');">assertServiceResponse</a></tt><tt class="py-op">(</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">shell</tt><tt class="py-op">(</tt><tt class="py-string">'service call window 1 i32 %d'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L1188"></a><tt class="py-lineno">1188</tt>  <tt class="py-line">                                                        <tt class="py-name">remoteport</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1189"></a><tt class="py-lineno">1189</tt>  <tt class="py-line">                    <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L1190"></a><tt class="py-lineno">1190</tt>  <tt class="py-line">                        <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-string">'Cannot start View server.\n'</tt> \ </tt>
+<a name="L1191"></a><tt class="py-lineno">1191</tt>  <tt class="py-line">                            <tt class="py-string">'This only works on emulator and devices running developer versions.\n'</tt> \ </tt>
+<a name="L1192"></a><tt class="py-lineno">1192</tt>  <tt class="py-line">                            <tt class="py-string">'Does hierarchyviewer work on your device?\n'</tt> \ </tt>
+<a name="L1193"></a><tt class="py-lineno">1193</tt>  <tt class="py-line">                            <tt class="py-string">'See https://github.com/dtmilano/AndroidViewClient/wiki/Secure-mode\n\n'</tt> \ </tt>
+<a name="L1194"></a><tt class="py-lineno">1194</tt>  <tt class="py-line">                            <tt class="py-string">'Device properties:\n'</tt> \ </tt>
+<a name="L1195"></a><tt class="py-lineno">1195</tt>  <tt class="py-line">                            <tt class="py-string">'    ro.secure=%s\n'</tt> \ </tt>
+<a name="L1196"></a><tt class="py-lineno">1196</tt>  <tt class="py-line">                            <tt class="py-string">'    ro.debuggable=%s\n'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ro</tt><tt class="py-op">[</tt><tt class="py-string">'secure'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ro</tt><tt class="py-op">[</tt><tt class="py-string">'debuggable'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L1197"></a><tt class="py-lineno">1197</tt>  <tt class="py-line">                        <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt>
+<a name="L1198"></a><tt class="py-lineno">1198</tt>  <tt class="py-line"> </tt>
+<a name="L1199"></a><tt class="py-lineno">1199</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">localPort</tt> <tt class="py-op">=</tt> <tt class="py-name">localport</tt> </tt>
+<a name="L1200"></a><tt class="py-lineno">1200</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">remotePort</tt> <tt class="py-op">=</tt> <tt class="py-name">remoteport</tt> </tt>
+<a name="L1201"></a><tt class="py-lineno">1201</tt>  <tt class="py-line">            <tt class="py-comment"># FIXME: it seems there's no way of obtaining the serialno from the MonkeyDevice</tt> </tt>
+<a name="L1202"></a><tt class="py-lineno">1202</tt>  <tt class="py-line">            <tt class="py-name">subprocess</tt><tt class="py-op">.</tt><tt class="py-name">check_call</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">adb</tt><tt class="py-op">,</tt> <tt class="py-string">'-s'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt><tt class="py-op">,</tt> <tt class="py-string">'forward'</tt><tt class="py-op">,</tt> <tt class="py-string">'tcp:%d'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">localPort</tt><tt class="py-op">,</tt> </tt>
+<a name="L1203"></a><tt class="py-lineno">1203</tt>  <tt class="py-line">                                    <tt class="py-string">'tcp:%d'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">remotePort</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L1204"></a><tt class="py-lineno">1204</tt>  <tt class="py-line"> </tt>
+<a name="L1205"></a><tt class="py-lineno">1205</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1206"></a><tt class="py-lineno">1206</tt>  <tt class="py-line">        <tt class="py-string">''' The list of windows as obtained by L{ViewClient.list()} '''</tt> </tt>
+<a name="L1207"></a><tt class="py-lineno">1207</tt>  <tt class="py-line">         </tt>
+<a name="L1208"></a><tt class="py-lineno">1208</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">autodump</tt><tt class="py-op">:</tt> </tt>
+<a name="L1209"></a><tt class="py-lineno">1209</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-313" class="py-name" targets="Method src.com.dtmilano.android.viewclient.ViewClient.dump()=src.com.dtmilano.android.viewclient.ViewClient-class.html#dump"><a title="src.com.dtmilano.android.viewclient.ViewClient.dump" class="py-name" href="#" onclick="return doclink('link-313', 'dump', 'link-313');">dump</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1210"></a><tt class="py-lineno">1210</tt>  <tt class="py-line">     </tt>
+<a name="ViewClient.__del__"></a><div id="ViewClient.__del__-def"><a name="L1211"></a><tt class="py-lineno">1211</tt> <a class="py-toggle" href="#" id="ViewClient.__del__-toggle" onclick="return toggle('ViewClient.__del__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__del__">__del__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__del__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__del__-expanded"><a name="L1212"></a><tt class="py-lineno">1212</tt>  <tt class="py-line">        <tt class="py-comment"># should clean up some things</tt> </tt>
+<a name="L1213"></a><tt class="py-lineno">1213</tt>  <tt class="py-line">        <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L1214"></a><tt class="py-lineno">1214</tt>  <tt class="py-line">     </tt>
+<a name="L1215"></a><tt class="py-lineno">1215</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.__obtainAdbPath"></a><div id="ViewClient.__obtainAdbPath-def"><a name="L1216"></a><tt class="py-lineno">1216</tt> <a class="py-toggle" href="#" id="ViewClient.__obtainAdbPath-toggle" onclick="return toggle('ViewClient.__obtainAdbPath');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__obtainAdbPath">__obtainAdbPath</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__obtainAdbPath-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__obtainAdbPath-expanded"><a name="L1217"></a><tt class="py-lineno">1217</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1218"></a><tt class="py-lineno">1218</tt>  <tt class="py-line"><tt class="py-docstring">        Obtains the ADB path attempting know locations for different OSs</tt> </tt>
+<a name="L1219"></a><tt class="py-lineno">1219</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1220"></a><tt class="py-lineno">1220</tt>  <tt class="py-line">         </tt>
+<a name="L1221"></a><tt class="py-lineno">1221</tt>  <tt class="py-line">        <tt class="py-name">osName</tt> <tt class="py-op">=</tt> <tt class="py-name">java</tt><tt class="py-op">.</tt><tt class="py-name">lang</tt><tt class="py-op">.</tt><tt class="py-name">System</tt><tt class="py-op">.</tt><tt class="py-name">getProperty</tt><tt class="py-op">(</tt><tt class="py-string">'os.name'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1222"></a><tt class="py-lineno">1222</tt>  <tt class="py-line">        <tt class="py-name">isWindows</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L1223"></a><tt class="py-lineno">1223</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">osName</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'Windows'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1224"></a><tt class="py-lineno">1224</tt>  <tt class="py-line">            <tt class="py-name">adb</tt> <tt class="py-op">=</tt> <tt class="py-string">'adb.exe'</tt> </tt>
+<a name="L1225"></a><tt class="py-lineno">1225</tt>  <tt class="py-line">            <tt class="py-name">isWindows</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L1226"></a><tt class="py-lineno">1226</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1227"></a><tt class="py-lineno">1227</tt>  <tt class="py-line">            <tt class="py-name">adb</tt> <tt class="py-op">=</tt> <tt class="py-string">'adb'</tt> </tt>
+<a name="L1228"></a><tt class="py-lineno">1228</tt>  <tt class="py-line"> </tt>
+<a name="L1229"></a><tt class="py-lineno">1229</tt>  <tt class="py-line">        <tt class="py-name">ANDROID_HOME</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">[</tt><tt class="py-string">'ANDROID_HOME'</tt><tt class="py-op">]</tt> <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'ANDROID_HOME'</tt><tt class="py-op">)</tt> <tt class="py-keyword">else</tt> <tt class="py-string">'/opt/android-sdk'</tt> </tt>
+<a name="L1230"></a><tt class="py-lineno">1230</tt>  <tt class="py-line">        <tt class="py-name">HOME</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">[</tt><tt class="py-string">'HOME'</tt><tt class="py-op">]</tt> <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'HOME'</tt><tt class="py-op">)</tt> <tt class="py-keyword">else</tt> <tt class="py-string">''</tt> </tt>
+<a name="L1231"></a><tt class="py-lineno">1231</tt>  <tt class="py-line"> </tt>
+<a name="L1232"></a><tt class="py-lineno">1232</tt>  <tt class="py-line">        <tt class="py-name">possibleChoices</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">ANDROID_HOME</tt><tt class="py-op">,</tt> <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt class="py-name">adb</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L1233"></a><tt class="py-lineno">1233</tt>  <tt class="py-line">                           <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">HOME</tt><tt class="py-op">,</tt>  <tt class="py-string">"android"</tt><tt class="py-op">,</tt> <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt class="py-name">adb</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L1234"></a><tt class="py-lineno">1234</tt>  <tt class="py-line">                           <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">HOME</tt><tt class="py-op">,</tt>  <tt class="py-string">"android-sdk"</tt><tt class="py-op">,</tt> <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt class="py-name">adb</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L1235"></a><tt class="py-lineno">1235</tt>  <tt class="py-line">                           <tt class="py-name">adb</tt><tt class="py-op">,</tt> </tt>
+<a name="L1236"></a><tt class="py-lineno">1236</tt>  <tt class="py-line">                           <tt class="py-op">]</tt> </tt>
+<a name="L1237"></a><tt class="py-lineno">1237</tt>  <tt class="py-line"> </tt>
+<a name="L1238"></a><tt class="py-lineno">1238</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">osName</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'Windows'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1239"></a><tt class="py-lineno">1239</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-string">"""C:\Program Files\Android\android-sdk\platform-tools"""</tt><tt class="py-op">,</tt> <tt class="py-name">adb</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1240"></a><tt class="py-lineno">1240</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-string">"""C:\Program Files (x86)\Android\android-sdk\platform-tools"""</tt><tt class="py-op">,</tt> <tt class="py-name">adb</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1241"></a><tt class="py-lineno">1241</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">osName</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'Linux'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1242"></a><tt class="py-lineno">1242</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-string">"opt"</tt><tt class="py-op">,</tt> <tt class="py-string">"android-sdk-linux"</tt><tt class="py-op">,</tt>  <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt class="py-name">adb</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1243"></a><tt class="py-lineno">1243</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">HOME</tt><tt class="py-op">,</tt>  <tt class="py-string">"opt"</tt><tt class="py-op">,</tt> <tt class="py-string">"android-sdk-linux"</tt><tt class="py-op">,</tt>  <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt class="py-name">adb</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1244"></a><tt class="py-lineno">1244</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">HOME</tt><tt class="py-op">,</tt>  <tt class="py-string">"android-sdk-linux"</tt><tt class="py-op">,</tt>  <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt class="py-name">adb</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1245"></a><tt class="py-lineno">1245</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">osName</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'Mac'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1246"></a><tt class="py-lineno">1246</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-string">"opt"</tt><tt class="py-op">,</tt> <tt class="py-string">"android-sdk-mac_x86"</tt><tt class="py-op">,</tt>  <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt class="py-name">adb</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1247"></a><tt class="py-lineno">1247</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">HOME</tt><tt class="py-op">,</tt>  <tt class="py-string">"opt"</tt><tt class="py-op">,</tt> <tt class="py-string">"android-sdk-mac"</tt><tt class="py-op">,</tt> <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt class="py-name">adb</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1248"></a><tt class="py-lineno">1248</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">HOME</tt><tt class="py-op">,</tt>  <tt class="py-string">"android-sdk-mac"</tt><tt class="py-op">,</tt> <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt class="py-name">adb</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1249"></a><tt class="py-lineno">1249</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">HOME</tt><tt class="py-op">,</tt>  <tt class="py-string">"opt"</tt><tt class="py-op">,</tt> <tt class="py-string">"android-sdk-mac_x86"</tt><tt class="py-op">,</tt>  <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt class="py-name">adb</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1250"></a><tt class="py-lineno">1250</tt>  <tt class="py-line">            <tt class="py-name">possibleChoices</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">HOME</tt><tt class="py-op">,</tt>  <tt class="py-string">"android-sdk-mac_x86"</tt><tt class="py-op">,</tt>  <tt class="py-string">'platform-tools'</tt><tt class="py-op">,</tt> <tt class="py-name">adb</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1251"></a><tt class="py-lineno">1251</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1252"></a><tt class="py-lineno">1252</tt>  <tt class="py-line">            <tt class="py-comment"># Unsupported OS</tt> </tt>
+<a name="L1253"></a><tt class="py-lineno">1253</tt>  <tt class="py-line">            <tt class="py-keyword">pass</tt> </tt>
+<a name="L1254"></a><tt class="py-lineno">1254</tt>  <tt class="py-line"> </tt>
+<a name="L1255"></a><tt class="py-lineno">1255</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">exeFile</tt> <tt class="py-keyword">in</tt> <tt class="py-name">possibleChoices</tt><tt class="py-op">:</tt> </tt>
+<a name="L1256"></a><tt class="py-lineno">1256</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">access</tt><tt class="py-op">(</tt><tt class="py-name">exeFile</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">X_OK</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1257"></a><tt class="py-lineno">1257</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">exeFile</tt> </tt>
+<a name="L1258"></a><tt class="py-lineno">1258</tt>  <tt class="py-line"> </tt>
+<a name="L1259"></a><tt class="py-lineno">1259</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">path</tt> <tt class="py-keyword">in</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">[</tt><tt class="py-string">"PATH"</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">pathsep</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1260"></a><tt class="py-lineno">1260</tt>  <tt class="py-line">            <tt class="py-name">exeFile</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">path</tt><tt class="py-op">,</tt> <tt class="py-name">adb</tt><tt class="py-op">)</tt> </tt>
+<a name="L1261"></a><tt class="py-lineno">1261</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">exeFile</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">access</tt><tt class="py-op">(</tt><tt class="py-name">exeFile</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">X_OK</tt> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isWindows</tt> <tt class="py-keyword">else</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">F_OK</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1262"></a><tt class="py-lineno">1262</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">exeFile</tt> </tt>
+<a name="L1263"></a><tt class="py-lineno">1263</tt>  <tt class="py-line"> </tt>
+<a name="L1264"></a><tt class="py-lineno">1264</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">'adb="%s" is not executable. Did you forget to set ANDROID_HOME in the environment?'</tt> <tt class="py-op">%</tt> <tt class="py-name">adb</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1265"></a><tt class="py-lineno">1265</tt>  <tt class="py-line"> </tt>
+<a name="L1266"></a><tt class="py-lineno">1266</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.__mapSerialNo"></a><div id="ViewClient.__mapSerialNo-def"><a name="L1267"></a><tt class="py-lineno">1267</tt> <a class="py-toggle" href="#" id="ViewClient.__mapSerialNo-toggle" onclick="return toggle('ViewClient.__mapSerialNo');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__mapSerialNo">__mapSerialNo</a><tt class="py-op">(</tt><tt class="py-param">serialno</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__mapSerialNo-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__mapSerialNo-expanded"><a name="L1268"></a><tt class="py-lineno">1268</tt>  <tt class="py-line">        <tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">serialno</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1269"></a><tt class="py-lineno">1269</tt>  <tt class="py-line">        <tt class="py-comment">#ipRE = re.compile('^\d+\.\d+.\d+.\d+$')</tt> </tt>
+<a name="L1270"></a><tt class="py-lineno">1270</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-314" class="py-name"><a title="src.com.dtmilano.android.viewclient.IP_RE" class="py-name" href="#" onclick="return doclink('link-314', 'IP_RE', 'link-51');">IP_RE</a></tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">serialno</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1271"></a><tt class="py-lineno">1271</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-315" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_DEVICE" class="py-name" href="#" onclick="return doclink('link-315', 'DEBUG_DEVICE', 'link-2');">DEBUG_DEVICE</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ViewClient: adding default port to serialno"</tt><tt class="py-op">,</tt> <tt class="py-name">serialno</tt><tt class="py-op">,</tt> <tt id="link-316" class="py-name"><a title="src.com.dtmilano.android.viewclient.ADB_DEFAULT_PORT" class="py-name" href="#" onclick="return doclink('link-316', 'ADB_DEFAULT_PORT', 'link-27');">ADB_DEFAULT_PORT</a></tt> </tt>
+<a name="L1272"></a><tt class="py-lineno">1272</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">serialno</tt> <tt class="py-op">+</tt> <tt class="py-string">':%d'</tt> <tt class="py-op">%</tt> <tt id="link-317" class="py-name"><a title="src.com.dtmilano.android.viewclient.ADB_DEFAULT_PORT" class="py-name" href="#" onclick="return doclink('link-317', 'ADB_DEFAULT_PORT', 'link-27');">ADB_DEFAULT_PORT</a></tt> </tt>
+<a name="L1273"></a><tt class="py-lineno">1273</tt>  <tt class="py-line">         </tt>
+<a name="L1274"></a><tt class="py-lineno">1274</tt>  <tt class="py-line">        <tt class="py-name">ipPortRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'^\d+\.\d+.\d+.\d+:\d+$'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1275"></a><tt class="py-lineno">1275</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">ipPortRE</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">serialno</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1276"></a><tt class="py-lineno">1276</tt>  <tt class="py-line">            <tt class="py-comment"># nothing to map</tt> </tt>
+<a name="L1277"></a><tt class="py-lineno">1277</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">serialno</tt> </tt>
+<a name="L1278"></a><tt class="py-lineno">1278</tt>  <tt class="py-line">         </tt>
+<a name="L1279"></a><tt class="py-lineno">1279</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-string">"[.*()+]"</tt><tt class="py-op">,</tt> <tt class="py-name">serialno</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1280"></a><tt class="py-lineno">1280</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"Regular expression not supported as serialno in ViewClient"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1281"></a><tt class="py-lineno">1281</tt>  <tt class="py-line"> </tt>
+<a name="L1282"></a><tt class="py-lineno">1282</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">serialno</tt> </tt>
+</div><a name="L1283"></a><tt class="py-lineno">1283</tt>  <tt class="py-line">     </tt>
+<a name="L1284"></a><tt class="py-lineno">1284</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.__obtainDeviceSerialNumber"></a><div id="ViewClient.__obtainDeviceSerialNumber-def"><a name="L1285"></a><tt class="py-lineno">1285</tt> <a class="py-toggle" href="#" id="ViewClient.__obtainDeviceSerialNumber-toggle" onclick="return toggle('ViewClient.__obtainDeviceSerialNumber');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__obtainDeviceSerialNumber">__obtainDeviceSerialNumber</a><tt class="py-op">(</tt><tt class="py-param">device</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__obtainDeviceSerialNumber-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__obtainDeviceSerialNumber-expanded"><a name="L1286"></a><tt class="py-lineno">1286</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-318" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_DEVICE" class="py-name" href="#" onclick="return doclink('link-318', 'DEBUG_DEVICE', 'link-2');">DEBUG_DEVICE</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ViewClient: obtaining serial number for connected device"</tt> </tt>
+<a name="L1287"></a><tt class="py-lineno">1287</tt>  <tt class="py-line">        <tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">getProperty</tt><tt class="py-op">(</tt><tt class="py-string">'ro.serialno'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1288"></a><tt class="py-lineno">1288</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">serialno</tt><tt class="py-op">:</tt> </tt>
+<a name="L1289"></a><tt class="py-lineno">1289</tt>  <tt class="py-line">            <tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">shell</tt><tt class="py-op">(</tt><tt class="py-string">'getprop ro.serialno'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1290"></a><tt class="py-lineno">1290</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">serialno</tt><tt class="py-op">:</tt> </tt>
+<a name="L1291"></a><tt class="py-lineno">1291</tt>  <tt class="py-line">                <tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">serialno</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
+<a name="L1292"></a><tt class="py-lineno">1292</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">serialno</tt><tt class="py-op">:</tt> </tt>
+<a name="L1293"></a><tt class="py-lineno">1293</tt>  <tt class="py-line">            <tt class="py-name">qemu</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">shell</tt><tt class="py-op">(</tt><tt class="py-string">'getprop ro.kernel.qemu'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1294"></a><tt class="py-lineno">1294</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">qemu</tt><tt class="py-op">:</tt> </tt>
+<a name="L1295"></a><tt class="py-lineno">1295</tt>  <tt class="py-line">                <tt class="py-name">qemu</tt> <tt class="py-op">=</tt> <tt class="py-name">qemu</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
+<a name="L1296"></a><tt class="py-lineno">1296</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">qemu</tt> <tt class="py-keyword">and</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">qemu</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L1297"></a><tt class="py-lineno">1297</tt>  <tt class="py-line">                    <tt class="py-comment"># FIXME !!!!!</tt> </tt>
+<a name="L1298"></a><tt class="py-lineno">1298</tt>  <tt class="py-line">                    <tt class="py-comment"># this must be calculated from somewhere, though using a fixed serialno for now</tt> </tt>
+<a name="L1299"></a><tt class="py-lineno">1299</tt>  <tt class="py-line">                    <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Running on emulator but no serial number was specified then 'emulator-5554' is used"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1300"></a><tt class="py-lineno">1300</tt>  <tt class="py-line">                    <tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-string">'emulator-5554'</tt> </tt>
+<a name="L1301"></a><tt class="py-lineno">1301</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">serialno</tt><tt class="py-op">:</tt> </tt>
+<a name="L1302"></a><tt class="py-lineno">1302</tt>  <tt class="py-line">            <tt class="py-comment"># If there's only one device connected get its serialno</tt> </tt>
+<a name="L1303"></a><tt class="py-lineno">1303</tt>  <tt class="py-line">            <tt class="py-name">adb</tt> <tt class="py-op">=</tt> <tt id="link-319" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-319', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-320" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.__obtainAdbPath" class="py-name" href="#" onclick="return doclink('link-320', '__obtainAdbPath', 'link-298');">__obtainAdbPath</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1304"></a><tt class="py-lineno">1304</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-321" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_DEVICE" class="py-name" href="#" onclick="return doclink('link-321', 'DEBUG_DEVICE', 'link-2');">DEBUG_DEVICE</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    using adb=%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">adb</tt> </tt>
+<a name="L1305"></a><tt class="py-lineno">1305</tt>  <tt class="py-line">            <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">subprocess</tt><tt class="py-op">.</tt><tt class="py-name">Popen</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">adb</tt><tt class="py-op">,</tt> <tt class="py-string">'get-serialno'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">stdout</tt><tt class="py-op">=</tt><tt class="py-name">subprocess</tt><tt class="py-op">.</tt><tt class="py-name">PIPE</tt><tt class="py-op">,</tt> <tt class="py-name">stderr</tt><tt class="py-op">=</tt><tt class="py-name">subprocess</tt><tt class="py-op">.</tt><tt class="py-name">PIPE</tt><tt class="py-op">,</tt> <tt class="py-name">env</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">communicate</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L1306"></a><tt class="py-lineno">1306</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">s</tt> <tt class="py-op">!=</tt> <tt class="py-string">'unknown'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1307"></a><tt class="py-lineno">1307</tt>  <tt class="py-line">                <tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> </tt>
+<a name="L1308"></a><tt class="py-lineno">1308</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-322" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_DEVICE" class="py-name" href="#" onclick="return doclink('link-322', 'DEBUG_DEVICE', 'link-2');">DEBUG_DEVICE</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    serialno=%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">serialno</tt> </tt>
+<a name="L1309"></a><tt class="py-lineno">1309</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">serialno</tt><tt class="py-op">:</tt> </tt>
+<a name="L1310"></a><tt class="py-lineno">1310</tt>  <tt class="py-line">            <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Couldn't obtain the serialno of the connected device"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1311"></a><tt class="py-lineno">1311</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">serialno</tt> </tt>
+</div><a name="L1312"></a><tt class="py-lineno">1312</tt>  <tt class="py-line"> </tt>
+<a name="L1313"></a><tt class="py-lineno">1313</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.setAlarm"></a><div id="ViewClient.setAlarm-def"><a name="L1314"></a><tt class="py-lineno">1314</tt> <a class="py-toggle" href="#" id="ViewClient.setAlarm-toggle" onclick="return toggle('ViewClient.setAlarm');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#setAlarm">setAlarm</a><tt class="py-op">(</tt><tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.setAlarm-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.setAlarm-expanded"><a name="L1315"></a><tt class="py-lineno">1315</tt>  <tt class="py-line">        <tt class="py-name">osName</tt> <tt class="py-op">=</tt> <tt class="py-name">java</tt><tt class="py-op">.</tt><tt class="py-name">lang</tt><tt class="py-op">.</tt><tt class="py-name">System</tt><tt class="py-op">.</tt><tt class="py-name">getProperty</tt><tt class="py-op">(</tt><tt class="py-string">'os.name'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1316"></a><tt class="py-lineno">1316</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">osName</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'Windows'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-comment"># alarm is not implemented in Windows</tt> </tt>
+<a name="L1317"></a><tt class="py-lineno">1317</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> </tt>
+<a name="L1318"></a><tt class="py-lineno">1318</tt>  <tt class="py-line">        <tt class="py-name">signal</tt><tt class="py-op">.</tt><tt class="py-name">alarm</tt><tt class="py-op">(</tt><tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1319"></a><tt class="py-lineno">1319</tt>  <tt class="py-line"> </tt>
+<a name="L1320"></a><tt class="py-lineno">1320</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.connectToDeviceOrExit"></a><div id="ViewClient.connectToDeviceOrExit-def"><a name="L1321"></a><tt class="py-lineno">1321</tt> <a class="py-toggle" href="#" id="ViewClient.connectToDeviceOrExit-toggle" onclick="return toggle('ViewClient.connectToDeviceOrExit');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#connectToDeviceOrExit">connectToDeviceOrExit</a><tt class="py-op">(</tt><tt class="py-param">timeout</tt><tt class="py-op">=</tt><tt class="py-number">60</tt><tt class="py-op">,</tt> <tt class="py-param">verbose</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-param">ignoresecuredevice</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-param">serialno</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.connectToDeviceOrExit-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.connectToDeviceOrExit-expanded"><a name="L1322"></a><tt class="py-lineno">1322</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1323"></a><tt class="py-lineno">1323</tt>  <tt class="py-line"><tt class="py-docstring">        Connects to a device which serial number is obtained from the script arguments if available</tt> </tt>
+<a name="L1324"></a><tt class="py-lineno">1324</tt>  <tt class="py-line"><tt class="py-docstring">        or using the default regex C{.*}.</tt> </tt>
+<a name="L1325"></a><tt class="py-lineno">1325</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1326"></a><tt class="py-lineno">1326</tt>  <tt class="py-line"><tt class="py-docstring">        If the connection is not successful the script exits.</tt> </tt>
+<a name="L1327"></a><tt class="py-lineno">1327</tt>  <tt class="py-line"><tt class="py-docstring">        L{MonkeyRunner.waitForConnection()} returns a L{MonkeyDevice} even if the connection failed.</tt> </tt>
+<a name="L1328"></a><tt class="py-lineno">1328</tt>  <tt class="py-line"><tt class="py-docstring">        Then, to detect this situation, C{device.wake()} is attempted and if it fails then it is</tt> </tt>
+<a name="L1329"></a><tt class="py-lineno">1329</tt>  <tt class="py-line"><tt class="py-docstring">        assumed the previous connection failed.</tt> </tt>
+<a name="L1330"></a><tt class="py-lineno">1330</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1331"></a><tt class="py-lineno">1331</tt>  <tt class="py-line"><tt class="py-docstring">        @type timeout: int</tt> </tt>
+<a name="L1332"></a><tt class="py-lineno">1332</tt>  <tt class="py-line"><tt class="py-docstring">        @param timeout: timeout for the connection</tt> </tt>
+<a name="L1333"></a><tt class="py-lineno">1333</tt>  <tt class="py-line"><tt class="py-docstring">        @type verbose: bool</tt> </tt>
+<a name="L1334"></a><tt class="py-lineno">1334</tt>  <tt class="py-line"><tt class="py-docstring">        @param verbose: Verbose output</tt> </tt>
+<a name="L1335"></a><tt class="py-lineno">1335</tt>  <tt class="py-line"><tt class="py-docstring">        @type ignoresecuredevice: bool</tt> </tt>
+<a name="L1336"></a><tt class="py-lineno">1336</tt>  <tt class="py-line"><tt class="py-docstring">        @param ignoresecuredevice: Ignores the check for a secure device</tt> </tt>
+<a name="L1337"></a><tt class="py-lineno">1337</tt>  <tt class="py-line"><tt class="py-docstring">        @type serialno: str</tt> </tt>
+<a name="L1338"></a><tt class="py-lineno">1338</tt>  <tt class="py-line"><tt class="py-docstring">        @param serialno: The device or emulator serial number </tt> </tt>
+<a name="L1339"></a><tt class="py-lineno">1339</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1340"></a><tt class="py-lineno">1340</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the device and serialno used for the connection</tt> </tt>
+<a name="L1341"></a><tt class="py-lineno">1341</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1342"></a><tt class="py-lineno">1342</tt>  <tt class="py-line">         </tt>
+<a name="L1343"></a><tt class="py-lineno">1343</tt>  <tt class="py-line">        <tt class="py-name">progname</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">basename</tt><tt class="py-op">(</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">argv</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L1344"></a><tt class="py-lineno">1344</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">serialno</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1345"></a><tt class="py-lineno">1345</tt>  <tt class="py-line">            <tt class="py-comment"># eat all the extra options the invoking script may have added</tt> </tt>
+<a name="L1346"></a><tt class="py-lineno">1346</tt>  <tt class="py-line">            <tt class="py-name">args</tt> <tt class="py-op">=</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">argv</tt> </tt>
+<a name="L1347"></a><tt class="py-lineno">1347</tt>  <tt class="py-line">            <tt class="py-keyword">while</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">args</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">1</tt> <tt class="py-keyword">and</tt> <tt class="py-name">args</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'-'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1348"></a><tt class="py-lineno">1348</tt>  <tt class="py-line">                <tt class="py-name">args</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L1349"></a><tt class="py-lineno">1349</tt>  <tt class="py-line">            <tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt class="py-name">args</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">args</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">1</tt> <tt class="py-keyword">else</tt> \ </tt>
+<a name="L1350"></a><tt class="py-lineno">1350</tt>  <tt class="py-line">                    <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">[</tt><tt class="py-string">'ANDROID_SERIAL'</tt><tt class="py-op">]</tt> <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'ANDROID_SERIAL'</tt><tt class="py-op">)</tt> \ </tt>
+<a name="L1351"></a><tt class="py-lineno">1351</tt>  <tt class="py-line">                    <tt class="py-keyword">else</tt> <tt class="py-string">'.*'</tt> </tt>
+<a name="L1352"></a><tt class="py-lineno">1352</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-323" class="py-name"><a title="src.com.dtmilano.android.viewclient.IP_RE" class="py-name" href="#" onclick="return doclink('link-323', 'IP_RE', 'link-51');">IP_RE</a></tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">serialno</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1353"></a><tt class="py-lineno">1353</tt>  <tt class="py-line">            <tt class="py-comment"># If matches an IP address format and port was not specified add the default</tt> </tt>
+<a name="L1354"></a><tt class="py-lineno">1354</tt>  <tt class="py-line">            <tt class="py-name">serialno</tt> <tt class="py-op">+=</tt> <tt class="py-string">':%d'</tt> <tt class="py-op">%</tt> <tt id="link-324" class="py-name"><a title="src.com.dtmilano.android.viewclient.ADB_DEFAULT_PORT" class="py-name" href="#" onclick="return doclink('link-324', 'ADB_DEFAULT_PORT', 'link-27');">ADB_DEFAULT_PORT</a></tt> </tt>
+<a name="L1355"></a><tt class="py-lineno">1355</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">verbose</tt><tt class="py-op">:</tt> </tt>
+<a name="L1356"></a><tt class="py-lineno">1356</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">'Connecting to a device with serialno=%s with a timeout of %d secs...'</tt> <tt class="py-op">%</tt> \ </tt>
+<a name="L1357"></a><tt class="py-lineno">1357</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">serialno</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt>
+<a name="L1358"></a><tt class="py-lineno">1358</tt>  <tt class="py-line">        <tt class="py-comment"># Sometimes MonkeyRunner doesn't even timeout (i.e. two connections from same process), so let's</tt> </tt>
+<a name="L1359"></a><tt class="py-lineno">1359</tt>  <tt class="py-line">        <tt class="py-comment"># handle it here</tt> </tt>
+<a name="L1360"></a><tt class="py-lineno">1360</tt>  <tt class="py-line">        <tt id="link-325" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-325', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-326" class="py-name" targets="Static Method src.com.dtmilano.android.viewclient.ViewClient.setAlarm()=src.com.dtmilano.android.viewclient.ViewClient-class.html#setAlarm"><a title="src.com.dtmilano.android.viewclient.ViewClient.setAlarm" class="py-name" href="#" onclick="return doclink('link-326', 'setAlarm', 'link-326');">setAlarm</a></tt><tt class="py-op">(</tt><tt class="py-name">timeout</tt><tt class="py-op">+</tt><tt class="py-number">5</tt><tt class="py-op">)</tt> </tt>
+<a name="L1361"></a><tt class="py-lineno">1361</tt>  <tt class="py-line">        <tt class="py-name">device</tt> <tt class="py-op">=</tt> <tt class="py-name">MonkeyRunner</tt><tt class="py-op">.</tt><tt class="py-name">waitForConnection</tt><tt class="py-op">(</tt><tt class="py-name">timeout</tt><tt class="py-op">,</tt> <tt class="py-name">serialno</tt><tt class="py-op">)</tt> </tt>
+<a name="L1362"></a><tt class="py-lineno">1362</tt>  <tt class="py-line">        <tt id="link-327" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-327', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-328" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.setAlarm" class="py-name" href="#" onclick="return doclink('link-328', 'setAlarm', 'link-326');">setAlarm</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L1363"></a><tt class="py-lineno">1363</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1364"></a><tt class="py-lineno">1364</tt>  <tt class="py-line">            <tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">wake</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1365"></a><tt class="py-lineno">1365</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">java</tt><tt class="py-op">.</tt><tt class="py-name">lang</tt><tt class="py-op">.</tt><tt class="py-name">NullPointerException</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L1366"></a><tt class="py-lineno">1366</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"%s: ERROR: Couldn't connect to %s: %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">progname</tt><tt class="py-op">,</tt> <tt class="py-name">serialno</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
+<a name="L1367"></a><tt class="py-lineno">1367</tt>  <tt class="py-line">            <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">)</tt> </tt>
+<a name="L1368"></a><tt class="py-lineno">1368</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">verbose</tt><tt class="py-op">:</tt> </tt>
+<a name="L1369"></a><tt class="py-lineno">1369</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">'Connected to device with serialno=%s'</tt> <tt class="py-op">%</tt> <tt class="py-name">serialno</tt> </tt>
+<a name="L1370"></a><tt class="py-lineno">1370</tt>  <tt class="py-line">        <tt class="py-name">secure</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">getSystemProperty</tt><tt class="py-op">(</tt><tt class="py-string">'ro.secure'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1371"></a><tt class="py-lineno">1371</tt>  <tt class="py-line">        <tt class="py-name">debuggable</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">getSystemProperty</tt><tt class="py-op">(</tt><tt class="py-string">'ro.debuggable'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1372"></a><tt class="py-lineno">1372</tt>  <tt class="py-line">        <tt class="py-name">versionProperty</tt> <tt class="py-op">=</tt> <tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">getProperty</tt><tt class="py-op">(</tt><tt class="py-string">'build.'</tt> <tt class="py-op">+</tt> <tt id="link-329" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-329', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1373"></a><tt class="py-lineno">1373</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">versionProperty</tt><tt class="py-op">:</tt> </tt>
+<a name="L1374"></a><tt class="py-lineno">1374</tt>  <tt class="py-line">            <tt class="py-name">version</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">versionProperty</tt><tt class="py-op">)</tt> </tt>
+<a name="L1375"></a><tt class="py-lineno">1375</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1376"></a><tt class="py-lineno">1376</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">verbose</tt><tt class="py-op">:</tt> </tt>
+<a name="L1377"></a><tt class="py-lineno">1377</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-string">"Couldn't obtain device SDK version"</tt> </tt>
+<a name="L1378"></a><tt class="py-lineno">1378</tt>  <tt class="py-line">            <tt class="py-name">version</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L1379"></a><tt class="py-lineno">1379</tt>  <tt class="py-line"> </tt>
+<a name="L1380"></a><tt class="py-lineno">1380</tt>  <tt class="py-line">        <tt class="py-comment"># we are going to use UiAutomator for versions &gt;= 16 that's why we ignore if the device</tt> </tt>
+<a name="L1381"></a><tt class="py-lineno">1381</tt>  <tt class="py-line">        <tt class="py-comment"># is secure if this is true</tt> </tt>
+<a name="L1382"></a><tt class="py-lineno">1382</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">secure</tt> <tt class="py-op">==</tt> <tt class="py-string">'1'</tt> <tt class="py-keyword">and</tt> <tt class="py-name">debuggable</tt> <tt class="py-op">==</tt> <tt class="py-string">'0'</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">ignoresecuredevice</tt> <tt class="py-keyword">and</tt> <tt class="py-name">version</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">16</tt><tt class="py-op">:</tt> </tt>
+<a name="L1383"></a><tt class="py-lineno">1383</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"%s: ERROR: Device is secure, AndroidViewClient won't work."</tt> <tt class="py-op">%</tt> <tt class="py-name">progname</tt> </tt>
+<a name="L1384"></a><tt class="py-lineno">1384</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">verbose</tt><tt class="py-op">:</tt> </tt>
+<a name="L1385"></a><tt class="py-lineno">1385</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    secure=%s debuggable=%s version=%d ignoresecuredevice=%s"</tt> <tt class="py-op">%</tt> \ </tt>
+<a name="L1386"></a><tt class="py-lineno">1386</tt>  <tt class="py-line">                    <tt class="py-op">(</tt><tt class="py-name">secure</tt><tt class="py-op">,</tt> <tt class="py-name">debuggable</tt><tt class="py-op">,</tt> <tt class="py-name">version</tt><tt class="py-op">,</tt> <tt class="py-name">ignoresecuredevice</tt><tt class="py-op">)</tt> </tt>
+<a name="L1387"></a><tt class="py-lineno">1387</tt>  <tt class="py-line">            <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="L1388"></a><tt class="py-lineno">1388</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-string">"[.*()+]"</tt><tt class="py-op">,</tt> <tt class="py-name">serialno</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-string">"(\d{1,3}\.){3}\d{1,3}"</tt><tt class="py-op">,</tt> <tt class="py-name">serialno</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1389"></a><tt class="py-lineno">1389</tt>  <tt class="py-line">            <tt class="py-comment"># if a regex was used we have to determine the serialno used</tt> </tt>
+<a name="L1390"></a><tt class="py-lineno">1390</tt>  <tt class="py-line">            <tt class="py-name">serialno</tt> <tt class="py-op">=</tt> <tt id="link-330" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-330', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-331" class="py-name" targets="Static Method src.com.dtmilano.android.viewclient.ViewClient.__obtainDeviceSerialNumber()=src.com.dtmilano.android.viewclient.ViewClient-class.html#__obtainDeviceSerialNumber"><a title="src.com.dtmilano.android.viewclient.ViewClient.__obtainDeviceSerialNumber" class="py-name" href="#" onclick="return doclink('link-331', '__obtainDeviceSerialNumber', 'link-331');">__obtainDeviceSerialNumber</a></tt><tt class="py-op">(</tt><tt class="py-name">device</tt><tt class="py-op">)</tt> </tt>
+<a name="L1391"></a><tt class="py-lineno">1391</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">verbose</tt><tt class="py-op">:</tt> </tt>
+<a name="L1392"></a><tt class="py-lineno">1392</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">'Actual device serialno=%s'</tt> <tt class="py-op">%</tt> <tt class="py-name">serialno</tt> </tt>
+<a name="L1393"></a><tt class="py-lineno">1393</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">serialno</tt> </tt>
+</div><a name="L1394"></a><tt class="py-lineno">1394</tt>  <tt class="py-line">         </tt>
+<a name="L1395"></a><tt class="py-lineno">1395</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.traverseShowClassIdAndText"></a><div id="ViewClient.traverseShowClassIdAndText-def"><a name="L1396"></a><tt class="py-lineno">1396</tt> <a class="py-toggle" href="#" id="ViewClient.traverseShowClassIdAndText-toggle" onclick="return toggle('ViewClient.traverseShowClassIdAndText');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdAndText">traverseShowClassIdAndText</a><tt class="py-op">(</tt><tt class="py-param">view</tt><tt class="py-op">,</tt> <tt class="py-param">extraInfo</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">noextrainfo</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.traverseShowClassIdAndText-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.traverseShowClassIdAndText-expanded"><a name="L1397"></a><tt class="py-lineno">1397</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1398"></a><tt class="py-lineno">1398</tt>  <tt class="py-line"><tt class="py-docstring">        Shows the View class, id and text if available.</tt> </tt>
+<a name="L1399"></a><tt class="py-lineno">1399</tt>  <tt class="py-line"><tt class="py-docstring">        This function can be used as a transform function to L{ViewClient.traverse()}</tt> </tt>
+<a name="L1400"></a><tt class="py-lineno">1400</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1401"></a><tt class="py-lineno">1401</tt>  <tt class="py-line"><tt class="py-docstring">        @type view: I{View}</tt> </tt>
+<a name="L1402"></a><tt class="py-lineno">1402</tt>  <tt class="py-line"><tt class="py-docstring">        @param view: the View</tt> </tt>
+<a name="L1403"></a><tt class="py-lineno">1403</tt>  <tt class="py-line"><tt class="py-docstring">        @type extraInfo: method</tt> </tt>
+<a name="L1404"></a><tt class="py-lineno">1404</tt>  <tt class="py-line"><tt class="py-docstring">        @param extraInfo: the View method to add extra info</tt> </tt>
+<a name="L1405"></a><tt class="py-lineno">1405</tt>  <tt class="py-line"><tt class="py-docstring">        @type noextrainfo: bool</tt> </tt>
+<a name="L1406"></a><tt class="py-lineno">1406</tt>  <tt class="py-line"><tt class="py-docstring">        @param noextrainfo: Don't add extra info</tt> </tt>
+<a name="L1407"></a><tt class="py-lineno">1407</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1408"></a><tt class="py-lineno">1408</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the string containing class, id, and text if available </tt> </tt>
+<a name="L1409"></a><tt class="py-lineno">1409</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1410"></a><tt class="py-lineno">1410</tt>  <tt class="py-line">         </tt>
+<a name="L1411"></a><tt class="py-lineno">1411</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1412"></a><tt class="py-lineno">1412</tt>  <tt class="py-line">            <tt class="py-name">eis</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L1413"></a><tt class="py-lineno">1413</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">extraInfo</tt><tt class="py-op">:</tt> </tt>
+<a name="L1414"></a><tt class="py-lineno">1414</tt>  <tt class="py-line">                <tt class="py-name">eis</tt> <tt class="py-op">=</tt> <tt class="py-name">extraInfo</tt><tt class="py-op">(</tt><tt class="py-name">view</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-332" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__str__
+src.com.dtmilano.android.viewclient.Window.__str__" class="py-name" href="#" onclick="return doclink('link-332', '__str__', 'link-271');">__str__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1415"></a><tt class="py-lineno">1415</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">eis</tt> <tt class="py-keyword">and</tt> <tt class="py-name">noextrainfo</tt><tt class="py-op">:</tt> </tt>
+<a name="L1416"></a><tt class="py-lineno">1416</tt>  <tt class="py-line">                    <tt class="py-name">eis</tt> <tt class="py-op">=</tt> <tt class="py-name">noextrainfo</tt> </tt>
+<a name="L1417"></a><tt class="py-lineno">1417</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">eis</tt><tt class="py-op">:</tt> </tt>
+<a name="L1418"></a><tt class="py-lineno">1418</tt>  <tt class="py-line">                <tt class="py-name">eis</tt> <tt class="py-op">=</tt> <tt class="py-string">' '</tt> <tt class="py-op">+</tt> <tt class="py-name">eis</tt> </tt>
+<a name="L1419"></a><tt class="py-lineno">1419</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">"%s %s %s%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">view</tt><tt class="py-op">.</tt><tt id="link-333" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getClass" class="py-name" href="#" onclick="return doclink('link-333', 'getClass', 'link-123');">getClass</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">view</tt><tt class="py-op">.</tt><tt id="link-334" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-334', 'getId', 'link-124');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">view</tt><tt class="py-op">.</tt><tt id="link-335" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.getText()=src.com.dtmilano.android.viewclient.View-class.html#getText"><a title="src.com.dtmilano.android.viewclient.View.getText" class="py-name" href="#" onclick="return doclink('link-335', 'getText', 'link-335');">getText</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">eis</tt><tt class="py-op">)</tt> </tt>
+<a name="L1420"></a><tt class="py-lineno">1420</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L1421"></a><tt class="py-lineno">1421</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">"Exception in view=%s: %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">view</tt><tt class="py-op">.</tt><tt id="link-336" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.__smallStr__()=src.com.dtmilano.android.viewclient.View-class.html#__smallStr__"><a title="src.com.dtmilano.android.viewclient.View.__smallStr__" class="py-name" href="#" onclick="return doclink('link-336', '__smallStr__', 'link-336');">__smallStr__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1422"></a><tt class="py-lineno">1422</tt>  <tt class="py-line">         </tt>
+<a name="L1423"></a><tt class="py-lineno">1423</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.traverseShowClassIdTextAndUniqueId"></a><div id="ViewClient.traverseShowClassIdTextAndUniqueId-def"><a name="L1424"></a><tt class="py-lineno">1424</tt> <a class="py-toggle" href="#" id="ViewClient.traverseShowClassIdTextAndUniqueId-toggle" onclick="return toggle('ViewClient.traverseShowClassIdTextAndUniqueId');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndUniqueId">traverseShowClassIdTextAndUniqueId</a><tt class="py-op">(</tt><tt class="py-param">view</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.traverseShowClassIdTextAndUniqueId-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.traverseShowClassIdTextAndUniqueId-expanded"><a name="L1425"></a><tt class="py-lineno">1425</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1426"></a><tt class="py-lineno">1426</tt>  <tt class="py-line"><tt class="py-docstring">        Shows the View class, id, text if available and unique id.</tt> </tt>
+<a name="L1427"></a><tt class="py-lineno">1427</tt>  <tt class="py-line"><tt class="py-docstring">        This function can be used as a transform function to L{ViewClient.traverse()}</tt> </tt>
+<a name="L1428"></a><tt class="py-lineno">1428</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1429"></a><tt class="py-lineno">1429</tt>  <tt class="py-line"><tt class="py-docstring">        @type view: I{View}</tt> </tt>
+<a name="L1430"></a><tt class="py-lineno">1430</tt>  <tt class="py-line"><tt class="py-docstring">        @param view: the View</tt> </tt>
+<a name="L1431"></a><tt class="py-lineno">1431</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the string containing class, id, and text if available and unique Id</tt> </tt>
+<a name="L1432"></a><tt class="py-lineno">1432</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1433"></a><tt class="py-lineno">1433</tt>  <tt class="py-line">         </tt>
+<a name="L1434"></a><tt class="py-lineno">1434</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-337" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-337', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-338" class="py-name" targets="Static Method src.com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdAndText()=src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdAndText"><a title="src.com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdAndText" class="py-name" href="#" onclick="return doclink('link-338', 'traverseShowClassIdAndText', 'link-338');">traverseShowClassIdAndText</a></tt><tt class="py-op">(</tt><tt class="py-name">view</tt><tt class="py-op">,</tt> <tt id="link-339" class="py-name"><a title="src.com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-339', 'View', 'link-57');">View</a></tt><tt class="py-op">.</tt><tt id="link-340" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-340', 'getUniqueId', 'link-125');">getUniqueId</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1435"></a><tt class="py-lineno">1435</tt>  <tt class="py-line"> </tt>
+<a name="L1436"></a><tt class="py-lineno">1436</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.traverseShowClassIdTextAndContentDescription"></a><div id="ViewClient.traverseShowClassIdTextAndContentDescription-def"><a name="L1437"></a><tt class="py-lineno">1437</tt> <a class="py-toggle" href="#" id="ViewClient.traverseShowClassIdTextAndContentDescription-toggle" onclick="return toggle('ViewClient.traverseShowClassIdTextAndContentDescription');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndContentDescription">traverseShowClassIdTextAndContentDescription</a><tt class="py-op">(</tt><tt class="py-param">view</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.traverseShowClassIdTextAndContentDescription-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.traverseShowClassIdTextAndContentDescription-expanded"><a name="L1438"></a><tt class="py-lineno">1438</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1439"></a><tt class="py-lineno">1439</tt>  <tt class="py-line"><tt class="py-docstring">        Shows the View class, id, text if available and unique id.</tt> </tt>
+<a name="L1440"></a><tt class="py-lineno">1440</tt>  <tt class="py-line"><tt class="py-docstring">        This function can be used as a transform function to L{ViewClient.traverse()}</tt> </tt>
+<a name="L1441"></a><tt class="py-lineno">1441</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1442"></a><tt class="py-lineno">1442</tt>  <tt class="py-line"><tt class="py-docstring">        @type view: I{View}</tt> </tt>
+<a name="L1443"></a><tt class="py-lineno">1443</tt>  <tt class="py-line"><tt class="py-docstring">        @param view: the View</tt> </tt>
+<a name="L1444"></a><tt class="py-lineno">1444</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the string containing class, id, and text if available and the content description</tt> </tt>
+<a name="L1445"></a><tt class="py-lineno">1445</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1446"></a><tt class="py-lineno">1446</tt>  <tt class="py-line">         </tt>
+<a name="L1447"></a><tt class="py-lineno">1447</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-341" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-341', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-342" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdAndText" class="py-name" href="#" onclick="return doclink('link-342', 'traverseShowClassIdAndText', 'link-338');">traverseShowClassIdAndText</a></tt><tt class="py-op">(</tt><tt class="py-name">view</tt><tt class="py-op">,</tt> <tt id="link-343" class="py-name"><a title="src.com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-343', 'View', 'link-57');">View</a></tt><tt class="py-op">.</tt><tt id="link-344" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.getContentDescription()=src.com.dtmilano.android.viewclient.View-class.html#getContentDescription"><a title="src.com.dtmilano.android.viewclient.View.getContentDescription" class="py-name" href="#" onclick="return doclink('link-344', 'getContentDescription', 'link-344');">getContentDescription</a></tt><tt class="py-op">,</tt> <tt class="py-string">'NAF'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1448"></a><tt class="py-lineno">1448</tt>  <tt class="py-line">     </tt>
+<a name="L1449"></a><tt class="py-lineno">1449</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.traverseShowClassIdTextAndCenter"></a><div id="ViewClient.traverseShowClassIdTextAndCenter-def"><a name="L1450"></a><tt class="py-lineno">1450</tt> <a class="py-toggle" href="#" id="ViewClient.traverseShowClassIdTextAndCenter-toggle" onclick="return toggle('ViewClient.traverseShowClassIdTextAndCenter');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndCenter">traverseShowClassIdTextAndCenter</a><tt class="py-op">(</tt><tt class="py-param">view</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.traverseShowClassIdTextAndCenter-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.traverseShowClassIdTextAndCenter-expanded"><a name="L1451"></a><tt class="py-lineno">1451</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1452"></a><tt class="py-lineno">1452</tt>  <tt class="py-line"><tt class="py-docstring">        Shows the View class, id and text if available.</tt> </tt>
+<a name="L1453"></a><tt class="py-lineno">1453</tt>  <tt class="py-line"><tt class="py-docstring">        This function can be used as a transform function to L{ViewClient.traverse()}</tt> </tt>
+<a name="L1454"></a><tt class="py-lineno">1454</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1455"></a><tt class="py-lineno">1455</tt>  <tt class="py-line"><tt class="py-docstring">        @type view: I{View}</tt> </tt>
+<a name="L1456"></a><tt class="py-lineno">1456</tt>  <tt class="py-line"><tt class="py-docstring">        @param view: the View</tt> </tt>
+<a name="L1457"></a><tt class="py-lineno">1457</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the string containing class, id, and text if available </tt> </tt>
+<a name="L1458"></a><tt class="py-lineno">1458</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1459"></a><tt class="py-lineno">1459</tt>  <tt class="py-line">         </tt>
+<a name="L1460"></a><tt class="py-lineno">1460</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-345" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-345', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-346" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdAndText" class="py-name" href="#" onclick="return doclink('link-346', 'traverseShowClassIdAndText', 'link-338');">traverseShowClassIdAndText</a></tt><tt class="py-op">(</tt><tt class="py-name">view</tt><tt class="py-op">,</tt> <tt id="link-347" class="py-name"><a title="src.com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-347', 'View', 'link-57');">View</a></tt><tt class="py-op">.</tt><tt id="link-348" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getCenter" class="py-name" href="#" onclick="return doclink('link-348', 'getCenter', 'link-250');">getCenter</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1461"></a><tt class="py-lineno">1461</tt>  <tt class="py-line"> </tt>
+<a name="L1462"></a><tt class="py-lineno">1462</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.traverseShowClassIdTextPositionAndSize"></a><div id="ViewClient.traverseShowClassIdTextPositionAndSize-def"><a name="L1463"></a><tt class="py-lineno">1463</tt> <a class="py-toggle" href="#" id="ViewClient.traverseShowClassIdTextPositionAndSize-toggle" onclick="return toggle('ViewClient.traverseShowClassIdTextPositionAndSize');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextPositionAndSize">traverseShowClassIdTextPositionAndSize</a><tt class="py-op">(</tt><tt class="py-param">view</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.traverseShowClassIdTextPositionAndSize-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.traverseShowClassIdTextPositionAndSize-expanded"><a name="L1464"></a><tt class="py-lineno">1464</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1465"></a><tt class="py-lineno">1465</tt>  <tt class="py-line"><tt class="py-docstring">        Shows the View class, id and text if available.</tt> </tt>
+<a name="L1466"></a><tt class="py-lineno">1466</tt>  <tt class="py-line"><tt class="py-docstring">        This function can be used as a transform function to L{ViewClient.traverse()}</tt> </tt>
+<a name="L1467"></a><tt class="py-lineno">1467</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1468"></a><tt class="py-lineno">1468</tt>  <tt class="py-line"><tt class="py-docstring">        @type view: I{View}</tt> </tt>
+<a name="L1469"></a><tt class="py-lineno">1469</tt>  <tt class="py-line"><tt class="py-docstring">        @param view: the View</tt> </tt>
+<a name="L1470"></a><tt class="py-lineno">1470</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the string containing class, id, and text if available </tt> </tt>
+<a name="L1471"></a><tt class="py-lineno">1471</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1472"></a><tt class="py-lineno">1472</tt>  <tt class="py-line">         </tt>
+<a name="L1473"></a><tt class="py-lineno">1473</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-349" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-349', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-350" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdAndText" class="py-name" href="#" onclick="return doclink('link-350', 'traverseShowClassIdAndText', 'link-338');">traverseShowClassIdAndText</a></tt><tt class="py-op">(</tt><tt class="py-name">view</tt><tt class="py-op">,</tt> <tt id="link-351" class="py-name"><a title="src.com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-351', 'View', 'link-57');">View</a></tt><tt class="py-op">.</tt><tt id="link-352" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getPositionAndSize" class="py-name" href="#" onclick="return doclink('link-352', 'getPositionAndSize', 'link-260');">getPositionAndSize</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1474"></a><tt class="py-lineno">1474</tt>  <tt class="py-line">         </tt>
+<a name="L1475"></a><tt class="py-lineno">1475</tt>  <tt class="py-line">    <tt class="py-comment"># methods that can be used to transform ViewClient.traverse output</tt> </tt>
+<a name="L1476"></a><tt class="py-lineno">1476</tt>  <tt class="py-line">    <tt class="py-name">TRAVERSE_CIT</tt> <tt class="py-op">=</tt> <tt id="link-353" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdAndText" class="py-name" href="#" onclick="return doclink('link-353', 'traverseShowClassIdAndText', 'link-338');">traverseShowClassIdAndText</a></tt> </tt>
+<a name="L1477"></a><tt class="py-lineno">1477</tt>  <tt class="py-line">    <tt class="py-string">''' An alias for L{traverseShowClassIdAndText(view)} '''</tt> </tt>
+<a name="L1478"></a><tt class="py-lineno">1478</tt>  <tt class="py-line">    <tt class="py-name">TRAVERSE_CITUI</tt> <tt class="py-op">=</tt> <tt id="link-354" class="py-name" targets="Static Method src.com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextAndUniqueId()=src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndUniqueId"><a title="src.com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextAndUniqueId" class="py-name" href="#" onclick="return doclink('link-354', 'traverseShowClassIdTextAndUniqueId', 'link-354');">traverseShowClassIdTextAndUniqueId</a></tt> </tt>
+<a name="L1479"></a><tt class="py-lineno">1479</tt>  <tt class="py-line">    <tt class="py-string">''' An alias for L{traverseShowClassIdTextAndUniqueId(view)} '''</tt> </tt>
+<a name="L1480"></a><tt class="py-lineno">1480</tt>  <tt class="py-line">    <tt class="py-name">TRAVERSE_CITCD</tt> <tt class="py-op">=</tt> <tt id="link-355" class="py-name" targets="Static Method src.com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextAndContentDescription()=src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndContentDescription"><a title="src.com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextAndContentDescription" class="py-name" href="#" onclick="return doclink('link-355', 'traverseShowClassIdTextAndContentDescription', 'link-355');">traverseShowClassIdTextAndContentDescription</a></tt> </tt>
+<a name="L1481"></a><tt class="py-lineno">1481</tt>  <tt class="py-line">    <tt class="py-string">''' An alias for L{traverseShowClassIdTextAndContentDescription(view)} '''</tt> </tt>
+<a name="L1482"></a><tt class="py-lineno">1482</tt>  <tt class="py-line">    <tt class="py-name">TRAVERSE_CITC</tt> <tt class="py-op">=</tt> <tt id="link-356" class="py-name" targets="Static Method src.com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextAndCenter()=src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndCenter"><a title="src.com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextAndCenter" class="py-name" href="#" onclick="return doclink('link-356', 'traverseShowClassIdTextAndCenter', 'link-356');">traverseShowClassIdTextAndCenter</a></tt> </tt>
+<a name="L1483"></a><tt class="py-lineno">1483</tt>  <tt class="py-line">    <tt class="py-string">''' An alias for L{traverseShowClassIdTextAndCenter(view)} '''</tt> </tt>
+<a name="L1484"></a><tt class="py-lineno">1484</tt>  <tt class="py-line">    <tt class="py-name">TRAVERSE_CITPS</tt> <tt class="py-op">=</tt> <tt id="link-357" class="py-name" targets="Static Method src.com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextPositionAndSize()=src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextPositionAndSize"><a title="src.com.dtmilano.android.viewclient.ViewClient.traverseShowClassIdTextPositionAndSize" class="py-name" href="#" onclick="return doclink('link-357', 'traverseShowClassIdTextPositionAndSize', 'link-357');">traverseShowClassIdTextPositionAndSize</a></tt> </tt>
+<a name="L1485"></a><tt class="py-lineno">1485</tt>  <tt class="py-line">    <tt class="py-string">''' An alias for L{traverseShowClassIdTextPositionAndSize(view)} '''</tt> </tt>
+<a name="L1486"></a><tt class="py-lineno">1486</tt>  <tt class="py-line">     </tt>
+<a name="L1487"></a><tt class="py-lineno">1487</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.sleep"></a><div id="ViewClient.sleep-def"><a name="L1488"></a><tt class="py-lineno">1488</tt> <a class="py-toggle" href="#" id="ViewClient.sleep-toggle" onclick="return toggle('ViewClient.sleep');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#sleep">sleep</a><tt class="py-op">(</tt><tt class="py-param">secs</tt><tt class="py-op">=</tt><tt class="py-number">1.0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.sleep-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.sleep-expanded"><a name="L1489"></a><tt class="py-lineno">1489</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1490"></a><tt class="py-lineno">1490</tt>  <tt class="py-line"><tt class="py-docstring">        Sleeps for the specified number of seconds.</tt> </tt>
+<a name="L1491"></a><tt class="py-lineno">1491</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1492"></a><tt class="py-lineno">1492</tt>  <tt class="py-line"><tt class="py-docstring">        @type secs: float</tt> </tt>
+<a name="L1493"></a><tt class="py-lineno">1493</tt>  <tt class="py-line"><tt class="py-docstring">        @param secs: number of seconds</tt> </tt>
+<a name="L1494"></a><tt class="py-lineno">1494</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1495"></a><tt class="py-lineno">1495</tt>  <tt class="py-line">        <tt class="py-name">time</tt><tt class="py-op">.</tt><tt id="link-358" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-358', 'sleep', 'link-255');">sleep</a></tt><tt class="py-op">(</tt><tt class="py-name">secs</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1496"></a><tt class="py-lineno">1496</tt>  <tt class="py-line">     </tt>
+<a name="ViewClient.assertServiceResponse"></a><div id="ViewClient.assertServiceResponse-def"><a name="L1497"></a><tt class="py-lineno">1497</tt> <a class="py-toggle" href="#" id="ViewClient.assertServiceResponse-toggle" onclick="return toggle('ViewClient.assertServiceResponse');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#assertServiceResponse">assertServiceResponse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">response</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.assertServiceResponse-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.assertServiceResponse-expanded"><a name="L1498"></a><tt class="py-lineno">1498</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1499"></a><tt class="py-lineno">1499</tt>  <tt class="py-line"><tt class="py-docstring">        Checks whether the response received from the server is correct or raises and Exception.</tt> </tt>
+<a name="L1500"></a><tt class="py-lineno">1500</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1501"></a><tt class="py-lineno">1501</tt>  <tt class="py-line"><tt class="py-docstring">        @type response: str</tt> </tt>
+<a name="L1502"></a><tt class="py-lineno">1502</tt>  <tt class="py-line"><tt class="py-docstring">        @param response: Response received from the server</tt> </tt>
+<a name="L1503"></a><tt class="py-lineno">1503</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1504"></a><tt class="py-lineno">1504</tt>  <tt class="py-line"><tt class="py-docstring">        @raise Exception: If the response received from the server is invalid</tt> </tt>
+<a name="L1505"></a><tt class="py-lineno">1505</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1506"></a><tt class="py-lineno">1506</tt>  <tt class="py-line">         </tt>
+<a name="L1507"></a><tt class="py-lineno">1507</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-359" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.serviceResponse" class="py-name" href="#" onclick="return doclink('link-359', 'serviceResponse', 'link-311');">serviceResponse</a></tt><tt class="py-op">(</tt><tt class="py-name">response</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1508"></a><tt class="py-lineno">1508</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid response received from service.'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1509"></a><tt class="py-lineno">1509</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.serviceResponse"></a><div id="ViewClient.serviceResponse-def"><a name="L1510"></a><tt class="py-lineno">1510</tt> <a class="py-toggle" href="#" id="ViewClient.serviceResponse-toggle" onclick="return toggle('ViewClient.serviceResponse');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#serviceResponse">serviceResponse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">response</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.serviceResponse-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.serviceResponse-expanded"><a name="L1511"></a><tt class="py-lineno">1511</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1512"></a><tt class="py-lineno">1512</tt>  <tt class="py-line"><tt class="py-docstring">        Checks the response received from the I{ViewServer}.</tt> </tt>
+<a name="L1513"></a><tt class="py-lineno">1513</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1514"></a><tt class="py-lineno">1514</tt>  <tt class="py-line"><tt class="py-docstring">        @return: C{True} if the response received matches L{PARCEL_TRUE}, C{False} otherwise</tt> </tt>
+<a name="L1515"></a><tt class="py-lineno">1515</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1516"></a><tt class="py-lineno">1516</tt>  <tt class="py-line">         </tt>
+<a name="L1517"></a><tt class="py-lineno">1517</tt>  <tt class="py-line">        <tt class="py-name">PARCEL_TRUE</tt> <tt class="py-op">=</tt> <tt class="py-string">"Result: Parcel(00000000 00000001   '........')\r\n"</tt> </tt>
+<a name="L1518"></a><tt class="py-lineno">1518</tt>  <tt class="py-line">        <tt class="py-string">''' The TRUE response parcel '''</tt> </tt>
+<a name="L1519"></a><tt class="py-lineno">1519</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-360" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-360', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1520"></a><tt class="py-lineno">1520</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"serviceResponse: comparing '%s' vs Parcel(%s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">response</tt><tt class="py-op">,</tt> <tt class="py-name">PARCEL_TRUE</tt><tt class="py-op">)</tt> </tt>
+<a name="L1521"></a><tt class="py-lineno">1521</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">response</tt> <tt class="py-op">==</tt> <tt class="py-name">PARCEL_TRUE</tt> </tt>
+</div><a name="L1522"></a><tt class="py-lineno">1522</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.setViews"></a><div id="ViewClient.setViews-def"><a name="L1523"></a><tt class="py-lineno">1523</tt> <a class="py-toggle" href="#" id="ViewClient.setViews-toggle" onclick="return toggle('ViewClient.setViews');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#setViews">setViews</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">received</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.setViews-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.setViews-expanded"><a name="L1524"></a><tt class="py-lineno">1524</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1525"></a><tt class="py-lineno">1525</tt>  <tt class="py-line"><tt class="py-docstring">        Sets L{self.views} to the received value splitting it into lines.</tt> </tt>
+<a name="L1526"></a><tt class="py-lineno">1526</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1527"></a><tt class="py-lineno">1527</tt>  <tt class="py-line"><tt class="py-docstring">        @type received: str</tt> </tt>
+<a name="L1528"></a><tt class="py-lineno">1528</tt>  <tt class="py-line"><tt class="py-docstring">        @param received: the string received from the I{View Server}</tt> </tt>
+<a name="L1529"></a><tt class="py-lineno">1529</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1530"></a><tt class="py-lineno">1530</tt>  <tt class="py-line">         </tt>
+<a name="L1531"></a><tt class="py-lineno">1531</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">received</tt> <tt class="py-keyword">or</tt> <tt class="py-name">received</tt> <tt class="py-op">==</tt> <tt class="py-string">""</tt><tt class="py-op">:</tt> </tt>
+<a name="L1532"></a><tt class="py-lineno">1532</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"received is empty"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1533"></a><tt class="py-lineno">1533</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1534"></a><tt class="py-lineno">1534</tt>  <tt class="py-line">        <tt class="py-string">''' The list of Views represented as C{str} obtained after splitting it into lines after being received from the server. Done by L{self.setViews()}. '''</tt> </tt>
+<a name="L1535"></a><tt class="py-lineno">1535</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-361" class="py-name" targets="Method src.com.dtmilano.android.viewclient.ViewClient.__parseTree()=src.com.dtmilano.android.viewclient.ViewClient-class.html#__parseTree"><a title="src.com.dtmilano.android.viewclient.ViewClient.__parseTree" class="py-name" href="#" onclick="return doclink('link-361', '__parseTree', 'link-361');">__parseTree</a></tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">"\n"</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1536"></a><tt class="py-lineno">1536</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-362" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-362', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1537"></a><tt class="py-lineno">1537</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"there are %d views in this dump"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1538"></a><tt class="py-lineno">1538</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.setViewsFromUiAutomatorDump"></a><div id="ViewClient.setViewsFromUiAutomatorDump-def"><a name="L1539"></a><tt class="py-lineno">1539</tt> <a class="py-toggle" href="#" id="ViewClient.setViewsFromUiAutomatorDump-toggle" onclick="return toggle('ViewClient.setViewsFromUiAutomatorDump');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#setViewsFromUiAutomatorDump">setViewsFromUiAutomatorDump</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">received</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.setViewsFromUiAutomatorDump-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.setViewsFromUiAutomatorDump-expanded"><a name="L1540"></a><tt class="py-lineno">1540</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1541"></a><tt class="py-lineno">1541</tt>  <tt class="py-line"><tt class="py-docstring">        Sets L{self.views} to the received value parsing the received XML.</tt> </tt>
+<a name="L1542"></a><tt class="py-lineno">1542</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1543"></a><tt class="py-lineno">1543</tt>  <tt class="py-line"><tt class="py-docstring">        @type received: str</tt> </tt>
+<a name="L1544"></a><tt class="py-lineno">1544</tt>  <tt class="py-line"><tt class="py-docstring">        @param received: the string received from the I{UI Automator}</tt> </tt>
+<a name="L1545"></a><tt class="py-lineno">1545</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1546"></a><tt class="py-lineno">1546</tt>  <tt class="py-line">         </tt>
+<a name="L1547"></a><tt class="py-lineno">1547</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">received</tt> <tt class="py-keyword">or</tt> <tt class="py-name">received</tt> <tt class="py-op">==</tt> <tt class="py-string">""</tt><tt class="py-op">:</tt> </tt>
+<a name="L1548"></a><tt class="py-lineno">1548</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"received is empty"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1549"></a><tt class="py-lineno">1549</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1550"></a><tt class="py-lineno">1550</tt>  <tt class="py-line">        <tt class="py-string">''' The list of Views represented as C{str} obtained after splitting it into lines after being received from the server. Done by L{self.setViews()}. '''</tt> </tt>
+<a name="L1551"></a><tt class="py-lineno">1551</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-363" class="py-name" targets="Method src.com.dtmilano.android.viewclient.ViewClient.__parseTreeFromUiAutomatorDump()=src.com.dtmilano.android.viewclient.ViewClient-class.html#__parseTreeFromUiAutomatorDump"><a title="src.com.dtmilano.android.viewclient.ViewClient.__parseTreeFromUiAutomatorDump" class="py-name" href="#" onclick="return doclink('link-363', '__parseTreeFromUiAutomatorDump', 'link-363');">__parseTreeFromUiAutomatorDump</a></tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1552"></a><tt class="py-lineno">1552</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-364" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-364', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1553"></a><tt class="py-lineno">1553</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"there are %d views in this dump"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1554"></a><tt class="py-lineno">1554</tt>  <tt class="py-line">         </tt>
+<a name="L1555"></a><tt class="py-lineno">1555</tt>  <tt class="py-line">         </tt>
+<a name="ViewClient.__splitAttrs"></a><div id="ViewClient.__splitAttrs-def"><a name="L1556"></a><tt class="py-lineno">1556</tt> <a class="py-toggle" href="#" id="ViewClient.__splitAttrs-toggle" onclick="return toggle('ViewClient.__splitAttrs');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__splitAttrs">__splitAttrs</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">strArgs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__splitAttrs-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__splitAttrs-expanded"><a name="L1557"></a><tt class="py-lineno">1557</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1558"></a><tt class="py-lineno">1558</tt>  <tt class="py-line"><tt class="py-docstring">        Splits the C{View} attributes in C{strArgs} and optionally adds the view id to the C{viewsById} list.</tt> </tt>
+<a name="L1559"></a><tt class="py-lineno">1559</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1560"></a><tt class="py-lineno">1560</tt>  <tt class="py-line"><tt class="py-docstring">        Unique Ids</tt> </tt>
+<a name="L1561"></a><tt class="py-lineno">1561</tt>  <tt class="py-line"><tt class="py-docstring">        ==========</tt> </tt>
+<a name="L1562"></a><tt class="py-lineno">1562</tt>  <tt class="py-line"><tt class="py-docstring">        It is very common to find C{View}s having B{NO_ID} as the Id. This turns very difficult to </tt> </tt>
+<a name="L1563"></a><tt class="py-lineno">1563</tt>  <tt class="py-line"><tt class="py-docstring">        use L{self.findViewById()}. To help in this situation this method assigns B{unique Ids}.</tt> </tt>
+<a name="L1564"></a><tt class="py-lineno">1564</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1565"></a><tt class="py-lineno">1565</tt>  <tt class="py-line"><tt class="py-docstring">        The B{unique Ids} are generated using the pattern C{id/no_id/&lt;number&gt;} with C{&lt;number&gt;} starting</tt> </tt>
+<a name="L1566"></a><tt class="py-lineno">1566</tt>  <tt class="py-line"><tt class="py-docstring">        at 1.</tt> </tt>
+<a name="L1567"></a><tt class="py-lineno">1567</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1568"></a><tt class="py-lineno">1568</tt>  <tt class="py-line"><tt class="py-docstring">        @type strArgs: str</tt> </tt>
+<a name="L1569"></a><tt class="py-lineno">1569</tt>  <tt class="py-line"><tt class="py-docstring">        @param strArgs: the string containing the raw list of attributes and values</tt> </tt>
+<a name="L1570"></a><tt class="py-lineno">1570</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1571"></a><tt class="py-lineno">1571</tt>  <tt class="py-line"><tt class="py-docstring">        @return: Returns the attributes map.</tt> </tt>
+<a name="L1572"></a><tt class="py-lineno">1572</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1573"></a><tt class="py-lineno">1573</tt>  <tt class="py-line">         </tt>
+<a name="L1574"></a><tt class="py-lineno">1574</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L1575"></a><tt class="py-lineno">1575</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"This method is not compatible with UIAutomator"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1576"></a><tt class="py-lineno">1576</tt>  <tt class="py-line">        <tt class="py-comment"># replace the spaces in text:mText to preserve them in later split</tt> </tt>
+<a name="L1577"></a><tt class="py-lineno">1577</tt>  <tt class="py-line">        <tt class="py-comment"># they are translated back after the attribute matches</tt> </tt>
+<a name="L1578"></a><tt class="py-lineno">1578</tt>  <tt class="py-line">        <tt class="py-name">textRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'%s=%s,'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt><tt class="py-op">,</tt> <tt id="link-365" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-365', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'len'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1579"></a><tt class="py-lineno">1579</tt>  <tt class="py-line">        <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">textRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">strArgs</tt><tt class="py-op">)</tt> </tt>
+<a name="L1580"></a><tt class="py-lineno">1580</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L1581"></a><tt class="py-lineno">1581</tt>  <tt class="py-line">            <tt class="py-name">__textStart</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">end</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1582"></a><tt class="py-lineno">1582</tt>  <tt class="py-line">            <tt class="py-name">__textLen</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'len'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1583"></a><tt class="py-lineno">1583</tt>  <tt class="py-line">            <tt class="py-name">__textEnd</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">end</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">__textLen</tt> </tt>
+<a name="L1584"></a><tt class="py-lineno">1584</tt>  <tt class="py-line">            <tt class="py-name">s1</tt> <tt class="py-op">=</tt> <tt class="py-name">strArgs</tt><tt class="py-op">[</tt><tt class="py-name">__textStart</tt><tt class="py-op">:</tt><tt class="py-name">__textEnd</tt><tt class="py-op">]</tt> </tt>
+<a name="L1585"></a><tt class="py-lineno">1585</tt>  <tt class="py-line">            <tt class="py-name">s2</tt> <tt class="py-op">=</tt> <tt class="py-name">s1</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">' '</tt><tt class="py-op">,</tt> <tt id="link-366" class="py-name"><a title="src.com.dtmilano.android.viewclient.WS" class="py-name" href="#" onclick="return doclink('link-366', 'WS', 'link-37');">WS</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1586"></a><tt class="py-lineno">1586</tt>  <tt class="py-line">            <tt class="py-name">strArgs</tt> <tt class="py-op">=</tt> <tt class="py-name">strArgs</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L1587"></a><tt class="py-lineno">1587</tt>  <tt class="py-line"> </tt>
+<a name="L1588"></a><tt class="py-lineno">1588</tt>  <tt class="py-line">        <tt class="py-name">idRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">"(?P&lt;viewId&gt;id/\S+)"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1589"></a><tt class="py-lineno">1589</tt>  <tt class="py-line">        <tt class="py-name">attrRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'%s(?P&lt;parens&gt;\(\))?=%s,(?P&lt;val&gt;[^ ]*)'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-367" class="py-name"><a title="src.com.dtmilano.android.viewclient.__ns" class="py-name" href="#" onclick="return doclink('link-367', '__ns', 'link-196');">__ns</a></tt><tt class="py-op">(</tt><tt class="py-string">'attr'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-368" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nd" class="py-name" href="#" onclick="return doclink('link-368', '__nd', 'link-194');">__nd</a></tt><tt class="py-op">(</tt><tt class="py-string">'len'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">flags</tt><tt class="py-op">=</tt><tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">DOTALL</tt><tt class="py-op">)</tt> </tt>
+<a name="L1590"></a><tt class="py-lineno">1590</tt>  <tt class="py-line">        <tt class="py-name">hashRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'%s@%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-369" class="py-name"><a title="src.com.dtmilano.android.viewclient.__ns" class="py-name" href="#" onclick="return doclink('link-369', '__ns', 'link-196');">__ns</a></tt><tt class="py-op">(</tt><tt class="py-string">'class'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-370" class="py-name"><a title="src.com.dtmilano.android.viewclient.__nh" class="py-name" href="#" onclick="return doclink('link-370', '__nh', 'link-195');">__nh</a></tt><tt class="py-op">(</tt><tt class="py-string">'oid'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1591"></a><tt class="py-lineno">1591</tt>  <tt class="py-line">         </tt>
+<a name="L1592"></a><tt class="py-lineno">1592</tt>  <tt class="py-line">        <tt class="py-name">attrs</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1593"></a><tt class="py-lineno">1593</tt>  <tt class="py-line">        <tt class="py-name">viewId</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1594"></a><tt class="py-lineno">1594</tt>  <tt class="py-line">        <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">idRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">strArgs</tt><tt class="py-op">)</tt> </tt>
+<a name="L1595"></a><tt class="py-lineno">1595</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L1596"></a><tt class="py-lineno">1596</tt>  <tt class="py-line">            <tt class="py-name">viewId</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'viewId'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1597"></a><tt class="py-lineno">1597</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-371" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-371', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1598"></a><tt class="py-lineno">1598</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"found view with id=%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">viewId</tt> </tt>
+<a name="L1599"></a><tt class="py-lineno">1599</tt>  <tt class="py-line"> </tt>
+<a name="L1600"></a><tt class="py-lineno">1600</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">attr</tt> <tt class="py-keyword">in</tt> <tt class="py-name">strArgs</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1601"></a><tt class="py-lineno">1601</tt>  <tt class="py-line">            <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">attrRE</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">)</tt> </tt>
+<a name="L1602"></a><tt class="py-lineno">1602</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L1603"></a><tt class="py-lineno">1603</tt>  <tt class="py-line">                <tt class="py-name">__attr</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'attr'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1604"></a><tt class="py-lineno">1604</tt>  <tt class="py-line">                <tt class="py-name">__parens</tt> <tt class="py-op">=</tt> <tt class="py-string">'()'</tt> <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'parens'</tt><tt class="py-op">)</tt> <tt class="py-keyword">else</tt> <tt class="py-string">''</tt> </tt>
+<a name="L1605"></a><tt class="py-lineno">1605</tt>  <tt class="py-line">                <tt class="py-name">__len</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'len'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1606"></a><tt class="py-lineno">1606</tt>  <tt class="py-line">                <tt class="py-name">__val</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'val'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1607"></a><tt class="py-lineno">1607</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-372" class="py-name"><a title="src.com.dtmilano.android.viewclient.WARNINGS" class="py-name" href="#" onclick="return doclink('link-372', 'WARNINGS', 'link-24');">WARNINGS</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">__len</tt> <tt class="py-op">!=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">__val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1608"></a><tt class="py-lineno">1608</tt>  <tt class="py-line">                    <tt class="py-name">warnings</tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Invalid len: expected: %d   found: %d   s=%s   e=%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">__len</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">__val</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">__val</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-number">50</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">__val</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">50</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1609"></a><tt class="py-lineno">1609</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">__attr</tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt><tt class="py-op">:</tt> </tt>
+<a name="L1610"></a><tt class="py-lineno">1610</tt>  <tt class="py-line">                    <tt class="py-comment"># restore spaces that have been replaced</tt> </tt>
+<a name="L1611"></a><tt class="py-lineno">1611</tt>  <tt class="py-line">                    <tt class="py-name">__val</tt> <tt class="py-op">=</tt> <tt class="py-name">__val</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt id="link-373" class="py-name"><a title="src.com.dtmilano.android.viewclient.WS" class="py-name" href="#" onclick="return doclink('link-373', 'WS', 'link-37');">WS</a></tt><tt class="py-op">,</tt> <tt class="py-string">' '</tt><tt class="py-op">)</tt> </tt>
+<a name="L1612"></a><tt class="py-lineno">1612</tt>  <tt class="py-line">                <tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-name">__attr</tt> <tt class="py-op">+</tt> <tt class="py-name">__parens</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">__val</tt> </tt>
+<a name="L1613"></a><tt class="py-lineno">1613</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1614"></a><tt class="py-lineno">1614</tt>  <tt class="py-line">                <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">hashRE</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">)</tt> </tt>
+<a name="L1615"></a><tt class="py-lineno">1615</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L1616"></a><tt class="py-lineno">1616</tt>  <tt class="py-line">                    <tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-string">'class'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'class'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1617"></a><tt class="py-lineno">1617</tt>  <tt class="py-line">                    <tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-string">'oid'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-string">'oid'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1618"></a><tt class="py-lineno">1618</tt>  <tt class="py-line">                <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1619"></a><tt class="py-lineno">1619</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt id="link-374" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-374', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1620"></a><tt class="py-lineno">1620</tt>  <tt class="py-line">                        <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-string">"doesn't match"</tt> </tt>
+<a name="L1621"></a><tt class="py-lineno">1621</tt>  <tt class="py-line">         </tt>
+<a name="L1622"></a><tt class="py-lineno">1622</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> <tt class="py-comment"># was assignViewById</tt> </tt>
+<a name="L1623"></a><tt class="py-lineno">1623</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">viewId</tt><tt class="py-op">:</tt> </tt>
+<a name="L1624"></a><tt class="py-lineno">1624</tt>  <tt class="py-line">                <tt class="py-comment"># If the view has NO_ID we are assigning a default id here (id/no_id) which is</tt> </tt>
+<a name="L1625"></a><tt class="py-lineno">1625</tt>  <tt class="py-line">                <tt class="py-comment"># immediately incremented if another view with no id was found before to generate</tt> </tt>
+<a name="L1626"></a><tt class="py-lineno">1626</tt>  <tt class="py-line">                <tt class="py-comment"># a unique id</tt> </tt>
+<a name="L1627"></a><tt class="py-lineno">1627</tt>  <tt class="py-line">                <tt class="py-name">viewId</tt> <tt class="py-op">=</tt> <tt class="py-string">"id/no_id/1"</tt> </tt>
+<a name="L1628"></a><tt class="py-lineno">1628</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">viewId</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt><tt class="py-op">:</tt> </tt>
+<a name="L1629"></a><tt class="py-lineno">1629</tt>  <tt class="py-line">                <tt class="py-comment"># sometimes the view ids are not unique, so let's generate a unique id here</tt> </tt>
+<a name="L1630"></a><tt class="py-lineno">1630</tt>  <tt class="py-line">                <tt class="py-name">i</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L1631"></a><tt class="py-lineno">1631</tt>  <tt class="py-line">                <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
+<a name="L1632"></a><tt class="py-lineno">1632</tt>  <tt class="py-line">                    <tt class="py-name">newId</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt><tt class="py-op">(</tt><tt class="py-string">'/\d+$'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-name">viewId</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">'/%d'</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> </tt>
+<a name="L1633"></a><tt class="py-lineno">1633</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">newId</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt><tt class="py-op">:</tt> </tt>
+<a name="L1634"></a><tt class="py-lineno">1634</tt>  <tt class="py-line">                        <tt class="py-keyword">break</tt> </tt>
+<a name="L1635"></a><tt class="py-lineno">1635</tt>  <tt class="py-line">                    <tt class="py-name">i</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L1636"></a><tt class="py-lineno">1636</tt>  <tt class="py-line">                <tt class="py-name">viewId</tt> <tt class="py-op">=</tt> <tt class="py-name">newId</tt> </tt>
+<a name="L1637"></a><tt class="py-lineno">1637</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-375" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-375', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1638"></a><tt class="py-lineno">1638</tt>  <tt class="py-line">                    <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"adding viewById %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">viewId</tt> </tt>
+<a name="L1639"></a><tt class="py-lineno">1639</tt>  <tt class="py-line">            <tt class="py-comment"># We are assigning a new attribute to keep the original id preserved, which could have</tt> </tt>
+<a name="L1640"></a><tt class="py-lineno">1640</tt>  <tt class="py-line">            <tt class="py-comment"># been NO_ID repeated multiple times</tt> </tt>
+<a name="L1641"></a><tt class="py-lineno">1641</tt>  <tt class="py-line">            <tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-string">'uniqueId'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">viewId</tt> </tt>
+<a name="L1642"></a><tt class="py-lineno">1642</tt>  <tt class="py-line">                           </tt>
+<a name="L1643"></a><tt class="py-lineno">1643</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">attrs</tt> </tt>
+</div><a name="L1644"></a><tt class="py-lineno">1644</tt>  <tt class="py-line">     </tt>
+<a name="ViewClient.__parseTree"></a><div id="ViewClient.__parseTree-def"><a name="L1645"></a><tt class="py-lineno">1645</tt> <a class="py-toggle" href="#" id="ViewClient.__parseTree-toggle" onclick="return toggle('ViewClient.__parseTree');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__parseTree">__parseTree</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">receivedLines</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__parseTree-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__parseTree-expanded"><a name="L1646"></a><tt class="py-lineno">1646</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1647"></a><tt class="py-lineno">1647</tt>  <tt class="py-line"><tt class="py-docstring">        Parses the View tree contained in L{receivedLines}. The tree is created and the root node assigned to L{self.root}.</tt> </tt>
+<a name="L1648"></a><tt class="py-lineno">1648</tt>  <tt class="py-line"><tt class="py-docstring">        This method also assigns L{self.viewsById} values using L{View.getUniqueId} as the key.</tt> </tt>
+<a name="L1649"></a><tt class="py-lineno">1649</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1650"></a><tt class="py-lineno">1650</tt>  <tt class="py-line"><tt class="py-docstring">        @type receivedLines: str</tt> </tt>
+<a name="L1651"></a><tt class="py-lineno">1651</tt>  <tt class="py-line"><tt class="py-docstring">        @param receivedLines: the string received from B{View Server}</tt> </tt>
+<a name="L1652"></a><tt class="py-lineno">1652</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1653"></a><tt class="py-lineno">1653</tt>  <tt class="py-line">         </tt>
+<a name="L1654"></a><tt class="py-lineno">1654</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1655"></a><tt class="py-lineno">1655</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1656"></a><tt class="py-lineno">1656</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1657"></a><tt class="py-lineno">1657</tt>  <tt class="py-line">        <tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1658"></a><tt class="py-lineno">1658</tt>  <tt class="py-line">        <tt class="py-name">parents</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1659"></a><tt class="py-lineno">1659</tt>  <tt class="py-line">        <tt class="py-name">treeLevel</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L1660"></a><tt class="py-lineno">1660</tt>  <tt class="py-line">        <tt class="py-name">newLevel</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L1661"></a><tt class="py-lineno">1661</tt>  <tt class="py-line">        <tt class="py-name">lastView</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1662"></a><tt class="py-lineno">1662</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt class="py-name">receivedLines</tt><tt class="py-op">:</tt> </tt>
+<a name="L1663"></a><tt class="py-lineno">1663</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">v</tt> <tt class="py-op">==</tt> <tt class="py-string">''</tt> <tt class="py-keyword">or</tt> <tt class="py-name">v</tt> <tt class="py-op">==</tt> <tt class="py-string">'DONE'</tt> <tt class="py-keyword">or</tt> <tt class="py-name">v</tt> <tt class="py-op">==</tt> <tt class="py-string">'DONE.'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1664"></a><tt class="py-lineno">1664</tt>  <tt class="py-line">                <tt class="py-keyword">break</tt> </tt>
+<a name="L1665"></a><tt class="py-lineno">1665</tt>  <tt class="py-line">            <tt class="py-name">attrs</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-376" class="py-name" targets="Method src.com.dtmilano.android.viewclient.ViewClient.__splitAttrs()=src.com.dtmilano.android.viewclient.ViewClient-class.html#__splitAttrs"><a title="src.com.dtmilano.android.viewclient.ViewClient.__splitAttrs" class="py-name" href="#" onclick="return doclink('link-376', '__splitAttrs', 'link-376');">__splitAttrs</a></tt><tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">)</tt> </tt>
+<a name="L1666"></a><tt class="py-lineno">1666</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">:</tt> </tt>
+<a name="L1667"></a><tt class="py-lineno">1667</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">v</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">' '</tt><tt class="py-op">:</tt> </tt>
+<a name="L1668"></a><tt class="py-lineno">1668</tt>  <tt class="py-line">                    <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">"Unexpected root element starting with ' '."</tt><tt class="py-op">)</tt> </tt>
+<a name="L1669"></a><tt class="py-lineno">1669</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt id="link-377" class="py-name"><a title="src.com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-377', 'View', 'link-57');">View</a></tt><tt class="py-op">.</tt><tt id="link-378" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.factory" class="py-name" href="#" onclick="return doclink('link-378', 'factory', 'link-282');">factory</a></tt><tt class="py-op">(</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-379" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-379', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">forceViewServerUse</tt><tt class="py-op">)</tt> </tt>
+<a name="L1670"></a><tt class="py-lineno">1670</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-380" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-380', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">raw</tt> <tt class="py-op">=</tt> <tt class="py-name">v</tt> </tt>
+<a name="L1671"></a><tt class="py-lineno">1671</tt>  <tt class="py-line">                <tt class="py-name">treeLevel</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L1672"></a><tt class="py-lineno">1672</tt>  <tt class="py-line">                <tt class="py-name">newLevel</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L1673"></a><tt class="py-lineno">1673</tt>  <tt class="py-line">                <tt class="py-name">lastView</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> </tt>
+<a name="L1674"></a><tt class="py-lineno">1674</tt>  <tt class="py-line">                <tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> </tt>
+<a name="L1675"></a><tt class="py-lineno">1675</tt>  <tt class="py-line">                <tt class="py-name">parents</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">parent</tt><tt class="py-op">)</tt> </tt>
+<a name="L1676"></a><tt class="py-lineno">1676</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1677"></a><tt class="py-lineno">1677</tt>  <tt class="py-line">                <tt class="py-name">newLevel</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">.</tt><tt class="py-name">lstrip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1678"></a><tt class="py-lineno">1678</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">newLevel</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L1679"></a><tt class="py-lineno">1679</tt>  <tt class="py-line">                    <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">"newLevel==0 treeLevel=%d but tree can have only one root, v=%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">treeLevel</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1680"></a><tt class="py-lineno">1680</tt>  <tt class="py-line">                <tt class="py-name">child</tt> <tt class="py-op">=</tt> <tt id="link-381" class="py-name"><a title="src.com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-381', 'View', 'link-57');">View</a></tt><tt class="py-op">.</tt><tt id="link-382" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.factory" class="py-name" href="#" onclick="return doclink('link-382', 'factory', 'link-282');">factory</a></tt><tt class="py-op">(</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-383" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-383', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">forceViewServerUse</tt><tt class="py-op">)</tt> </tt>
+<a name="L1681"></a><tt class="py-lineno">1681</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-384" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-384', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> <tt class="py-name">child</tt><tt class="py-op">.</tt><tt class="py-name">raw</tt> <tt class="py-op">=</tt> <tt class="py-name">v</tt> </tt>
+<a name="L1682"></a><tt class="py-lineno">1682</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">newLevel</tt> <tt class="py-op">==</tt> <tt class="py-name">treeLevel</tt><tt class="py-op">:</tt> </tt>
+<a name="L1683"></a><tt class="py-lineno">1683</tt>  <tt class="py-line">                    <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-385" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.add" class="py-name" href="#" onclick="return doclink('link-385', 'add', 'link-283');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">)</tt> </tt>
+<a name="L1684"></a><tt class="py-lineno">1684</tt>  <tt class="py-line">                    <tt class="py-name">lastView</tt> <tt class="py-op">=</tt> <tt class="py-name">child</tt> </tt>
+<a name="L1685"></a><tt class="py-lineno">1685</tt>  <tt class="py-line">                <tt class="py-keyword">elif</tt> <tt class="py-name">newLevel</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">treeLevel</tt><tt class="py-op">:</tt> </tt>
+<a name="L1686"></a><tt class="py-lineno">1686</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">newLevel</tt> <tt class="py-op">-</tt> <tt class="py-name">treeLevel</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L1687"></a><tt class="py-lineno">1687</tt>  <tt class="py-line">                        <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">"newLevel jumps %d levels, v=%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">newLevel</tt><tt class="py-op">-</tt><tt class="py-name">treeLevel</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1688"></a><tt class="py-lineno">1688</tt>  <tt class="py-line">                    <tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">lastView</tt> </tt>
+<a name="L1689"></a><tt class="py-lineno">1689</tt>  <tt class="py-line">                    <tt class="py-name">parents</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">parent</tt><tt class="py-op">)</tt> </tt>
+<a name="L1690"></a><tt class="py-lineno">1690</tt>  <tt class="py-line">                    <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-386" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.add" class="py-name" href="#" onclick="return doclink('link-386', 'add', 'link-283');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">)</tt> </tt>
+<a name="L1691"></a><tt class="py-lineno">1691</tt>  <tt class="py-line">                    <tt class="py-name">lastView</tt> <tt class="py-op">=</tt> <tt class="py-name">child</tt> </tt>
+<a name="L1692"></a><tt class="py-lineno">1692</tt>  <tt class="py-line">                    <tt class="py-name">treeLevel</tt> <tt class="py-op">=</tt> <tt class="py-name">newLevel</tt> </tt>
+<a name="L1693"></a><tt class="py-lineno">1693</tt>  <tt class="py-line">                <tt class="py-keyword">else</tt><tt class="py-op">:</tt> <tt class="py-comment"># newLevel &lt; treeLevel</tt> </tt>
+<a name="L1694"></a><tt class="py-lineno">1694</tt>  <tt class="py-line">                    <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">treeLevel</tt> <tt class="py-op">-</tt> <tt class="py-name">newLevel</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1695"></a><tt class="py-lineno">1695</tt>  <tt class="py-line">                        <tt class="py-name">parents</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1696"></a><tt class="py-lineno">1696</tt>  <tt class="py-line">                    <tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">parents</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1697"></a><tt class="py-lineno">1697</tt>  <tt class="py-line">                    <tt class="py-name">parents</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">parent</tt><tt class="py-op">)</tt> </tt>
+<a name="L1698"></a><tt class="py-lineno">1698</tt>  <tt class="py-line">                    <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-387" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.add" class="py-name" href="#" onclick="return doclink('link-387', 'add', 'link-283');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">)</tt> </tt>
+<a name="L1699"></a><tt class="py-lineno">1699</tt>  <tt class="py-line">                    <tt class="py-name">treeLevel</tt> <tt class="py-op">=</tt> <tt class="py-name">newLevel</tt> </tt>
+<a name="L1700"></a><tt class="py-lineno">1700</tt>  <tt class="py-line">                    <tt class="py-name">lastView</tt> <tt class="py-op">=</tt> <tt class="py-name">child</tt> </tt>
+<a name="L1701"></a><tt class="py-lineno">1701</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">lastView</tt><tt class="py-op">)</tt> </tt>
+<a name="L1702"></a><tt class="py-lineno">1702</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt><tt class="py-op">[</tt><tt class="py-name">lastView</tt><tt class="py-op">.</tt><tt id="link-388" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-388', 'getUniqueId', 'link-125');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">lastView</tt> </tt>
+</div><a name="L1703"></a><tt class="py-lineno">1703</tt>  <tt class="py-line">     </tt>
+<a name="ViewClient.__parseTreeFromUiAutomatorDump"></a><div id="ViewClient.__parseTreeFromUiAutomatorDump-def"><a name="L1704"></a><tt class="py-lineno">1704</tt> <a class="py-toggle" href="#" id="ViewClient.__parseTreeFromUiAutomatorDump-toggle" onclick="return toggle('ViewClient.__parseTreeFromUiAutomatorDump');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__parseTreeFromUiAutomatorDump">__parseTreeFromUiAutomatorDump</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">receivedXml</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__parseTreeFromUiAutomatorDump-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__parseTreeFromUiAutomatorDump-expanded"><a name="L1705"></a><tt class="py-lineno">1705</tt>  <tt class="py-line">        <tt class="py-name">parser</tt> <tt class="py-op">=</tt> <tt id="link-389" class="py-name" targets="Class src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient=src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html"><a title="src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient" class="py-name" href="#" onclick="return doclink('link-389', 'UiAutomator2AndroidViewClient', 'link-389');">UiAutomator2AndroidViewClient</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-390" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-390', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L1706"></a><tt class="py-lineno">1706</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt id="link-391" class="py-name"><a title="src.com.dtmilano.android.viewclient.Excerpt2Code.Parse
+src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.Parse" class="py-name" href="#" onclick="return doclink('link-391', 'Parse', 'link-287');">Parse</a></tt><tt class="py-op">(</tt><tt class="py-name">receivedXml</tt><tt class="py-op">)</tt> </tt>
+<a name="L1707"></a><tt class="py-lineno">1707</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt> <tt class="py-op">=</tt> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">views</tt> </tt>
+<a name="L1708"></a><tt class="py-lineno">1708</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1709"></a><tt class="py-lineno">1709</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt><tt class="py-op">:</tt> </tt>
+<a name="L1710"></a><tt class="py-lineno">1710</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt><tt class="py-op">[</tt><tt class="py-name">v</tt><tt class="py-op">.</tt><tt id="link-392" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-392', 'getUniqueId', 'link-125');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">v</tt> </tt>
+</div><a name="L1711"></a><tt class="py-lineno">1711</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.getRoot"></a><div id="ViewClient.getRoot-def"><a name="L1712"></a><tt class="py-lineno">1712</tt> <a class="py-toggle" href="#" id="ViewClient.getRoot-toggle" onclick="return toggle('ViewClient.getRoot');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#getRoot">getRoot</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.getRoot-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.getRoot-expanded"><a name="L1713"></a><tt class="py-lineno">1713</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1714"></a><tt class="py-lineno">1714</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the root node of the C{View} tree</tt> </tt>
+<a name="L1715"></a><tt class="py-lineno">1715</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1716"></a><tt class="py-lineno">1716</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the root node of the C{View} tree</tt> </tt>
+<a name="L1717"></a><tt class="py-lineno">1717</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1718"></a><tt class="py-lineno">1718</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> </tt>
+</div><a name="L1719"></a><tt class="py-lineno">1719</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.traverse"></a><div id="ViewClient.traverse-def"><a name="L1720"></a><tt class="py-lineno">1720</tt> <a class="py-toggle" href="#" id="ViewClient.traverse-toggle" onclick="return toggle('ViewClient.traverse');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverse">traverse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">,</tt> <tt class="py-param">indent</tt><tt class="py-op">=</tt><tt class="py-string">""</tt><tt class="py-op">,</tt> <tt class="py-param">transform</tt><tt class="py-op">=</tt><tt id="link-393" class="py-name"><a title="src.com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-393', 'View', 'link-57');">View</a></tt><tt class="py-op">.</tt><tt id="link-394" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__str__
+src.com.dtmilano.android.viewclient.Window.__str__" class="py-name" href="#" onclick="return doclink('link-394', '__str__', 'link-271');">__str__</a></tt><tt class="py-op">,</tt> <tt class="py-param">stream</tt><tt class="py-op">=</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.traverse-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.traverse-expanded"><a name="L1721"></a><tt class="py-lineno">1721</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1722"></a><tt class="py-lineno">1722</tt>  <tt class="py-line"><tt class="py-docstring">        Traverses the C{View} tree and prints its nodes.</tt> </tt>
+<a name="L1723"></a><tt class="py-lineno">1723</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1724"></a><tt class="py-lineno">1724</tt>  <tt class="py-line"><tt class="py-docstring">        The nodes are printed converting them to string but other transformations can be specified</tt> </tt>
+<a name="L1725"></a><tt class="py-lineno">1725</tt>  <tt class="py-line"><tt class="py-docstring">        by providing a method name as the C{transform} parameter.</tt> </tt>
+<a name="L1726"></a><tt class="py-lineno">1726</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1727"></a><tt class="py-lineno">1727</tt>  <tt class="py-line"><tt class="py-docstring">        @type root: L{View}</tt> </tt>
+<a name="L1728"></a><tt class="py-lineno">1728</tt>  <tt class="py-line"><tt class="py-docstring">        @param root: the root node from where the traverse starts</tt> </tt>
+<a name="L1729"></a><tt class="py-lineno">1729</tt>  <tt class="py-line"><tt class="py-docstring">        @type indent: str</tt> </tt>
+<a name="L1730"></a><tt class="py-lineno">1730</tt>  <tt class="py-line"><tt class="py-docstring">        @param indent: the indentation string to use to print the nodes</tt> </tt>
+<a name="L1731"></a><tt class="py-lineno">1731</tt>  <tt class="py-line"><tt class="py-docstring">        @type transform: method</tt> </tt>
+<a name="L1732"></a><tt class="py-lineno">1732</tt>  <tt class="py-line"><tt class="py-docstring">        @param transform: a method to use to transform the node before is printed  </tt> </tt>
+<a name="L1733"></a><tt class="py-lineno">1733</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1734"></a><tt class="py-lineno">1734</tt>  <tt class="py-line"> </tt>
+<a name="L1735"></a><tt class="py-lineno">1735</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-395" class="py-name"><a title="src.com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-395', 'type', 'link-252');">type</a></tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">types</tt><tt class="py-op">.</tt><tt class="py-name">StringType</tt> <tt class="py-keyword">and</tt> <tt class="py-name">root</tt> <tt class="py-op">==</tt> <tt class="py-string">"ROOT"</tt><tt class="py-op">:</tt> </tt>
+<a name="L1736"></a><tt class="py-lineno">1736</tt>  <tt class="py-line">            <tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> </tt>
+<a name="L1737"></a><tt class="py-lineno">1737</tt>  <tt class="py-line"> </tt>
+<a name="L1738"></a><tt class="py-lineno">1738</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-396" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-396', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-397" class="py-name" targets="Static Method src.com.dtmilano.android.viewclient.ViewClient.__traverse()=src.com.dtmilano.android.viewclient.ViewClient-class.html#__traverse"><a title="src.com.dtmilano.android.viewclient.ViewClient.__traverse" class="py-name" href="#" onclick="return doclink('link-397', '__traverse', 'link-397');">__traverse</a></tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">,</tt> <tt class="py-name">indent</tt><tt class="py-op">,</tt> <tt class="py-name">transform</tt><tt class="py-op">,</tt> <tt class="py-name">stream</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1739"></a><tt class="py-lineno">1739</tt>  <tt class="py-line"><tt class="py-comment">#         if not root:</tt> </tt>
+<a name="L1740"></a><tt class="py-lineno">1740</tt>  <tt class="py-line"><tt class="py-comment">#             return</tt> </tt>
+<a name="L1741"></a><tt class="py-lineno">1741</tt>  <tt class="py-line"><tt class="py-comment"># </tt> </tt>
+<a name="L1742"></a><tt class="py-lineno">1742</tt>  <tt class="py-line"><tt class="py-comment">#         s = transform(root)</tt> </tt>
+<a name="L1743"></a><tt class="py-lineno">1743</tt>  <tt class="py-line"><tt class="py-comment">#         if s:</tt> </tt>
+<a name="L1744"></a><tt class="py-lineno">1744</tt>  <tt class="py-line"><tt class="py-comment">#             print &gt;&gt;stream, "%s%s" % (indent, s)</tt> </tt>
+<a name="L1745"></a><tt class="py-lineno">1745</tt>  <tt class="py-line"><tt class="py-comment">#         </tt> </tt>
+<a name="L1746"></a><tt class="py-lineno">1746</tt>  <tt class="py-line"><tt class="py-comment">#         for ch in root.children:</tt> </tt>
+<a name="L1747"></a><tt class="py-lineno">1747</tt>  <tt class="py-line"><tt class="py-comment">#             self.traverse(ch, indent=indent+"   ", transform=transform, stream=stream)</tt> </tt>
+<a name="L1748"></a><tt class="py-lineno">1748</tt>  <tt class="py-line"> </tt>
+<a name="L1749"></a><tt class="py-lineno">1749</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.__traverse"></a><div id="ViewClient.__traverse-def"><a name="L1750"></a><tt class="py-lineno">1750</tt> <a class="py-toggle" href="#" id="ViewClient.__traverse-toggle" onclick="return toggle('ViewClient.__traverse');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__traverse">__traverse</a><tt class="py-op">(</tt><tt class="py-param">root</tt><tt class="py-op">,</tt> <tt class="py-param">indent</tt><tt class="py-op">=</tt><tt class="py-string">""</tt><tt class="py-op">,</tt> <tt class="py-param">transform</tt><tt class="py-op">=</tt><tt id="link-398" class="py-name"><a title="src.com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-398', 'View', 'link-57');">View</a></tt><tt class="py-op">.</tt><tt id="link-399" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__str__
+src.com.dtmilano.android.viewclient.Window.__str__" class="py-name" href="#" onclick="return doclink('link-399', '__str__', 'link-271');">__str__</a></tt><tt class="py-op">,</tt> <tt class="py-param">stream</tt><tt class="py-op">=</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__traverse-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__traverse-expanded"><a name="L1751"></a><tt class="py-lineno">1751</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">root</tt><tt class="py-op">:</tt> </tt>
+<a name="L1752"></a><tt class="py-lineno">1752</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> </tt>
+<a name="L1753"></a><tt class="py-lineno">1753</tt>  <tt class="py-line"> </tt>
+<a name="L1754"></a><tt class="py-lineno">1754</tt>  <tt class="py-line">        <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">transform</tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L1755"></a><tt class="py-lineno">1755</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">s</tt><tt class="py-op">:</tt> </tt>
+<a name="L1756"></a><tt class="py-lineno">1756</tt>  <tt class="py-line">            <tt class="py-name">us</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-string">'replace'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1757"></a><tt class="py-lineno">1757</tt>  <tt class="py-line">            <tt class="py-name">ius</tt> <tt class="py-op">=</tt> <tt class="py-name">unicode</tt><tt class="py-op">(</tt><tt class="py-string">"%s%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">indent</tt><tt class="py-op">,</tt> <tt class="py-name">us</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-string">'replace'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1758"></a><tt class="py-lineno">1758</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">stream</tt><tt class="py-op">,</tt> <tt class="py-name">ius</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-string">'replace'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1759"></a><tt class="py-lineno">1759</tt>  <tt class="py-line">         </tt>
+<a name="L1760"></a><tt class="py-lineno">1760</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">ch</tt> <tt class="py-keyword">in</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">children</tt><tt class="py-op">:</tt> </tt>
+<a name="L1761"></a><tt class="py-lineno">1761</tt>  <tt class="py-line">            <tt id="link-400" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-400', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-401" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.__traverse" class="py-name" href="#" onclick="return doclink('link-401', '__traverse', 'link-397');">__traverse</a></tt><tt class="py-op">(</tt><tt class="py-name">ch</tt><tt class="py-op">,</tt> <tt class="py-name">indent</tt><tt class="py-op">=</tt><tt class="py-name">indent</tt><tt class="py-op">+</tt><tt class="py-string">"   "</tt><tt class="py-op">,</tt> <tt class="py-name">transform</tt><tt class="py-op">=</tt><tt class="py-name">transform</tt><tt class="py-op">,</tt> <tt class="py-name">stream</tt><tt class="py-op">=</tt><tt class="py-name">stream</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1762"></a><tt class="py-lineno">1762</tt>  <tt class="py-line">         </tt>
+<a name="ViewClient.dump"></a><div id="ViewClient.dump-def"><a name="L1763"></a><tt class="py-lineno">1763</tt> <a class="py-toggle" href="#" id="ViewClient.dump-toggle" onclick="return toggle('ViewClient.dump');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#dump">dump</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">window</tt><tt class="py-op">=</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-param">sleep</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.dump-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.dump-expanded"><a name="L1764"></a><tt class="py-lineno">1764</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1765"></a><tt class="py-lineno">1765</tt>  <tt class="py-line"><tt class="py-docstring">        Dumps the window content.</tt> </tt>
+<a name="L1766"></a><tt class="py-lineno">1766</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1767"></a><tt class="py-lineno">1767</tt>  <tt class="py-line"><tt class="py-docstring">        Sleep is useful to wait some time before obtaining the new content when something in the</tt> </tt>
+<a name="L1768"></a><tt class="py-lineno">1768</tt>  <tt class="py-line"><tt class="py-docstring">        window has changed.</tt> </tt>
+<a name="L1769"></a><tt class="py-lineno">1769</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1770"></a><tt class="py-lineno">1770</tt>  <tt class="py-line"><tt class="py-docstring">        @type window: int or str</tt> </tt>
+<a name="L1771"></a><tt class="py-lineno">1771</tt>  <tt class="py-line"><tt class="py-docstring">        @param window: the window id or name of the window to dump.</tt> </tt>
+<a name="L1772"></a><tt class="py-lineno">1772</tt>  <tt class="py-line"><tt class="py-docstring">                    The B{name} is the package name or the window name (i.e. StatusBar) for</tt> </tt>
+<a name="L1773"></a><tt class="py-lineno">1773</tt>  <tt class="py-line"><tt class="py-docstring">                    system windows.</tt> </tt>
+<a name="L1774"></a><tt class="py-lineno">1774</tt>  <tt class="py-line"><tt class="py-docstring">                    The window id can be provided as C{int} or C{str}. The C{str} should represent</tt> </tt>
+<a name="L1775"></a><tt class="py-lineno">1775</tt>  <tt class="py-line"><tt class="py-docstring">                    and C{int} in either base 10 or 16.</tt> </tt>
+<a name="L1776"></a><tt class="py-lineno">1776</tt>  <tt class="py-line"><tt class="py-docstring">                    Use -1 to dump all windows.</tt> </tt>
+<a name="L1777"></a><tt class="py-lineno">1777</tt>  <tt class="py-line"><tt class="py-docstring">                    This parameter only is used when the backend is B{ViewServer} and it's</tt> </tt>
+<a name="L1778"></a><tt class="py-lineno">1778</tt>  <tt class="py-line"><tt class="py-docstring">                    ignored for B{UiAutomator}.</tt> </tt>
+<a name="L1779"></a><tt class="py-lineno">1779</tt>  <tt class="py-line"><tt class="py-docstring">        @type sleep: int</tt> </tt>
+<a name="L1780"></a><tt class="py-lineno">1780</tt>  <tt class="py-line"><tt class="py-docstring">        @param sleep: sleep in seconds before proceeding to dump the content</tt> </tt>
+<a name="L1781"></a><tt class="py-lineno">1781</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1782"></a><tt class="py-lineno">1782</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the list of Views as C{str} received from the server after being split into lines</tt> </tt>
+<a name="L1783"></a><tt class="py-lineno">1783</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1784"></a><tt class="py-lineno">1784</tt>  <tt class="py-line">         </tt>
+<a name="L1785"></a><tt class="py-lineno">1785</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-402" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-402', 'sleep', 'link-255');">sleep</a></tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L1786"></a><tt class="py-lineno">1786</tt>  <tt class="py-line">            <tt class="py-name">MonkeyRunner</tt><tt class="py-op">.</tt><tt id="link-403" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-403', 'sleep', 'link-255');">sleep</a></tt><tt class="py-op">(</tt><tt id="link-404" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-404', 'sleep', 'link-255');">sleep</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1787"></a><tt class="py-lineno">1787</tt>  <tt class="py-line">             </tt>
+<a name="L1788"></a><tt class="py-lineno">1788</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L1789"></a><tt class="py-lineno">1789</tt>  <tt class="py-line">            <tt class="py-comment"># NOTICE:</tt> </tt>
+<a name="L1790"></a><tt class="py-lineno">1790</tt>  <tt class="py-line">            <tt class="py-comment"># Using /dev/tty this works even on devices with no sdcard</tt> </tt>
+<a name="L1791"></a><tt class="py-lineno">1791</tt>  <tt class="py-line">            <tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">shell</tt><tt class="py-op">(</tt><tt class="py-string">'uiautomator dump /dev/tty &gt;/dev/null'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1792"></a><tt class="py-lineno">1792</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">received</tt><tt class="py-op">:</tt> </tt>
+<a name="L1793"></a><tt class="py-lineno">1793</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">'ERROR: Empty UiAutomator dump was received'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1794"></a><tt class="py-lineno">1794</tt>  <tt class="py-line">            <tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">received</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">,</tt> <tt class="py-string">'ignore'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1795"></a><tt class="py-lineno">1795</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-405" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-405', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1796"></a><tt class="py-lineno">1796</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">received</tt> </tt>
+<a name="L1797"></a><tt class="py-lineno">1797</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-406" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_RECEIVED" class="py-name" href="#" onclick="return doclink('link-406', 'DEBUG_RECEIVED', 'link-4');">DEBUG_RECEIVED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1798"></a><tt class="py-lineno">1798</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"received %d chars"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1799"></a><tt class="py-lineno">1799</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
+<a name="L1800"></a><tt class="py-lineno">1800</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1801"></a><tt class="py-lineno">1801</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
+<a name="L1802"></a><tt class="py-lineno">1802</tt>  <tt class="py-line">            <tt class="py-name">onlyKilledRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'[\n\S]*Killed[\n\r\S]*'</tt><tt class="py-op">,</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">MULTILINE</tt><tt class="py-op">)</tt> </tt>
+<a name="L1803"></a><tt class="py-lineno">1803</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">onlyKilledRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1804"></a><tt class="py-lineno">1804</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">'''ERROR: UiAutomator output contains no valid information. UiAutomator was killed, no reason given.'''</tt><tt class="py-op">)</tt> </tt>
+<a name="L1805"></a><tt class="py-lineno">1805</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ignoreUiAutomatorKilled</tt><tt class="py-op">:</tt> </tt>
+<a name="L1806"></a><tt class="py-lineno">1806</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-407" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_RECEIVED" class="py-name" href="#" onclick="return doclink('link-407', 'DEBUG_RECEIVED', 'link-4');">DEBUG_RECEIVED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1807"></a><tt class="py-lineno">1807</tt>  <tt class="py-line">                    <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ignoring UiAutomator Killed"</tt> </tt>
+<a name="L1808"></a><tt class="py-lineno">1808</tt>  <tt class="py-line">                <tt class="py-name">killedRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'&lt;/hierarchy&gt;[\n\S]*Killed'</tt><tt class="py-op">,</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">MULTILINE</tt><tt class="py-op">)</tt> </tt>
+<a name="L1809"></a><tt class="py-lineno">1809</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">killedRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1810"></a><tt class="py-lineno">1810</tt>  <tt class="py-line">                    <tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt><tt class="py-op">(</tt><tt class="py-name">killedRE</tt><tt class="py-op">,</tt> <tt class="py-string">'&lt;/hierarchy&gt;'</tt><tt class="py-op">,</tt> <tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1811"></a><tt class="py-lineno">1811</tt>  <tt class="py-line">                <tt class="py-keyword">elif</tt> <tt id="link-408" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_RECEIVED" class="py-name" href="#" onclick="return doclink('link-408', 'DEBUG_RECEIVED', 'link-4');">DEBUG_RECEIVED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1812"></a><tt class="py-lineno">1812</tt>  <tt class="py-line">                    <tt class="py-keyword">print</tt> <tt class="py-string">"UiAutomator Killed: NOT FOUND!"</tt> </tt>
+<a name="L1813"></a><tt class="py-lineno">1813</tt>  <tt class="py-line">                <tt class="py-comment"># It seems that API18 uiautomator spits this message to stdout</tt> </tt>
+<a name="L1814"></a><tt class="py-lineno">1814</tt>  <tt class="py-line">                <tt class="py-name">dumpedToDevTtyRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'&lt;/hierarchy&gt;[\n\S]*UI hierchary dumped to: /dev/tty.*'</tt><tt class="py-op">,</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">MULTILINE</tt><tt class="py-op">)</tt> </tt>
+<a name="L1815"></a><tt class="py-lineno">1815</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">dumpedToDevTtyRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1816"></a><tt class="py-lineno">1816</tt>  <tt class="py-line">                    <tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt><tt class="py-op">(</tt><tt class="py-name">dumpedToDevTtyRE</tt><tt class="py-op">,</tt> <tt class="py-string">'&lt;/hierarchy&gt;'</tt><tt class="py-op">,</tt> <tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1817"></a><tt class="py-lineno">1817</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-409" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_RECEIVED" class="py-name" href="#" onclick="return doclink('link-409', 'DEBUG_RECEIVED', 'link-4');">DEBUG_RECEIVED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1818"></a><tt class="py-lineno">1818</tt>  <tt class="py-line">                    <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"received="</tt><tt class="py-op">,</tt> <tt class="py-name">received</tt> </tt>
+<a name="L1819"></a><tt class="py-lineno">1819</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-string">'\[: not found'</tt><tt class="py-op">,</tt> <tt class="py-name">received</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1820"></a><tt class="py-lineno">1820</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">'''ERROR: Some emulator images (i.e. android 4.1.2 API 16 generic_x86) does not include the '[' command.</tt> </tt>
+<a name="L1821"></a><tt class="py-lineno">1821</tt>  <tt class="py-line"><tt class="py-string">While UiAutomator back-end might be supported 'uiautomator' command fails.</tt> </tt>
+<a name="L1822"></a><tt class="py-lineno">1822</tt>  <tt class="py-line"><tt class="py-string">You should force ViewServer back-end.'''</tt><tt class="py-op">)</tt> </tt>
+<a name="L1823"></a><tt class="py-lineno">1823</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-410" class="py-name" targets="Method src.com.dtmilano.android.viewclient.ViewClient.setViewsFromUiAutomatorDump()=src.com.dtmilano.android.viewclient.ViewClient-class.html#setViewsFromUiAutomatorDump"><a title="src.com.dtmilano.android.viewclient.ViewClient.setViewsFromUiAutomatorDump" class="py-name" href="#" onclick="return doclink('link-410', 'setViewsFromUiAutomatorDump', 'link-410');">setViewsFromUiAutomatorDump</a></tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1824"></a><tt class="py-lineno">1824</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1825"></a><tt class="py-lineno">1825</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">window</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1826"></a><tt class="py-lineno">1826</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-411" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.list" class="py-name" href="#" onclick="return doclink('link-411', 'list', 'link-259');">list</a></tt><tt class="py-op">(</tt><tt id="link-412" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-412', 'sleep', 'link-255');">sleep</a></tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L1827"></a><tt class="py-lineno">1827</tt>  <tt class="py-line">                <tt class="py-name">found</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L1828"></a><tt class="py-lineno">1828</tt>  <tt class="py-line">                <tt class="py-keyword">for</tt> <tt class="py-name">wId</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">:</tt> </tt>
+<a name="L1829"></a><tt class="py-lineno">1829</tt>  <tt class="py-line">                    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1830"></a><tt class="py-lineno">1830</tt>  <tt class="py-line">                        <tt class="py-keyword">if</tt> <tt class="py-name">window</tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">[</tt><tt class="py-name">wId</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L1831"></a><tt class="py-lineno">1831</tt>  <tt class="py-line">                            <tt class="py-name">window</tt> <tt class="py-op">=</tt> <tt class="py-name">wId</tt> </tt>
+<a name="L1832"></a><tt class="py-lineno">1832</tt>  <tt class="py-line">                            <tt class="py-name">found</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L1833"></a><tt class="py-lineno">1833</tt>  <tt class="py-line">                            <tt class="py-keyword">break</tt> </tt>
+<a name="L1834"></a><tt class="py-lineno">1834</tt>  <tt class="py-line">                    <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L1835"></a><tt class="py-lineno">1835</tt>  <tt class="py-line">                        <tt class="py-keyword">pass</tt> </tt>
+<a name="L1836"></a><tt class="py-lineno">1836</tt>  <tt class="py-line">                    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1837"></a><tt class="py-lineno">1837</tt>  <tt class="py-line">                        <tt class="py-keyword">if</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">window</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">wId</tt><tt class="py-op">:</tt> </tt>
+<a name="L1838"></a><tt class="py-lineno">1838</tt>  <tt class="py-line">                            <tt class="py-name">window</tt> <tt class="py-op">=</tt> <tt class="py-name">wId</tt> </tt>
+<a name="L1839"></a><tt class="py-lineno">1839</tt>  <tt class="py-line">                            <tt class="py-name">found</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L1840"></a><tt class="py-lineno">1840</tt>  <tt class="py-line">                            <tt class="py-keyword">break</tt> </tt>
+<a name="L1841"></a><tt class="py-lineno">1841</tt>  <tt class="py-line">                    <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L1842"></a><tt class="py-lineno">1842</tt>  <tt class="py-line">                        <tt class="py-keyword">pass</tt> </tt>
+<a name="L1843"></a><tt class="py-lineno">1843</tt>  <tt class="py-line">                    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1844"></a><tt class="py-lineno">1844</tt>  <tt class="py-line">                        <tt class="py-keyword">if</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">window</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">wId</tt><tt class="py-op">:</tt> </tt>
+<a name="L1845"></a><tt class="py-lineno">1845</tt>  <tt class="py-line">                            <tt class="py-name">window</tt> <tt class="py-op">=</tt> <tt class="py-name">wId</tt> </tt>
+<a name="L1846"></a><tt class="py-lineno">1846</tt>  <tt class="py-line">                            <tt class="py-name">found</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L1847"></a><tt class="py-lineno">1847</tt>  <tt class="py-line">                            <tt class="py-keyword">break</tt> </tt>
+<a name="L1848"></a><tt class="py-lineno">1848</tt>  <tt class="py-line">                    <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L1849"></a><tt class="py-lineno">1849</tt>  <tt class="py-line">                        <tt class="py-keyword">pass</tt> </tt>
+<a name="L1850"></a><tt class="py-lineno">1850</tt>  <tt class="py-line"> </tt>
+<a name="L1851"></a><tt class="py-lineno">1851</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">found</tt><tt class="py-op">:</tt> </tt>
+<a name="L1852"></a><tt class="py-lineno">1852</tt>  <tt class="py-line">                    <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"ERROR: Cannot find window '%s' in %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">window</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1853"></a><tt class="py-lineno">1853</tt>  <tt class="py-line">             </tt>
+<a name="L1854"></a><tt class="py-lineno">1854</tt>  <tt class="py-line">            <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">(</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">AF_INET</tt><tt class="py-op">,</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">SOCK_STREAM</tt><tt class="py-op">)</tt> </tt>
+<a name="L1855"></a><tt class="py-lineno">1855</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1856"></a><tt class="py-lineno">1856</tt>  <tt class="py-line">                <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">connect</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt id="link-413" class="py-name"><a title="src.com.dtmilano.android.viewclient.VIEW_SERVER_HOST" class="py-name" href="#" onclick="return doclink('link-413', 'VIEW_SERVER_HOST', 'link-25');">VIEW_SERVER_HOST</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">localPort</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1857"></a><tt class="py-lineno">1857</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">:</tt> </tt>
+<a name="L1858"></a><tt class="py-lineno">1858</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"ERROR: Connecting to %s:%d: %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-414" class="py-name"><a title="src.com.dtmilano.android.viewclient.VIEW_SERVER_HOST" class="py-name" href="#" onclick="return doclink('link-414', 'VIEW_SERVER_HOST', 'link-25');">VIEW_SERVER_HOST</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">localPort</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1859"></a><tt class="py-lineno">1859</tt>  <tt class="py-line">            <tt class="py-name">cmd</tt> <tt class="py-op">=</tt> <tt class="py-string">'dump %x\r\n'</tt> <tt class="py-op">%</tt> <tt class="py-name">window</tt> </tt>
+<a name="L1860"></a><tt class="py-lineno">1860</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-415" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-415', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1861"></a><tt class="py-lineno">1861</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"executing: '%s'"</tt> <tt class="py-op">%</tt> <tt class="py-name">cmd</tt> </tt>
+<a name="L1862"></a><tt class="py-lineno">1862</tt>  <tt class="py-line">            <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">send</tt><tt class="py-op">(</tt><tt class="py-name">cmd</tt><tt class="py-op">)</tt> </tt>
+<a name="L1863"></a><tt class="py-lineno">1863</tt>  <tt class="py-line">            <tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
+<a name="L1864"></a><tt class="py-lineno">1864</tt>  <tt class="py-line">            <tt class="py-name">doneRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">"DONE"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1865"></a><tt class="py-lineno">1865</tt>  <tt class="py-line">            <tt id="link-416" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-416', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-417" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.setAlarm" class="py-name" href="#" onclick="return doclink('link-417', 'setAlarm', 'link-326');">setAlarm</a></tt><tt class="py-op">(</tt><tt class="py-number">120</tt><tt class="py-op">)</tt> </tt>
+<a name="L1866"></a><tt class="py-lineno">1866</tt>  <tt class="py-line">            <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
+<a name="L1867"></a><tt class="py-lineno">1867</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-418" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_RECEIVED" class="py-name" href="#" onclick="return doclink('link-418', 'DEBUG_RECEIVED', 'link-4');">DEBUG_RECEIVED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1868"></a><tt class="py-lineno">1868</tt>  <tt class="py-line">                    <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"    reading from socket..."</tt> </tt>
+<a name="L1869"></a><tt class="py-lineno">1869</tt>  <tt class="py-line">                <tt class="py-name">received</tt> <tt class="py-op">+=</tt> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">recv</tt><tt class="py-op">(</tt><tt class="py-number">1024</tt><tt class="py-op">)</tt> </tt>
+<a name="L1870"></a><tt class="py-lineno">1870</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">doneRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">7</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1871"></a><tt class="py-lineno">1871</tt>  <tt class="py-line">                    <tt class="py-keyword">break</tt> </tt>
+<a name="L1872"></a><tt class="py-lineno">1872</tt>  <tt class="py-line">            <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1873"></a><tt class="py-lineno">1873</tt>  <tt class="py-line">            <tt id="link-419" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-419', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-420" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.setAlarm" class="py-name" href="#" onclick="return doclink('link-420', 'setAlarm', 'link-326');">setAlarm</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L1874"></a><tt class="py-lineno">1874</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-421" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-421', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1875"></a><tt class="py-lineno">1875</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">received</tt>      </tt>
+<a name="L1876"></a><tt class="py-lineno">1876</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-422" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_RECEIVED" class="py-name" href="#" onclick="return doclink('link-422', 'DEBUG_RECEIVED', 'link-4');">DEBUG_RECEIVED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1877"></a><tt class="py-lineno">1877</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"received %d chars"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1878"></a><tt class="py-lineno">1878</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
+<a name="L1879"></a><tt class="py-lineno">1879</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">received</tt> </tt>
+<a name="L1880"></a><tt class="py-lineno">1880</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
+<a name="L1881"></a><tt class="py-lineno">1881</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-423" class="py-name" targets="Method src.com.dtmilano.android.viewclient.ViewClient.setViews()=src.com.dtmilano.android.viewclient.ViewClient-class.html#setViews"><a title="src.com.dtmilano.android.viewclient.ViewClient.setViews" class="py-name" href="#" onclick="return doclink('link-423', 'setViews', 'link-423');">setViews</a></tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1882"></a><tt class="py-lineno">1882</tt>  <tt class="py-line"> </tt>
+<a name="L1883"></a><tt class="py-lineno">1883</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-424" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_TREE" class="py-name" href="#" onclick="return doclink('link-424', 'DEBUG_TREE', 'link-6');">DEBUG_TREE</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1884"></a><tt class="py-lineno">1884</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-425" class="py-name" targets="Method src.com.dtmilano.android.viewclient.ViewClient.traverse()=src.com.dtmilano.android.viewclient.ViewClient-class.html#traverse"><a title="src.com.dtmilano.android.viewclient.ViewClient.traverse" class="py-name" href="#" onclick="return doclink('link-425', 'traverse', 'link-425');">traverse</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L1885"></a><tt class="py-lineno">1885</tt>  <tt class="py-line">             </tt>
+<a name="L1886"></a><tt class="py-lineno">1886</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt> </tt>
+</div><a name="L1887"></a><tt class="py-lineno">1887</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.list"></a><div id="ViewClient.list-def"><a name="L1888"></a><tt class="py-lineno">1888</tt> <a class="py-toggle" href="#" id="ViewClient.list-toggle" onclick="return toggle('ViewClient.list');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#list">list</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">sleep</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.list-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.list-expanded"><a name="L1889"></a><tt class="py-lineno">1889</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1890"></a><tt class="py-lineno">1890</tt>  <tt class="py-line"><tt class="py-docstring">        List the windows.</tt> </tt>
+<a name="L1891"></a><tt class="py-lineno">1891</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1892"></a><tt class="py-lineno">1892</tt>  <tt class="py-line"><tt class="py-docstring">        Sleep is useful to wait some time before obtaining the new content when something in the</tt> </tt>
+<a name="L1893"></a><tt class="py-lineno">1893</tt>  <tt class="py-line"><tt class="py-docstring">        window has changed.</tt> </tt>
+<a name="L1894"></a><tt class="py-lineno">1894</tt>  <tt class="py-line"><tt class="py-docstring">        This also sets L{self.windows} as the list of windows.</tt> </tt>
+<a name="L1895"></a><tt class="py-lineno">1895</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1896"></a><tt class="py-lineno">1896</tt>  <tt class="py-line"><tt class="py-docstring">        @type sleep: int</tt> </tt>
+<a name="L1897"></a><tt class="py-lineno">1897</tt>  <tt class="py-line"><tt class="py-docstring">        @param sleep: sleep in seconds before proceeding to dump the content</tt> </tt>
+<a name="L1898"></a><tt class="py-lineno">1898</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1899"></a><tt class="py-lineno">1899</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the list of windows</tt> </tt>
+<a name="L1900"></a><tt class="py-lineno">1900</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1901"></a><tt class="py-lineno">1901</tt>  <tt class="py-line">         </tt>
+<a name="L1902"></a><tt class="py-lineno">1902</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-426" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-426', 'sleep', 'link-255');">sleep</a></tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L1903"></a><tt class="py-lineno">1903</tt>  <tt class="py-line">            <tt class="py-name">MonkeyRunner</tt><tt class="py-op">.</tt><tt id="link-427" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-427', 'sleep', 'link-255');">sleep</a></tt><tt class="py-op">(</tt><tt id="link-428" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.sleep" class="py-name" href="#" onclick="return doclink('link-428', 'sleep', 'link-255');">sleep</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1904"></a><tt class="py-lineno">1904</tt>  <tt class="py-line">             </tt>
+<a name="L1905"></a><tt class="py-lineno">1905</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">useUiAutomator</tt><tt class="py-op">:</tt> </tt>
+<a name="L1906"></a><tt class="py-lineno">1906</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">"Not implemented yet: listing windows with UiAutomator"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1907"></a><tt class="py-lineno">1907</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1908"></a><tt class="py-lineno">1908</tt>  <tt class="py-line">            <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">(</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">AF_INET</tt><tt class="py-op">,</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">SOCK_STREAM</tt><tt class="py-op">)</tt> </tt>
+<a name="L1909"></a><tt class="py-lineno">1909</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1910"></a><tt class="py-lineno">1910</tt>  <tt class="py-line">                <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">connect</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt id="link-429" class="py-name"><a title="src.com.dtmilano.android.viewclient.VIEW_SERVER_HOST" class="py-name" href="#" onclick="return doclink('link-429', 'VIEW_SERVER_HOST', 'link-25');">VIEW_SERVER_HOST</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">localPort</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1911"></a><tt class="py-lineno">1911</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">:</tt> </tt>
+<a name="L1912"></a><tt class="py-lineno">1912</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"ERROR: Connecting to %s:%d: %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-430" class="py-name"><a title="src.com.dtmilano.android.viewclient.VIEW_SERVER_HOST" class="py-name" href="#" onclick="return doclink('link-430', 'VIEW_SERVER_HOST', 'link-25');">VIEW_SERVER_HOST</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">localPort</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1913"></a><tt class="py-lineno">1913</tt>  <tt class="py-line">            <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">send</tt><tt class="py-op">(</tt><tt class="py-string">'list\r\n'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1914"></a><tt class="py-lineno">1914</tt>  <tt class="py-line">            <tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
+<a name="L1915"></a><tt class="py-lineno">1915</tt>  <tt class="py-line">            <tt class="py-name">doneRE</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">"DONE"</tt><tt class="py-op">)</tt> </tt>
+<a name="L1916"></a><tt class="py-lineno">1916</tt>  <tt class="py-line">            <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
+<a name="L1917"></a><tt class="py-lineno">1917</tt>  <tt class="py-line">                <tt class="py-name">received</tt> <tt class="py-op">+=</tt> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">recv</tt><tt class="py-op">(</tt><tt class="py-number">1024</tt><tt class="py-op">)</tt> </tt>
+<a name="L1918"></a><tt class="py-lineno">1918</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">doneRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">7</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1919"></a><tt class="py-lineno">1919</tt>  <tt class="py-line">                    <tt class="py-keyword">break</tt> </tt>
+<a name="L1920"></a><tt class="py-lineno">1920</tt>  <tt class="py-line">            <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1921"></a><tt class="py-lineno">1921</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-431" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-431', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1922"></a><tt class="py-lineno">1922</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">received</tt>      </tt>
+<a name="L1923"></a><tt class="py-lineno">1923</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-432" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_RECEIVED" class="py-name" href="#" onclick="return doclink('link-432', 'DEBUG_RECEIVED', 'link-4');">DEBUG_RECEIVED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1924"></a><tt class="py-lineno">1924</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"received %d chars"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L1925"></a><tt class="py-lineno">1925</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
+<a name="L1926"></a><tt class="py-lineno">1926</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">received</tt> </tt>
+<a name="L1927"></a><tt class="py-lineno">1927</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
+<a name="L1928"></a><tt class="py-lineno">1928</tt>  <tt class="py-line"> </tt>
+<a name="L1929"></a><tt class="py-lineno">1929</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1930"></a><tt class="py-lineno">1930</tt>  <tt class="py-line">            <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt class="py-name">received</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1931"></a><tt class="py-lineno">1931</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">line</tt><tt class="py-op">:</tt> </tt>
+<a name="L1932"></a><tt class="py-lineno">1932</tt>  <tt class="py-line">                    <tt class="py-keyword">break</tt> </tt>
+<a name="L1933"></a><tt class="py-lineno">1933</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">doneRE</tt><tt class="py-op">.</tt><tt class="py-name">search</tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1934"></a><tt class="py-lineno">1934</tt>  <tt class="py-line">                    <tt class="py-keyword">break</tt> </tt>
+<a name="L1935"></a><tt class="py-lineno">1935</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">wid</tt><tt class="py-op">,</tt> <tt class="py-name">package</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1936"></a><tt class="py-lineno">1936</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt><tt class="py-op">[</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-string">'0x'</tt> <tt class="py-op">+</tt> <tt class="py-name">wid</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">package</tt> </tt>
+<a name="L1937"></a><tt class="py-lineno">1937</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">windows</tt> </tt>
+</div><a name="L1938"></a><tt class="py-lineno">1938</tt>  <tt class="py-line"> </tt>
+<a name="L1939"></a><tt class="py-lineno">1939</tt>  <tt class="py-line">         </tt>
+<a name="ViewClient.findViewById"></a><div id="ViewClient.findViewById-def"><a name="L1940"></a><tt class="py-lineno">1940</tt> <a class="py-toggle" href="#" id="ViewClient.findViewById-toggle" onclick="return toggle('ViewClient.findViewById');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewById">findViewById</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">viewId</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">,</tt> <tt class="py-param">viewFilter</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewById-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewById-expanded"><a name="L1941"></a><tt class="py-lineno">1941</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1942"></a><tt class="py-lineno">1942</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View with the specified viewId.</tt> </tt>
+<a name="L1943"></a><tt class="py-lineno">1943</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1944"></a><tt class="py-lineno">1944</tt>  <tt class="py-line"><tt class="py-docstring">        @type viewId: str</tt> </tt>
+<a name="L1945"></a><tt class="py-lineno">1945</tt>  <tt class="py-line"><tt class="py-docstring">        @param viewId: the ID of the view to find</tt> </tt>
+<a name="L1946"></a><tt class="py-lineno">1946</tt>  <tt class="py-line"><tt class="py-docstring">        @type root: str</tt> </tt>
+<a name="L1947"></a><tt class="py-lineno">1947</tt>  <tt class="py-line"><tt class="py-docstring">        @type root: View</tt> </tt>
+<a name="L1948"></a><tt class="py-lineno">1948</tt>  <tt class="py-line"><tt class="py-docstring">        @param root: the root node of the tree where the View will be searched</tt> </tt>
+<a name="L1949"></a><tt class="py-lineno">1949</tt>  <tt class="py-line"><tt class="py-docstring">        @type: viewFilter: function</tt> </tt>
+<a name="L1950"></a><tt class="py-lineno">1950</tt>  <tt class="py-line"><tt class="py-docstring">        @param viewFilter: a function that will be invoked providing the candidate View as a parameter</tt> </tt>
+<a name="L1951"></a><tt class="py-lineno">1951</tt>  <tt class="py-line"><tt class="py-docstring">                           and depending on the return value (C{True} or C{False}) the View will be</tt> </tt>
+<a name="L1952"></a><tt class="py-lineno">1952</tt>  <tt class="py-line"><tt class="py-docstring">                           selected and returned as the result of C{findViewById()} or ignored.</tt> </tt>
+<a name="L1953"></a><tt class="py-lineno">1953</tt>  <tt class="py-line"><tt class="py-docstring">                           This can be C{None} and no extra filtering is applied.</tt> </tt>
+<a name="L1954"></a><tt class="py-lineno">1954</tt>  <tt class="py-line"><tt class="py-docstring">                           </tt> </tt>
+<a name="L1955"></a><tt class="py-lineno">1955</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the C{View} found or C{None}</tt> </tt>
+<a name="L1956"></a><tt class="py-lineno">1956</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L1957"></a><tt class="py-lineno">1957</tt>  <tt class="py-line"> </tt>
+<a name="L1958"></a><tt class="py-lineno">1958</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">root</tt><tt class="py-op">:</tt> </tt>
+<a name="L1959"></a><tt class="py-lineno">1959</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1960"></a><tt class="py-lineno">1960</tt>  <tt class="py-line"> </tt>
+<a name="L1961"></a><tt class="py-lineno">1961</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-433" class="py-name"><a title="src.com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-433', 'type', 'link-252');">type</a></tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">types</tt><tt class="py-op">.</tt><tt class="py-name">StringType</tt> <tt class="py-keyword">and</tt> <tt class="py-name">root</tt> <tt class="py-op">==</tt> <tt class="py-string">"ROOT"</tt><tt class="py-op">:</tt> </tt>
+<a name="L1962"></a><tt class="py-lineno">1962</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-434" class="py-name" targets="Method src.com.dtmilano.android.viewclient.ViewClient.findViewById()=src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewById"><a title="src.com.dtmilano.android.viewclient.ViewClient.findViewById" class="py-name" href="#" onclick="return doclink('link-434', 'findViewById', 'link-434');">findViewById</a></tt><tt class="py-op">(</tt><tt class="py-name">viewId</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">,</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">)</tt> </tt>
+<a name="L1963"></a><tt class="py-lineno">1963</tt>  <tt class="py-line"> </tt>
+<a name="L1964"></a><tt class="py-lineno">1964</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt id="link-435" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getId" class="py-name" href="#" onclick="return doclink('link-435', 'getId', 'link-124');">getId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">viewId</tt><tt class="py-op">:</tt> </tt>
+<a name="L1965"></a><tt class="py-lineno">1965</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">:</tt> </tt>
+<a name="L1966"></a><tt class="py-lineno">1966</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1967"></a><tt class="py-lineno">1967</tt>  <tt class="py-line">                    <tt class="py-keyword">return</tt> <tt class="py-name">root</tt> </tt>
+<a name="L1968"></a><tt class="py-lineno">1968</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1969"></a><tt class="py-lineno">1969</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">root</tt> </tt>
+<a name="L1970"></a><tt class="py-lineno">1970</tt>  <tt class="py-line"> </tt>
+<a name="L1971"></a><tt class="py-lineno">1971</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-string">'^id/no_id'</tt><tt class="py-op">,</tt> <tt class="py-name">viewId</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-string">'^id/.+/.+'</tt><tt class="py-op">,</tt> <tt class="py-name">viewId</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1972"></a><tt class="py-lineno">1972</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt id="link-436" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.getUniqueId" class="py-name" href="#" onclick="return doclink('link-436', 'getUniqueId', 'link-125');">getUniqueId</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">viewId</tt><tt class="py-op">:</tt> </tt>
+<a name="L1973"></a><tt class="py-lineno">1973</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">:</tt> </tt>
+<a name="L1974"></a><tt class="py-lineno">1974</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1975"></a><tt class="py-lineno">1975</tt>  <tt class="py-line">                        <tt class="py-keyword">return</tt> <tt class="py-name">root</tt><tt class="py-op">;</tt> </tt>
+<a name="L1976"></a><tt class="py-lineno">1976</tt>  <tt class="py-line">                <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1977"></a><tt class="py-lineno">1977</tt>  <tt class="py-line">                    <tt class="py-keyword">return</tt> <tt class="py-name">root</tt> </tt>
+<a name="L1978"></a><tt class="py-lineno">1978</tt>  <tt class="py-line">                     </tt>
+<a name="L1979"></a><tt class="py-lineno">1979</tt>  <tt class="py-line">         </tt>
+<a name="L1980"></a><tt class="py-lineno">1980</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">ch</tt> <tt class="py-keyword">in</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">children</tt><tt class="py-op">:</tt> </tt>
+<a name="L1981"></a><tt class="py-lineno">1981</tt>  <tt class="py-line">            <tt class="py-name">foundView</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-437" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.findViewById" class="py-name" href="#" onclick="return doclink('link-437', 'findViewById', 'link-434');">findViewById</a></tt><tt class="py-op">(</tt><tt class="py-name">viewId</tt><tt class="py-op">,</tt> <tt class="py-name">ch</tt><tt class="py-op">,</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">)</tt> </tt>
+<a name="L1982"></a><tt class="py-lineno">1982</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">foundView</tt><tt class="py-op">:</tt> </tt>
+<a name="L1983"></a><tt class="py-lineno">1983</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">:</tt> </tt>
+<a name="L1984"></a><tt class="py-lineno">1984</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">(</tt><tt class="py-name">foundView</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1985"></a><tt class="py-lineno">1985</tt>  <tt class="py-line">                        <tt class="py-keyword">return</tt> <tt class="py-name">foundView</tt> </tt>
+<a name="L1986"></a><tt class="py-lineno">1986</tt>  <tt class="py-line">                <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1987"></a><tt class="py-lineno">1987</tt>  <tt class="py-line">                    <tt class="py-keyword">return</tt> <tt class="py-name">foundView</tt> </tt>
+</div><a name="L1988"></a><tt class="py-lineno">1988</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.findViewByIdOrRaise"></a><div id="ViewClient.findViewByIdOrRaise-def"><a name="L1989"></a><tt class="py-lineno">1989</tt> <a class="py-toggle" href="#" id="ViewClient.findViewByIdOrRaise-toggle" onclick="return toggle('ViewClient.findViewByIdOrRaise');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewByIdOrRaise">findViewByIdOrRaise</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">viewId</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">,</tt> <tt class="py-param">viewFilter</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewByIdOrRaise-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewByIdOrRaise-expanded"><a name="L1990"></a><tt class="py-lineno">1990</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L1991"></a><tt class="py-lineno">1991</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View or raise a ViewNotFoundException.</tt> </tt>
+<a name="L1992"></a><tt class="py-lineno">1992</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L1993"></a><tt class="py-lineno">1993</tt>  <tt class="py-line"><tt class="py-docstring">        @type viewId: str</tt> </tt>
+<a name="L1994"></a><tt class="py-lineno">1994</tt>  <tt class="py-line"><tt class="py-docstring">        @param viewId: the ID of the view to find</tt> </tt>
+<a name="L1995"></a><tt class="py-lineno">1995</tt>  <tt class="py-line"><tt class="py-docstring">        @type root: str</tt> </tt>
+<a name="L1996"></a><tt class="py-lineno">1996</tt>  <tt class="py-line"><tt class="py-docstring">        @type root: View</tt> </tt>
+<a name="L1997"></a><tt class="py-lineno">1997</tt>  <tt class="py-line"><tt class="py-docstring">        @param root: the root node of the tree where the View will be searched</tt> </tt>
+<a name="L1998"></a><tt class="py-lineno">1998</tt>  <tt class="py-line"><tt class="py-docstring">        @type: viewFilter: function</tt> </tt>
+<a name="L1999"></a><tt class="py-lineno">1999</tt>  <tt class="py-line"><tt class="py-docstring">        @param viewFilter: a function that will be invoked providing the candidate View as a parameter</tt> </tt>
+<a name="L2000"></a><tt class="py-lineno">2000</tt>  <tt class="py-line"><tt class="py-docstring">                           and depending on the return value (C{True} or C{False}) the View will be</tt> </tt>
+<a name="L2001"></a><tt class="py-lineno">2001</tt>  <tt class="py-line"><tt class="py-docstring">                           selected and returned as the result of C{findViewById()} or ignored.</tt> </tt>
+<a name="L2002"></a><tt class="py-lineno">2002</tt>  <tt class="py-line"><tt class="py-docstring">                           This can be C{None} and no extra filtering is applied.</tt> </tt>
+<a name="L2003"></a><tt class="py-lineno">2003</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the View found</tt> </tt>
+<a name="L2004"></a><tt class="py-lineno">2004</tt>  <tt class="py-line"><tt class="py-docstring">        @raise ViewNotFoundException: raise the exception if View not found</tt> </tt>
+<a name="L2005"></a><tt class="py-lineno">2005</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2006"></a><tt class="py-lineno">2006</tt>  <tt class="py-line">         </tt>
+<a name="L2007"></a><tt class="py-lineno">2007</tt>  <tt class="py-line">        <tt class="py-name">view</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-438" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.findViewById" class="py-name" href="#" onclick="return doclink('link-438', 'findViewById', 'link-434');">findViewById</a></tt><tt class="py-op">(</tt><tt class="py-name">viewId</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">,</tt> <tt class="py-name">viewFilter</tt><tt class="py-op">)</tt> </tt>
+<a name="L2008"></a><tt class="py-lineno">2008</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">view</tt><tt class="py-op">:</tt> </tt>
+<a name="L2009"></a><tt class="py-lineno">2009</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">view</tt> </tt>
+<a name="L2010"></a><tt class="py-lineno">2010</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2011"></a><tt class="py-lineno">2011</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-439" class="py-name" targets="Class src.com.dtmilano.android.viewclient.ViewNotFoundException=src.com.dtmilano.android.viewclient.ViewNotFoundException-class.html"><a title="src.com.dtmilano.android.viewclient.ViewNotFoundException" class="py-name" href="#" onclick="return doclink('link-439', 'ViewNotFoundException', 'link-439');">ViewNotFoundException</a></tt><tt class="py-op">(</tt><tt class="py-string">"ID"</tt><tt class="py-op">,</tt> <tt class="py-name">viewId</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2012"></a><tt class="py-lineno">2012</tt>  <tt class="py-line">         </tt>
+<a name="ViewClient.findViewByTag"></a><div id="ViewClient.findViewByTag-def"><a name="L2013"></a><tt class="py-lineno">2013</tt> <a class="py-toggle" href="#" id="ViewClient.findViewByTag-toggle" onclick="return toggle('ViewClient.findViewByTag');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewByTag">findViewByTag</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewByTag-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewByTag-expanded"><a name="L2014"></a><tt class="py-lineno">2014</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2015"></a><tt class="py-lineno">2015</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View with the specified tag</tt> </tt>
+<a name="L2016"></a><tt class="py-lineno">2016</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2017"></a><tt class="py-lineno">2017</tt>  <tt class="py-line">         </tt>
+<a name="L2018"></a><tt class="py-lineno">2018</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-440" class="py-name" targets="Method src.com.dtmilano.android.viewclient.ViewClient.findViewWithAttribute()=src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttribute"><a title="src.com.dtmilano.android.viewclient.ViewClient.findViewWithAttribute" class="py-name" href="#" onclick="return doclink('link-440', 'findViewWithAttribute', 'link-440');">findViewWithAttribute</a></tt><tt class="py-op">(</tt><tt class="py-string">'getTag()'</tt><tt class="py-op">,</tt> <tt class="py-name">tag</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2019"></a><tt class="py-lineno">2019</tt>  <tt class="py-line">     </tt>
+<a name="ViewClient.findViewByTagOrRaise"></a><div id="ViewClient.findViewByTagOrRaise-def"><a name="L2020"></a><tt class="py-lineno">2020</tt> <a class="py-toggle" href="#" id="ViewClient.findViewByTagOrRaise-toggle" onclick="return toggle('ViewClient.findViewByTagOrRaise');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewByTagOrRaise">findViewByTagOrRaise</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewByTagOrRaise-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewByTagOrRaise-expanded"><a name="L2021"></a><tt class="py-lineno">2021</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2022"></a><tt class="py-lineno">2022</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View with the specified tag or raise a ViewNotFoundException</tt> </tt>
+<a name="L2023"></a><tt class="py-lineno">2023</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2024"></a><tt class="py-lineno">2024</tt>  <tt class="py-line">         </tt>
+<a name="L2025"></a><tt class="py-lineno">2025</tt>  <tt class="py-line">        <tt class="py-name">view</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-441" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.findViewWithAttribute" class="py-name" href="#" onclick="return doclink('link-441', 'findViewWithAttribute', 'link-440');">findViewWithAttribute</a></tt><tt class="py-op">(</tt><tt class="py-string">'getTag()'</tt><tt class="py-op">,</tt> <tt class="py-name">tag</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L2026"></a><tt class="py-lineno">2026</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">view</tt><tt class="py-op">:</tt> </tt>
+<a name="L2027"></a><tt class="py-lineno">2027</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">view</tt> </tt>
+<a name="L2028"></a><tt class="py-lineno">2028</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2029"></a><tt class="py-lineno">2029</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-442" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewNotFoundException" class="py-name" href="#" onclick="return doclink('link-442', 'ViewNotFoundException', 'link-439');">ViewNotFoundException</a></tt><tt class="py-op">(</tt><tt class="py-string">"tag"</tt><tt class="py-op">,</tt> <tt class="py-name">tag</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2030"></a><tt class="py-lineno">2030</tt>  <tt class="py-line">     </tt>
+<a name="ViewClient.__findViewWithAttributeInTree"></a><div id="ViewClient.__findViewWithAttributeInTree-def"><a name="L2031"></a><tt class="py-lineno">2031</tt> <a class="py-toggle" href="#" id="ViewClient.__findViewWithAttributeInTree-toggle" onclick="return toggle('ViewClient.__findViewWithAttributeInTree');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTree">__findViewWithAttributeInTree</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__findViewWithAttributeInTree-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__findViewWithAttributeInTree-expanded"><a name="L2032"></a><tt class="py-lineno">2032</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">:</tt> </tt>
+<a name="L2033"></a><tt class="py-lineno">2033</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: no root, did you forget to call dump()?"</tt> </tt>
+<a name="L2034"></a><tt class="py-lineno">2034</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L2035"></a><tt class="py-lineno">2035</tt>  <tt class="py-line"> </tt>
+<a name="L2036"></a><tt class="py-lineno">2036</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-443" class="py-name"><a title="src.com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-443', 'type', 'link-252');">type</a></tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">types</tt><tt class="py-op">.</tt><tt class="py-name">StringType</tt> <tt class="py-keyword">and</tt> <tt class="py-name">root</tt> <tt class="py-op">==</tt> <tt class="py-string">"ROOT"</tt><tt class="py-op">:</tt> </tt>
+<a name="L2037"></a><tt class="py-lineno">2037</tt>  <tt class="py-line">            <tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> </tt>
+<a name="L2038"></a><tt class="py-lineno">2038</tt>  <tt class="py-line"> </tt>
+<a name="L2039"></a><tt class="py-lineno">2039</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-444" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-444', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__findViewWithAttributeInTree: type val="</tt><tt class="py-op">,</tt> <tt id="link-445" class="py-name"><a title="src.com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-445', 'type', 'link-252');">type</a></tt><tt class="py-op">(</tt><tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+<a name="L2040"></a><tt class="py-lineno">2040</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-446" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-446', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__findViewWithAttributeInTree: checking if root=%s has attr=%s == %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">.</tt><tt id="link-447" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__smallStr__" class="py-name" href="#" onclick="return doclink('link-447', '__smallStr__', 'link-336');">__smallStr__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+<a name="L2041"></a><tt class="py-lineno">2041</tt>  <tt class="py-line">         </tt>
+<a name="L2042"></a><tt class="py-lineno">2042</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">val</tt><tt class="py-op">,</tt> <tt class="py-name">org</tt><tt class="py-op">.</tt><tt class="py-name">python</tt><tt class="py-op">.</tt><tt class="py-name">modules</tt><tt class="py-op">.</tt><tt class="py-name">sre</tt><tt class="py-op">.</tt><tt class="py-name">PatternObject</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2043"></a><tt class="py-lineno">2043</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-448" class="py-name" targets="Method src.com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTreeThatMatches()=src.com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTreeThatMatches"><a title="src.com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTreeThatMatches" class="py-name" href="#" onclick="return doclink('link-448', '__findViewWithAttributeInTreeThatMatches', 'link-448');">__findViewWithAttributeInTreeThatMatches</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L2044"></a><tt class="py-lineno">2044</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2045"></a><tt class="py-lineno">2045</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">root</tt> <tt class="py-keyword">and</tt> <tt class="py-name">attr</tt> <tt class="py-keyword">in</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">map</tt> <tt class="py-keyword">and</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">attr</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-name">val</tt><tt class="py-op">:</tt> </tt>
+<a name="L2046"></a><tt class="py-lineno">2046</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt id="link-449" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-449', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__findViewWithAttributeInTree:  FOUND: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt id="link-450" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__smallStr__" class="py-name" href="#" onclick="return doclink('link-450', '__smallStr__', 'link-336');">__smallStr__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L2047"></a><tt class="py-lineno">2047</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">root</tt> </tt>
+<a name="L2048"></a><tt class="py-lineno">2048</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2049"></a><tt class="py-lineno">2049</tt>  <tt class="py-line">                <tt class="py-keyword">for</tt> <tt class="py-name">ch</tt> <tt class="py-keyword">in</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">children</tt><tt class="py-op">:</tt> </tt>
+<a name="L2050"></a><tt class="py-lineno">2050</tt>  <tt class="py-line">                    <tt class="py-name">v</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-451" class="py-name" targets="Method src.com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTree()=src.com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTree"><a title="src.com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTree" class="py-name" href="#" onclick="return doclink('link-451', '__findViewWithAttributeInTree', 'link-451');">__findViewWithAttributeInTree</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">,</tt> <tt class="py-name">ch</tt><tt class="py-op">)</tt> </tt>
+<a name="L2051"></a><tt class="py-lineno">2051</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">v</tt><tt class="py-op">:</tt> </tt>
+<a name="L2052"></a><tt class="py-lineno">2052</tt>  <tt class="py-line">                        <tt class="py-keyword">return</tt> <tt class="py-name">v</tt> </tt>
+<a name="L2053"></a><tt class="py-lineno">2053</tt>  <tt class="py-line">         </tt>
+<a name="L2054"></a><tt class="py-lineno">2054</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L2055"></a><tt class="py-lineno">2055</tt>  <tt class="py-line">    </tt>
+<a name="ViewClient.__findViewWithAttributeInTreeOrRaise"></a><div id="ViewClient.__findViewWithAttributeInTreeOrRaise-def"><a name="L2056"></a><tt class="py-lineno">2056</tt> <a class="py-toggle" href="#" id="ViewClient.__findViewWithAttributeInTreeOrRaise-toggle" onclick="return toggle('ViewClient.__findViewWithAttributeInTreeOrRaise');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTreeOrRaise">__findViewWithAttributeInTreeOrRaise</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__findViewWithAttributeInTreeOrRaise-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__findViewWithAttributeInTreeOrRaise-expanded"><a name="L2057"></a><tt class="py-lineno">2057</tt>  <tt class="py-line">        <tt class="py-name">view</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-452" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTree" class="py-name" href="#" onclick="return doclink('link-452', '__findViewWithAttributeInTree', 'link-451');">__findViewWithAttributeInTree</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L2058"></a><tt class="py-lineno">2058</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">view</tt><tt class="py-op">:</tt> </tt>
+<a name="L2059"></a><tt class="py-lineno">2059</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">view</tt> </tt>
+<a name="L2060"></a><tt class="py-lineno">2060</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2061"></a><tt class="py-lineno">2061</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-453" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewNotFoundException" class="py-name" href="#" onclick="return doclink('link-453', 'ViewNotFoundException', 'link-439');">ViewNotFoundException</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2062"></a><tt class="py-lineno">2062</tt>  <tt class="py-line">       </tt>
+<a name="ViewClient.__findViewWithAttributeInTreeThatMatches"></a><div id="ViewClient.__findViewWithAttributeInTreeThatMatches-def"><a name="L2063"></a><tt class="py-lineno">2063</tt> <a class="py-toggle" href="#" id="ViewClient.__findViewWithAttributeInTreeThatMatches-toggle" onclick="return toggle('ViewClient.__findViewWithAttributeInTreeThatMatches');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTreeThatMatches">__findViewWithAttributeInTreeThatMatches</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">regex</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">,</tt> <tt class="py-param">rlist</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__findViewWithAttributeInTreeThatMatches-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__findViewWithAttributeInTreeThatMatches-expanded"><a name="L2064"></a><tt class="py-lineno">2064</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">:</tt> </tt>
+<a name="L2065"></a><tt class="py-lineno">2065</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: no root, did you forget to call dump()?"</tt> </tt>
+<a name="L2066"></a><tt class="py-lineno">2066</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L2067"></a><tt class="py-lineno">2067</tt>  <tt class="py-line"> </tt>
+<a name="L2068"></a><tt class="py-lineno">2068</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-454" class="py-name"><a title="src.com.dtmilano.android.viewclient.EditText.type" class="py-name" href="#" onclick="return doclink('link-454', 'type', 'link-252');">type</a></tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">types</tt><tt class="py-op">.</tt><tt class="py-name">StringType</tt> <tt class="py-keyword">and</tt> <tt class="py-name">root</tt> <tt class="py-op">==</tt> <tt class="py-string">"ROOT"</tt><tt class="py-op">:</tt> </tt>
+<a name="L2069"></a><tt class="py-lineno">2069</tt>  <tt class="py-line">            <tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> </tt>
+<a name="L2070"></a><tt class="py-lineno">2070</tt>  <tt class="py-line"> </tt>
+<a name="L2071"></a><tt class="py-lineno">2071</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-455" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-455', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__findViewWithAttributeInTreeThatMatches: checking if root=%s attr=%s matches %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">.</tt><tt id="link-456" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__smallStr__" class="py-name" href="#" onclick="return doclink('link-456', '__smallStr__', 'link-336');">__smallStr__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">regex</tt><tt class="py-op">)</tt> </tt>
+<a name="L2072"></a><tt class="py-lineno">2072</tt>  <tt class="py-line">         </tt>
+<a name="L2073"></a><tt class="py-lineno">2073</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">root</tt> <tt class="py-keyword">and</tt> <tt class="py-name">attr</tt> <tt class="py-keyword">in</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">map</tt> <tt class="py-keyword">and</tt> <tt class="py-name">regex</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">map</tt><tt class="py-op">[</tt><tt class="py-name">attr</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2074"></a><tt class="py-lineno">2074</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-457" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-457', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"__findViewWithAttributeInTreeThatMatches:  FOUND: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt id="link-458" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__smallStr__" class="py-name" href="#" onclick="return doclink('link-458', '__smallStr__', 'link-336');">__smallStr__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L2075"></a><tt class="py-lineno">2075</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">root</tt> </tt>
+<a name="L2076"></a><tt class="py-lineno">2076</tt>  <tt class="py-line">            <tt class="py-comment">#print &gt;&gt;sys.stderr, "appending root=%s to rlist=%s" % (root.__smallStr__(), rlist)</tt> </tt>
+<a name="L2077"></a><tt class="py-lineno">2077</tt>  <tt class="py-line">            <tt class="py-comment">#return rlist.append(root)</tt> </tt>
+<a name="L2078"></a><tt class="py-lineno">2078</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2079"></a><tt class="py-lineno">2079</tt>  <tt class="py-line">            <tt class="py-keyword">for</tt> <tt class="py-name">ch</tt> <tt class="py-keyword">in</tt> <tt class="py-name">root</tt><tt class="py-op">.</tt><tt class="py-name">children</tt><tt class="py-op">:</tt> </tt>
+<a name="L2080"></a><tt class="py-lineno">2080</tt>  <tt class="py-line">                <tt class="py-name">v</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-459" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTreeThatMatches" class="py-name" href="#" onclick="return doclink('link-459', '__findViewWithAttributeInTreeThatMatches', 'link-448');">__findViewWithAttributeInTreeThatMatches</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">regex</tt><tt class="py-op">,</tt> <tt class="py-name">ch</tt><tt class="py-op">,</tt> <tt class="py-name">rlist</tt><tt class="py-op">)</tt> </tt>
+<a name="L2081"></a><tt class="py-lineno">2081</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">v</tt><tt class="py-op">:</tt> </tt>
+<a name="L2082"></a><tt class="py-lineno">2082</tt>  <tt class="py-line">                    <tt class="py-keyword">return</tt> <tt class="py-name">v</tt> </tt>
+<a name="L2083"></a><tt class="py-lineno">2083</tt>  <tt class="py-line">                    <tt class="py-comment">#print &gt;&gt;sys.stderr, "appending v=%s to rlist=%s" % (v.__smallStr__(), rlist)</tt> </tt>
+<a name="L2084"></a><tt class="py-lineno">2084</tt>  <tt class="py-line">                    <tt class="py-comment">#return rlist.append(v)</tt> </tt>
+<a name="L2085"></a><tt class="py-lineno">2085</tt>  <tt class="py-line">         </tt>
+<a name="L2086"></a><tt class="py-lineno">2086</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L2087"></a><tt class="py-lineno">2087</tt>  <tt class="py-line">        <tt class="py-comment">#return rlist</tt> </tt>
+<a name="L2088"></a><tt class="py-lineno">2088</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.findViewWithAttribute"></a><div id="ViewClient.findViewWithAttribute-def"><a name="L2089"></a><tt class="py-lineno">2089</tt> <a class="py-toggle" href="#" id="ViewClient.findViewWithAttribute-toggle" onclick="return toggle('ViewClient.findViewWithAttribute');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttribute">findViewWithAttribute</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewWithAttribute-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewWithAttribute-expanded"><a name="L2090"></a><tt class="py-lineno">2090</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2091"></a><tt class="py-lineno">2091</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View with the specified attribute and value</tt> </tt>
+<a name="L2092"></a><tt class="py-lineno">2092</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2093"></a><tt class="py-lineno">2093</tt>  <tt class="py-line">         </tt>
+<a name="L2094"></a><tt class="py-lineno">2094</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-460" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTree" class="py-name" href="#" onclick="return doclink('link-460', '__findViewWithAttributeInTree', 'link-451');">__findViewWithAttributeInTree</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2095"></a><tt class="py-lineno">2095</tt>  <tt class="py-line">         </tt>
+<a name="ViewClient.findViewWithAttributeOrRaise"></a><div id="ViewClient.findViewWithAttributeOrRaise-def"><a name="L2096"></a><tt class="py-lineno">2096</tt> <a class="py-toggle" href="#" id="ViewClient.findViewWithAttributeOrRaise-toggle" onclick="return toggle('ViewClient.findViewWithAttributeOrRaise');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttributeOrRaise">findViewWithAttributeOrRaise</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewWithAttributeOrRaise-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewWithAttributeOrRaise-expanded"><a name="L2097"></a><tt class="py-lineno">2097</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2098"></a><tt class="py-lineno">2098</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View or raise a ViewNotFoundException.</tt> </tt>
+<a name="L2099"></a><tt class="py-lineno">2099</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L2100"></a><tt class="py-lineno">2100</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the View found</tt> </tt>
+<a name="L2101"></a><tt class="py-lineno">2101</tt>  <tt class="py-line"><tt class="py-docstring">        @raise ViewNotFoundException: raise the exception if View not found</tt> </tt>
+<a name="L2102"></a><tt class="py-lineno">2102</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2103"></a><tt class="py-lineno">2103</tt>  <tt class="py-line">         </tt>
+<a name="L2104"></a><tt class="py-lineno">2104</tt>  <tt class="py-line">        <tt class="py-name">view</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-461" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.findViewWithAttribute" class="py-name" href="#" onclick="return doclink('link-461', 'findViewWithAttribute', 'link-440');">findViewWithAttribute</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L2105"></a><tt class="py-lineno">2105</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">view</tt><tt class="py-op">:</tt> </tt>
+<a name="L2106"></a><tt class="py-lineno">2106</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">view</tt> </tt>
+<a name="L2107"></a><tt class="py-lineno">2107</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2108"></a><tt class="py-lineno">2108</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-462" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewNotFoundException" class="py-name" href="#" onclick="return doclink('link-462', 'ViewNotFoundException', 'link-439');">ViewNotFoundException</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2109"></a><tt class="py-lineno">2109</tt>  <tt class="py-line">         </tt>
+<a name="ViewClient.findViewWithAttributeThatMatches"></a><div id="ViewClient.findViewWithAttributeThatMatches-def"><a name="L2110"></a><tt class="py-lineno">2110</tt> <a class="py-toggle" href="#" id="ViewClient.findViewWithAttributeThatMatches-toggle" onclick="return toggle('ViewClient.findViewWithAttributeThatMatches');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttributeThatMatches">findViewWithAttributeThatMatches</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">regex</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewWithAttributeThatMatches-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewWithAttributeThatMatches-expanded"><a name="L2111"></a><tt class="py-lineno">2111</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2112"></a><tt class="py-lineno">2112</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the list of Views with the specified attribute matching</tt> </tt>
+<a name="L2113"></a><tt class="py-lineno">2113</tt>  <tt class="py-line"><tt class="py-docstring">        regex</tt> </tt>
+<a name="L2114"></a><tt class="py-lineno">2114</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2115"></a><tt class="py-lineno">2115</tt>  <tt class="py-line">         </tt>
+<a name="L2116"></a><tt class="py-lineno">2116</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-463" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTreeThatMatches" class="py-name" href="#" onclick="return doclink('link-463', '__findViewWithAttributeInTreeThatMatches', 'link-448');">__findViewWithAttributeInTreeThatMatches</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">regex</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2117"></a><tt class="py-lineno">2117</tt>  <tt class="py-line">         </tt>
+<a name="ViewClient.findViewWithText"></a><div id="ViewClient.findViewWithText-def"><a name="L2118"></a><tt class="py-lineno">2118</tt> <a class="py-toggle" href="#" id="ViewClient.findViewWithText-toggle" onclick="return toggle('ViewClient.findViewWithText');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithText">findViewWithText</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">text</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewWithText-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewWithText-expanded"><a name="L2119"></a><tt class="py-lineno">2119</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-464" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-464', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L2120"></a><tt class="py-lineno">2120</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"findViewWithText(%s, %s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">text</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L2121"></a><tt class="py-lineno">2121</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">text</tt><tt class="py-op">,</tt> <tt class="py-name">org</tt><tt class="py-op">.</tt><tt class="py-name">python</tt><tt class="py-op">.</tt><tt class="py-name">modules</tt><tt class="py-op">.</tt><tt class="py-name">sre</tt><tt class="py-op">.</tt><tt class="py-name">PatternObject</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2122"></a><tt class="py-lineno">2122</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-465" class="py-name" targets="Method src.com.dtmilano.android.viewclient.ViewClient.findViewWithAttributeThatMatches()=src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttributeThatMatches"><a title="src.com.dtmilano.android.viewclient.ViewClient.findViewWithAttributeThatMatches" class="py-name" href="#" onclick="return doclink('link-465', 'findViewWithAttributeThatMatches', 'link-465');">findViewWithAttributeThatMatches</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt><tt class="py-op">,</tt> <tt class="py-name">text</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L2123"></a><tt class="py-lineno">2123</tt>  <tt class="py-line">            <tt class="py-comment">#l = self.findViewWithAttributeThatMatches(TEXT_PROPERTY, text)</tt> </tt>
+<a name="L2124"></a><tt class="py-lineno">2124</tt>  <tt class="py-line">            <tt class="py-comment">#ll = len(l)</tt> </tt>
+<a name="L2125"></a><tt class="py-lineno">2125</tt>  <tt class="py-line">            <tt class="py-comment">#if ll == 0:</tt> </tt>
+<a name="L2126"></a><tt class="py-lineno">2126</tt>  <tt class="py-line">            <tt class="py-comment">#    return None</tt> </tt>
+<a name="L2127"></a><tt class="py-lineno">2127</tt>  <tt class="py-line">            <tt class="py-comment">#elif ll == 1:</tt> </tt>
+<a name="L2128"></a><tt class="py-lineno">2128</tt>  <tt class="py-line">            <tt class="py-comment">#    return l[0]</tt> </tt>
+<a name="L2129"></a><tt class="py-lineno">2129</tt>  <tt class="py-line">            <tt class="py-comment">#else:</tt> </tt>
+<a name="L2130"></a><tt class="py-lineno">2130</tt>  <tt class="py-line">            <tt class="py-comment">#    print &gt;&gt;sys.stderr, "WARNING: findViewWithAttributeThatMatches invoked by findViewWithText returns %d items." % ll</tt> </tt>
+<a name="L2131"></a><tt class="py-lineno">2131</tt>  <tt class="py-line">            <tt class="py-comment">#    return l</tt> </tt>
+<a name="L2132"></a><tt class="py-lineno">2132</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2133"></a><tt class="py-lineno">2133</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-466" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.findViewWithAttribute" class="py-name" href="#" onclick="return doclink('link-466', 'findViewWithAttribute', 'link-440');">findViewWithAttribute</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">textProperty</tt><tt class="py-op">,</tt> <tt class="py-name">text</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2134"></a><tt class="py-lineno">2134</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.findViewWithTextOrRaise"></a><div id="ViewClient.findViewWithTextOrRaise-def"><a name="L2135"></a><tt class="py-lineno">2135</tt> <a class="py-toggle" href="#" id="ViewClient.findViewWithTextOrRaise-toggle" onclick="return toggle('ViewClient.findViewWithTextOrRaise');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithTextOrRaise">findViewWithTextOrRaise</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">text</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewWithTextOrRaise-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewWithTextOrRaise-expanded"><a name="L2136"></a><tt class="py-lineno">2136</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2137"></a><tt class="py-lineno">2137</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View or raise a ViewNotFoundException.</tt> </tt>
+<a name="L2138"></a><tt class="py-lineno">2138</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L2139"></a><tt class="py-lineno">2139</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the View found</tt> </tt>
+<a name="L2140"></a><tt class="py-lineno">2140</tt>  <tt class="py-line"><tt class="py-docstring">        @raise ViewNotFoundException: raise the exception if View not found</tt> </tt>
+<a name="L2141"></a><tt class="py-lineno">2141</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2142"></a><tt class="py-lineno">2142</tt>  <tt class="py-line">         </tt>
+<a name="L2143"></a><tt class="py-lineno">2143</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-467" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-467', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L2144"></a><tt class="py-lineno">2144</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"findViewWithTextOrRaise(%s, %s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">text</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L2145"></a><tt class="py-lineno">2145</tt>  <tt class="py-line">        <tt class="py-name">view</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-468" class="py-name" targets="Method src.com.dtmilano.android.viewclient.ViewClient.findViewWithText()=src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithText"><a title="src.com.dtmilano.android.viewclient.ViewClient.findViewWithText" class="py-name" href="#" onclick="return doclink('link-468', 'findViewWithText', 'link-468');">findViewWithText</a></tt><tt class="py-op">(</tt><tt class="py-name">text</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+<a name="L2146"></a><tt class="py-lineno">2146</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">view</tt><tt class="py-op">:</tt> </tt>
+<a name="L2147"></a><tt class="py-lineno">2147</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">view</tt> </tt>
+<a name="L2148"></a><tt class="py-lineno">2148</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2149"></a><tt class="py-lineno">2149</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-469" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewNotFoundException" class="py-name" href="#" onclick="return doclink('link-469', 'ViewNotFoundException', 'link-439');">ViewNotFoundException</a></tt><tt class="py-op">(</tt><tt class="py-string">"text"</tt><tt class="py-op">,</tt> <tt class="py-name">text</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2150"></a><tt class="py-lineno">2150</tt>  <tt class="py-line">     </tt>
+<a name="ViewClient.findViewWithContentDescription"></a><div id="ViewClient.findViewWithContentDescription-def"><a name="L2151"></a><tt class="py-lineno">2151</tt> <a class="py-toggle" href="#" id="ViewClient.findViewWithContentDescription-toggle" onclick="return toggle('ViewClient.findViewWithContentDescription');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithContentDescription">findViewWithContentDescription</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">contentdescription</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewWithContentDescription-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewWithContentDescription-expanded"><a name="L2152"></a><tt class="py-lineno">2152</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2153"></a><tt class="py-lineno">2153</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View with the specified content description</tt> </tt>
+<a name="L2154"></a><tt class="py-lineno">2154</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2155"></a><tt class="py-lineno">2155</tt>  <tt class="py-line">         </tt>
+<a name="L2156"></a><tt class="py-lineno">2156</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-470" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTree" class="py-name" href="#" onclick="return doclink('link-470', '__findViewWithAttributeInTree', 'link-451');">__findViewWithAttributeInTree</a></tt><tt class="py-op">(</tt><tt class="py-string">'content-desc'</tt><tt class="py-op">,</tt> <tt class="py-name">contentdescription</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2157"></a><tt class="py-lineno">2157</tt>  <tt class="py-line">       </tt>
+<a name="ViewClient.findViewWithContentDescriptionOrRaise"></a><div id="ViewClient.findViewWithContentDescriptionOrRaise-def"><a name="L2158"></a><tt class="py-lineno">2158</tt> <a class="py-toggle" href="#" id="ViewClient.findViewWithContentDescriptionOrRaise-toggle" onclick="return toggle('ViewClient.findViewWithContentDescriptionOrRaise');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithContentDescriptionOrRaise">findViewWithContentDescriptionOrRaise</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">contentdescription</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">=</tt><tt class="py-string">"ROOT"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewWithContentDescriptionOrRaise-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewWithContentDescriptionOrRaise-expanded"><a name="L2159"></a><tt class="py-lineno">2159</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2160"></a><tt class="py-lineno">2160</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the View with the specified content description</tt> </tt>
+<a name="L2161"></a><tt class="py-lineno">2161</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2162"></a><tt class="py-lineno">2162</tt>  <tt class="py-line">         </tt>
+<a name="L2163"></a><tt class="py-lineno">2163</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-471" class="py-name" targets="Method src.com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTreeOrRaise()=src.com.dtmilano.android.viewclient.ViewClient-class.html#__findViewWithAttributeInTreeOrRaise"><a title="src.com.dtmilano.android.viewclient.ViewClient.__findViewWithAttributeInTreeOrRaise" class="py-name" href="#" onclick="return doclink('link-471', '__findViewWithAttributeInTreeOrRaise', 'link-471');">__findViewWithAttributeInTreeOrRaise</a></tt><tt class="py-op">(</tt><tt class="py-string">'content-desc'</tt><tt class="py-op">,</tt> <tt class="py-name">contentdescription</tt><tt class="py-op">,</tt> <tt class="py-name">root</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2164"></a><tt class="py-lineno">2164</tt>  <tt class="py-line">     </tt>
+<a name="ViewClient.findViewsContainingPoint"></a><div id="ViewClient.findViewsContainingPoint-def"><a name="L2165"></a><tt class="py-lineno">2165</tt> <a class="py-toggle" href="#" id="ViewClient.findViewsContainingPoint-toggle" onclick="return toggle('ViewClient.findViewsContainingPoint');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewsContainingPoint">findViewsContainingPoint</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-param">x</tt><tt class="py-op">,</tt> <tt class="py-param">y</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-param">filter</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.findViewsContainingPoint-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.findViewsContainingPoint-expanded"><a name="L2166"></a><tt class="py-lineno">2166</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2167"></a><tt class="py-lineno">2167</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the list of Views that contain the point (x, y).</tt> </tt>
+<a name="L2168"></a><tt class="py-lineno">2168</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2169"></a><tt class="py-lineno">2169</tt>  <tt class="py-line">         </tt>
+<a name="L2170"></a><tt class="py-lineno">2170</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">filter</tt><tt class="py-op">:</tt> </tt>
+<a name="L2171"></a><tt class="py-lineno">2171</tt>  <tt class="py-line">            <tt class="py-name">filter</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">v</tt><tt class="py-op">:</tt> <tt class="py-name">True</tt> </tt>
+<a name="L2172"></a><tt class="py-lineno">2172</tt>  <tt class="py-line">         </tt>
+<a name="L2173"></a><tt class="py-lineno">2173</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">[</tt><tt class="py-name">v</tt> <tt class="py-keyword">for</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt> <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">.</tt><tt id="link-472" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.containsPoint()=src.com.dtmilano.android.viewclient.View-class.html#containsPoint"><a title="src.com.dtmilano.android.viewclient.View.containsPoint" class="py-name" href="#" onclick="return doclink('link-472', 'containsPoint', 'link-472');">containsPoint</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt><tt class="py-name">y</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">filter</tt><tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L2174"></a><tt class="py-lineno">2174</tt>  <tt class="py-line">         </tt>
+<a name="ViewClient.getViewIds"></a><div id="ViewClient.getViewIds-def"><a name="L2175"></a><tt class="py-lineno">2175</tt> <a class="py-toggle" href="#" id="ViewClient.getViewIds-toggle" onclick="return toggle('ViewClient.getViewIds');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#getViewIds">getViewIds</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.getViewIds-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.getViewIds-expanded"><a name="L2176"></a><tt class="py-lineno">2176</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2177"></a><tt class="py-lineno">2177</tt>  <tt class="py-line"><tt class="py-docstring">        @deprecated: Use L{getViewsById} instead.</tt> </tt>
+<a name="L2178"></a><tt class="py-lineno">2178</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L2179"></a><tt class="py-lineno">2179</tt>  <tt class="py-line"><tt class="py-docstring">        Returns the Views map.</tt> </tt>
+<a name="L2180"></a><tt class="py-lineno">2180</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2181"></a><tt class="py-lineno">2181</tt>  <tt class="py-line"> </tt>
+<a name="L2182"></a><tt class="py-lineno">2182</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt> </tt>
+</div><a name="L2183"></a><tt class="py-lineno">2183</tt>  <tt class="py-line">     </tt>
+<a name="ViewClient.getViewsById"></a><div id="ViewClient.getViewsById-def"><a name="L2184"></a><tt class="py-lineno">2184</tt> <a class="py-toggle" href="#" id="ViewClient.getViewsById-toggle" onclick="return toggle('ViewClient.getViewsById');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#getViewsById">getViewsById</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.getViewsById-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.getViewsById-expanded"><a name="L2185"></a><tt class="py-lineno">2185</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2186"></a><tt class="py-lineno">2186</tt>  <tt class="py-line"><tt class="py-docstring">        Returns the Views map. The keys are C{uniqueIds} and the values are C{View}s.</tt> </tt>
+<a name="L2187"></a><tt class="py-lineno">2187</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2188"></a><tt class="py-lineno">2188</tt>  <tt class="py-line"> </tt>
+<a name="L2189"></a><tt class="py-lineno">2189</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">viewsById</tt> </tt>
+</div><a name="L2190"></a><tt class="py-lineno">2190</tt>  <tt class="py-line">     </tt>
+<a name="ViewClient.__getFocusedWindowPosition"></a><div id="ViewClient.__getFocusedWindowPosition-def"><a name="L2191"></a><tt class="py-lineno">2191</tt> <a class="py-toggle" href="#" id="ViewClient.__getFocusedWindowPosition-toggle" onclick="return toggle('ViewClient.__getFocusedWindowPosition');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__getFocusedWindowPosition">__getFocusedWindowPosition</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__getFocusedWindowPosition-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__getFocusedWindowPosition-expanded"><a name="L2192"></a><tt class="py-lineno">2192</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__getFocusedWindowId</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2193"></a><tt class="py-lineno">2193</tt>  <tt class="py-line">     </tt>
+<a name="ViewClient.getSdkVersion"></a><div id="ViewClient.getSdkVersion-def"><a name="L2194"></a><tt class="py-lineno">2194</tt> <a class="py-toggle" href="#" id="ViewClient.getSdkVersion-toggle" onclick="return toggle('ViewClient.getSdkVersion');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#getSdkVersion">getSdkVersion</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.getSdkVersion-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.getSdkVersion-expanded"><a name="L2195"></a><tt class="py-lineno">2195</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2196"></a><tt class="py-lineno">2196</tt>  <tt class="py-line"><tt class="py-docstring">        Gets the SDK version.</tt> </tt>
+<a name="L2197"></a><tt class="py-lineno">2197</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2198"></a><tt class="py-lineno">2198</tt>  <tt class="py-line">         </tt>
+<a name="L2199"></a><tt class="py-lineno">2199</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build</tt><tt class="py-op">[</tt><tt id="link-473" class="py-name"><a title="src.com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY" class="py-name" href="#" onclick="return doclink('link-473', 'VERSION_SDK_PROPERTY', 'link-31');">VERSION_SDK_PROPERTY</a></tt><tt class="py-op">]</tt> </tt>
+</div><a name="L2200"></a><tt class="py-lineno">2200</tt>  <tt class="py-line">     </tt>
+<a name="ViewClient.isKeyboardShown"></a><div id="ViewClient.isKeyboardShown-def"><a name="L2201"></a><tt class="py-lineno">2201</tt> <a class="py-toggle" href="#" id="ViewClient.isKeyboardShown-toggle" onclick="return toggle('ViewClient.isKeyboardShown');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#isKeyboardShown">isKeyboardShown</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.isKeyboardShown-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.isKeyboardShown-expanded"><a name="L2202"></a><tt class="py-lineno">2202</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2203"></a><tt class="py-lineno">2203</tt>  <tt class="py-line"><tt class="py-docstring">        Whether the keyboard is displayed.</tt> </tt>
+<a name="L2204"></a><tt class="py-lineno">2204</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2205"></a><tt class="py-lineno">2205</tt>  <tt class="py-line">         </tt>
+<a name="L2206"></a><tt class="py-lineno">2206</tt>  <tt class="py-line">        <tt class="py-name">dim</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">shell</tt><tt class="py-op">(</tt><tt class="py-string">'dumpsys input_method'</tt><tt class="py-op">)</tt> </tt>
+<a name="L2207"></a><tt class="py-lineno">2207</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">dim</tt><tt class="py-op">:</tt> </tt>
+<a name="L2208"></a><tt class="py-lineno">2208</tt>  <tt class="py-line">            <tt class="py-comment"># FIXME: API &gt;= 15 ?</tt> </tt>
+<a name="L2209"></a><tt class="py-lineno">2209</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">"mInputShown=true"</tt> <tt class="py-keyword">in</tt> <tt class="py-name">dim</tt> </tt>
+<a name="L2210"></a><tt class="py-lineno">2210</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+</div><a name="L2211"></a><tt class="py-lineno">2211</tt>  <tt class="py-line"> </tt>
+<a name="ViewClient.writeImageToFile"></a><div id="ViewClient.writeImageToFile-def"><a name="L2212"></a><tt class="py-lineno">2212</tt> <a class="py-toggle" href="#" id="ViewClient.writeImageToFile-toggle" onclick="return toggle('ViewClient.writeImageToFile');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#writeImageToFile">writeImageToFile</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filename</tt><tt class="py-op">,</tt> <tt class="py-param">format</tt><tt class="py-op">=</tt><tt class="py-string">"PNG"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.writeImageToFile-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.writeImageToFile-expanded"><a name="L2213"></a><tt class="py-lineno">2213</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2214"></a><tt class="py-lineno">2214</tt>  <tt class="py-line"><tt class="py-docstring">        Write the View image to the specified filename in the specified format.</tt> </tt>
+<a name="L2215"></a><tt class="py-lineno">2215</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L2216"></a><tt class="py-lineno">2216</tt>  <tt class="py-line"><tt class="py-docstring">        @type filename: str</tt> </tt>
+<a name="L2217"></a><tt class="py-lineno">2217</tt>  <tt class="py-line"><tt class="py-docstring">        @param filename: Absolute path and optional filename receiving the image. If this points to</tt> </tt>
+<a name="L2218"></a><tt class="py-lineno">2218</tt>  <tt class="py-line"><tt class="py-docstring">                         a directory, then the filename is determined by the serialno of the device and</tt> </tt>
+<a name="L2219"></a><tt class="py-lineno">2219</tt>  <tt class="py-line"><tt class="py-docstring">                         format extension.</tt> </tt>
+<a name="L2220"></a><tt class="py-lineno">2220</tt>  <tt class="py-line"><tt class="py-docstring">        @type format: str</tt> </tt>
+<a name="L2221"></a><tt class="py-lineno">2221</tt>  <tt class="py-line"><tt class="py-docstring">        @param format: Image format (default format is PNG)</tt> </tt>
+<a name="L2222"></a><tt class="py-lineno">2222</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2223"></a><tt class="py-lineno">2223</tt>  <tt class="py-line">         </tt>
+<a name="L2224"></a><tt class="py-lineno">2224</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">isabs</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2225"></a><tt class="py-lineno">2225</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"writeImageToFile expects an absolute path"</tt><tt class="py-op">)</tt> </tt>
+<a name="L2226"></a><tt class="py-lineno">2226</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">isdir</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2227"></a><tt class="py-lineno">2227</tt>  <tt class="py-line">            <tt class="py-name">filename</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">serialno</tt> <tt class="py-op">+</tt> <tt class="py-string">'.'</tt> <tt class="py-op">+</tt> <tt class="py-name">format</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L2228"></a><tt class="py-lineno">2228</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-474" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG" class="py-name" href="#" onclick="return doclink('link-474', 'DEBUG', 'link-1');">DEBUG</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L2229"></a><tt class="py-lineno">2229</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"writeImageToFile: saving image to '%s' in %s format"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-name">format</tt><tt class="py-op">)</tt>  </tt>
+<a name="L2230"></a><tt class="py-lineno">2230</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">device</tt><tt class="py-op">.</tt><tt class="py-name">takeSnapshot</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">writeToFile</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-name">format</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2231"></a><tt class="py-lineno">2231</tt>  <tt class="py-line">     </tt>
+<a name="L2232"></a><tt class="py-lineno">2232</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.__pickleable"></a><div id="ViewClient.__pickleable-def"><a name="L2233"></a><tt class="py-lineno">2233</tt> <a class="py-toggle" href="#" id="ViewClient.__pickleable-toggle" onclick="return toggle('ViewClient.__pickleable');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__pickleable">__pickleable</a><tt class="py-op">(</tt><tt class="py-param">tree</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__pickleable-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__pickleable-expanded"><a name="L2234"></a><tt class="py-lineno">2234</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2235"></a><tt class="py-lineno">2235</tt>  <tt class="py-line"><tt class="py-docstring">        Makes the tree pickleable.</tt> </tt>
+<a name="L2236"></a><tt class="py-lineno">2236</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2237"></a><tt class="py-lineno">2237</tt>  <tt class="py-line">         </tt>
+<a name="L2238"></a><tt class="py-lineno">2238</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">removeDeviceReference</tt><tt class="py-op">(</tt><tt class="py-param">view</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2239"></a><tt class="py-lineno">2239</tt>  <tt class="py-line">            <tt class="py-docstring">'''</tt> </tt>
+<a name="L2240"></a><tt class="py-lineno">2240</tt>  <tt class="py-line"><tt class="py-docstring">            Removes the reference to a L{MonkeyDevice}.</tt> </tt>
+<a name="L2241"></a><tt class="py-lineno">2241</tt>  <tt class="py-line"><tt class="py-docstring">            '''</tt> </tt>
+<a name="L2242"></a><tt class="py-lineno">2242</tt>  <tt class="py-line">             </tt>
+<a name="L2243"></a><tt class="py-lineno">2243</tt>  <tt class="py-line">            <tt class="py-name">view</tt><tt class="py-op">.</tt><tt class="py-name">device</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L2244"></a><tt class="py-lineno">2244</tt>  <tt class="py-line">         </tt>
+<a name="L2245"></a><tt class="py-lineno">2245</tt>  <tt class="py-line">        <tt class="py-comment">###########################################################################################</tt> </tt>
+<a name="L2246"></a><tt class="py-lineno">2246</tt>  <tt class="py-line">        <tt class="py-comment"># FIXME: Unfortunatelly deepcopy does not work with MonkeyDevice objects, which is</tt> </tt>
+<a name="L2247"></a><tt class="py-lineno">2247</tt>  <tt class="py-line">        <tt class="py-comment"># sadly the reason why we cannot pickle the tree and we need to remove the MonkeyDevice</tt> </tt>
+<a name="L2248"></a><tt class="py-lineno">2248</tt>  <tt class="py-line">        <tt class="py-comment"># references.</tt> </tt>
+<a name="L2249"></a><tt class="py-lineno">2249</tt>  <tt class="py-line">        <tt class="py-comment"># We wanted to copy the tree to preserve the original and make piclkleable the copy.</tt> </tt>
+<a name="L2250"></a><tt class="py-lineno">2250</tt>  <tt class="py-line">        <tt class="py-comment">#treeCopy = copy.deepcopy(tree)</tt> </tt>
+<a name="L2251"></a><tt class="py-lineno">2251</tt>  <tt class="py-line">        <tt class="py-name">treeCopy</tt> <tt class="py-op">=</tt> <tt class="py-name">tree</tt> </tt>
+<a name="L2252"></a><tt class="py-lineno">2252</tt>  <tt class="py-line">        <tt class="py-comment"># IMPORTANT:</tt> </tt>
+<a name="L2253"></a><tt class="py-lineno">2253</tt>  <tt class="py-line">        <tt class="py-comment"># This assumes that the first element in the list is the tree root</tt> </tt>
+<a name="L2254"></a><tt class="py-lineno">2254</tt>  <tt class="py-line">        <tt id="link-475" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-475', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-476" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.__traverse" class="py-name" href="#" onclick="return doclink('link-476', '__traverse', 'link-397');">__traverse</a></tt><tt class="py-op">(</tt><tt class="py-name">treeCopy</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">transform</tt><tt class="py-op">=</tt><tt class="py-name">removeDeviceReference</tt><tt class="py-op">)</tt> </tt>
+<a name="L2255"></a><tt class="py-lineno">2255</tt>  <tt class="py-line">        <tt class="py-comment">###########################################################################################</tt> </tt>
+<a name="L2256"></a><tt class="py-lineno">2256</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">treeCopy</tt> </tt>
+</div><a name="L2257"></a><tt class="py-lineno">2257</tt>  <tt class="py-line">     </tt>
+<a name="ViewClient.distance"></a><div id="ViewClient.distance-def"><a name="L2258"></a><tt class="py-lineno">2258</tt> <a class="py-toggle" href="#" id="ViewClient.distance-toggle" onclick="return toggle('ViewClient.distance');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#distance">distance</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tree</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.distance-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.distance-expanded"><a name="L2259"></a><tt class="py-lineno">2259</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2260"></a><tt class="py-lineno">2260</tt>  <tt class="py-line"><tt class="py-docstring">        Calculates the distance between this tree and the tree passed as argument.</tt> </tt>
+<a name="L2261"></a><tt class="py-lineno">2261</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L2262"></a><tt class="py-lineno">2262</tt>  <tt class="py-line"><tt class="py-docstring">        @type tree: list of Views</tt> </tt>
+<a name="L2263"></a><tt class="py-lineno">2263</tt>  <tt class="py-line"><tt class="py-docstring">        @param tree: Tree of Views</tt> </tt>
+<a name="L2264"></a><tt class="py-lineno">2264</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the distance</tt> </tt>
+<a name="L2265"></a><tt class="py-lineno">2265</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2266"></a><tt class="py-lineno">2266</tt>  <tt class="py-line">        <tt class="py-comment">################################################################</tt> </tt>
+<a name="L2267"></a><tt class="py-lineno">2267</tt>  <tt class="py-line">        <tt class="py-comment">#FIXME: this should copy the entire tree and then transform it #</tt> </tt>
+<a name="L2268"></a><tt class="py-lineno">2268</tt>  <tt class="py-line">        <tt class="py-comment">################################################################</tt> </tt>
+<a name="L2269"></a><tt class="py-lineno">2269</tt>  <tt class="py-line">        <tt class="py-name">pickleableViews</tt> <tt class="py-op">=</tt> <tt id="link-477" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-477', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-478" class="py-name" targets="Static Method src.com.dtmilano.android.viewclient.ViewClient.__pickleable()=src.com.dtmilano.android.viewclient.ViewClient-class.html#__pickleable"><a title="src.com.dtmilano.android.viewclient.ViewClient.__pickleable" class="py-name" href="#" onclick="return doclink('link-478', '__pickleable', 'link-478');">__pickleable</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt><tt class="py-op">)</tt> </tt>
+<a name="L2270"></a><tt class="py-lineno">2270</tt>  <tt class="py-line">        <tt class="py-name">pickleableTree</tt> <tt class="py-op">=</tt> <tt id="link-479" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-479', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-480" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.__pickleable" class="py-name" href="#" onclick="return doclink('link-480', '__pickleable', 'link-478');">__pickleable</a></tt><tt class="py-op">(</tt><tt class="py-name">tree</tt><tt class="py-op">)</tt> </tt>
+<a name="L2271"></a><tt class="py-lineno">2271</tt>  <tt class="py-line">        <tt class="py-name">s1</tt> <tt class="py-op">=</tt> <tt class="py-name">pickle</tt><tt class="py-op">.</tt><tt class="py-name">dumps</tt><tt class="py-op">(</tt><tt class="py-name">pickleableViews</tt><tt class="py-op">)</tt> </tt>
+<a name="L2272"></a><tt class="py-lineno">2272</tt>  <tt class="py-line">        <tt class="py-name">s2</tt> <tt class="py-op">=</tt> <tt class="py-name">pickle</tt><tt class="py-op">.</tt><tt class="py-name">dumps</tt><tt class="py-op">(</tt><tt class="py-name">pickleableTree</tt><tt class="py-op">)</tt> </tt>
+<a name="L2273"></a><tt class="py-lineno">2273</tt>  <tt class="py-line">         </tt>
+<a name="L2274"></a><tt class="py-lineno">2274</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-481" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_DISTANCE" class="py-name" href="#" onclick="return doclink('link-481', 'DEBUG_DISTANCE', 'link-22');">DEBUG_DISTANCE</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L2275"></a><tt class="py-lineno">2275</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"distance: calculating distance between"</tt><tt class="py-op">,</tt> <tt class="py-name">s1</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-number">20</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-string">"and"</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-number">20</tt><tt class="py-op">]</tt> </tt>
+<a name="L2276"></a><tt class="py-lineno">2276</tt>  <tt class="py-line">         </tt>
+<a name="L2277"></a><tt class="py-lineno">2277</tt>  <tt class="py-line">        <tt class="py-name">l1</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">)</tt> </tt>
+<a name="L2278"></a><tt class="py-lineno">2278</tt>  <tt class="py-line">        <tt class="py-name">l2</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">s2</tt><tt class="py-op">)</tt> </tt>
+<a name="L2279"></a><tt class="py-lineno">2279</tt>  <tt class="py-line">        <tt class="py-name">t</tt> <tt class="py-op">=</tt> <tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">max</tt><tt class="py-op">(</tt><tt class="py-name">l1</tt><tt class="py-op">,</tt> <tt class="py-name">l2</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L2280"></a><tt class="py-lineno">2280</tt>  <tt class="py-line">         </tt>
+<a name="L2281"></a><tt class="py-lineno">2281</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">l1</tt> <tt class="py-op">==</tt> <tt class="py-name">l2</tt><tt class="py-op">:</tt> </tt>
+<a name="L2282"></a><tt class="py-lineno">2282</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-482" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_DISTANCE" class="py-name" href="#" onclick="return doclink('link-482', 'DEBUG_DISTANCE', 'link-22');">DEBUG_DISTANCE</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L2283"></a><tt class="py-lineno">2283</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"distance: trees have same length, using Hamming distance"</tt> </tt>
+<a name="L2284"></a><tt class="py-lineno">2284</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt id="link-483" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-483', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-484" class="py-name" targets="Static Method src.com.dtmilano.android.viewclient.ViewClient.__hammingDistance()=src.com.dtmilano.android.viewclient.ViewClient-class.html#__hammingDistance"><a title="src.com.dtmilano.android.viewclient.ViewClient.__hammingDistance" class="py-name" href="#" onclick="return doclink('link-484', '__hammingDistance', 'link-484');">__hammingDistance</a></tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">)</tt><tt class="py-op">/</tt><tt class="py-name">t</tt> </tt>
+<a name="L2285"></a><tt class="py-lineno">2285</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2286"></a><tt class="py-lineno">2286</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-485" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_DISTANCE" class="py-name" href="#" onclick="return doclink('link-485', 'DEBUG_DISTANCE', 'link-22');">DEBUG_DISTANCE</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L2287"></a><tt class="py-lineno">2287</tt>  <tt class="py-line">                <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"distance: trees have different length, using Levenshtein distance"</tt> </tt>
+<a name="L2288"></a><tt class="py-lineno">2288</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt id="link-486" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-486', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-487" class="py-name" targets="Static Method src.com.dtmilano.android.viewclient.ViewClient.__levenshteinDistance()=src.com.dtmilano.android.viewclient.ViewClient-class.html#__levenshteinDistance"><a title="src.com.dtmilano.android.viewclient.ViewClient.__levenshteinDistance" class="py-name" href="#" onclick="return doclink('link-487', '__levenshteinDistance', 'link-487');">__levenshteinDistance</a></tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">)</tt><tt class="py-op">/</tt><tt class="py-name">t</tt> </tt>
+</div><a name="L2289"></a><tt class="py-lineno">2289</tt>  <tt class="py-line">     </tt>
+<a name="L2290"></a><tt class="py-lineno">2290</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt>   </tt>
+<a name="ViewClient.__hammingDistance"></a><div id="ViewClient.__hammingDistance-def"><a name="L2291"></a><tt class="py-lineno">2291</tt> <a class="py-toggle" href="#" id="ViewClient.__hammingDistance-toggle" onclick="return toggle('ViewClient.__hammingDistance');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__hammingDistance">__hammingDistance</a><tt class="py-op">(</tt><tt class="py-param">s1</tt><tt class="py-op">,</tt> <tt class="py-param">s2</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__hammingDistance-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__hammingDistance-expanded"><a name="L2292"></a><tt class="py-lineno">2292</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2293"></a><tt class="py-lineno">2293</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the Hamming distance between two strings.</tt> </tt>
+<a name="L2294"></a><tt class="py-lineno">2294</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L2295"></a><tt class="py-lineno">2295</tt>  <tt class="py-line"><tt class="py-docstring">        @param s1: string</tt> </tt>
+<a name="L2296"></a><tt class="py-lineno">2296</tt>  <tt class="py-line"><tt class="py-docstring">        @param s2: string</tt> </tt>
+<a name="L2297"></a><tt class="py-lineno">2297</tt>  <tt class="py-line"><tt class="py-docstring">        @return: the distance</tt> </tt>
+<a name="L2298"></a><tt class="py-lineno">2298</tt>  <tt class="py-line"><tt class="py-docstring">        @raise ValueError: if the lenght of the strings differ</tt> </tt>
+<a name="L2299"></a><tt class="py-lineno">2299</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2300"></a><tt class="py-lineno">2300</tt>  <tt class="py-line">         </tt>
+<a name="L2301"></a><tt class="py-lineno">2301</tt>  <tt class="py-line">        <tt class="py-name">l1</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">)</tt> </tt>
+<a name="L2302"></a><tt class="py-lineno">2302</tt>  <tt class="py-line">        <tt class="py-name">l2</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">s2</tt><tt class="py-op">)</tt> </tt>
+<a name="L2303"></a><tt class="py-lineno">2303</tt>  <tt class="py-line">         </tt>
+<a name="L2304"></a><tt class="py-lineno">2304</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">l1</tt> <tt class="py-op">!=</tt> <tt class="py-name">l2</tt><tt class="py-op">:</tt> </tt>
+<a name="L2305"></a><tt class="py-lineno">2305</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"Hamming distance requires strings of same size."</tt><tt class="py-op">)</tt> </tt>
+<a name="L2306"></a><tt class="py-lineno">2306</tt>  <tt class="py-line">         </tt>
+<a name="L2307"></a><tt class="py-lineno">2307</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">sum</tt><tt class="py-op">(</tt><tt class="py-name">ch1</tt> <tt class="py-op">!=</tt> <tt class="py-name">ch2</tt> <tt class="py-keyword">for</tt> <tt class="py-name">ch1</tt><tt class="py-op">,</tt> <tt class="py-name">ch2</tt> <tt class="py-keyword">in</tt> <tt class="py-name">zip</tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2308"></a><tt class="py-lineno">2308</tt>  <tt class="py-line">     </tt>
+<a name="ViewClient.hammingDistance"></a><div id="ViewClient.hammingDistance-def"><a name="L2309"></a><tt class="py-lineno">2309</tt> <a class="py-toggle" href="#" id="ViewClient.hammingDistance-toggle" onclick="return toggle('ViewClient.hammingDistance');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#hammingDistance">hammingDistance</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tree</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.hammingDistance-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.hammingDistance-expanded"><a name="L2310"></a><tt class="py-lineno">2310</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2311"></a><tt class="py-lineno">2311</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the Hamming distance between this tree and the one passed as argument.</tt> </tt>
+<a name="L2312"></a><tt class="py-lineno">2312</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2313"></a><tt class="py-lineno">2313</tt>  <tt class="py-line">         </tt>
+<a name="L2314"></a><tt class="py-lineno">2314</tt>  <tt class="py-line">        <tt class="py-name">s1</tt> <tt class="py-op">=</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">map</tt><tt class="py-op">(</tt><tt id="link-488" class="py-name"><a title="src.com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-488', 'View', 'link-57');">View</a></tt><tt class="py-op">.</tt><tt id="link-489" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__str__
+src.com.dtmilano.android.viewclient.Window.__str__" class="py-name" href="#" onclick="return doclink('link-489', '__str__', 'link-271');">__str__</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L2315"></a><tt class="py-lineno">2315</tt>  <tt class="py-line">        <tt class="py-name">s2</tt> <tt class="py-op">=</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">map</tt><tt class="py-op">(</tt><tt id="link-490" class="py-name"><a title="src.com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-490', 'View', 'link-57');">View</a></tt><tt class="py-op">.</tt><tt id="link-491" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__str__
+src.com.dtmilano.android.viewclient.Window.__str__" class="py-name" href="#" onclick="return doclink('link-491', '__str__', 'link-271');">__str__</a></tt><tt class="py-op">,</tt> <tt class="py-name">tree</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L2316"></a><tt class="py-lineno">2316</tt>  <tt class="py-line">         </tt>
+<a name="L2317"></a><tt class="py-lineno">2317</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-492" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-492', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-493" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.__hammingDistance" class="py-name" href="#" onclick="return doclink('link-493', '__hammingDistance', 'link-484');">__hammingDistance</a></tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2318"></a><tt class="py-lineno">2318</tt>  <tt class="py-line"> </tt>
+<a name="L2319"></a><tt class="py-lineno">2319</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.__levenshteinDistance"></a><div id="ViewClient.__levenshteinDistance-def"><a name="L2320"></a><tt class="py-lineno">2320</tt> <a class="py-toggle" href="#" id="ViewClient.__levenshteinDistance-toggle" onclick="return toggle('ViewClient.__levenshteinDistance');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__levenshteinDistance">__levenshteinDistance</a><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">,</tt> <tt class="py-param">t</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.__levenshteinDistance-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__levenshteinDistance-expanded"><a name="L2321"></a><tt class="py-lineno">2321</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2322"></a><tt class="py-lineno">2322</tt>  <tt class="py-line"><tt class="py-docstring">        Find the Levenshtein distance between two Strings.</tt> </tt>
+<a name="L2323"></a><tt class="py-lineno">2323</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L2324"></a><tt class="py-lineno">2324</tt>  <tt class="py-line"><tt class="py-docstring">        Python version of Levenshtein distance method implemented in Java at</tt> </tt>
+<a name="L2325"></a><tt class="py-lineno">2325</tt>  <tt class="py-line"><tt class="py-docstring">        U{http://www.java2s.com/Code/Java/Data-Type/FindtheLevenshteindistancebetweentwoStrings.htm}.</tt> </tt>
+<a name="L2326"></a><tt class="py-lineno">2326</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
+<a name="L2327"></a><tt class="py-lineno">2327</tt>  <tt class="py-line"><tt class="py-docstring">        This is the number of changes needed to change one String into</tt> </tt>
+<a name="L2328"></a><tt class="py-lineno">2328</tt>  <tt class="py-line"><tt class="py-docstring">        another, where each change is a single character modification (deletion,</tt> </tt>
+<a name="L2329"></a><tt class="py-lineno">2329</tt>  <tt class="py-line"><tt class="py-docstring">        insertion or substitution).</tt> </tt>
+<a name="L2330"></a><tt class="py-lineno">2330</tt>  <tt class="py-line"><tt class="py-docstring">       </tt> </tt>
+<a name="L2331"></a><tt class="py-lineno">2331</tt>  <tt class="py-line"><tt class="py-docstring">        The previous implementation of the Levenshtein distance algorithm</tt> </tt>
+<a name="L2332"></a><tt class="py-lineno">2332</tt>  <tt class="py-line"><tt class="py-docstring">        was from U{http://www.merriampark.com/ld.htm}</tt> </tt>
+<a name="L2333"></a><tt class="py-lineno">2333</tt>  <tt class="py-line"><tt class="py-docstring">       </tt> </tt>
+<a name="L2334"></a><tt class="py-lineno">2334</tt>  <tt class="py-line"><tt class="py-docstring">        Chas Emerick has written an implementation in Java, which avoids an OutOfMemoryError</tt> </tt>
+<a name="L2335"></a><tt class="py-lineno">2335</tt>  <tt class="py-line"><tt class="py-docstring">        which can occur when my Java implementation is used with very large strings.</tt> </tt>
+<a name="L2336"></a><tt class="py-lineno">2336</tt>  <tt class="py-line"><tt class="py-docstring">        This implementation of the Levenshtein distance algorithm</tt> </tt>
+<a name="L2337"></a><tt class="py-lineno">2337</tt>  <tt class="py-line"><tt class="py-docstring">        is from U{http://www.merriampark.com/ldjava.htm}::</tt> </tt>
+<a name="L2338"></a><tt class="py-lineno">2338</tt>  <tt class="py-line"><tt class="py-docstring">       </tt> </tt>
+<a name="L2339"></a><tt class="py-lineno">2339</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance(null, *)             = IllegalArgumentException</tt> </tt>
+<a name="L2340"></a><tt class="py-lineno">2340</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance(*, null)             = IllegalArgumentException</tt> </tt>
+<a name="L2341"></a><tt class="py-lineno">2341</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("","")               = 0</tt> </tt>
+<a name="L2342"></a><tt class="py-lineno">2342</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("","a")              = 1</tt> </tt>
+<a name="L2343"></a><tt class="py-lineno">2343</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("aaapppp", "")       = 7</tt> </tt>
+<a name="L2344"></a><tt class="py-lineno">2344</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("frog", "fog")       = 1</tt> </tt>
+<a name="L2345"></a><tt class="py-lineno">2345</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("fly", "ant")        = 3</tt> </tt>
+<a name="L2346"></a><tt class="py-lineno">2346</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("elephant", "hippo") = 7</tt> </tt>
+<a name="L2347"></a><tt class="py-lineno">2347</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("hippo", "elephant") = 7</tt> </tt>
+<a name="L2348"></a><tt class="py-lineno">2348</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("hippo", "zzzzzzzz") = 8</tt> </tt>
+<a name="L2349"></a><tt class="py-lineno">2349</tt>  <tt class="py-line"><tt class="py-docstring">            StringUtils.getLevenshteinDistance("hello", "hallo")    = 1</tt> </tt>
+<a name="L2350"></a><tt class="py-lineno">2350</tt>  <tt class="py-line"><tt class="py-docstring">       </tt> </tt>
+<a name="L2351"></a><tt class="py-lineno">2351</tt>  <tt class="py-line"><tt class="py-docstring">        @param s:  the first String, must not be null</tt> </tt>
+<a name="L2352"></a><tt class="py-lineno">2352</tt>  <tt class="py-line"><tt class="py-docstring">        @param t:  the second String, must not be null</tt> </tt>
+<a name="L2353"></a><tt class="py-lineno">2353</tt>  <tt class="py-line"><tt class="py-docstring">        @return: result distance</tt> </tt>
+<a name="L2354"></a><tt class="py-lineno">2354</tt>  <tt class="py-line"><tt class="py-docstring">        @raise ValueError: if either String input C{null}</tt> </tt>
+<a name="L2355"></a><tt class="py-lineno">2355</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2356"></a><tt class="py-lineno">2356</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">s</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">or</tt> <tt class="py-name">t</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L2357"></a><tt class="py-lineno">2357</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"Strings must not be null"</tt><tt class="py-op">)</tt> </tt>
+<a name="L2358"></a><tt class="py-lineno">2358</tt>  <tt class="py-line">     </tt>
+<a name="L2359"></a><tt class="py-lineno">2359</tt>  <tt class="py-line">        <tt class="py-name">n</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
+<a name="L2360"></a><tt class="py-lineno">2360</tt>  <tt class="py-line">        <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">t</tt><tt class="py-op">)</tt> </tt>
+<a name="L2361"></a><tt class="py-lineno">2361</tt>  <tt class="py-line">     </tt>
+<a name="L2362"></a><tt class="py-lineno">2362</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">n</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L2363"></a><tt class="py-lineno">2363</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">m</tt> </tt>
+<a name="L2364"></a><tt class="py-lineno">2364</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">m</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L2365"></a><tt class="py-lineno">2365</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">n</tt> </tt>
+<a name="L2366"></a><tt class="py-lineno">2366</tt>  <tt class="py-line">     </tt>
+<a name="L2367"></a><tt class="py-lineno">2367</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">n</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
+<a name="L2368"></a><tt class="py-lineno">2368</tt>  <tt class="py-line">            <tt class="py-name">tmp</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> </tt>
+<a name="L2369"></a><tt class="py-lineno">2369</tt>  <tt class="py-line">            <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">t</tt> </tt>
+<a name="L2370"></a><tt class="py-lineno">2370</tt>  <tt class="py-line">            <tt class="py-name">t</tt> <tt class="py-op">=</tt> <tt class="py-name">tmp</tt> </tt>
+<a name="L2371"></a><tt class="py-lineno">2371</tt>  <tt class="py-line">            <tt class="py-name">n</tt> <tt class="py-op">=</tt> <tt class="py-name">m</tt><tt class="py-op">;</tt> </tt>
+<a name="L2372"></a><tt class="py-lineno">2372</tt>  <tt class="py-line">            <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">t</tt><tt class="py-op">)</tt> </tt>
+<a name="L2373"></a><tt class="py-lineno">2373</tt>  <tt class="py-line">     </tt>
+<a name="L2374"></a><tt class="py-lineno">2374</tt>  <tt class="py-line">        <tt class="py-name">p</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">None</tt><tt class="py-op">]</tt><tt class="py-op">*</tt><tt class="py-op">(</tt><tt class="py-name">n</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L2375"></a><tt class="py-lineno">2375</tt>  <tt class="py-line">        <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">None</tt><tt class="py-op">]</tt><tt class="py-op">*</tt><tt class="py-op">(</tt><tt class="py-name">n</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L2376"></a><tt class="py-lineno">2376</tt>  <tt class="py-line">     </tt>
+<a name="L2377"></a><tt class="py-lineno">2377</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">n</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2378"></a><tt class="py-lineno">2378</tt>  <tt class="py-line">            <tt class="py-name">p</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">i</tt> </tt>
+<a name="L2379"></a><tt class="py-lineno">2379</tt>  <tt class="py-line">     </tt>
+<a name="L2380"></a><tt class="py-lineno">2380</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">j</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">m</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2381"></a><tt class="py-lineno">2381</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt id="link-494" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_DISTANCE" class="py-name" href="#" onclick="return doclink('link-494', 'DEBUG_DISTANCE', 'link-22');">DEBUG_DISTANCE</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L2382"></a><tt class="py-lineno">2382</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">j</tt> <tt class="py-op">%</tt> <tt class="py-number">100</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L2383"></a><tt class="py-lineno">2383</tt>  <tt class="py-line">                    <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"DEBUG:"</tt><tt class="py-op">,</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">j</tt><tt class="py-op">/</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">+</tt><tt class="py-number">1.0</tt><tt class="py-op">)</tt><tt class="py-op">*</tt><tt class="py-number">100</tt><tt class="py-op">)</tt><tt class="py-op">,</tt><tt class="py-string">"%\r"</tt><tt class="py-op">,</tt> </tt>
+<a name="L2384"></a><tt class="py-lineno">2384</tt>  <tt class="py-line">            <tt class="py-name">t_j</tt> <tt class="py-op">=</tt> <tt class="py-name">t</tt><tt class="py-op">[</tt><tt class="py-name">j</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L2385"></a><tt class="py-lineno">2385</tt>  <tt class="py-line">            <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">j</tt> </tt>
+<a name="L2386"></a><tt class="py-lineno">2386</tt>  <tt class="py-line">     </tt>
+<a name="L2387"></a><tt class="py-lineno">2387</tt>  <tt class="py-line">            <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">n</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L2388"></a><tt class="py-lineno">2388</tt>  <tt class="py-line">                <tt class="py-name">cost</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> <tt class="py-keyword">if</tt> <tt class="py-name">s</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-name">t_j</tt> <tt class="py-keyword">else</tt> <tt class="py-number">1</tt> </tt>
+<a name="L2389"></a><tt class="py-lineno">2389</tt>  <tt class="py-line">                <tt class="py-comment">#  minimum of cell to the left+1, to the top+1, diagonally left and up +cost</tt> </tt>
+<a name="L2390"></a><tt class="py-lineno">2390</tt>  <tt class="py-line">                <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">min</tt><tt class="py-op">(</tt><tt class="py-name">min</tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">p</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">p</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">+</tt><tt class="py-name">cost</tt><tt class="py-op">)</tt> </tt>
+<a name="L2391"></a><tt class="py-lineno">2391</tt>  <tt class="py-line">     </tt>
+<a name="L2392"></a><tt class="py-lineno">2392</tt>  <tt class="py-line">            <tt class="py-name">_d</tt> <tt class="py-op">=</tt> <tt class="py-name">p</tt> </tt>
+<a name="L2393"></a><tt class="py-lineno">2393</tt>  <tt class="py-line">            <tt class="py-name">p</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt> </tt>
+<a name="L2394"></a><tt class="py-lineno">2394</tt>  <tt class="py-line">            <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">_d</tt> </tt>
+<a name="L2395"></a><tt class="py-lineno">2395</tt>  <tt class="py-line">     </tt>
+<a name="L2396"></a><tt class="py-lineno">2396</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-495" class="py-name"><a title="src.com.dtmilano.android.viewclient.DEBUG_DISTANCE" class="py-name" href="#" onclick="return doclink('link-495', 'DEBUG_DISTANCE', 'link-22');">DEBUG_DISTANCE</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L2397"></a><tt class="py-lineno">2397</tt>  <tt class="py-line">            <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"\n"</tt> </tt>
+<a name="L2398"></a><tt class="py-lineno">2398</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">p</tt><tt class="py-op">[</tt><tt class="py-name">n</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L2399"></a><tt class="py-lineno">2399</tt>  <tt class="py-line">   </tt>
+<a name="ViewClient.levenshteinDistance"></a><div id="ViewClient.levenshteinDistance-def"><a name="L2400"></a><tt class="py-lineno">2400</tt> <a class="py-toggle" href="#" id="ViewClient.levenshteinDistance-toggle" onclick="return toggle('ViewClient.levenshteinDistance');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#levenshteinDistance">levenshteinDistance</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tree</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.levenshteinDistance-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.levenshteinDistance-expanded"><a name="L2401"></a><tt class="py-lineno">2401</tt>  <tt class="py-line">        <tt class="py-docstring">'''</tt> </tt>
+<a name="L2402"></a><tt class="py-lineno">2402</tt>  <tt class="py-line"><tt class="py-docstring">        Finds the Levenshtein distance between this tree and the one passed as argument.</tt> </tt>
+<a name="L2403"></a><tt class="py-lineno">2403</tt>  <tt class="py-line"><tt class="py-docstring">        '''</tt> </tt>
+<a name="L2404"></a><tt class="py-lineno">2404</tt>  <tt class="py-line">         </tt>
+<a name="L2405"></a><tt class="py-lineno">2405</tt>  <tt class="py-line">        <tt class="py-name">s1</tt> <tt class="py-op">=</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">map</tt><tt class="py-op">(</tt><tt id="link-496" class="py-name"><a title="src.com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-496', 'View', 'link-57');">View</a></tt><tt class="py-op">.</tt><tt id="link-497" class="py-name" targets="Method src.com.dtmilano.android.viewclient.View.__microStr__()=src.com.dtmilano.android.viewclient.View-class.html#__microStr__"><a title="src.com.dtmilano.android.viewclient.View.__microStr__" class="py-name" href="#" onclick="return doclink('link-497', '__microStr__', 'link-497');">__microStr__</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L2406"></a><tt class="py-lineno">2406</tt>  <tt class="py-line">        <tt class="py-name">s2</tt> <tt class="py-op">=</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">map</tt><tt class="py-op">(</tt><tt id="link-498" class="py-name"><a title="src.com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-498', 'View', 'link-57');">View</a></tt><tt class="py-op">.</tt><tt id="link-499" class="py-name"><a title="src.com.dtmilano.android.viewclient.View.__microStr__" class="py-name" href="#" onclick="return doclink('link-499', '__microStr__', 'link-497');">__microStr__</a></tt><tt class="py-op">,</tt> <tt class="py-name">tree</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L2407"></a><tt class="py-lineno">2407</tt>  <tt class="py-line">         </tt>
+<a name="L2408"></a><tt class="py-lineno">2408</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-500" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-500', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-501" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient.__levenshteinDistance" class="py-name" href="#" onclick="return doclink('link-501', '__levenshteinDistance', 'link-487');">__levenshteinDistance</a></tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L2409"></a><tt class="py-lineno">2409</tt>  <tt class="py-line">     </tt>
+<a name="L2410"></a><tt class="py-lineno">2410</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="ViewClient.excerpt"></a><div id="ViewClient.excerpt-def"><a name="L2411"></a><tt class="py-lineno">2411</tt> <a class="py-toggle" href="#" id="ViewClient.excerpt-toggle" onclick="return toggle('ViewClient.excerpt');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="src.com.dtmilano.android.viewclient.ViewClient-class.html#excerpt">excerpt</a><tt class="py-op">(</tt><tt class="py-param">str</tt><tt class="py-op">,</tt> <tt class="py-param">execute</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ViewClient.excerpt-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.excerpt-expanded"><a name="L2412"></a><tt class="py-lineno">2412</tt>  <tt class="py-line">        <tt class="py-name">code</tt> <tt class="py-op">=</tt> <tt id="link-502" class="py-name" targets="Class src.com.dtmilano.android.viewclient.Excerpt2Code=src.com.dtmilano.android.viewclient.Excerpt2Code-class.html"><a title="src.com.dtmilano.android.viewclient.Excerpt2Code" class="py-name" href="#" onclick="return doclink('link-502', 'Excerpt2Code', 'link-502');">Excerpt2Code</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-503" class="py-name"><a title="src.com.dtmilano.android.viewclient.Excerpt2Code.Parse
+src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient.Parse" class="py-name" href="#" onclick="return doclink('link-503', 'Parse', 'link-287');">Parse</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">)</tt> </tt>
+<a name="L2413"></a><tt class="py-lineno">2413</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">execute</tt><tt class="py-op">:</tt> </tt>
+<a name="L2414"></a><tt class="py-lineno">2414</tt>  <tt class="py-line">            <tt class="py-keyword">exec</tt> <tt class="py-name">code</tt> </tt>
+<a name="L2415"></a><tt class="py-lineno">2415</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L2416"></a><tt class="py-lineno">2416</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">code</tt> </tt>
+</div></div><a name="L2417"></a><tt class="py-lineno">2417</tt>  <tt class="py-line"> </tt>
+<a name="L2418"></a><tt class="py-lineno">2418</tt>  <tt class="py-line"> </tt>
+<a name="L2419"></a><tt class="py-lineno">2419</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">"__main__"</tt><tt class="py-op">:</tt> </tt>
+<a name="L2420"></a><tt class="py-lineno">2420</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L2421"></a><tt class="py-lineno">2421</tt>  <tt class="py-line">        <tt class="py-name">vc</tt> <tt class="py-op">=</tt> <tt id="link-504" class="py-name"><a title="src.com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-504', 'ViewClient', 'link-297');">ViewClient</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L2422"></a><tt class="py-lineno">2422</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L2423"></a><tt class="py-lineno">2423</tt>  <tt class="py-line">        <tt class="py-keyword">print</tt> <tt class="py-string">"%s: Don't expect this to do anything"</tt> <tt class="py-op">%</tt> <tt class="py-name">__file__</tt> </tt>
+<a name="L2424"></a><tt class="py-lineno">2424</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Aug  9 01:39:57 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.EditText-class.html b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.EditText-class.html
new file mode 100755
index 0000000..6db7bf7
--- /dev/null
+++ b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.EditText-class.html
@@ -0,0 +1,309 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>src.com.dtmilano.android.viewclient.EditText</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;src ::
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="src.com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="src.com.dtmilano.android.viewclient-module.html">Module&nbsp;viewclient</a> ::
+        Class&nbsp;EditText
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="src.com.dtmilano.android.viewclient.EditText-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class EditText</h1><p class="nomargin-top"><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#EditText">source&nbsp;code</a></span></p>
+<center>
+<center>  <map id="uml_class_diagram_for_src_com_" name="uml_class_diagram_for_src_com_">
+<area shape="rect" id="node1_29" href="src.com.dtmilano.android.viewclient.EditText-class.html#type" title="src.com.dtmilano.android.viewclient.EditText.type" alt="" coords="164,679,264,697"/>
+<area shape="rect" id="node1_30" href="src.com.dtmilano.android.viewclient.EditText-class.html#backspace" title="src.com.dtmilano.android.viewclient.EditText.backspace" alt="" coords="164,697,264,716"/>
+<area shape="rect" id="node1" href="src.com.dtmilano.android.viewclient.EditText-class.html" title="EditText class." alt="" coords="151,646,275,722"/>
+<area shape="rect" id="node2" href="src.com.dtmilano.android.viewclient.TextView-class.html" title="TextView class." alt="" coords="176,582,253,626"/>
+<area shape="rect" id="node3_31" href="src.com.dtmilano.android.viewclient.View-class.html#map" title="The map that contains the attr,value pairs" alt="" coords="17,31,412,49"/>
+<area shape="rect" id="node3_32" href="src.com.dtmilano.android.viewclient.View-class.html#device" title="The MonkeyDevice" alt="" coords="17,49,412,68"/>
+<area shape="rect" id="node3_33" href="src.com.dtmilano.android.viewclient.View-class.html#children" title="The children of this View" alt="" coords="17,68,412,87"/>
+<area shape="rect" id="node3_34" href="src.com.dtmilano.android.viewclient.View-class.html#parent" title="The parent of this View" alt="" coords="17,87,412,105"/>
+<area shape="rect" id="node3_35" href="src.com.dtmilano.android.viewclient.View-class.html#currentFocus" title="The current focus" alt="" coords="17,105,412,124"/>
+<area shape="rect" id="node3_36" href="src.com.dtmilano.android.viewclient.View-class.html#build" title="Build properties" alt="" coords="17,124,412,143"/>
+<area shape="rect" id="node3_37" href="src.com.dtmilano.android.viewclient.View-class.html#useUiAutomator" title="Whether to use UIAutomator or ViewServer" alt="" coords="17,143,412,161"/>
+<area shape="rect" id="node3_38" href="src.com.dtmilano.android.viewclient.View-class.html#idProperty" title="The id property depending on the View attribute format" alt="" coords="17,161,412,180"/>
+<area shape="rect" id="node3_39" href="src.com.dtmilano.android.viewclient.View-class.html#textProperty" title="The text property depending on the View attribute format" alt="" coords="17,180,412,199"/>
+<area shape="rect" id="node3_40" href="src.com.dtmilano.android.viewclient.View-class.html#leftProperty" title="The left property depending on the View attribute format" alt="" coords="17,199,412,217"/>
+<area shape="rect" id="node3_41" href="src.com.dtmilano.android.viewclient.View-class.html#topProperty" title="The top property depending on the View attribute format" alt="" coords="17,217,412,236"/>
+<area shape="rect" id="node3_42" href="src.com.dtmilano.android.viewclient.View-class.html#widthProperty" title="The width property depending on the View attribute format" alt="" coords="17,236,412,255"/>
+<area shape="rect" id="node3_43" href="src.com.dtmilano.android.viewclient.View-class.html#heightProperty" title="The height property depending on the View attribute format" alt="" coords="17,255,412,273"/>
+<area shape="rect" id="node3_44" href="src.com.dtmilano.android.viewclient.View-class.html#factory" title="View factory" alt="" coords="17,276,412,295"/>
+<area shape="rect" id="node3_45" href="src.com.dtmilano.android.viewclient.View-class.html#__init__" title="Constructor" alt="" coords="17,295,412,313"/>
+<area shape="rect" id="node3_46" href="src.com.dtmilano.android.viewclient.View-class.html#__getitem__" title="src.com.dtmilano.android.viewclient.View.__getitem__" alt="" coords="17,313,412,332"/>
+<area shape="rect" id="node3_47" href="src.com.dtmilano.android.viewclient.View-class.html#__getattr__" title="src.com.dtmilano.android.viewclient.View.__getattr__" alt="" coords="17,332,412,351"/>
+<area shape="rect" id="node3_48" href="src.com.dtmilano.android.viewclient.View-class.html#__call__" title="src.com.dtmilano.android.viewclient.View.__call__" alt="" coords="17,351,412,369"/>
+<area shape="rect" id="node3_49" href="src.com.dtmilano.android.viewclient.View-class.html#getClass" title="Gets the View class" alt="" coords="17,369,412,388"/>
+<area shape="rect" id="node3_50" href="src.com.dtmilano.android.viewclient.View-class.html#getId" title="Gets the View Id" alt="" coords="17,388,412,407"/>
+<area shape="rect" id="node3_51" href="src.com.dtmilano.android.viewclient.View-class.html#getContentDescription" title="Gets the content description." alt="" coords="17,407,412,425"/>
+<area shape="rect" id="node3_52" href="src.com.dtmilano.android.viewclient.View-class.html#getParent" title="Gets the parent." alt="" coords="17,425,412,444"/>
+<area shape="rect" id="node3_53" href="src.com.dtmilano.android.viewclient.View-class.html#getText" title="Gets the text attribute." alt="" coords="17,444,412,463"/>
+<area shape="rect" id="node3_54" href="src.com.dtmilano.android.viewclient.View-class.html#getHeight" title="Gets the height." alt="" coords="17,463,412,481"/>
+<area shape="rect" id="node3_55" href="src.com.dtmilano.android.viewclient.View-class.html#getWidth" title="Gets the width." alt="" coords="17,481,412,500"/>
+<area shape="rect" id="node3_56" href="src.com.dtmilano.android.viewclient.View-class.html#getUniqueId" title="Gets the unique Id of this View." alt="" coords="17,500,412,519"/>
+<area shape="rect" id="node3_57" href="src.com.dtmilano.android.viewclient.View-class.html#__str__" title="src.com.dtmilano.android.viewclient.View.__str__" alt="" coords="17,537,412,556"/>
+<area shape="rect" id="node3" href="src.com.dtmilano.android.viewclient.View-class.html" title="View class" alt="" coords="5,6,424,562"/>
+</map>
+  <img src="uml_class_diagram_for_src_com_.gif" alt='' usemap="#uml_class_diagram_for_src_com_" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>EditText class.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="type"></a><span class="summary-sig-name">type</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">text</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#EditText.type">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="backspace"></a><span class="summary-sig-name">backspace</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#EditText.backspace">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="src.com.dtmilano.android.viewclient.View-class.html">View</a></code></b>:
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#__call__">__call__</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#__getattr__">__getattr__</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#__getitem__">__getitem__</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#__init__">__init__</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#__microStr__">__microStr__</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#__smallStr__">__smallStr__</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#__str__">__str__</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#__tinyStr__">__tinyStr__</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#add">add</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#allPossibleNamesWithColon">allPossibleNamesWithColon</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#containsPoint">containsPoint</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getCenter">getCenter</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getClass">getClass</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getContentDescription">getContentDescription</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getCoords">getCoords</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getHeight">getHeight</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getId">getId</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getParent">getParent</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getPositionAndSize">getPositionAndSize</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getText">getText</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getUniqueId">getUniqueId</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getVisibility">getVisibility</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getWidth">getWidth</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getX">getX</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getXY">getXY</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getY">getY</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#intersection">intersection</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#isClickable">isClickable</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#touch">touch</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#variableNameFromId">variableNameFromId</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#writeImageToFile">writeImageToFile</a></code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== STATIC METHODS ==================== -->
+<a name="section-StaticMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Static Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-StaticMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="src.com.dtmilano.android.viewclient.View-class.html">View</a></code></b>:
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#factory">factory</a></code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== INSTANCE VARIABLES ==================== -->
+<a name="section-InstanceVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Variables</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceVariables"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="src.com.dtmilano.android.viewclient.View-class.html">View</a></code></b>:
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#build">build</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#children">children</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#currentFocus">currentFocus</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#device">device</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#heightProperty">heightProperty</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#idProperty">idProperty</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#leftProperty">leftProperty</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#map">map</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#parent">parent</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#textProperty">textProperty</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#topProperty">topProperty</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#useUiAutomator">useUiAutomator</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#widthProperty">widthProperty</a></code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Aug  9 01:39:54 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.Excerpt2Code-class.html b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.Excerpt2Code-class.html
new file mode 100755
index 0000000..cbc8d46
--- /dev/null
+++ b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.Excerpt2Code-class.html
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>src.com.dtmilano.android.viewclient.Excerpt2Code</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;src ::
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="src.com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="src.com.dtmilano.android.viewclient-module.html">Module&nbsp;viewclient</a> ::
+        Class&nbsp;Excerpt2Code
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="src.com.dtmilano.android.viewclient.Excerpt2Code-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Excerpt2Code</h1><p class="nomargin-top"><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#Excerpt2Code">source&nbsp;code</a></span></p>
+<p>Excerpt XML to code</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__init__"></a><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#Excerpt2Code.__init__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="StartElement"></a><span class="summary-sig-name">StartElement</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>,
+        <span class="summary-sig-arg">attributes</span>)</span><br />
+      Expat start element event handler</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#Excerpt2Code.StartElement">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="EndElement"></a><span class="summary-sig-name">EndElement</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>)</span><br />
+      Expat end element event handler</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#Excerpt2Code.EndElement">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="CharacterData"></a><span class="summary-sig-name">CharacterData</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">data</span>)</span><br />
+      Expat character data event handler</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#Excerpt2Code.CharacterData">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="Parse"></a><span class="summary-sig-name">Parse</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">excerpt</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#Excerpt2Code.Parse">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Aug  9 01:39:54 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.TextView-class.html b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.TextView-class.html
new file mode 100755
index 0000000..c78c739
--- /dev/null
+++ b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.TextView-class.html
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>src.com.dtmilano.android.viewclient.TextView</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;src ::
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="src.com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="src.com.dtmilano.android.viewclient-module.html">Module&nbsp;viewclient</a> ::
+        Class&nbsp;TextView
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="src.com.dtmilano.android.viewclient.TextView-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class TextView</h1><p class="nomargin-top"><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#TextView">source&nbsp;code</a></span></p>
+<center>
+<center>  <map id="uml_class_diagram_for_src_com__2" name="uml_class_diagram_for_src_com__2">
+<area shape="rect" id="node1" href="src.com.dtmilano.android.viewclient.TextView-class.html" title="TextView class." alt="" coords="176,582,253,626"/>
+<area shape="rect" id="node2_27" href="src.com.dtmilano.android.viewclient.View-class.html#map" title="The map that contains the attr,value pairs" alt="" coords="17,31,412,49"/>
+<area shape="rect" id="node2_28" href="src.com.dtmilano.android.viewclient.View-class.html#device" title="The MonkeyDevice" alt="" coords="17,49,412,68"/>
+<area shape="rect" id="node2_29" href="src.com.dtmilano.android.viewclient.View-class.html#children" title="The children of this View" alt="" coords="17,68,412,87"/>
+<area shape="rect" id="node2_30" href="src.com.dtmilano.android.viewclient.View-class.html#parent" title="The parent of this View" alt="" coords="17,87,412,105"/>
+<area shape="rect" id="node2_31" href="src.com.dtmilano.android.viewclient.View-class.html#currentFocus" title="The current focus" alt="" coords="17,105,412,124"/>
+<area shape="rect" id="node2_32" href="src.com.dtmilano.android.viewclient.View-class.html#build" title="Build properties" alt="" coords="17,124,412,143"/>
+<area shape="rect" id="node2_33" href="src.com.dtmilano.android.viewclient.View-class.html#useUiAutomator" title="Whether to use UIAutomator or ViewServer" alt="" coords="17,143,412,161"/>
+<area shape="rect" id="node2_34" href="src.com.dtmilano.android.viewclient.View-class.html#idProperty" title="The id property depending on the View attribute format" alt="" coords="17,161,412,180"/>
+<area shape="rect" id="node2_35" href="src.com.dtmilano.android.viewclient.View-class.html#textProperty" title="The text property depending on the View attribute format" alt="" coords="17,180,412,199"/>
+<area shape="rect" id="node2_36" href="src.com.dtmilano.android.viewclient.View-class.html#leftProperty" title="The left property depending on the View attribute format" alt="" coords="17,199,412,217"/>
+<area shape="rect" id="node2_37" href="src.com.dtmilano.android.viewclient.View-class.html#topProperty" title="The top property depending on the View attribute format" alt="" coords="17,217,412,236"/>
+<area shape="rect" id="node2_38" href="src.com.dtmilano.android.viewclient.View-class.html#widthProperty" title="The width property depending on the View attribute format" alt="" coords="17,236,412,255"/>
+<area shape="rect" id="node2_39" href="src.com.dtmilano.android.viewclient.View-class.html#heightProperty" title="The height property depending on the View attribute format" alt="" coords="17,255,412,273"/>
+<area shape="rect" id="node2_40" href="src.com.dtmilano.android.viewclient.View-class.html#factory" title="View factory" alt="" coords="17,276,412,295"/>
+<area shape="rect" id="node2_41" href="src.com.dtmilano.android.viewclient.View-class.html#__init__" title="Constructor" alt="" coords="17,295,412,313"/>
+<area shape="rect" id="node2_42" href="src.com.dtmilano.android.viewclient.View-class.html#__getitem__" title="src.com.dtmilano.android.viewclient.View.__getitem__" alt="" coords="17,313,412,332"/>
+<area shape="rect" id="node2_43" href="src.com.dtmilano.android.viewclient.View-class.html#__getattr__" title="src.com.dtmilano.android.viewclient.View.__getattr__" alt="" coords="17,332,412,351"/>
+<area shape="rect" id="node2_44" href="src.com.dtmilano.android.viewclient.View-class.html#__call__" title="src.com.dtmilano.android.viewclient.View.__call__" alt="" coords="17,351,412,369"/>
+<area shape="rect" id="node2_45" href="src.com.dtmilano.android.viewclient.View-class.html#getClass" title="Gets the View class" alt="" coords="17,369,412,388"/>
+<area shape="rect" id="node2_46" href="src.com.dtmilano.android.viewclient.View-class.html#getId" title="Gets the View Id" alt="" coords="17,388,412,407"/>
+<area shape="rect" id="node2_47" href="src.com.dtmilano.android.viewclient.View-class.html#getContentDescription" title="Gets the content description." alt="" coords="17,407,412,425"/>
+<area shape="rect" id="node2_48" href="src.com.dtmilano.android.viewclient.View-class.html#getParent" title="Gets the parent." alt="" coords="17,425,412,444"/>
+<area shape="rect" id="node2_49" href="src.com.dtmilano.android.viewclient.View-class.html#getText" title="Gets the text attribute." alt="" coords="17,444,412,463"/>
+<area shape="rect" id="node2_50" href="src.com.dtmilano.android.viewclient.View-class.html#getHeight" title="Gets the height." alt="" coords="17,463,412,481"/>
+<area shape="rect" id="node2_51" href="src.com.dtmilano.android.viewclient.View-class.html#getWidth" title="Gets the width." alt="" coords="17,481,412,500"/>
+<area shape="rect" id="node2_52" href="src.com.dtmilano.android.viewclient.View-class.html#getUniqueId" title="Gets the unique Id of this View." alt="" coords="17,500,412,519"/>
+<area shape="rect" id="node2_53" href="src.com.dtmilano.android.viewclient.View-class.html#__str__" title="src.com.dtmilano.android.viewclient.View.__str__" alt="" coords="17,537,412,556"/>
+<area shape="rect" id="node2" href="src.com.dtmilano.android.viewclient.View-class.html" title="View class" alt="" coords="5,6,424,562"/>
+</map>
+  <img src="uml_class_diagram_for_src_com__2.gif" alt='' usemap="#uml_class_diagram_for_src_com__2" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>TextView class.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="src.com.dtmilano.android.viewclient.View-class.html">View</a></code></b>:
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#__call__">__call__</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#__getattr__">__getattr__</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#__getitem__">__getitem__</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#__init__">__init__</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#__microStr__">__microStr__</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#__smallStr__">__smallStr__</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#__str__">__str__</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#__tinyStr__">__tinyStr__</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#add">add</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#allPossibleNamesWithColon">allPossibleNamesWithColon</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#containsPoint">containsPoint</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getCenter">getCenter</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getClass">getClass</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getContentDescription">getContentDescription</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getCoords">getCoords</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getHeight">getHeight</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getId">getId</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getParent">getParent</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getPositionAndSize">getPositionAndSize</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getText">getText</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getUniqueId">getUniqueId</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getVisibility">getVisibility</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getWidth">getWidth</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getX">getX</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getXY">getXY</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#getY">getY</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#intersection">intersection</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#isClickable">isClickable</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#touch">touch</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#variableNameFromId">variableNameFromId</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#writeImageToFile">writeImageToFile</a></code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== STATIC METHODS ==================== -->
+<a name="section-StaticMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Static Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-StaticMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="src.com.dtmilano.android.viewclient.View-class.html">View</a></code></b>:
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#factory">factory</a></code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== INSTANCE VARIABLES ==================== -->
+<a name="section-InstanceVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Variables</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceVariables"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="src.com.dtmilano.android.viewclient.View-class.html">View</a></code></b>:
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#build">build</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#children">children</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#currentFocus">currentFocus</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#device">device</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#heightProperty">heightProperty</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#idProperty">idProperty</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#leftProperty">leftProperty</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#map">map</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#parent">parent</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#textProperty">textProperty</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#topProperty">topProperty</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#useUiAutomator">useUiAutomator</a></code>,
+      <code><a href="src.com.dtmilano.android.viewclient.View-class.html#widthProperty">widthProperty</a></code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Aug  9 01:39:54 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html
new file mode 100755
index 0000000..f38f234
--- /dev/null
+++ b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html
@@ -0,0 +1,228 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;src ::
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="src.com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="src.com.dtmilano.android.viewclient-module.html">Module&nbsp;viewclient</a> ::
+        Class&nbsp;UiAutomator2AndroidViewClient
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class UiAutomator2AndroidViewClient</h1><p class="nomargin-top"><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#UiAutomator2AndroidViewClient">source&nbsp;code</a></span></p>
+<p>UiAutomator XML to AndroidViewClient</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__init__"></a><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">device</span>,
+        <span class="summary-sig-arg">version</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#UiAutomator2AndroidViewClient.__init__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="StartElement"></a><span class="summary-sig-name">StartElement</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>,
+        <span class="summary-sig-arg">attributes</span>)</span><br />
+      Expat start element event handler</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#UiAutomator2AndroidViewClient.StartElement">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="EndElement"></a><span class="summary-sig-name">EndElement</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>)</span><br />
+      Expat end element event handler</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#UiAutomator2AndroidViewClient.EndElement">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="CharacterData"></a><span class="summary-sig-name">CharacterData</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">data</span>)</span><br />
+      Expat character data event handler</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#UiAutomator2AndroidViewClient.CharacterData">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="Parse"></a><span class="summary-sig-name">Parse</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">uiautomatorxml</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#UiAutomator2AndroidViewClient.Parse">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Aug  9 01:39:54 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.View-class.html b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.View-class.html
new file mode 100755
index 0000000..3d6ec98
--- /dev/null
+++ b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.View-class.html
@@ -0,0 +1,1210 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>src.com.dtmilano.android.viewclient.View</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;src ::
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="src.com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="src.com.dtmilano.android.viewclient-module.html">Module&nbsp;viewclient</a> ::
+        Class&nbsp;View
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="src.com.dtmilano.android.viewclient.View-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class View</h1><p class="nomargin-top"><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View">source&nbsp;code</a></span></p>
+<p>View class</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.View-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">map</span>,
+        <span class="summary-sig-arg">device</span>,
+        <span class="summary-sig-arg">version</span>=<span class="summary-sig-default">-1</span>,
+        <span class="summary-sig-arg">forceviewserveruse</span>=<span class="summary-sig-default">False</span>)</span><br />
+      Constructor</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.__init__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__getitem__"></a><span class="summary-sig-name">__getitem__</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">key</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.__getitem__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__getattr__"></a><span class="summary-sig-name">__getattr__</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.__getattr__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__call__"></a><span class="summary-sig-name">__call__</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">*args</span>,
+        <span class="summary-sig-arg">**kwargs</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.__call__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.View-class.html#getClass" class="summary-sig-name">getClass</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the <a 
+      href="src.com.dtmilano.android.viewclient.View-class.html" 
+      class="link">View</a> class</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getClass">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.View-class.html#getId" class="summary-sig-name">getId</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the <a 
+      href="src.com.dtmilano.android.viewclient.View-class.html" 
+      class="link">View</a> Id</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getId">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getContentDescription"></a><span class="summary-sig-name">getContentDescription</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the content description.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getContentDescription">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getParent"></a><span class="summary-sig-name">getParent</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the parent.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getParent">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.View-class.html#getText" class="summary-sig-name">getText</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the text attribute.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getText">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getHeight"></a><span class="summary-sig-name">getHeight</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the height.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getHeight">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getWidth"></a><span class="summary-sig-name">getWidth</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the width.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getWidth">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.View-class.html#getUniqueId" class="summary-sig-name">getUniqueId</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the unique Id of this View.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getUniqueId">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getVisibility"></a><span class="summary-sig-name">getVisibility</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the View visibility</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getVisibility">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getX"></a><span class="summary-sig-name">getX</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the View X coordinate</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getX">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getY"></a><span class="summary-sig-name">getY</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the View Y coordinate</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getY">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.View-class.html#getXY" class="summary-sig-name">getXY</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">debug</span>=<span class="summary-sig-default">False</span>)</span><br />
+      Returns the <i>screen</i> coordinates of this <code>View</code>.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getXY">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.View-class.html#getCoords" class="summary-sig-name">getCoords</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the coords of the View</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getCoords">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.View-class.html#getPositionAndSize" class="summary-sig-name">getPositionAndSize</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the position and size (X,Y, W, H)</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getPositionAndSize">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.View-class.html#getCenter" class="summary-sig-name">getCenter</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the center coords of the View</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getCenter">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__obtainStatusBarDimensionsIfVisible"></a><span class="summary-sig-name">__obtainStatusBarDimensionsIfVisible</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.__obtainStatusBarDimensionsIfVisible">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__obtainVxVy"></a><span class="summary-sig-name">__obtainVxVy</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">m</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.__obtainVxVy">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__obtainVwVh"></a><span class="summary-sig-name">__obtainVwVh</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">m</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.__obtainVwVh">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__obtainPxPy"></a><span class="summary-sig-name">__obtainPxPy</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">m</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.__obtainPxPy">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__dumpWindowsInformation"></a><span class="summary-sig-name">__dumpWindowsInformation</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">debug</span>=<span class="summary-sig-default">False</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.__dumpWindowsInformation">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="touch"></a><span class="summary-sig-name">touch</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">type</span>=<span class="summary-sig-default">MonkeyDevice.DOWN_AND_UP</span>)</span><br />
+      Touches the center of this <code>View</code></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.touch">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="allPossibleNamesWithColon"></a><span class="summary-sig-name">allPossibleNamesWithColon</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.allPossibleNamesWithColon">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="intersection"></a><span class="summary-sig-name">intersection</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">l1</span>,
+        <span class="summary-sig-arg">l2</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.intersection">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="containsPoint"></a><span class="summary-sig-name">containsPoint</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">(x, y)</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.containsPoint">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.View-class.html#add" class="summary-sig-name">add</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">child</span>)</span><br />
+      Adds a child</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.add">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="isClickable"></a><span class="summary-sig-name">isClickable</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.isClickable">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="variableNameFromId"></a><span class="summary-sig-name">variableNameFromId</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.variableNameFromId">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.View-class.html#writeImageToFile" class="summary-sig-name">writeImageToFile</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">filename</span>,
+        <span class="summary-sig-arg">format</span>=<span class="summary-sig-default">&quot;PNG&quot;</span>)</span><br />
+      Write the View image to the specified filename in the specified 
+      format.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.writeImageToFile">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__smallStr__"></a><span class="summary-sig-name">__smallStr__</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.__smallStr__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__tinyStr__"></a><span class="summary-sig-name">__tinyStr__</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.__tinyStr__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__microStr__"></a><span class="summary-sig-name">__microStr__</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.__microStr__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__str__"></a><span class="summary-sig-name">__str__</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.__str__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== STATIC METHODS ==================== -->
+<a name="section-StaticMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Static Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-StaticMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="factory"></a><span class="summary-sig-name">factory</span>(<span class="summary-sig-arg">attrs</span>,
+        <span class="summary-sig-arg">device</span>,
+        <span class="summary-sig-arg">version</span>=<span class="summary-sig-default">-1</span>,
+        <span class="summary-sig-arg">forceviewserveruse</span>=<span class="summary-sig-default">False</span>)</span><br />
+      View factory</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.factory">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== INSTANCE VARIABLES ==================== -->
+<a name="section-InstanceVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Variables</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceVariables"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="map"></a><span class="summary-name">map</span><br />
+      The map that contains the <code>attr</code>,<code>value</code> pairs
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="device"></a><span class="summary-name">device</span><br />
+      The MonkeyDevice
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="children"></a><span class="summary-name">children</span><br />
+      The children of this View
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="parent"></a><span class="summary-name">parent</span><br />
+      The parent of this View
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="currentFocus"></a><span class="summary-name">currentFocus</span><br />
+      The current focus
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="build"></a><span class="summary-name">build</span><br />
+      Build properties
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="useUiAutomator"></a><span class="summary-name">useUiAutomator</span><br />
+      Whether to use UIAutomator or ViewServer
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="idProperty"></a><span class="summary-name">idProperty</span><br />
+      The id property depending on the View attribute format
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="textProperty"></a><span class="summary-name">textProperty</span><br />
+      The text property depending on the View attribute format
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="leftProperty"></a><span class="summary-name">leftProperty</span><br />
+      The left property depending on the View attribute format
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="topProperty"></a><span class="summary-name">topProperty</span><br />
+      The top property depending on the View attribute format
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="widthProperty"></a><span class="summary-name">widthProperty</span><br />
+      The width property depending on the View attribute format
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="heightProperty"></a><span class="summary-name">heightProperty</span><br />
+      The height property depending on the View attribute format
+    </td>
+  </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Method Details</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-MethodDetails"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">map</span>,
+        <span class="sig-arg">device</span>,
+        <span class="sig-arg">version</span>=<span class="sig-default">-1</span>,
+        <span class="sig-arg">forceviewserveruse</span>=<span class="sig-default">False</span>)</span>
+    <br /><em class="fname">(Constructor)</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.__init__">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Constructor</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>map</code></strong> (map) - the map containing the (attribute, value) pairs</li>
+        <li><strong class="pname"><code>device</code></strong> (MonkeyDevice) - the device containing this View</li>
+        <li><strong class="pname"><code>version</code></strong> (int) - the Android SDK version number of the platform where this View 
+          belongs. If this is <code>-1</code> then the Android SDK version 
+          will be obtained in this constructor.</li>
+        <li><strong class="pname"><code>forceviewserveruse</code></strong> (boolean) - Force the use of <code>ViewServer</code> even if the conditions 
+          were given to use <code>UiAutomator</code>.</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="getClass"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getClass</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getClass">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Gets the <a href="src.com.dtmilano.android.viewclient.View-class.html"
+  class="link">View</a> class</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>the <a href="src.com.dtmilano.android.viewclient.View-class.html"
+          class="link">View</a> class or <code>None</code> if not defined</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="getId"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getId</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getId">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Gets the <a href="src.com.dtmilano.android.viewclient.View-class.html"
+  class="link">View</a> Id</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>the <a href="src.com.dtmilano.android.viewclient.View-class.html"
+          class="link">View</a> <code>Id</code> or <code>None</code> if not
+          defined</dd>
+  </dl>
+<div class="fields">      <p><strong>See Also:</strong>
+        <a 
+        href="src.com.dtmilano.android.viewclient.View-class.html#getUniqueId"
+        class="link">getUniqueId()</a>
+      </p>
+</div></td></tr></table>
+</div>
+<a name="getText"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getText</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getText">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Gets the text attribute.</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>the text attribute or <code>None</code> if not defined</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="getUniqueId"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getUniqueId</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getUniqueId">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Gets the unique Id of this View.</p>
+  <dl class="fields">
+  </dl>
+<div class="fields">      <p><strong>See Also:</strong>
+        <a 
+        href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__splitAttrs"
+        class="link" 
+        onclick="show_private();">ViewClient.__splitAttrs()</a> for a 
+        discussion on <b>Unique Ids</b>
+      </p>
+</div></td></tr></table>
+</div>
+<a name="getXY"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getXY</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">debug</span>=<span class="sig-default">False</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getXY">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Returns the <i>screen</i> coordinates of this <code>View</code>.</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>The <i>screen</i> coordinates of this <code>View</code></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="getCoords"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getCoords</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getCoords">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Gets the coords of the View</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>A tuple containing the View's coordinates ((L, T), (R, B))</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="getPositionAndSize"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getPositionAndSize</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getPositionAndSize">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Gets the position and size (X,Y, W, H)</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>A tuple containing the View's coordinates (X, Y, W, H)</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="getCenter"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getCenter</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.getCenter">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Gets the center coords of the View</p>
+  <dl class="fields">
+  </dl>
+<div class="fields">      <p><strong>Author:</strong>
+        <a href="https://github.com/deanmorin" target="_top">Dean Morin</a>
+      </p>
+</div></td></tr></table>
+</div>
+<a name="add"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">add</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">child</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.add">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Adds a child</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>child</code></strong> (View) - The child to add</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="writeImageToFile"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">writeImageToFile</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">filename</span>,
+        <span class="sig-arg">format</span>=<span class="sig-default">&quot;PNG&quot;</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#View.writeImageToFile">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Write the View image to the specified filename in the specified 
+  format.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>filename</code></strong> (str) - Absolute path and optional filename receiving the image. If this 
+          points to a directory, then the filename is determined by this 
+          View unique ID and format extension.</li>
+        <li><strong class="pname"><code>format</code></strong> (str) - Image format (default format is PNG)</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Aug  9 01:39:54 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.ViewClient-class.html b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.ViewClient-class.html
new file mode 100755
index 0000000..7e1ab25
--- /dev/null
+++ b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.ViewClient-class.html
@@ -0,0 +1,2462 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>src.com.dtmilano.android.viewclient.ViewClient</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;src ::
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="src.com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="src.com.dtmilano.android.viewclient-module.html">Module&nbsp;viewclient</a> ::
+        Class&nbsp;ViewClient
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="src.com.dtmilano.android.viewclient.ViewClient-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class ViewClient</h1><p class="nomargin-top"><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient">source&nbsp;code</a></span></p>
+<p>ViewClient is a <i>ViewServer</i> client.</p>
+  <h1 class="heading">ViewServer backend</h1>
+    <p>If not running the ViewServer is started on the target device or 
+    emulator and then the port mapping is created.</p>
+  <h1 class="heading">UiAutomator backend</h1>
+    <p>No service is started.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">device</span>,
+        <span class="summary-sig-arg">serialno</span>,
+        <span class="summary-sig-arg">adb</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">autodump</span>=<span class="summary-sig-default">True</span>,
+        <span class="summary-sig-arg">forceviewserveruse</span>=<span class="summary-sig-default">False</span>,
+        <span class="summary-sig-arg">localport</span>=<span class="summary-sig-default">VIEW_SERVER_PORT</span>,
+        <span class="summary-sig-arg">remoteport</span>=<span class="summary-sig-default">VIEW_SERVER_PORT</span>,
+        <span class="summary-sig-arg">startviewserver</span>=<span class="summary-sig-default">True</span>,
+        <span class="summary-sig-arg">ignoreuiautomatorkilled</span>=<span class="summary-sig-default">False</span>)</span><br />
+      Constructor</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__init__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__del__"></a><span class="summary-sig-name">__del__</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__del__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#assertServiceResponse" class="summary-sig-name">assertServiceResponse</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">response</span>)</span><br />
+      Checks whether the response received from the server is correct or 
+      raises and Exception.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.assertServiceResponse">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#serviceResponse" class="summary-sig-name">serviceResponse</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">response</span>)</span><br />
+      Checks the response received from the <i>ViewServer</i>.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.serviceResponse">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#setViews" class="summary-sig-name">setViews</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">received</span>)</span><br />
+      Sets <a 
+      href="src.com.dtmilano.android.viewclient.ViewClient-class.html#views"
+      class="link">self.views</a> to the received value splitting it into 
+      lines.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.setViews">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#setViewsFromUiAutomatorDump" class="summary-sig-name">setViewsFromUiAutomatorDump</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">received</span>)</span><br />
+      Sets <a 
+      href="src.com.dtmilano.android.viewclient.ViewClient-class.html#views"
+      class="link">self.views</a> to the received value parsing the 
+      received XML.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.setViewsFromUiAutomatorDump">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__splitAttrs" class="summary-sig-name" onclick="show_private();">__splitAttrs</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">strArgs</span>)</span><br />
+      Splits the <code>View</code> attributes in <code>strArgs</code> and 
+      optionally adds the view id to the <code>viewsById</code> list.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__splitAttrs">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__parseTree" class="summary-sig-name" onclick="show_private();">__parseTree</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">receivedLines</span>)</span><br />
+      Parses the View tree contained in <code 
+      class="link">receivedLines</code>.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__parseTree">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__parseTreeFromUiAutomatorDump"></a><span class="summary-sig-name">__parseTreeFromUiAutomatorDump</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">receivedXml</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__parseTreeFromUiAutomatorDump">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#getRoot" class="summary-sig-name">getRoot</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the root node of the <code>View</code> tree</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.getRoot">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverse" class="summary-sig-name">traverse</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default">&quot;ROOT&quot;</span>,
+        <span class="summary-sig-arg">indent</span>=<span class="summary-sig-default">&quot;&quot;</span>,
+        <span class="summary-sig-arg">transform</span>=<span class="summary-sig-default">View.__str__</span>,
+        <span class="summary-sig-arg">stream</span>=<span class="summary-sig-default">sys.stdout</span>)</span><br />
+      Traverses the <code>View</code> tree and prints its nodes.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverse">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#dump" class="summary-sig-name">dump</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">window</span>=<span class="summary-sig-default">-1</span>,
+        <span class="summary-sig-arg">sleep</span>=<span class="summary-sig-default">1</span>)</span><br />
+      Dumps the window content.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.dump">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#list" class="summary-sig-name">list</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">sleep</span>=<span class="summary-sig-default">1</span>)</span><br />
+      List the windows.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.list">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewById" class="summary-sig-name">findViewById</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">viewId</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default">&quot;ROOT&quot;</span>,
+        <span class="summary-sig-arg">viewFilter</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Finds the View with the specified viewId.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewById">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewByIdOrRaise" class="summary-sig-name">findViewByIdOrRaise</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">viewId</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default">&quot;ROOT&quot;</span>,
+        <span class="summary-sig-arg">viewFilter</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Finds the View or raise a ViewNotFoundException.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewByIdOrRaise">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="findViewByTag"></a><span class="summary-sig-name">findViewByTag</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">tag</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default">&quot;ROOT&quot;</span>)</span><br />
+      Finds the View with the specified tag</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewByTag">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="findViewByTagOrRaise"></a><span class="summary-sig-name">findViewByTagOrRaise</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">tag</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default">&quot;ROOT&quot;</span>)</span><br />
+      Finds the View with the specified tag or raise a 
+      ViewNotFoundException</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewByTagOrRaise">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__findViewWithAttributeInTree"></a><span class="summary-sig-name">__findViewWithAttributeInTree</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">attr</span>,
+        <span class="summary-sig-arg">val</span>,
+        <span class="summary-sig-arg">root</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__findViewWithAttributeInTree">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__findViewWithAttributeInTreeOrRaise"></a><span class="summary-sig-name">__findViewWithAttributeInTreeOrRaise</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">attr</span>,
+        <span class="summary-sig-arg">val</span>,
+        <span class="summary-sig-arg">root</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__findViewWithAttributeInTreeOrRaise">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__findViewWithAttributeInTreeThatMatches"></a><span class="summary-sig-name">__findViewWithAttributeInTreeThatMatches</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">attr</span>,
+        <span class="summary-sig-arg">regex</span>,
+        <span class="summary-sig-arg">root</span>,
+        <span class="summary-sig-arg">rlist</span>=<span class="summary-sig-default">[]</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__findViewWithAttributeInTreeThatMatches">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="findViewWithAttribute"></a><span class="summary-sig-name">findViewWithAttribute</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">attr</span>,
+        <span class="summary-sig-arg">val</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default">&quot;ROOT&quot;</span>)</span><br />
+      Finds the View with the specified attribute and value</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithAttribute">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithAttributeOrRaise" class="summary-sig-name">findViewWithAttributeOrRaise</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">attr</span>,
+        <span class="summary-sig-arg">val</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default">&quot;ROOT&quot;</span>)</span><br />
+      Finds the View or raise a ViewNotFoundException.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithAttributeOrRaise">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="findViewWithAttributeThatMatches"></a><span class="summary-sig-name">findViewWithAttributeThatMatches</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">attr</span>,
+        <span class="summary-sig-arg">regex</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default">&quot;ROOT&quot;</span>)</span><br />
+      Finds the list of Views with the specified attribute matching regex</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithAttributeThatMatches">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="findViewWithText"></a><span class="summary-sig-name">findViewWithText</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">text</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default">&quot;ROOT&quot;</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithText">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithTextOrRaise" class="summary-sig-name">findViewWithTextOrRaise</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">text</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default">&quot;ROOT&quot;</span>)</span><br />
+      Finds the View or raise a ViewNotFoundException.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithTextOrRaise">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="findViewWithContentDescription"></a><span class="summary-sig-name">findViewWithContentDescription</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">contentdescription</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default">&quot;ROOT&quot;</span>)</span><br />
+      Finds the View with the specified content description</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithContentDescription">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="findViewWithContentDescriptionOrRaise"></a><span class="summary-sig-name">findViewWithContentDescriptionOrRaise</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">contentdescription</span>,
+        <span class="summary-sig-arg">root</span>=<span class="summary-sig-default">&quot;ROOT&quot;</span>)</span><br />
+      Finds the View with the specified content description</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithContentDescriptionOrRaise">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="findViewsContainingPoint"></a><span class="summary-sig-name">findViewsContainingPoint</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">(x, y)</span>,
+        <span class="summary-sig-arg">filter</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Finds the list of Views that contain the point (x, y).</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewsContainingPoint">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#getViewIds" class="summary-sig-name">getViewIds</a>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.getViewIds">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#getViewsById" class="summary-sig-name">getViewsById</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Returns the Views map.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.getViewsById">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__getFocusedWindowPosition"></a><span class="summary-sig-name">__getFocusedWindowPosition</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__getFocusedWindowPosition">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="getSdkVersion"></a><span class="summary-sig-name">getSdkVersion</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the SDK version.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.getSdkVersion">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="isKeyboardShown"></a><span class="summary-sig-name">isKeyboardShown</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Whether the keyboard is displayed.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.isKeyboardShown">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#writeImageToFile" class="summary-sig-name">writeImageToFile</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">filename</span>,
+        <span class="summary-sig-arg">format</span>=<span class="summary-sig-default">&quot;PNG&quot;</span>)</span><br />
+      Write the View image to the specified filename in the specified 
+      format.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.writeImageToFile">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#distance" class="summary-sig-name">distance</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">tree</span>)</span><br />
+      Calculates the distance between this tree and the tree passed as 
+      argument.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.distance">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="hammingDistance"></a><span class="summary-sig-name">hammingDistance</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">tree</span>)</span><br />
+      Finds the Hamming distance between this tree and the one passed as 
+      argument.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.hammingDistance">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="levenshteinDistance"></a><span class="summary-sig-name">levenshteinDistance</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">tree</span>)</span><br />
+      Finds the Levenshtein distance between this tree and the one passed 
+      as argument.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.levenshteinDistance">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== STATIC METHODS ==================== -->
+<a name="section-StaticMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Static Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-StaticMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__obtainAdbPath"></a><span class="summary-sig-name">__obtainAdbPath</span>()</span><br />
+      Obtains the ADB path attempting know locations for different OSs</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__obtainAdbPath">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__mapSerialNo"></a><span class="summary-sig-name">__mapSerialNo</span>(<span class="summary-sig-arg">serialno</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__mapSerialNo">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__obtainDeviceSerialNumber"></a><span class="summary-sig-name">__obtainDeviceSerialNumber</span>(<span class="summary-sig-arg">device</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__obtainDeviceSerialNumber">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="setAlarm"></a><span class="summary-sig-name">setAlarm</span>(<span class="summary-sig-arg">timeout</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.setAlarm">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#connectToDeviceOrExit" class="summary-sig-name">connectToDeviceOrExit</a>(<span class="summary-sig-arg">timeout</span>=<span class="summary-sig-default">60</span>,
+        <span class="summary-sig-arg">verbose</span>=<span class="summary-sig-default">False</span>,
+        <span class="summary-sig-arg">ignoresecuredevice</span>=<span class="summary-sig-default">False</span>,
+        <span class="summary-sig-arg">serialno</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Connects to a device which serial number is obtained from the script 
+      arguments if available or using the default regex <code>.*</code>.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.connectToDeviceOrExit">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdAndText" class="summary-sig-name">traverseShowClassIdAndText</a>(<span class="summary-sig-arg">view</span>,
+        <span class="summary-sig-arg">extraInfo</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">noextrainfo</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Shows the View class, id and text if available.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdAndText">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndUniqueId" class="summary-sig-name">traverseShowClassIdTextAndUniqueId</a>(<span class="summary-sig-arg">view</span>)</span><br />
+      Shows the View class, id, text if available and unique id.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndUniqueId">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndContentDescription" class="summary-sig-name">traverseShowClassIdTextAndContentDescription</a>(<span class="summary-sig-arg">view</span>)</span><br />
+      Shows the View class, id, text if available and unique id.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndContentDescription">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndCenter" class="summary-sig-name">traverseShowClassIdTextAndCenter</a>(<span class="summary-sig-arg">view</span>)</span><br />
+      Shows the View class, id and text if available.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndCenter">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextPositionAndSize" class="summary-sig-name">traverseShowClassIdTextPositionAndSize</a>(<span class="summary-sig-arg">view</span>)</span><br />
+      Shows the View class, id and text if available.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextPositionAndSize">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#TRAVERSE_CIT" class="summary-sig-name">TRAVERSE_CIT</a>(<span class="summary-sig-arg">view</span>,
+        <span class="summary-sig-arg">extraInfo</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">noextrainfo</span>=<span class="summary-sig-default">None</span>)</span><br />
+      An alias for <a 
+      href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdAndText"
+      class="link">traverseShowClassIdAndText(view)</a></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdAndText">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#TRAVERSE_CITUI" class="summary-sig-name">TRAVERSE_CITUI</a>(<span class="summary-sig-arg">view</span>)</span><br />
+      An alias for <a 
+      href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndUniqueId"
+      class="link">traverseShowClassIdTextAndUniqueId(view)</a></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndUniqueId">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#TRAVERSE_CITCD" class="summary-sig-name">TRAVERSE_CITCD</a>(<span class="summary-sig-arg">view</span>)</span><br />
+      An alias for <a 
+      href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndContentDescription"
+      class="link">traverseShowClassIdTextAndContentDescription(view)</a></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndContentDescription">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#TRAVERSE_CITC" class="summary-sig-name">TRAVERSE_CITC</a>(<span class="summary-sig-arg">view</span>)</span><br />
+      An alias for <a 
+      href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndCenter"
+      class="link">traverseShowClassIdTextAndCenter(view)</a></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndCenter">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#TRAVERSE_CITPS" class="summary-sig-name">TRAVERSE_CITPS</a>(<span class="summary-sig-arg">view</span>)</span><br />
+      An alias for <a 
+      href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextPositionAndSize"
+      class="link">traverseShowClassIdTextPositionAndSize(view)</a></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextPositionAndSize">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#sleep" class="summary-sig-name">sleep</a>(<span class="summary-sig-arg">secs</span>=<span class="summary-sig-default">1.0</span>)</span><br />
+      Sleeps for the specified number of seconds.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.sleep">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__traverse"></a><span class="summary-sig-name">__traverse</span>(<span class="summary-sig-arg">root</span>,
+        <span class="summary-sig-arg">indent</span>=<span class="summary-sig-default">&quot;&quot;</span>,
+        <span class="summary-sig-arg">transform</span>=<span class="summary-sig-default">View.__str__</span>,
+        <span class="summary-sig-arg">stream</span>=<span class="summary-sig-default">sys.stdout</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__traverse">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__pickleable"></a><span class="summary-sig-name">__pickleable</span>(<span class="summary-sig-arg">tree</span>)</span><br />
+      Makes the tree pickleable.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__pickleable">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__hammingDistance" class="summary-sig-name" onclick="show_private();">__hammingDistance</a>(<span class="summary-sig-arg">s1</span>,
+        <span class="summary-sig-arg">s2</span>)</span><br />
+      Finds the Hamming distance between two strings.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__hammingDistance">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#__levenshteinDistance" class="summary-sig-name" onclick="show_private();">__levenshteinDistance</a>(<span class="summary-sig-arg">s</span>,
+        <span class="summary-sig-arg">t</span>)</span><br />
+      Find the Levenshtein distance between two Strings.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__levenshteinDistance">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="excerpt"></a><span class="summary-sig-name">excerpt</span>(<span class="summary-sig-arg">str</span>,
+        <span class="summary-sig-arg">execute</span>=<span class="summary-sig-default">False</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.excerpt">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== INSTANCE VARIABLES ==================== -->
+<a name="section-InstanceVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Variables</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceVariables"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="device"></a><span class="summary-name">device</span><br />
+      The <code>MonkeyDevice</code> device instance
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="serialno"></a><span class="summary-name">serialno</span><br />
+      The serial number of the device
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="adb"></a><span class="summary-name">adb</span><br />
+      The adb command
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="root"></a><span class="summary-name">root</span><br />
+      The root node
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="viewsById"></a><span class="summary-name">viewsById</span><br />
+      The map containing all the <a 
+      href="src.com.dtmilano.android.viewclient.View-class.html" 
+      class="link">View</a>s indexed by their <a 
+      href="src.com.dtmilano.android.viewclient.View-class.html#getUniqueId"
+      class="link">View.getUniqueId()</a>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="display"></a><span class="summary-name">display</span><br />
+      The map containing the device's display properties: width, height and
+      density
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="build"></a><span class="summary-name">build</span><br />
+      The map containing the device's build properties: version.sdk, 
+      version.release
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="ro"></a><span class="summary-name">ro</span><br />
+      The map containing the device's ro properties: secure, debuggable
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="forceViewServerUse"></a><span class="summary-name">forceViewServerUse</span><br />
+      Force the use of ViewServer even if the conditions to use UiAutomator
+      are satisfied
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="useUiAutomator"></a><span class="summary-name">useUiAutomator</span><br />
+      If UIAutomator is supported by the device it will be used
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#ignoreUiAutomatorKilled" class="summary-name">ignoreUiAutomatorKilled</a><br />
+      On some devices (i.e.
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="windows"></a><span class="summary-name">windows</span><br />
+      The list of windows as obtained by <a 
+      href="src.com.dtmilano.android.viewclient.ViewClient-class.html#list"
+      class="link">ViewClient.list()</a>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="src.com.dtmilano.android.viewclient.ViewClient-class.html#views" class="summary-name">views</a><br />
+      The list of Views represented as <code>str</code> obtained after 
+      splitting it into lines after being received from the server.
+    </td>
+  </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Method Details</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-MethodDetails"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">device</span>,
+        <span class="sig-arg">serialno</span>,
+        <span class="sig-arg">adb</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">autodump</span>=<span class="sig-default">True</span>,
+        <span class="sig-arg">forceviewserveruse</span>=<span class="sig-default">False</span>,
+        <span class="sig-arg">localport</span>=<span class="sig-default">VIEW_SERVER_PORT</span>,
+        <span class="sig-arg">remoteport</span>=<span class="sig-default">VIEW_SERVER_PORT</span>,
+        <span class="sig-arg">startviewserver</span>=<span class="sig-default">True</span>,
+        <span class="sig-arg">ignoreuiautomatorkilled</span>=<span class="sig-default">False</span>)</span>
+    <br /><em class="fname">(Constructor)</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__init__">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Constructor</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>device</code></strong> (MonkeyDevice) - The device running the <code>View server</code> to which this 
+          client will connect</li>
+        <li><strong class="pname"><code>serialno</code></strong> (str) - the serial number of the device or emulator to connect to</li>
+        <li><strong class="pname"><code>adb</code></strong> (str) - the path of the <code>adb</code> executable or None and 
+          <code>ViewClient</code> will try to find it</li>
+        <li><strong class="pname"><code>autodump</code></strong> (boolean) - whether an automatic dump is performed at the end of this 
+          constructor</li>
+        <li><strong class="pname"><code>forceviewserveruse</code></strong> (boolean) - Force the use of <code>ViewServer</code> even if the conditions 
+          to use <code>UiAutomator</code> are satisfied</li>
+        <li><strong class="pname"><code>localport</code></strong> (int) - the local port used in the redirection</li>
+        <li><strong class="pname"><code>remoteport</code></strong> (int) - the remote port used to start the <code>ViewServer</code> in the 
+          device or emulator</li>
+        <li><strong class="pname"><code>startviewserver</code></strong> (boolean) - Whether to start the <b>global</b> ViewServer</li>
+        <li><strong class="pname"><code>ignoreuiautomatorkilled</code></strong> (boolean) - Ignores received <b>Killed</b> message from 
+          <code>uiautomator</code></li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="connectToDeviceOrExit"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">connectToDeviceOrExit</span>(<span class="sig-arg">timeout</span>=<span class="sig-default">60</span>,
+        <span class="sig-arg">verbose</span>=<span class="sig-default">False</span>,
+        <span class="sig-arg">ignoresecuredevice</span>=<span class="sig-default">False</span>,
+        <span class="sig-arg">serialno</span>=<span class="sig-default">None</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.connectToDeviceOrExit">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Connects to a device which serial number is obtained from the script 
+  arguments if available or using the default regex <code>.*</code>.</p>
+  <p>If the connection is not successful the script exits. <code 
+  class="link">MonkeyRunner.waitForConnection()</code> returns a 
+  MonkeyDevice even if the connection failed. Then, to detect this 
+  situation, <code>device.wake()</code> is attempted and if it fails then 
+  it is assumed the previous connection failed.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>timeout</code></strong> (int) - timeout for the connection</li>
+        <li><strong class="pname"><code>verbose</code></strong> (bool) - Verbose output</li>
+        <li><strong class="pname"><code>ignoresecuredevice</code></strong> (bool) - Ignores the check for a secure device</li>
+        <li><strong class="pname"><code>serialno</code></strong> (str) - The device or emulator serial number</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the device and serialno used for the connection</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="traverseShowClassIdAndText"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">traverseShowClassIdAndText</span>(<span class="sig-arg">view</span>,
+        <span class="sig-arg">extraInfo</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">noextrainfo</span>=<span class="sig-default">None</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdAndText">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Shows the View class, id and text if available. This function can be 
+  used as a transform function to <a 
+  href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverse"
+  class="link">ViewClient.traverse()</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+        <li><strong class="pname"><code>extraInfo</code></strong> (method) - the View method to add extra info</li>
+        <li><strong class="pname"><code>noextrainfo</code></strong> (bool) - Don't add extra info</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="traverseShowClassIdTextAndUniqueId"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">traverseShowClassIdTextAndUniqueId</span>(<span class="sig-arg">view</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndUniqueId">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Shows the View class, id, text if available and unique id. This 
+  function can be used as a transform function to <a 
+  href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverse"
+  class="link">ViewClient.traverse()</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available and unique
+          Id</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="traverseShowClassIdTextAndContentDescription"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">traverseShowClassIdTextAndContentDescription</span>(<span class="sig-arg">view</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndContentDescription">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Shows the View class, id, text if available and unique id. This 
+  function can be used as a transform function to <a 
+  href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverse"
+  class="link">ViewClient.traverse()</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available and the 
+          content description</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="traverseShowClassIdTextAndCenter"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">traverseShowClassIdTextAndCenter</span>(<span class="sig-arg">view</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndCenter">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Shows the View class, id and text if available. This function can be 
+  used as a transform function to <a 
+  href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverse"
+  class="link">ViewClient.traverse()</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="traverseShowClassIdTextPositionAndSize"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">traverseShowClassIdTextPositionAndSize</span>(<span class="sig-arg">view</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextPositionAndSize">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Shows the View class, id and text if available. This function can be 
+  used as a transform function to <a 
+  href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverse"
+  class="link">ViewClient.traverse()</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="TRAVERSE_CIT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">TRAVERSE_CIT</span>(<span class="sig-arg">view</span>,
+        <span class="sig-arg">extraInfo</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">noextrainfo</span>=<span class="sig-default">None</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdAndText">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>An alias for <a 
+  href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdAndText"
+  class="link">traverseShowClassIdAndText(view)</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+        <li><strong class="pname"><code>extraInfo</code></strong> (method) - the View method to add extra info</li>
+        <li><strong class="pname"><code>noextrainfo</code></strong> (bool) - Don't add extra info</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="TRAVERSE_CITUI"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">TRAVERSE_CITUI</span>(<span class="sig-arg">view</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndUniqueId">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>An alias for <a 
+  href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndUniqueId"
+  class="link">traverseShowClassIdTextAndUniqueId(view)</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available and unique
+          Id</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="TRAVERSE_CITCD"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">TRAVERSE_CITCD</span>(<span class="sig-arg">view</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndContentDescription">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>An alias for <a 
+  href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndContentDescription"
+  class="link">traverseShowClassIdTextAndContentDescription(view)</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available and the 
+          content description</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="TRAVERSE_CITC"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">TRAVERSE_CITC</span>(<span class="sig-arg">view</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextAndCenter">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>An alias for <a 
+  href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextAndCenter"
+  class="link">traverseShowClassIdTextAndCenter(view)</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="TRAVERSE_CITPS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">TRAVERSE_CITPS</span>(<span class="sig-arg">view</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverseShowClassIdTextPositionAndSize">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>An alias for <a 
+  href="src.com.dtmilano.android.viewclient.ViewClient-class.html#traverseShowClassIdTextPositionAndSize"
+  class="link">traverseShowClassIdTextPositionAndSize(view)</a></p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>view</code></strong> (<i>View</i>) - the View</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the string containing class, id, and text if available</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="sleep"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">sleep</span>(<span class="sig-arg">secs</span>=<span class="sig-default">1.0</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.sleep">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Sleeps for the specified number of seconds.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>secs</code></strong> (float) - number of seconds</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="assertServiceResponse"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">assertServiceResponse</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">response</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.assertServiceResponse">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Checks whether the response received from the server is correct or 
+  raises and Exception.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>response</code></strong> (str) - Response received from the server</li>
+    </ul></dd>
+    <dt>Raises:</dt>
+    <dd><ul class="nomargin-top">
+        <li><code><strong class='fraise'>Exception</strong></code> - If the response received from the server is invalid</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="serviceResponse"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">serviceResponse</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">response</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.serviceResponse">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Checks the response received from the <i>ViewServer</i>.</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd><code>True</code> if the response received matches <code 
+          class="link">PARCEL_TRUE</code>, <code>False</code> otherwise</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="setViews"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">setViews</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">received</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.setViews">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Sets <a 
+  href="src.com.dtmilano.android.viewclient.ViewClient-class.html#views" 
+  class="link">self.views</a> to the received value splitting it into 
+  lines.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>received</code></strong> (str) - the string received from the <i>View Server</i></li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="setViewsFromUiAutomatorDump"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">setViewsFromUiAutomatorDump</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">received</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.setViewsFromUiAutomatorDump">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Sets <a 
+  href="src.com.dtmilano.android.viewclient.ViewClient-class.html#views" 
+  class="link">self.views</a> to the received value parsing the received 
+  XML.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>received</code></strong> (str) - the string received from the <i>UI Automator</i></li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="__splitAttrs"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__splitAttrs</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">strArgs</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__splitAttrs">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Splits the <code>View</code> attributes in <code>strArgs</code> and 
+  optionally adds the view id to the <code>viewsById</code> list.</p>
+  <h1 class="heading">Unique Ids</h1>
+    <p>It is very common to find <code>View</code>s having <b>NO_ID</b> as 
+    the Id. This turns very difficult to use <a 
+    href="src.com.dtmilano.android.viewclient.ViewClient-class.html#findViewById"
+    class="link">self.findViewById()</a>. To help in this situation this 
+    method assigns <b>unique Ids</b>.</p>
+    <p>The <b>unique Ids</b> are generated using the pattern 
+    <code>id/no_id/&lt;number&gt;</code> with <code>&lt;number&gt;</code> 
+    starting at 1.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>strArgs</code></strong> (str) - the string containing the raw list of attributes and values</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>Returns the attributes map.</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="__parseTree"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__parseTree</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">receivedLines</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__parseTree">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Parses the View tree contained in <code 
+  class="link">receivedLines</code>. The tree is created and the root node 
+  assigned to <a 
+  href="src.com.dtmilano.android.viewclient.ViewClient-class.html#root" 
+  class="link">self.root</a>. This method also assigns <a 
+  href="src.com.dtmilano.android.viewclient.ViewClient-class.html#viewsById"
+  class="link">self.viewsById</a> values using <a 
+  href="src.com.dtmilano.android.viewclient.View-class.html#getUniqueId" 
+  class="link">View.getUniqueId</a> as the key.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>receivedLines</code></strong> (str) - the string received from <b>View Server</b></li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="getRoot"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getRoot</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.getRoot">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Gets the root node of the <code>View</code> tree</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>the root node of the <code>View</code> tree</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="traverse"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">traverse</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">root</span>=<span class="sig-default">&quot;ROOT&quot;</span>,
+        <span class="sig-arg">indent</span>=<span class="sig-default">&quot;&quot;</span>,
+        <span class="sig-arg">transform</span>=<span class="sig-default">View.__str__</span>,
+        <span class="sig-arg">stream</span>=<span class="sig-default">sys.stdout</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.traverse">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Traverses the <code>View</code> tree and prints its nodes.</p>
+  <p>The nodes are printed converting them to string but other 
+  transformations can be specified by providing a method name as the 
+  <code>transform</code> parameter.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>root</code></strong> (<a href="src.com.dtmilano.android.viewclient.View-class.html" 
+          class="link">View</a>) - the root node from where the traverse starts</li>
+        <li><strong class="pname"><code>indent</code></strong> (str) - the indentation string to use to print the nodes</li>
+        <li><strong class="pname"><code>transform</code></strong> (method) - a method to use to transform the node before is printed</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="dump"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">dump</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">window</span>=<span class="sig-default">-1</span>,
+        <span class="sig-arg">sleep</span>=<span class="sig-default">1</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.dump">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Dumps the window content.</p>
+  <p>Sleep is useful to wait some time before obtaining the new content 
+  when something in the window has changed.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>window</code></strong> (int or str) - the window id or name of the window to dump. The <b>name</b> is 
+          the package name or the window name (i.e. StatusBar) for system 
+          windows. The window id can be provided as <code>int</code> or 
+          <code>str</code>. The <code>str</code> should represent and 
+          <code>int</code> in either base 10 or 16. Use -1 to dump all 
+          windows. This parameter only is used when the backend is 
+          <b>ViewServer</b> and it's ignored for <b>UiAutomator</b>.</li>
+        <li><strong class="pname"><code>sleep</code></strong> (int) - sleep in seconds before proceeding to dump the content</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the list of Views as <code>str</code> received from the server 
+          after being split into lines</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="list"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">list</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">sleep</span>=<span class="sig-default">1</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.list">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>List the windows.</p>
+  <p>Sleep is useful to wait some time before obtaining the new content 
+  when something in the window has changed. This also sets <a 
+  href="src.com.dtmilano.android.viewclient.ViewClient-class.html#windows" 
+  class="link">self.windows</a> as the list of windows.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>sleep</code></strong> (int) - sleep in seconds before proceeding to dump the content</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the list of windows</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="findViewById"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">findViewById</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">viewId</span>,
+        <span class="sig-arg">root</span>=<span class="sig-default">&quot;ROOT&quot;</span>,
+        <span class="sig-arg">viewFilter</span>=<span class="sig-default">None</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewById">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Finds the View with the specified viewId.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>viewId</code></strong> (str) - the ID of the view to find</li>
+        <li><strong class="pname"><code>root</code></strong> (str) - the root node of the tree where the View will be searched</li>
+        <li><strong class="pname"><code>viewFilter</code></strong> - a function that will be invoked providing the candidate View as a
+          parameter and depending on the return value (<code>True</code> or
+          <code>False</code>) the View will be selected and returned as the
+          result of <code>findViewById()</code> or ignored. This can be 
+          <code>None</code> and no extra filtering is applied.</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the <code>View</code> found or <code>None</code></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="findViewByIdOrRaise"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">findViewByIdOrRaise</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">viewId</span>,
+        <span class="sig-arg">root</span>=<span class="sig-default">&quot;ROOT&quot;</span>,
+        <span class="sig-arg">viewFilter</span>=<span class="sig-default">None</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewByIdOrRaise">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Finds the View or raise a ViewNotFoundException.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>viewId</code></strong> (str) - the ID of the view to find</li>
+        <li><strong class="pname"><code>root</code></strong> (str) - the root node of the tree where the View will be searched</li>
+        <li><strong class="pname"><code>viewFilter</code></strong> - a function that will be invoked providing the candidate View as a
+          parameter and depending on the return value (<code>True</code> or
+          <code>False</code>) the View will be selected and returned as the
+          result of <code>findViewById()</code> or ignored. This can be 
+          <code>None</code> and no extra filtering is applied.</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the View found</dd>
+    <dt>Raises:</dt>
+    <dd><ul class="nomargin-top">
+        <li><code><strong class='fraise'><a href="src.com.dtmilano.android.viewclient.ViewNotFoundException-class.html">ViewNotFoundException</a></strong></code> - raise the exception if View not found</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="findViewWithAttributeOrRaise"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">findViewWithAttributeOrRaise</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">attr</span>,
+        <span class="sig-arg">val</span>,
+        <span class="sig-arg">root</span>=<span class="sig-default">&quot;ROOT&quot;</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithAttributeOrRaise">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Finds the View or raise a ViewNotFoundException.</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>the View found</dd>
+    <dt>Raises:</dt>
+    <dd><ul class="nomargin-top">
+        <li><code><strong class='fraise'><a href="src.com.dtmilano.android.viewclient.ViewNotFoundException-class.html">ViewNotFoundException</a></strong></code> - raise the exception if View not found</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="findViewWithTextOrRaise"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">findViewWithTextOrRaise</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">text</span>,
+        <span class="sig-arg">root</span>=<span class="sig-default">&quot;ROOT&quot;</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.findViewWithTextOrRaise">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Finds the View or raise a ViewNotFoundException.</p>
+  <dl class="fields">
+    <dt>Returns:</dt>
+        <dd>the View found</dd>
+    <dt>Raises:</dt>
+    <dd><ul class="nomargin-top">
+        <li><code><strong class='fraise'><a href="src.com.dtmilano.android.viewclient.ViewNotFoundException-class.html">ViewNotFoundException</a></strong></code> - raise the exception if View not found</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="getViewIds"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getViewIds</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.getViewIds">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  
+  <dl class="fields">
+  </dl>
+<div class="fields">      <p><strong>Deprecated:</strong>
+        Use <a 
+    href="src.com.dtmilano.android.viewclient.ViewClient-class.html#getViewsById"
+    class="link">getViewsById</a> instead.
+    <p>Returns the Views map.</p>
+      </p>
+</div></td></tr></table>
+</div>
+<a name="getViewsById"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getViewsById</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.getViewsById">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Returns the Views map. The keys are <code>uniqueIds</code> and the 
+  values are <code>View</code>s.</p>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="writeImageToFile"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">writeImageToFile</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">filename</span>,
+        <span class="sig-arg">format</span>=<span class="sig-default">&quot;PNG&quot;</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.writeImageToFile">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Write the View image to the specified filename in the specified 
+  format.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>filename</code></strong> (str) - Absolute path and optional filename receiving the image. If this 
+          points to a directory, then the filename is determined by the 
+          serialno of the device and format extension.</li>
+        <li><strong class="pname"><code>format</code></strong> (str) - Image format (default format is PNG)</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="distance"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">distance</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">tree</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.distance">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Calculates the distance between this tree and the tree passed as 
+  argument.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>tree</code></strong> (list of Views) - Tree of Views</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the distance</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="__hammingDistance"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__hammingDistance</span>(<span class="sig-arg">s1</span>,
+        <span class="sig-arg">s2</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__hammingDistance">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Finds the Hamming distance between two strings.</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>s1</code></strong> - string</li>
+        <li><strong class="pname"><code>s2</code></strong> - string</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>the distance</dd>
+    <dt>Raises:</dt>
+    <dd><ul class="nomargin-top">
+        <li><code><strong class='fraise'>ValueError</strong></code> - if the lenght of the strings differ</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="__levenshteinDistance"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__levenshteinDistance</span>(<span class="sig-arg">s</span>,
+        <span class="sig-arg">t</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewClient.__levenshteinDistance">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Find the Levenshtein distance between two Strings.</p>
+  <p>Python version of Levenshtein distance method implemented in Java at 
+  <a 
+  href="http://www.java2s.com/Code/Java/Data-Type/FindtheLevenshteindistancebetweentwoStrings.htm"
+  
+  target="_top">http://www.java2s.com/Code/Java/Data-Type/FindtheLevenshteindistancebetweentwoStrings.htm</a>.</p>
+  <p>This is the number of changes needed to change one String into 
+  another, where each change is a single character modification (deletion, 
+  insertion or substitution).</p>
+  <p>The previous implementation of the Levenshtein distance algorithm was 
+  from <a href="http://www.merriampark.com/ld.htm" 
+  target="_top">http://www.merriampark.com/ld.htm</a></p>
+  <p>Chas Emerick has written an implementation in Java, which avoids an 
+  OutOfMemoryError which can occur when my Java implementation is used with
+  very large strings. This implementation of the Levenshtein distance 
+  algorithm is from <a href="http://www.merriampark.com/ldjava.htm" 
+  target="_top">http://www.merriampark.com/ldjava.htm</a>:</p>
+<pre class="literalblock">
+   StringUtils.getLevenshteinDistance(null, *)             = IllegalArgumentException
+   StringUtils.getLevenshteinDistance(*, null)             = IllegalArgumentException
+   StringUtils.getLevenshteinDistance(&quot;&quot;,&quot;&quot;)               = 0
+   StringUtils.getLevenshteinDistance(&quot;&quot;,&quot;a&quot;)              = 1
+   StringUtils.getLevenshteinDistance(&quot;aaapppp&quot;, &quot;&quot;)       = 7
+   StringUtils.getLevenshteinDistance(&quot;frog&quot;, &quot;fog&quot;)       = 1
+   StringUtils.getLevenshteinDistance(&quot;fly&quot;, &quot;ant&quot;)        = 3
+   StringUtils.getLevenshteinDistance(&quot;elephant&quot;, &quot;hippo&quot;) = 7
+   StringUtils.getLevenshteinDistance(&quot;hippo&quot;, &quot;elephant&quot;) = 7
+   StringUtils.getLevenshteinDistance(&quot;hippo&quot;, &quot;zzzzzzzz&quot;) = 8
+   StringUtils.getLevenshteinDistance(&quot;hello&quot;, &quot;hallo&quot;)    = 1
+</pre>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>s</code></strong> - the first String, must not be null</li>
+        <li><strong class="pname"><code>t</code></strong> - the second String, must not be null</li>
+    </ul></dd>
+    <dt>Returns:</dt>
+        <dd>result distance</dd>
+    <dt>Raises:</dt>
+    <dd><ul class="nomargin-top">
+        <li><code><strong class='fraise'>ValueError</strong></code> - if either String input <code>null</code></li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== INSTANCE VARIABLE DETAILS ==================== -->
+<a name="section-InstanceVariableDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Variable Details</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceVariableDetails"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+</table>
+<a name="ignoreUiAutomatorKilled"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">ignoreUiAutomatorKilled</h3>
+  <p>On some devices (i.e. Nexus 7 running 4.2.2) uiautomator is killed 
+  just after generating the dump file. In many cases the file is already 
+  complete so we can ask to ignore the 'Killed' message by setting <code 
+  class="link">ignoreuiautomatorkilled</code> to <code>True</code>.</p>
+  <p>Changes in 2.3.21 that uses <code>/dev/tty</code> instead of a file 
+  may have turned this variable unnnecessary, however it has been kept for 
+  backward compatibility.</p>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="views"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">views</h3>
+  <p>The list of Views represented as <code>str</code> obtained after 
+  splitting it into lines after being received from the server. Done by <a 
+  href="src.com.dtmilano.android.viewclient.ViewClient-class.html#setViews"
+  class="link">self.setViews()</a>.</p>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Aug  9 01:39:54 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.ViewNotFoundException-class.html b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.ViewNotFoundException-class.html
new file mode 100755
index 0000000..6190b81
--- /dev/null
+++ b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.ViewNotFoundException-class.html
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>src.com.dtmilano.android.viewclient.ViewNotFoundException</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;src ::
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="src.com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="src.com.dtmilano.android.viewclient-module.html">Module&nbsp;viewclient</a> ::
+        Class&nbsp;ViewNotFoundException
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="src.com.dtmilano.android.viewclient.ViewNotFoundException-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class ViewNotFoundException</h1><p class="nomargin-top"><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewNotFoundException">source&nbsp;code</a></span></p>
+<center>
+<center>  <map id="uml_class_diagram_for_src_com__3" name="uml_class_diagram_for_src_com__3">
+<area shape="rect" id="node1_14" href="src.com.dtmilano.android.viewclient.ViewNotFoundException-class.html#__init__" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="17,393,195,412"/>
+<area shape="rect" id="node1" href="src.com.dtmilano.android.viewclient.ViewNotFoundException-class.html" title="ViewNotFoundException is raised when a View is not found." alt="" coords="5,361,206,418"/>
+<area shape="rect" id="node2_15" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="43,316,169,335"/>
+<area shape="rect" id="node2" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="30,283,181,341"/>
+<area shape="rect" id="node3_16" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="28,31,185,49"/>
+<area shape="rect" id="node3_17" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="28,49,185,68"/>
+<area shape="rect" id="node3_18" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="28,71,185,89"/>
+<area shape="rect" id="node3_19" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="28,89,185,108"/>
+<area shape="rect" id="node3_20" href="javascript:void(0);" title="x[y]" alt="" coords="28,108,185,127"/>
+<area shape="rect" id="node3_21" href="javascript:void(0);" title="x[i:j]" alt="" coords="28,127,185,145"/>
+<area shape="rect" id="node3_22" href="javascript:void(0);" title="helper for pickle" alt="" coords="28,145,185,164"/>
+<area shape="rect" id="node3_23" href="javascript:void(0);" title="repr(x)" alt="" coords="28,164,185,183"/>
+<area shape="rect" id="node3_24" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="28,183,185,201"/>
+<area shape="rect" id="node3_25" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="28,201,185,220"/>
+<area shape="rect" id="node3_26" href="javascript:void(0);" title="str(x)" alt="" coords="28,220,185,239"/>
+<area shape="rect" id="node3_27" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="28,239,185,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="16,6,197,263"/>
+</map>
+  <img src="uml_class_diagram_for_src_com__3.gif" alt='' usemap="#uml_class_diagram_for_src_com__3" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>ViewNotFoundException is raised when a View is not found.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.ViewNotFoundException-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">attr</span>,
+        <span class="summary-sig-arg">value</span>,
+        <span class="summary-sig-arg">root</span>)</span><br />
+      x.__init__(...) initializes x; see help(type(x)) for signature</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewNotFoundException.__init__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+      <code>__new__</code>
+      </p>
+    <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+      <code>__delattr__</code>,
+      <code>__getattribute__</code>,
+      <code>__getitem__</code>,
+      <code>__getslice__</code>,
+      <code>__reduce__</code>,
+      <code>__repr__</code>,
+      <code>__setattr__</code>,
+      <code>__setstate__</code>,
+      <code>__str__</code>,
+      <code>__unicode__</code>
+      </p>
+    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+      <code>__format__</code>,
+      <code>__hash__</code>,
+      <code>__reduce_ex__</code>,
+      <code>__sizeof__</code>,
+      <code>__subclasshook__</code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Properties</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Properties"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+      <code>args</code>,
+      <code>message</code>
+      </p>
+    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+      <code>__class__</code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Method Details</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-MethodDetails"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">attr</span>,
+        <span class="sig-arg">value</span>,
+        <span class="sig-arg">root</span>)</span>
+    <br /><em class="fname">(Constructor)</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#ViewNotFoundException.__init__">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>x.__init__(...) initializes x; see help(type(x)) for signature</p>
+  <dl class="fields">
+    <dt>Overrides:
+        object.__init__
+        <dd><em class="note">(inherited documentation)</em></dd>
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Aug  9 01:39:55 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.Window-class.html b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.Window-class.html
new file mode 100755
index 0000000..62b767c
--- /dev/null
+++ b/AndroidViewClient/doc/src.com.dtmilano.android.viewclient.Window-class.html
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>src.com.dtmilano.android.viewclient.Window</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package&nbsp;src ::
+        Package&nbsp;com ::
+        Package&nbsp;dtmilano ::
+        <a href="src.com.dtmilano.android-module.html">Package&nbsp;android</a> ::
+        <a href="src.com.dtmilano.android.viewclient-module.html">Module&nbsp;viewclient</a> ::
+        Class&nbsp;Window
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="src.com.dtmilano.android.viewclient.Window-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Window</h1><p class="nomargin-top"><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#Window">source&nbsp;code</a></span></p>
+<p>Window class</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="src.com.dtmilano.android.viewclient.Window-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">num</span>,
+        <span class="summary-sig-arg">winId</span>,
+        <span class="summary-sig-arg">activity</span>,
+        <span class="summary-sig-arg">wvx</span>,
+        <span class="summary-sig-arg">wvy</span>,
+        <span class="summary-sig-arg">wvw</span>,
+        <span class="summary-sig-arg">wvh</span>,
+        <span class="summary-sig-arg">px</span>,
+        <span class="summary-sig-arg">py</span>,
+        <span class="summary-sig-arg">visibility</span>)</span><br />
+      Constructor</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#Window.__init__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="__str__"></a><span class="summary-sig-name">__str__</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#Window.__str__">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Method Details</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-MethodDetails"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">num</span>,
+        <span class="sig-arg">winId</span>,
+        <span class="sig-arg">activity</span>,
+        <span class="sig-arg">wvx</span>,
+        <span class="sig-arg">wvy</span>,
+        <span class="sig-arg">wvw</span>,
+        <span class="sig-arg">wvh</span>,
+        <span class="sig-arg">px</span>,
+        <span class="sig-arg">py</span>,
+        <span class="sig-arg">visibility</span>)</span>
+    <br /><em class="fname">(Constructor)</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="src.com.dtmilano.android.viewclient-pysrc.html#Window.__init__">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <p>Constructor</p>
+  <dl class="fields">
+    <dt>Parameters:</dt>
+    <dd><ul class="nomargin-top">
+        <li><strong class="pname"><code>num</code></strong> (int) - Ordering number in Window Manager</li>
+        <li><strong class="pname"><code>winId</code></strong> (str) - the window ID</li>
+        <li><strong class="pname"><code>activity</code></strong> (str) - the activity (or sometimes other component) owning the window</li>
+        <li><strong class="pname"><code>wvx</code></strong> (int) - window's virtual X</li>
+        <li><strong class="pname"><code>wvy</code></strong> (int) - window's virtual Y</li>
+        <li><strong class="pname"><code>wvw</code></strong> (int) - window's virtual width</li>
+        <li><strong class="pname"><code>wvh</code></strong> (int) - window's virtual height</li>
+        <li><strong class="pname"><code>px</code></strong> (int) - parent's X</li>
+        <li><strong class="pname"><code>py</code></strong> (int) - parent's Y</li>
+        <li><strong class="pname"><code>visibility</code></strong> (int) - visibility of the window</li>
+    </ul></dd>
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="src.com.dtmilano.android-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Project homepage -->
+      <th class="navbar" align="right" width="100%">
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tr><th class="navbar" align="center"
+            ><a class="navbar" target="_top" href="http://dtmilano.com/viewclient">Project Homepage</a></th>
+          </tr></table></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Aug  9 01:39:55 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/toc-com.dtmilano.android-module.html b/AndroidViewClient/doc/toc-com.dtmilano.android-module.html
new file mode 100755
index 0000000..a299660
--- /dev/null
+++ b/AndroidViewClient/doc/toc-com.dtmilano.android-module.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>android</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<h1 class="toc">Module android</h1>
+<hr />
+  <h2 class="toc">Variables</h2>
+    <a target="mainFrame" href="com.dtmilano.android-module.html#__package__"
+     >__package__</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/toc-com.dtmilano.android.adb-module.html b/AndroidViewClient/doc/toc-com.dtmilano.android.adb-module.html
new file mode 100755
index 0000000..56f764c
--- /dev/null
+++ b/AndroidViewClient/doc/toc-com.dtmilano.android.adb-module.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>adb</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<h1 class="toc">Module adb</h1>
+<hr />
+  <h2 class="toc">Variables</h2>
+    <a target="mainFrame" href="com.dtmilano.android.adb-module.html#__package__"
+     >__package__</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/toc-com.dtmilano.android.adb.adbclient-module.html b/AndroidViewClient/doc/toc-com.dtmilano.android.adb.adbclient-module.html
new file mode 100755
index 0000000..49718c0
--- /dev/null
+++ b/AndroidViewClient/doc/toc-com.dtmilano.android.adb.adbclient-module.html
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>adbclient</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<h1 class="toc">Module adbclient</h1>
+<hr />
+  <h2 class="toc">Classes</h2>
+    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html"
+     >AdbClient</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient.Device-class.html"
+     >Device</a><br />  <h2 class="toc">Variables</h2>
+    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#DEBUG"
+     >DEBUG</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#DOWN"
+     >DOWN</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#DOWN_AND_UP"
+     >DOWN_AND_UP</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#FAIL"
+     >FAIL</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#HOSTNAME"
+     >HOSTNAME</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#OKAY"
+     >OKAY</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#PORT"
+     >PORT</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#TIMEOUT"
+     >TIMEOUT</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#UP"
+     >UP</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#VERSION_RELEASE_PROPERTY"
+     >VERSION_RELEASE_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#VERSION_SDK_PROPERTY"
+     >VERSION_SDK_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#__package__"
+     >__package__</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/toc-com.dtmilano.android.viewclient-module.html b/AndroidViewClient/doc/toc-com.dtmilano.android.viewclient-module.html
new file mode 100755
index 0000000..26f7db8
--- /dev/null
+++ b/AndroidViewClient/doc/toc-com.dtmilano.android.viewclient-module.html
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>viewclient</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<h1 class="toc">Module viewclient</h1>
+<hr />
+  <h2 class="toc">Classes</h2>
+    <a target="mainFrame" href="com.dtmilano.android.viewclient.EditText-class.html"
+     >EditText</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient.Excerpt2Code-class.html"
+     >Excerpt2Code</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient.TextView-class.html"
+     >TextView</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html"
+     >UiAutomator2AndroidViewClient</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient.View-class.html"
+     >View</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient.ViewClient-class.html"
+     >ViewClient</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient.ViewNotFoundException-class.html"
+     >ViewNotFoundException</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient.Window-class.html"
+     >Window</a><br />  <h2 class="toc">Functions</h2>
+  <div class="private">
+    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#_nd"
+     >_nd</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#_nh"
+     >_nh</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#_ns"
+     >_ns</a><br />  </div>
+  <h2 class="toc">Variables</h2>
+    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#ADB_DEFAULT_PORT"
+     >ADB_DEFAULT_PORT</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG"
+     >DEBUG</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_BOUNDS"
+     >DEBUG_BOUNDS</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_CALL"
+     >DEBUG_CALL</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_COORDS"
+     >DEBUG_COORDS</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_DEVICE"
+     >DEBUG_DEVICE</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_DISTANCE"
+     >DEBUG_DISTANCE</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_GETATTR"
+     >DEBUG_GETATTR</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_RECEIVED"
+     >DEBUG_RECEIVED</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_STATUSBAR"
+     >DEBUG_STATUSBAR</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_TOUCH"
+     >DEBUG_TOUCH</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_TREE"
+     >DEBUG_TREE</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_WINDOWS"
+     >DEBUG_WINDOWS</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#GET_VISIBILITY_PROPERTY"
+     >GET_VISIBILITY_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#GONE"
+     >GONE</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#HEIGHT_PROPERTY"
+     >HEIGHT_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#HEIGHT_PROPERTY_API_8"
+     >HEIGHT_PROPERTY_API_8</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#ID_PROPERTY"
+     >ID_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#ID_PROPERTY_UI_AUTOMATOR"
+     >ID_PROPERTY_UI_AUTOMATOR</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#ID_RE"
+     >ID_RE</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#INVISIBLE"
+     >INVISIBLE</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#IP_RE"
+     >IP_RE</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#LAYOUT_TOP_MARGIN_PROPERTY"
+     >LAYOUT_TOP_MARGIN_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#LEFT_PROPERTY"
+     >LEFT_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#LEFT_PROPERTY_API_8"
+     >LEFT_PROPERTY_API_8</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#OFFSET"
+     >OFFSET</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED"
+     >SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY"
+     >TEXT_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY_API_10"
+     >TEXT_PROPERTY_API_10</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY_UI_AUTOMATOR"
+     >TEXT_PROPERTY_UI_AUTOMATOR</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#TOP_PROPERTY"
+     >TOP_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#TOP_PROPERTY_API_8"
+     >TOP_PROPERTY_API_8</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES"
+     >USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#VERSION_RELEASE_PROPERTY"
+     >VERSION_RELEASE_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#VERSION_SDK_PROPERTY"
+     >VERSION_SDK_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED"
+     >VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#VIEW_SERVER_HOST"
+     >VIEW_SERVER_HOST</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#VIEW_SERVER_PORT"
+     >VIEW_SERVER_PORT</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#VISIBLE"
+     >VISIBLE</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#WARNINGS"
+     >WARNINGS</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#WIDTH_PROPERTY"
+     >WIDTH_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#WIDTH_PROPERTY_API_8"
+     >WIDTH_PROPERTY_API_8</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#WS"
+     >WS</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#__package__"
+     >__package__</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/toc-everything.html b/AndroidViewClient/doc/toc-everything.html
new file mode 100755
index 0000000..81c8b2a
--- /dev/null
+++ b/AndroidViewClient/doc/toc-everything.html
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>Everything</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<h1 class="toc">Everything</h1>
+<hr />
+  <h2 class="toc">All Classes</h2>
+    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient.AdbClient-class.html"
+     >com.dtmilano.android.adb.adbclient.AdbClient</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient.Device-class.html"
+     >com.dtmilano.android.adb.adbclient.Device</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient.EditText-class.html"
+     >com.dtmilano.android.viewclient.EditText</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient.Excerpt2Code-class.html"
+     >com.dtmilano.android.viewclient.Excerpt2Code</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient.TextView-class.html"
+     >com.dtmilano.android.viewclient.TextView</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html"
+     >com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient.View-class.html"
+     >com.dtmilano.android.viewclient.View</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient.ViewClient-class.html"
+     >com.dtmilano.android.viewclient.ViewClient</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient.ViewNotFoundException-class.html"
+     >com.dtmilano.android.viewclient.ViewNotFoundException</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient.Window-class.html"
+     >com.dtmilano.android.viewclient.Window</a><br />  <h2 class="toc">All Functions</h2>
+  <div class="private">
+    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#_nd"
+     >com.dtmilano.android.viewclient._nd</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#_nh"
+     >com.dtmilano.android.viewclient._nh</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#_ns"
+     >com.dtmilano.android.viewclient._ns</a><br />  </div>
+  <h2 class="toc">All Variables</h2>
+    <a target="mainFrame" href="com.dtmilano.android-module.html#__package__"
+     >com.dtmilano.android.__package__</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb-module.html#__package__"
+     >com.dtmilano.android.adb.__package__</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#DEBUG"
+     >com.dtmilano.android.adb.adbclient.DEBUG</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#DOWN"
+     >com.dtmilano.android.adb.adbclient.DOWN</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#DOWN_AND_UP"
+     >com.dtmilano.android.adb.adbclient.DOWN_AND_UP</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#FAIL"
+     >com.dtmilano.android.adb.adbclient.FAIL</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#HOSTNAME"
+     >com.dtmilano.android.adb.adbclient.HOSTNAME</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#OKAY"
+     >com.dtmilano.android.adb.adbclient.OKAY</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#PORT"
+     >com.dtmilano.android.adb.adbclient.PORT</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#TIMEOUT"
+     >com.dtmilano.android.adb.adbclient.TIMEOUT</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#UP"
+     >com.dtmilano.android.adb.adbclient.UP</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#VERSION_RELEASE_PROPERTY"
+     >com.dtmilano.android.adb.adbclient.VERSION_RELEASE_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#VERSION_SDK_PROPERTY"
+     >com.dtmilano.android.adb.adbclient.VERSION_SDK_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.adb.adbclient-module.html#__package__"
+     >com.dtmilano.android.adb.adbclient.__package__</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#ADB_DEFAULT_PORT"
+     >com.dtmilano.android.viewclient.ADB_DEFAULT_PORT</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG"
+     >com.dtmilano.android.viewclient.DEBUG</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_BOUNDS"
+     >com.dtmilano.android.viewclient.DEBUG_BOUNDS</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_CALL"
+     >com.dtmilano.android.viewclient.DEBUG_CALL</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_COORDS"
+     >com.dtmilano.android.viewclient.DEBUG_COORDS</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_DEVICE"
+     >com.dtmilano.android.viewclient.DEBUG_DEVICE</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_DISTANCE"
+     >com.dtmilano.android.viewclient.DEBUG_DISTANCE</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_GETATTR"
+     >com.dtmilano.android.viewclient.DEBUG_GETATTR</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_RECEIVED"
+     >com.dtmilano.android.viewclient.DEBUG_RECEIVED</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_STATUSBAR"
+     >com.dtmilano.android.viewclient.DEBUG_STATUSBAR</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_TOUCH"
+     >com.dtmilano.android.viewclient.DEBUG_TOUCH</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_TREE"
+     >com.dtmilano.android.viewclient.DEBUG_TREE</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#DEBUG_WINDOWS"
+     >com.dtmilano.android.viewclient.DEBUG_WINDOWS</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#GET_VISIBILITY_PROPERTY"
+     >com.dtmilano.android.viewclient.GET_VISIBILITY_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#GONE"
+     >com.dtmilano.android.viewclient.GONE</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#HEIGHT_PROPERTY"
+     >com.dtmilano.android.viewclient.HEIGHT_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#HEIGHT_PROPERTY_API_8"
+     >com.dtmilano.android.viewclient.HEIGHT_PROPERTY_API_8</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#ID_PROPERTY"
+     >com.dtmilano.android.viewclient.ID_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#ID_PROPERTY_UI_AUTOMATOR"
+     >com.dtmilano.android.viewclient.ID_PROPERTY_UI_AUTOMATOR</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#ID_RE"
+     >com.dtmilano.android.viewclient.ID_RE</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#INVISIBLE"
+     >com.dtmilano.android.viewclient.INVISIBLE</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#IP_RE"
+     >com.dtmilano.android.viewclient.IP_RE</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#LAYOUT_TOP_MARGIN_PROPERTY"
+     >com.dtmilano.android.viewclient.LAYOUT_TOP_MARGIN_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#LEFT_PROPERTY"
+     >com.dtmilano.android.viewclient.LEFT_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#LEFT_PROPERTY_API_8"
+     >com.dtmilano.android.viewclient.LEFT_PROPERTY_API_8</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#OFFSET"
+     >com.dtmilano.android.viewclient.OFFSET</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED"
+     >com.dtmilano.android.viewclient.SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY"
+     >com.dtmilano.android.viewclient.TEXT_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY_API_10"
+     >com.dtmilano.android.viewclient.TEXT_PROPERTY_API_10</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY_UI_AUTOMATOR"
+     >com.dtmilano.android.viewclient.TEXT_PROPERTY_UI_AUTOMATOR</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#TOP_PROPERTY"
+     >com.dtmilano.android.viewclient.TOP_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#TOP_PROPERTY_API_8"
+     >com.dtmilano.android.viewclient.TOP_PROPERTY_API_8</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES"
+     >com.dtmilano.android.viewclient.USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#VERSION_RELEASE_PROPERTY"
+     >com.dtmilano.android.viewclient.VERSION_RELEASE_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#VERSION_SDK_PROPERTY"
+     >com.dtmilano.android.viewclient.VERSION_SDK_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED"
+     >com.dtmilano.android.viewclient.VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#VIEW_SERVER_HOST"
+     >com.dtmilano.android.viewclient.VIEW_SERVER_HOST</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#VIEW_SERVER_PORT"
+     >com.dtmilano.android.viewclient.VIEW_SERVER_PORT</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#VISIBLE"
+     >com.dtmilano.android.viewclient.VISIBLE</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#WARNINGS"
+     >com.dtmilano.android.viewclient.WARNINGS</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#WIDTH_PROPERTY"
+     >com.dtmilano.android.viewclient.WIDTH_PROPERTY</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#WIDTH_PROPERTY_API_8"
+     >com.dtmilano.android.viewclient.WIDTH_PROPERTY_API_8</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#WS"
+     >com.dtmilano.android.viewclient.WS</a><br />    <a target="mainFrame" href="com.dtmilano.android.viewclient-module.html#__package__"
+     >com.dtmilano.android.viewclient.__package__</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/toc-src.com.dtmilano.android-module.html b/AndroidViewClient/doc/toc-src.com.dtmilano.android-module.html
new file mode 100755
index 0000000..90e21e5
--- /dev/null
+++ b/AndroidViewClient/doc/toc-src.com.dtmilano.android-module.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>android</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<h1 class="toc">Module android</h1>
+<hr />
+  <h2 class="toc">Variables</h2>
+    <a target="mainFrame" href="src.com.dtmilano.android-module.html#__package__"
+     >__package__</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/toc-src.com.dtmilano.android.viewclient-module.html b/AndroidViewClient/doc/toc-src.com.dtmilano.android.viewclient-module.html
new file mode 100755
index 0000000..84041f9
--- /dev/null
+++ b/AndroidViewClient/doc/toc-src.com.dtmilano.android.viewclient-module.html
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>viewclient</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<h1 class="toc">Module viewclient</h1>
+<hr />
+  <h2 class="toc">Classes</h2>
+    <a target="mainFrame" href="src.com.dtmilano.android.viewclient.EditText-class.html"
+     >EditText</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient.Excerpt2Code-class.html"
+     >Excerpt2Code</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient.TextView-class.html"
+     >TextView</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient.UiAutomator2AndroidViewClient-class.html"
+     >UiAutomator2AndroidViewClient</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient.View-class.html"
+     >View</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient.ViewClient-class.html"
+     >ViewClient</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient.ViewNotFoundException-class.html"
+     >ViewNotFoundException</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient.Window-class.html"
+     >Window</a><br />  <h2 class="toc">Functions</h2>
+  <div class="private">
+    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#__nd"
+     >__nd</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#__nh"
+     >__nh</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#__ns"
+     >__ns</a><br />  </div>
+  <h2 class="toc">Variables</h2>
+    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#ADB_DEFAULT_PORT"
+     >ADB_DEFAULT_PORT</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#DEBUG"
+     >DEBUG</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#DEBUG_BOUNDS"
+     >DEBUG_BOUNDS</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#DEBUG_CALL"
+     >DEBUG_CALL</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#DEBUG_COORDS"
+     >DEBUG_COORDS</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#DEBUG_DEVICE"
+     >DEBUG_DEVICE</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#DEBUG_DISTANCE"
+     >DEBUG_DISTANCE</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#DEBUG_GETATTR"
+     >DEBUG_GETATTR</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#DEBUG_RECEIVED"
+     >DEBUG_RECEIVED</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#DEBUG_STATUSBAR"
+     >DEBUG_STATUSBAR</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#DEBUG_TOUCH"
+     >DEBUG_TOUCH</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#DEBUG_TREE"
+     >DEBUG_TREE</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#DEBUG_WINDOWS"
+     >DEBUG_WINDOWS</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#GET_VISIBILITY_PROPERTY"
+     >GET_VISIBILITY_PROPERTY</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#GONE"
+     >GONE</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#HEIGHT_PROPERTY"
+     >HEIGHT_PROPERTY</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#HEIGHT_PROPERTY_API_8"
+     >HEIGHT_PROPERTY_API_8</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#ID_PROPERTY"
+     >ID_PROPERTY</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#ID_PROPERTY_UI_AUTOMATOR"
+     >ID_PROPERTY_UI_AUTOMATOR</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#ID_RE"
+     >ID_RE</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#INVISIBLE"
+     >INVISIBLE</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#IP_RE"
+     >IP_RE</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#LAYOUT_TOP_MARGIN_PROPERTY"
+     >LAYOUT_TOP_MARGIN_PROPERTY</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#LEFT_PROPERTY"
+     >LEFT_PROPERTY</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#LEFT_PROPERTY_API_8"
+     >LEFT_PROPERTY_API_8</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#OFFSET"
+     >OFFSET</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED"
+     >SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY"
+     >TEXT_PROPERTY</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY_API_10"
+     >TEXT_PROPERTY_API_10</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#TEXT_PROPERTY_UI_AUTOMATOR"
+     >TEXT_PROPERTY_UI_AUTOMATOR</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#TOP_PROPERTY"
+     >TOP_PROPERTY</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#TOP_PROPERTY_API_8"
+     >TOP_PROPERTY_API_8</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES"
+     >USE_MONKEYRUNNER_TO_GET_BUILD_PROPERTIES</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#VERSION_SDK_PROPERTY"
+     >VERSION_SDK_PROPERTY</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#VIEW_SERVER_HOST"
+     >VIEW_SERVER_HOST</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#VIEW_SERVER_PORT"
+     >VIEW_SERVER_PORT</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#VISIBLE"
+     >VISIBLE</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#WARNINGS"
+     >WARNINGS</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#WIDTH_PROPERTY"
+     >WIDTH_PROPERTY</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#WIDTH_PROPERTY_API_8"
+     >WIDTH_PROPERTY_API_8</a><br />    <a target="mainFrame" href="src.com.dtmilano.android.viewclient-module.html#WS"
+     >WS</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/toc.html b/AndroidViewClient/doc/toc.html
new file mode 100755
index 0000000..6b3941d
--- /dev/null
+++ b/AndroidViewClient/doc/toc.html
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>Table of Contents</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<h1 class="toc">Table&nbsp;of&nbsp;Contents</h1>
+<hr />
+  <a target="moduleFrame" href="toc-everything.html">Everything</a>
+  <br />
+  <h2 class="toc">Modules</h2>
+    <a target="moduleFrame" href="toc-com.dtmilano.android-module.html"
+     onclick="setFrame('toc-com.dtmilano.android-module.html','com.dtmilano.android-module.html');"     >com.dtmilano.android</a><br />    <a target="moduleFrame" href="toc-com.dtmilano.android.adb-module.html"
+     onclick="setFrame('toc-com.dtmilano.android.adb-module.html','com.dtmilano.android.adb-module.html');"     >com.dtmilano.android.adb</a><br />    <a target="moduleFrame" href="toc-com.dtmilano.android.adb.adbclient-module.html"
+     onclick="setFrame('toc-com.dtmilano.android.adb.adbclient-module.html','com.dtmilano.android.adb.adbclient-module.html');"     >com.dtmilano.android.adb.adbclient</a><br />    <a target="moduleFrame" href="toc-com.dtmilano.android.viewclient-module.html"
+     onclick="setFrame('toc-com.dtmilano.android.viewclient-module.html','com.dtmilano.android.viewclient-module.html');"     >com.dtmilano.android.viewclient</a><br /><hr />
+  <span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/AndroidViewClient/doc/uml_class_diagram_for_com_dtmi.gif b/AndroidViewClient/doc/uml_class_diagram_for_com_dtmi.gif
new file mode 100755
index 0000000..3af40e2
--- /dev/null
+++ b/AndroidViewClient/doc/uml_class_diagram_for_com_dtmi.gif
Binary files differ
diff --git a/AndroidViewClient/doc/uml_class_diagram_for_com_dtmi_2.gif b/AndroidViewClient/doc/uml_class_diagram_for_com_dtmi_2.gif
new file mode 100755
index 0000000..03580b7
--- /dev/null
+++ b/AndroidViewClient/doc/uml_class_diagram_for_com_dtmi_2.gif
Binary files differ
diff --git a/AndroidViewClient/doc/uml_class_diagram_for_com_dtmi_3.gif b/AndroidViewClient/doc/uml_class_diagram_for_com_dtmi_3.gif
new file mode 100755
index 0000000..d89cd6a
--- /dev/null
+++ b/AndroidViewClient/doc/uml_class_diagram_for_com_dtmi_3.gif
Binary files differ
diff --git a/AndroidViewClient/doc/uml_class_diagram_for_com_dtmi_4.gif b/AndroidViewClient/doc/uml_class_diagram_for_com_dtmi_4.gif
new file mode 100755
index 0000000..ed22255
--- /dev/null
+++ b/AndroidViewClient/doc/uml_class_diagram_for_com_dtmi_4.gif
Binary files differ
diff --git a/AndroidViewClient/doc/uml_class_diagram_for_src_com_.gif b/AndroidViewClient/doc/uml_class_diagram_for_src_com_.gif
new file mode 100755
index 0000000..b02f257
--- /dev/null
+++ b/AndroidViewClient/doc/uml_class_diagram_for_src_com_.gif
Binary files differ
diff --git a/AndroidViewClient/doc/uml_class_diagram_for_src_com__2.gif b/AndroidViewClient/doc/uml_class_diagram_for_src_com__2.gif
new file mode 100755
index 0000000..900a877
--- /dev/null
+++ b/AndroidViewClient/doc/uml_class_diagram_for_src_com__2.gif
Binary files differ
diff --git a/AndroidViewClient/doc/uml_class_diagram_for_src_com__3.gif b/AndroidViewClient/doc/uml_class_diagram_for_src_com__3.gif
new file mode 100755
index 0000000..3af537c
--- /dev/null
+++ b/AndroidViewClient/doc/uml_class_diagram_for_src_com__3.gif
Binary files differ
diff --git a/AndroidViewClient/examples/apidemos-app-alert_dialog-list_dialog-command_three.py b/AndroidViewClient/examples/apidemos-app-alert_dialog-list_dialog-command_three.py
new file mode 100755
index 0000000..0053d86
--- /dev/null
+++ b/AndroidViewClient/examples/apidemos-app-alert_dialog-list_dialog-command_three.py
@@ -0,0 +1,61 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Sep 5, 2012
+
+@author: diego
+'''
+
+
+import re
+import sys
+import os
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient, View
+
+device, serialno = ViewClient.connectToDeviceOrExit()
+
+FLAG_ACTIVITY_NEW_TASK = 0x10000000
+#09-06 01:01:34.964: I/ActivityManager(873): START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.android.apis/.ApiDemos bnds=[784,346][880,442]} from pid 991
+componentName = 'com.example.android.apis/.ApiDemos'
+device.startActivity(component=componentName, flags=FLAG_ACTIVITY_NEW_TASK)
+
+ViewClient.sleep(3)
+vc = ViewClient(device=device, serialno=serialno)
+app = vc.findViewWithText('App')
+if app:
+   app.touch()
+   ViewClient.sleep(3)
+   # windows changed, request a new dump
+   vc.dump()
+   ad = vc.findViewWithText('Alert Dialogs')
+   if ad:
+      ad.touch()
+      ViewClient.sleep(3)
+      # windows changed, request a new dump
+      vc.dump()
+      ld = vc.findViewWithText('List dialog')
+      if ld:
+         ld.touch()
+         ViewClient.sleep(3)
+         # windows changed, request a new dump
+         vc.dump()
+         c3 = vc.findViewWithText('Command three')
+         if c3:
+            c3.touch()
+            ViewClient.sleep(10)
+            device.press('KEYCODE_BACK')
+         else:
+            print >> sys.stderr, "Cannot find 'Command three'"
+      else:
+         print >> sys.stderr, "Cannot find 'List dialog'"
+   else:
+      print >> sys.stderr, "Cannot find 'Alert Dialogs'"
+else:
+   print >> sys.stderr, "Cannot find 'App'"
+
diff --git a/AndroidViewClient/examples/apidemos-preference-advanced_preferences.py b/AndroidViewClient/examples/apidemos-preference-advanced_preferences.py
new file mode 100755
index 0000000..be33c8e
--- /dev/null
+++ b/AndroidViewClient/examples/apidemos-preference-advanced_preferences.py
@@ -0,0 +1,47 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Sep 18, 2012
+
+@author: diego
+'''
+
+
+import re
+import sys
+import os
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+import com.dtmilano.android.viewclient as viewclient
+if viewclient.__version__ < '1.0':
+    print >> sys.stderr, "%s: This script requires viewclient 1.0 or greater." % os.path.basename(sys.argv[0])
+    sys.exit(1)
+
+device, serialno = viewclient.ViewClient.connectToDeviceOrExit()
+
+FLAG_ACTIVITY_NEW_TASK = 0x10000000
+#09-06 01:01:34.964: I/ActivityManager(873): START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.android.apis/.ApiDemos bnds=[784,346][880,442]} from pid 991
+componentName = 'com.example.android.apis/.ApiDemos'
+device.startActivity(component=componentName, flags=FLAG_ACTIVITY_NEW_TASK)
+
+viewclient.ViewClient.sleep(3)
+vc = viewclient.ViewClient(device=device, serialno=serialno)
+vc.findViewWithTextOrRaise('Preference').touch()
+vc.dump()
+vc.findViewWithTextOrRaise(re.compile('.*Advanced preferences')).touch()
+vc.dump()
+myPreference = vc.findViewWithTextOrRaise('My preference')
+if vc.getSdkVersion() >= 16:
+    _id = 'id/no_id/22'
+else:
+    _id = 'id/mypreference_widget'
+value0 = vc.findViewByIdOrRaise(_id).getText()
+for i in range(10):
+    myPreference.touch()
+vc.dump()
+value1 = vc.findViewByIdOrRaise(_id).getText()
+print "My preference started with value %s and is now %s" % (value0, value1)
diff --git a/AndroidViewClient/examples/browser-open-url.py b/AndroidViewClient/examples/browser-open-url.py
new file mode 100755
index 0000000..6ff4ca7
--- /dev/null
+++ b/AndroidViewClient/examples/browser-open-url.py
@@ -0,0 +1,48 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Mar 13, 2012
+
+@author: diego
+'''
+
+
+import re
+import sys
+import os
+import string
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient
+
+USE_BROWSER = True
+# Starting: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.android.browser/.BrowserActivity }
+if USE_BROWSER:
+    package = 'com.android.browser'
+    activity = '.BrowserActivity'
+else:
+    package = 'com.android.chrome'
+    activity = 'com.google.android.apps.chrome.Main'
+component = package + "/" + activity
+uri = 'http://dtmilano.blogspot.com'
+
+device, serialno = ViewClient.connectToDeviceOrExit()
+device.startActivity(component=component, uri=uri)
+ViewClient.sleep(5)
+
+vc = ViewClient(device, serialno)
+if vc.getSdkVersion() >= 16:
+    if USE_BROWSER:
+        url = vc.findViewByIdOrRaise("id/no_id/12").getText()
+    else:
+        url = vc.findViewWithContentDescription("Search or type url").getText()
+else:
+    url = vc.findViewByIdOrRaise("id/url").getText()
+if string.find(uri, url) != -1:
+    print "%s successfully loaded" % uri
+else:
+    print "%s was not loaded, url=%s" % (uri, url)
diff --git a/AndroidViewClient/examples/browser-view-page-source.py b/AndroidViewClient/examples/browser-view-page-source.py
new file mode 100755
index 0000000..26a0d2e
--- /dev/null
+++ b/AndroidViewClient/examples/browser-view-page-source.py
@@ -0,0 +1,63 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Oct 12, 2012
+
+@author: diego
+'''
+
+
+import re
+import sys
+import os
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient
+
+
+VPS = "javascript:alert(document.getElementsByTagName('html')[0].innerHTML);"
+USE_BROWSER = True
+if USE_BROWSER:
+    package = 'com.android.browser'
+    activity = '.BrowserActivity'
+    _id = 'id/no_id/12'
+else:
+    package = 'com.android.chrome'
+    activity = 'com.google.android.apps.chrome.Main'
+    _id = 'id/no_id/28'
+component = package + "/" + activity
+uri = 'http://dtmilano.blogspot.com'
+                   
+
+device, serialno = ViewClient.connectToDeviceOrExit()
+
+device.startActivity(component=component, uri=uri)
+ViewClient.sleep(5)
+
+vc = ViewClient(device=device, serialno=serialno)
+sdkVersion = vc.getSdkVersion()
+
+if sdkVersion > 10:
+    device.drag((240, 180), (240, 420), 1, 20)
+else:
+    for i in range(10):
+        device.press('KEYCODE_DPAD_UP')
+        ViewClient.sleep(1)
+
+vc.findViewByIdOrRaise(_id if sdkVersion >= 16 else 'id/url' if sdkVersion > 10 else 'id/title').touch()
+ViewClient.sleep(1)
+
+device.press('KEYCODE_DEL')
+device.type(VPS)
+ViewClient.sleep(1)
+device.press('KEYCODE_ENTER')
+ViewClient.sleep(3)
+
+vc.dump()
+print vc.findViewByIdOrRaise('id/no_id/11' if sdkVersion >= 16 else 'id/message').getText().replace('\\n', "\n")
+
+device.press('KEYCODE_BACK' if sdkVersion > 10 else 'KEYCODE_ENTER')
diff --git a/AndroidViewClient/examples/check-import.py b/AndroidViewClient/examples/check-import.py
new file mode 100755
index 0000000..66ad2ca
--- /dev/null
+++ b/AndroidViewClient/examples/check-import.py
@@ -0,0 +1,40 @@
+#! /usr/bin/env python
+'''
+Created on Aug 29, 2012
+
+@author: diego
+'''
+
+import re
+import sys
+import os
+
+debug = False
+if '--debug' in sys.argv or '-X' in sys.argv:
+    debug = True
+
+try:
+    if os.environ.has_key('ANDROID_VIEW_CLIENT_HOME'):
+        avcd = os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src')
+        if os.path.isdir(avcd):
+            sys.path.append(avcd)
+        else:
+            print >>sys.stderr, "WARNING: '%s' is not a directory and is pointed by ANDROID_VIEW_CLIENT_HOME environment variable" % avcd
+except:
+    pass
+
+if debug:
+    print >>sys.stderr, "sys.path=", sys.path
+for d in sys.path:
+    if d in [ '__classpath__', '__pyclasspath__/']:
+        continue
+    if not os.path.exists(d):
+        if re.search('/Lib$', d):
+            if not os.path.exists(re.sub('/Lib$', '', d)):
+                print >>sys.stderr, "WARNING: '%s' is in sys.path but doesn't exist" % d
+import com
+import com.dtmilano
+import com.dtmilano.android
+import com.dtmilano.android.viewclient
+from com.dtmilano.android.viewclient import ViewClient, View
+print "OK"
diff --git a/AndroidViewClient/examples/click-button-by-text.py b/AndroidViewClient/examples/click-button-by-text.py
new file mode 100755
index 0000000..8dc8768
--- /dev/null
+++ b/AndroidViewClient/examples/click-button-by-text.py
@@ -0,0 +1,32 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on May 5, 2012
+
+@author: diego
+'''
+
+import sys
+import os
+import time
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient
+
+vc = ViewClient(*ViewClient.connectToDeviceOrExit())
+
+for bt in [ 'One', 'Two', 'Three', 'Four', 'Five' ]:
+    b = vc.findViewWithText(bt)
+    if b:
+        (x, y) = b.getXY()
+        print >>sys.stderr, "clicking b%s @ (%d,%d) ..." % (bt, x, y)
+        b.touch()
+    else:
+        print >>sys.stderr, "b%s not found" % bt
+    time.sleep(7)
+
+print >>sys.stderr, "bye"
diff --git a/AndroidViewClient/examples/click-no-id-button.py b/AndroidViewClient/examples/click-no-id-button.py
new file mode 100755
index 0000000..b4190b0
--- /dev/null
+++ b/AndroidViewClient/examples/click-no-id-button.py
@@ -0,0 +1,26 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Aug 7, 2012
+
+@author: diego
+'''
+
+import sys
+import os
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient
+
+
+vc = ViewClient(*ViewClient.connectToDeviceOrExit())
+
+for i in range(1, 9):
+    view = vc.findViewById("id/no_id/%d" % i)
+    if view:
+        print view.__tinyStr__()
+        view.touch()
diff --git a/AndroidViewClient/examples/development-settings-show-running-processes.py b/AndroidViewClient/examples/development-settings-show-running-processes.py
new file mode 100755
index 0000000..fc2b1d9
--- /dev/null
+++ b/AndroidViewClient/examples/development-settings-show-running-processes.py
@@ -0,0 +1,48 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Feb 3, 2012
+
+@author: diego
+'''
+
+
+import re
+import sys
+import os
+
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient
+
+# 01-04 18:23:42.000: I/ActivityManager(4288): Displayed com.android.development/.DevelopmentSettings: +379ms
+package = 'com.android.development'
+activity = '.DevelopmentSettings'
+component = package + "/" + activity
+device, serialno = ViewClient.connectToDeviceOrExit()
+device.startActivity(component=component)
+ViewClient.sleep(5)
+
+vc = ViewClient(device, serialno)
+
+showCpu = vc.findViewWithTextOrRaise("Show CPU usage")
+showLoad = vc.findViewWithTextOrRaise("Show running processes")
+alwaysFinish = vc.findViewWithTextOrRaise("Immediately destroy activities")
+
+if not showLoad.isChecked():
+    print "touching @", showLoad.getCenter()
+    showLoad.touch()
+
+if not alwaysFinish.isChecked():
+    print "touching @", alwaysFinish.getCenter()
+    alwaysFinish.touch()
+
+if not showCpu.isChecked():
+    # WARNING: Show CPU usage is de-activated as soon as it's activated, that's why it seems it
+    # is never set
+    print "touching @", showCpu.getCenter()
+    showCpu.touch()
diff --git a/AndroidViewClient/examples/dump-all-windows-lib.py b/AndroidViewClient/examples/dump-all-windows-lib.py
new file mode 100755
index 0000000..87c2779
--- /dev/null
+++ b/AndroidViewClient/examples/dump-all-windows-lib.py
@@ -0,0 +1,28 @@
+#!/usr/bin/env python
+#! /usr/bin/env shebang monkeyrunner -plugin $ANDROID_VIEW_CLIENT_HOME/bin/androidviewclient-$ANDROID_VIEW_CLIENT_VERSION.jar @!
+#
+# Linux:
+#! /usr/local/bin/shebang monkeyrunner -plugin $AVC_HOME/bin/androidviewclient-$AVC_VERSION.jar @!
+#
+# Other:
+#! /path/to/monkeyrunner -plugin /path/to/androidviewclient/bin/androidviewclient-2.3.14.jar
+#
+# No shebang:
+# c:>path\to\monkeyrunner -plugin \path\to\androidviewclient-2.3.13.jar dump-all-windows-lib.py
+
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Apr 30, 2013
+
+@author: diego
+'''
+
+from com.dtmilano.android.viewclient import ViewClient
+
+kwargs2 = {'autodump': False, 'forceviewserveruse': True}
+vc = ViewClient(*ViewClient.connectToDeviceOrExit(), **kwargs2)
+windows = vc.list()
+for wId in windows.keys():
+    print ">>> window=", wId, windows[wId]
+    vc.dump(window=wId)
+    vc.traverse(transform=ViewClient.TRAVERSE_CIT, indent="    ")
diff --git a/AndroidViewClient/examples/dump-all-windows.py b/AndroidViewClient/examples/dump-all-windows.py
new file mode 100755
index 0000000..a7ff5b7
--- /dev/null
+++ b/AndroidViewClient/examples/dump-all-windows.py
@@ -0,0 +1,27 @@
+#! /usr/bin/env python
+
+'''
+Copyright (C) 2014  Diego Torres Milano
+Created on Apr 24, 2014
+
+@author: diego
+'''
+
+import sys
+import os
+
+try:
+    sys.path.insert(0, os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient
+
+kwargs1 = {'verbose': True, 'ignoresecuredevice': True}
+kwargs2 = {'startviewserver': True, 'forceviewserveruse': True, 'autodump': False, 'ignoreuiautomatorkilled': True}
+vc = ViewClient(*ViewClient.connectToDeviceOrExit(**kwargs1), **kwargs2)
+windows = vc.list()
+for wId in windows.keys():
+    print ">>> window=", wId, windows[wId]
+    vc.dump(window=wId)
+    vc.traverse(transform=ViewClient.TRAVERSE_CITCD, indent="    ")
diff --git a/AndroidViewClient/examples/dump-simple-lib.py b/AndroidViewClient/examples/dump-simple-lib.py
new file mode 100755
index 0000000..66eef29
--- /dev/null
+++ b/AndroidViewClient/examples/dump-simple-lib.py
@@ -0,0 +1,21 @@
+#! /usr/bin/env shebang monkeyrunner -plugin $ANDROID_VIEW_CLIENT_HOME/bin/androidviewclient-$ANDROID_VIEW_CLIENT_VERSION.jar @!
+#
+# Linux:
+#! /usr/local/bin/shebang monkeyrunner -plugin $AVC_HOME/bin/androidviewclient-$AVC_VERSION.jar @!
+#
+# Other:
+#! /path/to/monkeyrunner -plugin /path/to/androidviewclient/bin/androidviewclient-2.3.14.jar
+#
+# No shebang:
+# c:>path\to\monkeyrunner -plugin \path\to\androidviewclient-2.3.13.jar dump-simple-lib.py
+
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Apr 30, 2013
+
+@author: diego
+'''
+
+from com.dtmilano.android.viewclient import ViewClient
+
+ViewClient(*ViewClient.connectToDeviceOrExit()).traverse(transform=ViewClient.TRAVERSE_CIT)
diff --git a/AndroidViewClient/examples/dump-simple.py b/AndroidViewClient/examples/dump-simple.py
new file mode 100755
index 0000000..d25d0be
--- /dev/null
+++ b/AndroidViewClient/examples/dump-simple.py
@@ -0,0 +1,28 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Apr 30, 2013
+
+@author: diego
+'''
+
+
+import sys
+import os
+
+# PyDev sets PYTHONPATH, use it
+try:
+    for p in os.environ['PYTHONPATH'].split(':'):
+        if not p in sys.path:
+            sys.path.append(p)
+except:
+    pass
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient
+
+ViewClient(*ViewClient.connectToDeviceOrExit(verbose=True)).traverse(transform=ViewClient.TRAVERSE_CIT)
diff --git a/AndroidViewClient/examples/dump.py b/AndroidViewClient/examples/dump.py
new file mode 100755
index 0000000..481c9e2
--- /dev/null
+++ b/AndroidViewClient/examples/dump.py
@@ -0,0 +1,9 @@
+#! /usr/bin/env python
+
+print '''
+Notice:
+-------
+'dump.py' was moved to the 'tools' directory and renamed 'dump'.
+A simpler example is now in 'dump-simple.py'.
+
+'''
diff --git a/AndroidViewClient/examples/email-send.py b/AndroidViewClient/examples/email-send.py
new file mode 100755
index 0000000..6b97572
--- /dev/null
+++ b/AndroidViewClient/examples/email-send.py
@@ -0,0 +1,35 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Oct 1, 2012
+
+@author: diego
+'''
+
+
+import re
+import sys
+import os
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient, TextView, EditText
+
+device, serialno = ViewClient.connectToDeviceOrExit()
+vc = ViewClient(device=device, serialno=serialno)
+#send = vc.findViewWithTextOrRaise('Send')
+send = vc.findViewByIdOrRaise('id/send')
+#to = EditText(vc.findViewByIdOrRaise('id/to'))
+to = vc.findViewByIdOrRaise('id/to')
+subject = vc.findViewByIdOrRaise('id/subject')
+subject.touch()
+subject.type('AVCSample')
+ViewClient.sleep(10)
+to.touch()
+#to.type('androidviewclient@gmail.com')
+device.type('androidviewclient@gmail.com')
+ViewClient.sleep(10)
+send.touch()
diff --git a/AndroidViewClient/examples/envsetup.sh b/AndroidViewClient/examples/envsetup.sh
new file mode 100755
index 0000000..99ce3c4
--- /dev/null
+++ b/AndroidViewClient/examples/envsetup.sh
@@ -0,0 +1,20 @@
+:
+
+export ANDROID_HOME=/Users/diego/opt/android-sdk
+export ANDROID_VIEW_CLIENT_HOME=/Users/diego/AndroidViewClient/AndroidViewClient
+# setting PYTHONPATH also works
+#export PYTHONPATH=$PYTHONPATH:/Users/diego/AndroidViewClient/AndroidViewClient
+
+
+add_to_path ()
+{
+    if [[ "$PATH" =~ (^|:)"${1}"(:|$) ]]
+    then
+        return 0
+    fi
+    export PATH=${1}:$PATH
+}
+
+
+add_to_path $ANDROID_HOME/tools
+add_to_path $ANDROID_HOME/platform-tools
diff --git a/AndroidViewClient/examples/gallery-select-album.py b/AndroidViewClient/examples/gallery-select-album.py
new file mode 100755
index 0000000..720dfd3
--- /dev/null
+++ b/AndroidViewClient/examples/gallery-select-album.py
@@ -0,0 +1,47 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Feb 3, 2012
+
+@author: diego
+'''
+
+
+import sys
+import os
+import re
+import time
+
+# This must be imported before MonkeyRunner and MonkeyDevice,
+# otherwise the import fails.
+# PyDev sets PYTHONPATH, use it
+try:
+    for p in os.environ['PYTHONPATH'].split(':'):
+        if not p in sys.path:
+            sys.path.append(p)
+except:
+    pass
+    
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import *
+
+package = 'com.android.gallery'
+activity = 'com.android.camera.GalleryPicker'
+component = package + "/" + activity
+
+device, serialno = ViewClient.connectToDeviceOrExit()
+device.startActivity(component=component)
+time.sleep(3)
+vc = ViewClient(device, serialno)
+if vc.build[VERSION_SDK_PROPERTY] != 15:
+    print 'This script is intended to run on API-15'
+    sys.exit(1)
+ALL_PICTURES = 'All pictures'
+vc.findViewWithTextOrRaise(re.compile('%s \(\d+\)' % ALL_PICTURES)).touch()
+vc.dump()
+vc.findViewWithTextOrRaise(ALL_PICTURES)
+print "'%s' found" % ALL_PICTURES
diff --git a/AndroidViewClient/examples/list.py b/AndroidViewClient/examples/list.py
new file mode 100755
index 0000000..2e89bf9
--- /dev/null
+++ b/AndroidViewClient/examples/list.py
@@ -0,0 +1,67 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Apr 23, 2013
+
+@author: diego
+'''
+
+
+import sys
+import os
+import getopt
+
+# This must be imported before MonkeyRunner and MonkeyDevice,
+# otherwise the import fails.
+# PyDev sets PYTHONPATH, use it
+try:
+    for p in os.environ['PYTHONPATH'].split(':'):
+        if not p in sys.path:
+            sys.path.append(p)
+except:
+    pass
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient
+
+HELP = 'help'
+VERBOSE = 'verbose'
+IGNORE_SECURE_DEVICE = 'ignore-secure-device'
+FORCE_VIEW_SERVER_USE = 'force-view-server-use'
+DO_NOT_START_VIEW_SERVER = 'do-not-start-view-server'
+# -u,-s,-p,-v eaten by monkeyrunner
+SHORT_OPTS = 'HVIFS'
+LONG_OPTS =  [HELP, VERBOSE, IGNORE_SECURE_DEVICE, FORCE_VIEW_SERVER_USE, DO_NOT_START_VIEW_SERVER]
+
+def usage(exitVal=1):
+    print >> sys.stderr, 'usage: list.py [-H|--%s] [-V|--%s] [-I|--%s] [-F|--%s] [-S|--%s] [serialno]' % \
+        tuple(LONG_OPTS)
+    sys.exit(exitVal)
+
+try:
+    opts, args = getopt.getopt(sys.argv[1:], SHORT_OPTS, LONG_OPTS)
+except getopt.GetoptError, e:
+    print >>sys.stderr, 'ERROR:', str(e)
+    usage()
+
+kwargs1 = {VERBOSE: False, 'ignoresecuredevice': False}
+# We force viewserver use by default
+kwargs2 = {'forceviewserveruse': True, 'startviewserver': True, 'autodump': False}
+for o, a in opts:
+    o = o.strip('-')
+    if o in ['H', HELP]:
+        usage(0)
+    elif o in ['V', VERBOSE]:
+        kwargs1[VERBOSE] = True
+    elif o in ['I', IGNORE_SECURE_DEVICE]:
+        kwargs1['ignoresecuredevice'] = True
+    elif o in ['F', FORCE_VIEW_SERVER_USE]:
+        kwargs2['forceviewserveruse'] = True
+    elif o in ['S', DO_NOT_START_VIEW_SERVER]:
+        kwargs2['startviewserver'] = False
+
+print ViewClient(*ViewClient.connectToDeviceOrExit(**kwargs1), **kwargs2).list()
diff --git a/AndroidViewClient/examples/monkeyrunner-issue-36544-workaround.py b/AndroidViewClient/examples/monkeyrunner-issue-36544-workaround.py
new file mode 100755
index 0000000..3742a73
--- /dev/null
+++ b/AndroidViewClient/examples/monkeyrunner-issue-36544-workaround.py
@@ -0,0 +1,93 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Sep 8, 2012
+
+@author: diego
+
+@see: http://code.google.com/p/android/issues/detail?id=36544
+'''
+
+
+import re
+import sys
+import os
+
+# This must be imported before MonkeyRunner and MonkeyDevice,
+# otherwise the import fails.
+# PyDev sets PYTHONPATH, use it
+try:
+    for p in os.environ['PYTHONPATH'].split(':'):
+       if not p in sys.path:
+          sys.path.append(p)
+except:
+    pass
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+from com.dtmilano.android.viewclient import ViewClient, View
+
+
+device, serialno = ViewClient.connectToDeviceOrExit()
+
+FLAG_ACTIVITY_NEW_TASK = 0x10000000
+# We are not using Settings as the bug describes because there's no WiFi dialog in emulator
+#componentName = 'com.android.settings/.Settings'
+componentName = 'com.dtmilano.android.sampleui/.MainActivity'
+device.startActivity(component=componentName, flags=FLAG_ACTIVITY_NEW_TASK)
+ViewClient.sleep(3)
+
+# Set it to True or False to decide if AndroidViewClient or plain monkeyrunner is used
+USE_AVC = True
+
+if USE_AVC:
+    # AndroidViewClient
+    vc = ViewClient(device=device, serialno=serialno)
+    showDialogButton = vc.findViewById('id/show_dialog_button')
+    if showDialogButton:
+        showDialogButton.touch()
+        vc.dump()
+        vc.findViewById('id/0x123456').type('Donald')
+        ok = vc.findViewWithText('OK')
+        if ok:
+            # 09-08 20:17:47.860: D/MonkeyStub(2033): translateCommand: tap 265 518
+            ok.touch()
+        vc.dump()
+        hello = vc.findViewById('id/hello')
+        if hello:
+            if hello.getText() == "Hello Donald":
+                print "OK"
+            else:
+                print "FAIL"
+        else:
+            print >> sys.stderr, "'hello' not found"
+    else:
+        print >> sys.stderr, "'Show Dialog' button not found"
+else:
+    # MonkeyRunner
+    from com.android.monkeyrunner.easy import EasyMonkeyDevice
+    from com.android.monkeyrunner.easy import By
+    easyDevice = EasyMonkeyDevice(device)
+    showDialogButton = By.id('id/show_dialog_button')
+    if showDialogButton:
+        easyDevice.touch(showDialogButton, MonkeyDevice.DOWN_AND_UP)
+        ViewClient.sleep(3)
+        editText = By.id('id/0x123456')
+        print editText
+        easyDevice.type(editText, 'Donald')
+        ViewClient.sleep(3)
+        ok = By.id('id/button1')
+        if ok:
+            # 09-08 20:16:41.119: D/MonkeyStub(1992): translateCommand: tap 348 268
+            easyDevice.touch(ok, MonkeyDevice.DOWN_AND_UP)
+        hello = By.id('id/hello')
+        if hello:
+            if easyDevice.getText(hello) == "Hello Donald":
+                print "OK"
+            else:
+                print "FAIL"
+        else:
+            print >> sys.stderr, "'hello' not found"
+
diff --git a/AndroidViewClient/examples/sample-ui-dialog_activity-button.py b/AndroidViewClient/examples/sample-ui-dialog_activity-button.py
new file mode 100755
index 0000000..65b757b
--- /dev/null
+++ b/AndroidViewClient/examples/sample-ui-dialog_activity-button.py
@@ -0,0 +1,35 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Aug 31, 2012
+
+@author: diego
+'''
+
+
+import re
+import sys
+import os
+
+# This must be imported before MonkeyRunner and MonkeyDevice,
+# otherwise the import fails.
+# PyDev sets PYTHONPATH, use it
+try:
+    for p in os.environ['PYTHONPATH'].split(':'):
+       if not p in sys.path:
+          sys.path.append(p)
+except:
+    pass
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+from com.dtmilano.android.viewclient import ViewClient, View
+
+
+vc = ViewClient(*ViewClient.connectToDeviceOrExit())
+
+button = vc.findViewWithTextOrRaise('Show Dialog')
+print "button: ", button.getClass(), button.getId(), button.getCoords()
+
diff --git a/AndroidViewClient/examples/sample-ui-toggle-buttons.py b/AndroidViewClient/examples/sample-ui-toggle-buttons.py
new file mode 100755
index 0000000..1889bff
--- /dev/null
+++ b/AndroidViewClient/examples/sample-ui-toggle-buttons.py
@@ -0,0 +1,42 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Aug 31, 2012
+
+@author: diego
+'''
+
+
+import re
+import sys
+import os
+
+# This must be imported before MonkeyRunner and MonkeyDevice,
+# otherwise the import fails.
+# PyDev sets PYTHONPATH, use it
+try:
+    for p in os.environ['PYTHONPATH'].split(':'):
+       if not p in sys.path:
+          sys.path.append(p)
+except:
+    pass
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+from com.dtmilano.android.viewclient import ViewClient, ViewNotFoundException
+
+vc = ViewClient(*ViewClient.connectToDeviceOrExit())
+if vc.useUiAutomator:
+    print "ViewClient: using UiAutomator backend"
+
+# Find the 3 toggle buttons, because the first 2 change their text if they are selected
+# we use a regex to find them.
+# Once found, we touch them changing their state
+for t in [re.compile('Button 1 .*'), re.compile('Button 2 .*'), 'Button with ID']:
+    try:
+        vc.findViewWithTextOrRaise(t).touch()
+    except ViewNotFoundException:
+        print >>sys.stderr, "Couldn't find button with text=", t
+
diff --git a/AndroidViewClient/examples/screenshot-monkeyrunner.py b/AndroidViewClient/examples/screenshot-monkeyrunner.py
new file mode 100755
index 0000000..53907e8
--- /dev/null
+++ b/AndroidViewClient/examples/screenshot-monkeyrunner.py
@@ -0,0 +1,20 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Set 5, 2013
+
+@author: diego
+'''
+
+
+import sys
+import os
+
+
+if len(sys.argv) < 2:
+    print >> sys.stderr, "usage: %s filename.png" % sys.argv[0]
+    sys.exit(1)
+
+filename = sys.argv.pop(1)
+device = MonkeyRunner.waitForConnection()
+device.takeSnapshot().writeToFile(filename, 'PNG')
diff --git a/AndroidViewClient/examples/screenshot.py b/AndroidViewClient/examples/screenshot.py
new file mode 100755
index 0000000..5656379
--- /dev/null
+++ b/AndroidViewClient/examples/screenshot.py
@@ -0,0 +1,20 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Aug 31, 2013
+
+@author: diego
+'''
+
+
+import sys
+import os
+
+from com.dtmilano.android.viewclient import ViewClient
+
+if len(sys.argv) < 2:
+    sys.exit("usage: %s filename.png [serialno]" % sys.argv[0])
+
+filename = sys.argv.pop(1)
+device, serialno = ViewClient.connectToDeviceOrExit(verbose=False)
+device.takeSnapshot().save(filename, 'PNG')
diff --git a/AndroidViewClient/examples/settings-display.py b/AndroidViewClient/examples/settings-display.py
new file mode 100755
index 0000000..6e2d23f
--- /dev/null
+++ b/AndroidViewClient/examples/settings-display.py
@@ -0,0 +1,46 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Aug 15, 2012
+
+@author: diego
+'''
+
+
+import re
+import sys
+import os
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient, View
+
+
+START_ACTIVITY = True
+FLAG_ACTIVITY_NEW_TASK = 0x10000000
+
+package='com.android.settings'
+activity='.Settings'
+component=package + "/" + activity
+
+device, serialno = ViewClient.connectToDeviceOrExit()
+
+if START_ACTIVITY:
+    device.startActivity(component=component, flags=FLAG_ACTIVITY_NEW_TASK)
+    ViewClient.sleep(3)
+
+vc = ViewClient(device, serialno)
+
+# this may help you find the attributes for specific Views
+#vc.traverse(vc.getRoot())
+text = 'Display'
+view = vc.findViewWithText(text)
+if view:
+	print view.__smallStr__()
+	print view.getCoords()
+	print view.getX(), ',', view.getY()
+else:
+	print "View with text='%s' was not found" % text
diff --git a/AndroidViewClient/examples/settings-sound-phone_ringtone.py b/AndroidViewClient/examples/settings-sound-phone_ringtone.py
new file mode 100755
index 0000000..e7af9fe
--- /dev/null
+++ b/AndroidViewClient/examples/settings-sound-phone_ringtone.py
@@ -0,0 +1,73 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Sep 8, 2012
+
+@author: diego
+
+@see: http://code.google.com/p/android/issues/detail?id=36544
+'''
+
+
+import re
+import sys
+import os
+
+# This must be imported before MonkeyRunner and MonkeyDevice,
+# otherwise the import fails.
+# PyDev sets PYTHONPATH, use it
+try:
+    for p in os.environ['PYTHONPATH'].split(':'):
+       if not p in sys.path:
+          sys.path.append(p)
+except:
+    pass
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+from com.dtmilano.android.viewclient import ViewClient, View
+
+
+device, serialno = ViewClient.connectToDeviceOrExit()
+
+DEBUG = True
+FLAG_ACTIVITY_NEW_TASK = 0x10000000
+# We are not using Settings as the bug describes because there's no WiFi dialog in emulator
+componentName = 'com.android.settings/.Settings'
+device.startActivity(component=componentName, flags=FLAG_ACTIVITY_NEW_TASK)
+ViewClient.sleep(3)
+
+vc = ViewClient(device=device, serialno=serialno)
+if DEBUG: vc.traverse(transform=ViewClient.TRAVERSE_CIT)
+sound = vc.findViewWithText('Sound')
+if sound:
+    sound.touch()
+    vc.dump()
+    phoneRingtone = vc.findViewWithText('Phone ringtone')
+    if phoneRingtone:
+        phoneRingtone.touch()
+        vc.dump()
+        vespa = vc.findViewWithText('Vespa')
+        if vespa:
+            vespa.touch()
+        ViewClient.sleep(1)
+        ok = vc.findViewById('id/button1')
+        if ok:
+            ok.touch()
+            vc.dump()
+            vespa = vc.findViewWithText('Vespa')
+            # If for some reason the dialog is still there we will have Vespa and OK
+            ok = vc.findViewById('id/button1')
+            if vespa and not ok:
+                print "OK"
+            else:
+                print "FAIL to set ringtone Vespa"
+                sys.exit(1)
+        else:
+            print >> sys.stderr, "'OK' not found"
+    else:
+        print >> sys.stderr, "'Phone ringtone' not found"
+else:
+    print >> sys.stderr, "'Sound' not found"
diff --git a/AndroidViewClient/examples/settings.py b/AndroidViewClient/examples/settings.py
new file mode 100755
index 0000000..c477c4c
--- /dev/null
+++ b/AndroidViewClient/examples/settings.py
@@ -0,0 +1,65 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Feb 1, 2012
+
+@author: diego
+'''
+
+
+import re
+import sys
+import os
+
+# This must be imported before MonkeyRunner and MonkeyDevice,
+# otherwise the import fails.
+# PyDev sets PYTHONPATH, use it
+try:
+    for p in os.environ['PYTHONPATH'].split(':'):
+        if not p in sys.path:
+            sys.path.append(p)
+except:
+    pass
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient
+
+package='com.android.settings'
+activity='.Settings'
+component=package + "/" + activity
+device, serialno = ViewClient.connectToDeviceOrExit()
+
+if True:
+    device.startActivity(component=component)
+    ViewClient.sleep(3)
+    device.press('KEYCODE_DPAD_DOWN') # extra VMT setting WARNING!
+    ViewClient.sleep(1)
+    device.press('KEYCODE_DPAD_CENTER', MonkeyDevice.DOWN_AND_UP)
+    device.press('KEYCODE_DPAD_DOWN', MonkeyDevice.DOWN_AND_UP)
+    #device.press('KEYCODE_DPAD_DOWN', MonkeyDevice.DOWN_AND_UP)
+    #device.press('KEYCODE_DPAD_DOWN', MonkeyDevice.DOWN_AND_UP)
+    #device.press('KEYCODE_DPAD_CENTER', "DOWN_AND_UP")
+    #device.press('KEYCODE_DPAD_CENTER', "DOWN_AND_UP")
+
+vc = ViewClient(device, serialno)
+regex = "id/checkbox.*"
+p = re.compile(regex)
+found = False
+for id in vc.getViewIds():
+    #print id
+    m = p.match(id)
+    if m:
+        found = True
+        attrs =  vc.findViewById(id)
+        if attrs['isSelected()'] == 'true':
+            print "Wi-Fi is",
+            if attrs['isChecked()'] != 'true':
+                print "not",
+            print "set"
+
+if not found:
+    print "No Views found that match " + regex
diff --git a/AndroidViewClient/examples/temperature-converter-get-conversion.py b/AndroidViewClient/examples/temperature-converter-get-conversion.py
new file mode 100755
index 0000000..31e6ac7
--- /dev/null
+++ b/AndroidViewClient/examples/temperature-converter-get-conversion.py
@@ -0,0 +1,89 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Feb 3, 2012
+
+This example starts the TemperatureConverter activity then type '123' into the 'Celsius' field.
+Then a ViewClient is created to obtain the view dump and the current values of the views with
+id/celsius and id/fahrenheit are obtained and the conversion printed to stdout.
+Finally, the fields are obtained by using their tags and again, conversion printed to stdout.
+
+If --localViewServer is passed in the command line then LocalViewServer provided by
+TemperatureConverter is used. This is very useful when the device is secure and ViewServer
+cannot be started.
+
+@author: diego
+'''
+
+
+import re
+import sys
+import os
+import time
+
+# PyDev sets PYTHONPATH, use it
+try:
+    for p in os.environ['PYTHONPATH'].split(':'):
+        if not p in sys.path:
+            sys.path.append(p)
+except:
+    pass
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient
+
+localViewServer = False
+if len(sys.argv) > 1 and sys.argv[1] == '--localViewServer':
+    localViewServer = True
+    sys.argv.pop(1)
+
+device, serialno = ViewClient.connectToDeviceOrExit(ignoresecuredevice=localViewServer)
+
+FLAG_ACTIVITY_NEW_TASK = 0x10000000
+package = 'com.example.i2at.tc'
+activity = '.TemperatureConverterActivity'
+componentName = package + "/" + activity
+
+device.startActivity(component=componentName, flags=FLAG_ACTIVITY_NEW_TASK)
+time.sleep(5)
+
+
+device.type("123")
+time.sleep(3)
+
+vc = ViewClient(device, serialno, startviewserver=(not localViewServer))
+
+if vc.build['ro.build.version.sdk'] >= 16:
+    # obtain the views by contentDescription
+    celsius = vc.findViewWithContentDescriptionOrRaise("celsius")
+    fahrenheit = vc.findViewWithContentDescriptionOrRaise("fahrenheit")
+else:
+    # obtain the views by id
+    celsius = vc.findViewByIdOrRaise("id/celsius")
+    fahrenheit = vc.findViewByIdOrRaise("id/fahrenheit")
+
+ct = celsius.getText()
+if ct:
+   c = float(ct)
+else:
+   print >> sys.stderr, "Celsius is empty"
+   sys.exit(1)
+ft = fahrenheit.getText()
+if ft:
+   f = float(ft)
+else:
+   print >> sys.stderr, "Fahrenheit is empty"
+   sys.exit(1)
+print "by id: %.2f C => %.2f F" % (c, f)
+
+# obtain the views by tag
+#celsius = vc.findViewByTagOrRaise("celsius")
+#fahrenheit = vc.findViewByTagOrRaise("fahrenheit")
+#
+#c = float(celsius.getText())
+#f = float(fahrenheit.getText())
+#print "by tag: %.2f C => %.2f F" % (c, f)
diff --git a/AndroidViewClient/examples/test-connect-to-device.py b/AndroidViewClient/examples/test-connect-to-device.py
new file mode 100755
index 0000000..b6dec73
--- /dev/null
+++ b/AndroidViewClient/examples/test-connect-to-device.py
@@ -0,0 +1,30 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Oct 15, 2012
+
+@author: diego
+'''
+
+
+import sys
+import os
+
+# This must be imported before MonkeyRunner and MonkeyDevice,
+# otherwise the import fails.
+# PyDev sets PYTHONPATH, use it
+try:
+    for p in os.environ['PYTHONPATH'].split(':'):
+        if not p in sys.path:
+            sys.path.append(p)
+except:
+    pass
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient
+
+ViewClient.connectToDeviceOrExit(verbose=True)
diff --git a/AndroidViewClient/examples/trashcan-fullscreenactivity-touches.py b/AndroidViewClient/examples/trashcan-fullscreenactivity-touches.py
new file mode 100755
index 0000000..d3130c4
--- /dev/null
+++ b/AndroidViewClient/examples/trashcan-fullscreenactivity-touches.py
@@ -0,0 +1,44 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Mar 13, 2012
+
+@author: diego
+'''
+
+
+import re
+import sys
+import os
+import string
+
+# This must be imported before MonkeyRunner and MonkeyDevice,
+# otherwise the import fails.
+# PyDev sets PYTHONPATH, use it
+try:
+    for p in os.environ['PYTHONPATH'].split(':'):
+        if not p in sys.path:
+            sys.path.append(p)
+except:
+    pass
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient
+
+package = 'com.example.trashcan'
+activity = '.FullScreenActivity'
+component = package + "/" + activity
+
+device, serialno = ViewClient.connectToDeviceOrExit()
+#device.startActivity(component=component)
+#ViewClient.sleep(3)
+
+vc = ViewClient(device, serialno)
+button = vc.findViewWithTextOrRaise('Button')
+button.touch()
+toggle = vc.findViewWithTextOrRaise(re.compile('(ON)|(OFF)'))
+toggle.touch()
diff --git a/AndroidViewClient/examples/viewserveractivity-new-activity.py b/AndroidViewClient/examples/viewserveractivity-new-activity.py
new file mode 100755
index 0000000..652be48
--- /dev/null
+++ b/AndroidViewClient/examples/viewserveractivity-new-activity.py
@@ -0,0 +1,32 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Feb 3, 2012
+
+@author: diego
+'''
+
+
+import sys
+import os
+
+# This must be imported before MonkeyRunner and MonkeyDevice,
+# otherwise the import fails.
+# PyDev sets PYTHONPATH, use it
+try:
+    for p in os.environ['PYTHONPATH'].split(':'):
+        if not p in sys.path:
+            sys.path.append(p)
+except:
+    pass
+
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient
+
+device, serialno = ViewClient.connectToDeviceOrExit(ignoresecuredevice=True)
+vc = ViewClient(device=device, serialno=serialno, startviewserver=False)
+vc.findViewWithTextOrRaise("New activity").touch()
diff --git a/AndroidViewClient/examples/write-image-to-file.py b/AndroidViewClient/examples/write-image-to-file.py
new file mode 100755
index 0000000..f60a54d
--- /dev/null
+++ b/AndroidViewClient/examples/write-image-to-file.py
@@ -0,0 +1,36 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+'''
+Copyright (C) 2013  Diego Torres Milano
+Created on 2014-03-10 by Culebra v4.10.1
+
+                      __    __    __    __
+                     /  \  /  \  /  \  /  \ 
+____________________/  __\/  __\/  __\/  __\_____________________________
+___________________/  /__/  /__/  /__/  /________________________________
+                   | / \   / \   / \   / \   \___
+                   |/   \_/   \_/   \_/   \    o \ 
+                                           \_____/--<
+@author: Diego Torres Milano
+@author: Jennifer E. Swofford (ascii art snake)
+'''
+
+
+import re
+import sys
+import os
+
+
+from com.dtmilano.android.viewclient import ViewClient
+
+if len(sys.argv) < 2:
+    sys.exit("usage: %s /path/to/filename.png [serialno]" % sys.argv[0])
+
+filename = sys.argv.pop(1)
+kwargs1 = {'verbose': False, 'ignoresecuredevice': False}
+device, serialno = ViewClient.connectToDeviceOrExit(**kwargs1)
+kwargs2 = {'startviewserver': True, 'forceviewserveruse': False, 'autodump': False, 'ignoreuiautomatorkilled': True}
+vc = ViewClient(device, serialno, **kwargs2)
+vc.dump(window='-1')
+
+vc.findViewWithContentDescriptionOrRaise('''Home screen 3''').writeImageToFile(filename, 'PNG')
diff --git a/AndroidViewClient/project.properties b/AndroidViewClient/project.properties
new file mode 100755
index 0000000..05ec66d
--- /dev/null
+++ b/AndroidViewClient/project.properties
@@ -0,0 +1,6 @@
+# Culebra
+avc.jarname=androidviewclient
+avc.doc.jarname=${avc.jarname}-doc
+gdrive=${user.home}/Google Drive//Android/AndroidViewClient/
+gdrive.bin.dest.dir=${gdrive}/bin/
+gdrive.doc.dest.dir=${gdrive}/doc/
diff --git a/AndroidViewClient/publish b/AndroidViewClient/publish
new file mode 100755
index 0000000..a494d9d
--- /dev/null
+++ b/AndroidViewClient/publish
@@ -0,0 +1,7 @@
+#! /bin/bash
+
+eval $(grep version setup.py | sed 's/,$//')
+tag="v$version"
+git tag "$tag"
+git push --tags
+python setup.py bdist_egg register upload
diff --git a/AndroidViewClient/setup.py b/AndroidViewClient/setup.py
new file mode 100755
index 0000000..50f0c7d
--- /dev/null
+++ b/AndroidViewClient/setup.py
@@ -0,0 +1,26 @@
+#!/usr/bin/env python
+
+from setuptools import setup, find_packages
+
+setup(name='androidviewclient',
+    version='11.5.9',
+    description='''AndroidViewClient is a 100% pure python library and tools
+        that simplifies test script creation providing higher level
+        operations and the ability of obtaining the tree of Views present at
+        any given moment on the device or emulator screen.
+        ''',
+    license='Apache',
+    keywords='android uiautomator viewclient monkeyrunner test automation',
+    author='Diego Torres Milano',
+    author_email='dtmilano@gmail.com',
+    url='https://github.com/dtmilano/AndroidViewClient/',
+    packages=find_packages('src'),
+    package_dir={'':'src'},
+    package_data={'':['*.png']},
+    include_package_data=True,
+    scripts=['tools/culebra', 'tools/dump'],
+    classifiers=['Development Status :: 5 - Production/Stable',
+                 'Intended Audience :: Developers',
+                 'License :: OSI Approved :: Apache Software License'],
+    install_requires=['setuptools', 'requests'],
+    )
diff --git a/AndroidViewClient/src/com/__init__.py b/AndroidViewClient/src/com/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/AndroidViewClient/src/com/__init__.py
diff --git a/AndroidViewClient/src/com/dtmilano/__init__.py b/AndroidViewClient/src/com/dtmilano/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/AndroidViewClient/src/com/dtmilano/__init__.py
diff --git a/AndroidViewClient/src/com/dtmilano/android/__init__.py b/AndroidViewClient/src/com/dtmilano/android/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/AndroidViewClient/src/com/dtmilano/android/__init__.py
diff --git a/AndroidViewClient/src/com/dtmilano/android/adb/__init__.py b/AndroidViewClient/src/com/dtmilano/android/adb/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/AndroidViewClient/src/com/dtmilano/android/adb/__init__.py
diff --git a/AndroidViewClient/src/com/dtmilano/android/adb/adbclient.py b/AndroidViewClient/src/com/dtmilano/android/adb/adbclient.py
new file mode 100755
index 0000000..2d5f2ed
--- /dev/null
+++ b/AndroidViewClient/src/com/dtmilano/android/adb/adbclient.py
@@ -0,0 +1,1171 @@
+'''
+Copyright (C) 2012-2015  Diego Torres Milano
+Created on Dec 1, 2012
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+@author: Diego Torres Milano
+'''
+import threading
+
+__version__ = '11.5.9'
+
+import sys
+import warnings
+
+if sys.executable:
+    if 'monkeyrunner' in sys.executable:
+        warnings.warn(
+            '''
+
+            You should use a 'python' interpreter, not 'monkeyrunner' for this module
+
+            ''', RuntimeWarning)
+import string
+import datetime
+import struct
+import cStringIO as StringIO
+import socket
+import time
+import re
+import signal
+import os
+import types
+import platform
+
+from com.dtmilano.android.window import Window
+from com.dtmilano.android.common import _nd, _nh, _ns, obtainPxPy, obtainVxVy, \
+    obtainVwVh, profileStart, profileEnd
+from com.dtmilano.android.adb.androidkeymap import KEY_MAP
+
+DEBUG = False
+DEBUG_SHELL = DEBUG and False
+DEBUG_TOUCH = DEBUG and False
+DEBUG_LOG = DEBUG and False
+DEBUG_WINDOWS = DEBUG and False
+DEBUG_COORDS = DEBUG and False
+DEBUG_IMAGE_ROTATION = DEBUG and False
+
+PIL_AVAILABLE = False
+PROFILE = False
+
+try:
+    HOSTNAME = os.environ['ANDROID_ADB_SERVER_HOST']
+except:
+    HOSTNAME = 'localhost'
+
+try:
+    PORT = int(os.environ['ANDROID_ADB_SERVER_PORT'])
+except KeyError:
+    PORT = 5037
+
+OKAY = 'OKAY'
+FAIL = 'FAIL'
+
+UP = 0
+DOWN = 1
+DOWN_AND_UP = 2
+
+TIMEOUT = 15
+
+WIFI_SERVICE = 'wifi'
+
+# some device properties
+VERSION_SDK_PROPERTY = 'ro.build.version.sdk'
+VERSION_RELEASE_PROPERTY = 'ro.build.version.release'
+
+
+class Device:
+    @staticmethod
+    def factory(_str):
+        if DEBUG:
+            print >> sys.stderr, "Device.factory(", _str, ")"
+            print >> sys.stderr, "   _str=", repr(_str)
+            print >> sys.stderr, "   _str=", _str.replace(' ', '_')
+        values = _str.split(None, 2)
+        if DEBUG:
+            print >> sys.stderr, "values=", values
+        return Device(*values)
+
+    def __init__(self, serialno, status, qualifiers=None):
+        self.serialno = serialno
+        self.status = status
+        self.qualifiers = qualifiers
+
+    def __str__(self):
+        return "<<<" + self.serialno + ", " + self.status + ", %s>>>" % self.qualifiers
+
+
+class WifiManager:
+    '''
+    Simulates Android WifiManager.
+
+    @see: http://developer.android.com/reference/android/net/wifi/WifiManager.html
+    '''
+
+    WIFI_STATE_DISABLING = 0
+    WIFI_STATE_DISABLED = 1
+    WIFI_STATE_ENABLING = 2
+    WIFI_STATE_ENABLED = 3
+    WIFI_STATE_UNKNOWN = 4
+
+    WIFI_IS_ENABLED_RE = re.compile('Wi-Fi is enabled')
+    WIFI_IS_DISABLED_RE = re.compile('Wi-Fi is disabled')
+
+    def __init__(self, device):
+        self.device = device
+
+    def getWifiState(self):
+        '''
+        Gets the Wi-Fi enabled state.
+
+        @return: One of WIFI_STATE_DISABLED, WIFI_STATE_DISABLING, WIFI_STATE_ENABLED, WIFI_STATE_ENABLING, WIFI_STATE_UNKNOWN
+        '''
+
+        result = self.device.shell('dumpsys wifi')
+        if result:
+            state = result.splitlines()[0]
+            if self.WIFI_IS_ENABLED_RE.match(state):
+                return self.WIFI_STATE_ENABLED
+            elif self.WIFI_IS_DISABLED_RE.match(state):
+                return self.WIFI_STATE_DISABLED
+        print >> sys.stderr, "UNKNOWN WIFI STATE:", state
+        return self.WIFI_STATE_UNKNOWN
+
+
+class AdbClient:
+    def __init__(self, serialno=None, hostname=HOSTNAME, port=PORT, settransport=True, reconnect=True,
+                 ignoreversioncheck=False, timeout=TIMEOUT):
+        self.Log = AdbClient.__Log(self)
+
+        self.serialno = serialno
+        self.hostname = hostname
+        self.port = port
+        self.timeout = timeout
+
+        self.reconnect = reconnect
+        self.socket = AdbClient.connect(self.hostname, self.port, self.timeout)
+
+        self.checkVersion(ignoreversioncheck)
+
+        self.build = {}
+        ''' Build properties '''
+
+        self.__displayInfo = None
+        ''' Cached display info. Reset it to C{None} to force refetching display info '''
+
+        self.display = {}
+        ''' The map containing the device's physical display properties: width, height and density '''
+
+        self.isTransportSet = False
+        if settransport and serialno != None:
+            self.__setTransport()
+            self.build[VERSION_SDK_PROPERTY] = int(self.__getProp(VERSION_SDK_PROPERTY))
+            self.initDisplayProperties()
+
+    @staticmethod
+    def alarmHandler(signum, frame):
+        if signum == signal.SIGALRM:
+            raise IOError("Socket timeout")
+        raise RuntimeError("Signal received: %d" % signum)
+
+    @staticmethod
+    def setAlarm(timeout):
+        osName = platform.system()
+        if osName.startswith('Windows'):  # alarm is not implemented in Windows
+            return
+        if DEBUG:
+            print >> sys.stderr, "setAlarm(%d)" % timeout
+        if threading.current_thread().getName() == 'MainThread':
+            signal.signal(signal.SIGALRM, AdbClient.alarmHandler)
+        signal.alarm(timeout)
+
+    def setSerialno(self, serialno):
+        if self.isTransportSet:
+            raise ValueError("Transport is already set, serialno cannot be set once this is done.")
+        self.serialno = serialno
+        self.__setTransport()
+        self.build[VERSION_SDK_PROPERTY] = int(self.__getProp(VERSION_SDK_PROPERTY))
+
+    def setReconnect(self, val):
+        self.reconnect = val
+
+    @staticmethod
+    def connect(hostname, port, timeout=TIMEOUT):
+        if DEBUG:
+            print >> sys.stderr, "AdbClient.connect(%s, %s, %s)" % (hostname, port, timeout)
+        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        # SO_LINGER: Idea proposed by kysersozelee (#173)
+        l_onoff = 1
+        l_linger = 0
+        s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER,
+                     struct.pack('ii', l_onoff, l_linger))
+        s.settimeout(timeout)
+        try:
+            s.connect((hostname, port))
+        except socket.error, ex:
+            raise RuntimeError("ERROR: Connecting to %s:%d: %s.\nIs adb running on your computer?" % (s, port, ex))
+        return s
+
+    def close(self):
+        if DEBUG:
+            print >> sys.stderr, "Closing socket...", self.socket
+        if self.socket:
+            self.socket.close()
+
+    def __del__(self):
+        try:
+            self.close()
+        except:
+            pass
+
+    def __send(self, msg, checkok=True, reconnect=False):
+        if DEBUG:
+            print >> sys.stderr, "__send(%s, checkok=%s, reconnect=%s)" % (msg, checkok, reconnect)
+        if not re.search('^host:', msg):
+            if not self.isTransportSet:
+                self.__setTransport()
+        else:
+            self.checkConnected()
+        b = bytearray(msg, 'utf-8')
+        self.socket.send('%04X%s' % (len(b), b))
+        if checkok:
+            self.__checkOk()
+        if reconnect:
+            if DEBUG:
+                print >> sys.stderr, "    __send: reconnecting"
+            self.socket = AdbClient.connect(self.hostname, self.port, self.timeout)
+            self.__setTransport()
+
+    def __receive(self, nob=None):
+        if DEBUG:
+            print >> sys.stderr, "__receive()"
+        self.checkConnected()
+        if nob is None:
+            nob = int(self.socket.recv(4), 16)
+        if DEBUG:
+            print >> sys.stderr, "    __receive: receiving", nob, "bytes"
+        recv = bytearray()
+        nr = 0
+        while nr < nob:
+            chunk = self.socket.recv(min((nob - nr), 4096))
+            l = len(chunk)
+            if DEBUG:
+                print >> sys.stderr, "l=", l, "nr=", nr
+            recv.extend(chunk)
+            nr += l
+        if DEBUG:
+            print >> sys.stderr, "    __receive: returning len=", len(recv)
+        return str(recv)
+
+    def __checkOk(self):
+        if DEBUG:
+            print >> sys.stderr, "__checkOk()"
+        self.checkConnected()
+        self.setAlarm(TIMEOUT)
+        recv = self.socket.recv(4)
+        if DEBUG:
+            print >> sys.stderr, "    __checkOk: recv=", repr(recv)
+        try:
+            if recv != OKAY:
+                error = self.socket.recv(1024)
+                if error.startswith('0049'):
+                    raise RuntimeError(
+                        "ERROR: This computer is unauthorized. Please check the confirmation dialog on your device.")
+                else:
+                    raise RuntimeError("ERROR: %s %s" % (repr(recv), error))
+        finally:
+            self.setAlarm(0)
+        if DEBUG:
+            print >> sys.stderr, "    __checkOk: returning True"
+        return True
+
+    def checkConnected(self):
+        if DEBUG:
+            print >> sys.stderr, "checkConnected()"
+        if not self.socket:
+            raise RuntimeError("ERROR: Not connected")
+        if DEBUG:
+            print >> sys.stderr, "    checkConnected: returning True"
+        return True
+
+    def checkVersion(self, ignoreversioncheck=False, reconnect=True):
+        if DEBUG:
+            print >> sys.stderr, "checkVersion(reconnect=%s)   ignoreversioncheck=%s" % (reconnect, ignoreversioncheck)
+        self.__send('host:version', reconnect=False)
+        # HACK: MSG_WAITALL not available on windows
+        # version = self.socket.recv(8, socket.MSG_WAITALL)
+        version = self.__readExactly(self.socket, 8)
+
+        VALID_ADB_VERSIONS = ["00040024", "00040023", "00040020", "0004001f"]
+
+        if not (version in VALID_ADB_VERSIONS) and not ignoreversioncheck:
+            raise RuntimeError(
+                "ERROR: Incorrect ADB server version %s (expecting one of %s)" % (version, VALID_ADB_VERSIONS))
+        if reconnect:
+            self.socket = AdbClient.connect(self.hostname, self.port, self.timeout)
+
+    def __setTransport(self):
+        if DEBUG:
+            print >> sys.stderr, "__setTransport()"
+        if not self.serialno:
+            raise ValueError("serialno not set, empty or None")
+        self.checkConnected()
+        serialnoRE = re.compile(self.serialno)
+        found = False
+        devices = self.getDevices()
+        if len(devices) == 0:
+            raise RuntimeError("ERROR: There are no connected devices")
+        for device in devices:
+            if serialnoRE.match(device.serialno):
+                found = True
+                break
+        if not found:
+            raise RuntimeError("ERROR: couldn't find device that matches '%s' in %s" % (self.serialno, devices))
+        self.serialno = device.serialno
+        msg = 'host:transport:%s' % self.serialno
+        if DEBUG:
+            print >> sys.stderr, "    __setTransport: msg=", msg
+        self.__send(msg, reconnect=False)
+        self.isTransportSet = True
+
+    def __checkTransport(self):
+        if not self.isTransportSet:
+            raise RuntimeError("ERROR: Transport is not set")
+
+    def __readExactly(self, sock, size):
+        if DEBUG:
+            print >> sys.stderr, "__readExactly(socket=%s, size=%d)" % (socket, size)
+        _buffer = ''
+        while len(_buffer) < size:
+            data = sock.recv(size - len(_buffer))
+            if not data:
+                break
+            _buffer += data
+        return _buffer
+
+    def getDevices(self):
+        if DEBUG:
+            print >> sys.stderr, "getDevices()"
+        self.__send('host:devices-l', checkok=False)
+        try:
+            self.__checkOk()
+        except RuntimeError, ex:
+            print >> sys.stderr, "**ERROR:", ex
+            return None
+        devices = []
+        for line in self.__receive().splitlines():
+            devices.append(Device.factory(line))
+        self.socket = AdbClient.connect(self.hostname, self.port, self.timeout)
+        return devices
+
+    def shell(self, cmd=None):
+        if DEBUG_SHELL:
+            print >> sys.stderr, "shell(cmd=%s)" % cmd
+        self.__checkTransport()
+        if cmd:
+            self.__send('shell:%s' % cmd, checkok=True, reconnect=False)
+            out = ''
+            while True:
+                _str = None
+                try:
+                    _str = self.socket.recv(4096)
+                except Exception, ex:
+                    print >> sys.stderr, "ERROR:", ex
+                if not _str:
+                    break
+                out += _str
+            if self.reconnect:
+                if DEBUG:
+                    print >> sys.stderr, "Reconnecting..."
+                self.close()
+                self.socket = AdbClient.connect(self.hostname, self.port, self.timeout)
+                self.__setTransport()
+            return out
+        else:
+            self.__send('shell:')
+            # sin = self.socket.makefile("rw")
+            # sout = self.socket.makefile("r")
+            # return (sin, sin)
+            sout = adbClient.socket.makefile("r")
+            return sout
+
+    def getRestrictedScreen(self):
+        ''' Gets C{mRestrictedScreen} values from dumpsys. This is a method to obtain display dimensions '''
+
+        rsRE = re.compile('\s*mRestrictedScreen=\((?P<x>\d+),(?P<y>\d+)\) (?P<w>\d+)x(?P<h>\d+)')
+        for line in self.shell('dumpsys window').splitlines():
+            m = rsRE.match(line)
+            if m:
+                return m.groups()
+        raise RuntimeError("Couldn't find mRestrictedScreen in 'dumpsys window'")
+
+    def getDisplayInfo(self):
+        self.__checkTransport()
+        displayInfo = self.getLogicalDisplayInfo()
+        if displayInfo:
+            return displayInfo
+        displayInfo = self.getPhysicalDisplayInfo()
+        if displayInfo:
+            return displayInfo
+        raise RuntimeError("Couldn't find display info in 'wm size', 'dumpsys display' or 'dumpsys window'")
+
+    def getLogicalDisplayInfo(self):
+        '''
+        Gets C{mDefaultViewport} and then C{deviceWidth} and C{deviceHeight} values from dumpsys.
+        This is a method to obtain display logical dimensions and density
+        '''
+
+        self.__checkTransport()
+        logicalDisplayRE = re.compile(
+            '.*DisplayViewport{valid=true, .*orientation=(?P<orientation>\d+), .*deviceWidth=(?P<width>\d+), deviceHeight=(?P<height>\d+).*')
+        for line in self.shell('dumpsys display').splitlines():
+            m = logicalDisplayRE.search(line, 0)
+            if m:
+                self.__displayInfo = {}
+                for prop in ['width', 'height', 'orientation']:
+                    self.__displayInfo[prop] = int(m.group(prop))
+                for prop in ['density']:
+                    d = self.__getDisplayDensity(None, strip=True, invokeGetPhysicalDisplayIfNotFound=True)
+                    if d:
+                        self.__displayInfo[prop] = d
+                    else:
+                        # No available density information
+                        self.__displayInfo[prop] = -1.0
+                return self.__displayInfo
+        return None
+
+    def getPhysicalDisplayInfo(self):
+        ''' Gets C{mPhysicalDisplayInfo} values from dumpsys. This is a method to obtain display dimensions and density'''
+
+        self.__checkTransport()
+        phyDispRE = re.compile('Physical size: (?P<width>)x(?P<height>).*Physical density: (?P<density>)', re.MULTILINE)
+        m = phyDispRE.search(self.shell('wm size; wm density'))
+        if m:
+            displayInfo = {}
+            for prop in ['width', 'height']:
+                displayInfo[prop] = int(m.group(prop))
+            for prop in ['density']:
+                displayInfo[prop] = float(m.group(prop))
+            return displayInfo
+
+        phyDispRE = re.compile(
+            '.*PhysicalDisplayInfo{(?P<width>\d+) x (?P<height>\d+), .*, density (?P<density>[\d.]+).*')
+        for line in self.shell('dumpsys display').splitlines():
+            m = phyDispRE.search(line, 0)
+            if m:
+                displayInfo = {}
+                for prop in ['width', 'height']:
+                    displayInfo[prop] = int(m.group(prop))
+                for prop in ['density']:
+                    # In mPhysicalDisplayInfo density is already a factor, no need to calculate
+                    displayInfo[prop] = float(m.group(prop))
+                return displayInfo
+
+        # This could also be mSystem or mOverscanScreen
+        phyDispRE = re.compile('\s*mUnrestrictedScreen=\((?P<x>\d+),(?P<y>\d+)\) (?P<width>\d+)x(?P<height>\d+)')
+        # This is known to work on older versions (i.e. API 10) where mrestrictedScreen is not available
+        dispWHRE = re.compile('\s*DisplayWidth=(?P<width>\d+) *DisplayHeight=(?P<height>\d+)')
+        for line in self.shell('dumpsys window').splitlines():
+            m = phyDispRE.search(line, 0)
+            if not m:
+                m = dispWHRE.search(line, 0)
+            if m:
+                displayInfo = {}
+                for prop in ['width', 'height']:
+                    displayInfo[prop] = int(m.group(prop))
+                for prop in ['density']:
+                    d = self.__getDisplayDensity(None, strip=True, invokeGetPhysicalDisplayIfNotFound=False)
+                    if d:
+                        displayInfo[prop] = d
+                    else:
+                        # No available density information
+                        displayInfo[prop] = -1.0
+                return displayInfo
+
+    def __getProp(self, key, strip=True):
+        if DEBUG:
+            print >> sys.stderr, "__getProp(%s, %s)" % (key, strip)
+        prop = self.shell('getprop %s' % key)
+        if strip:
+            prop = prop.rstrip('\r\n')
+        if DEBUG:
+            print >> sys.stderr, "    __getProp: returning '%s'" % prop
+        return prop
+
+    def __getDisplayWidth(self, key, strip=True):
+        if self.__displayInfo and 'width' in self.__displayInfo:
+            return self.__displayInfo['width']
+        return self.getDisplayInfo()['width']
+
+    def __getDisplayHeight(self, key, strip=True):
+        if self.__displayInfo and 'height' in self.__displayInfo:
+            return self.__displayInfo['height']
+        return self.getDisplayInfo()['height']
+
+    def __getDisplayOrientation(self, key, strip=True):
+        if self.__displayInfo and 'orientation' in self.__displayInfo:
+            return self.__displayInfo['orientation']
+        displayInfo = self.getDisplayInfo()
+        if 'orientation' in displayInfo:
+            return displayInfo['orientation']
+        # Fallback method to obtain the orientation
+        # See https://github.com/dtmilano/AndroidViewClient/issues/128
+        surfaceOrientationRE = re.compile('SurfaceOrientation:\s+(\d+)')
+        output = self.shell('dumpsys input')
+        m = surfaceOrientationRE.search(output)
+        if m:
+            return int(m.group(1))
+        # We couldn't obtain the orientation
+        return -1
+
+    def __getDisplayDensity(self, key, strip=True, invokeGetPhysicalDisplayIfNotFound=True):
+        if self.__displayInfo and 'density' in self.__displayInfo:  # and self.__displayInfo['density'] != -1: # FIXME: need more testing
+            return self.__displayInfo['density']
+        BASE_DPI = 160.0
+        d = self.getProperty('ro.sf.lcd_density', strip)
+        if d:
+            return float(d) / BASE_DPI
+        d = self.getProperty('qemu.sf.lcd_density', strip)
+        if d:
+            return float(d) / BASE_DPI
+        if invokeGetPhysicalDisplayIfNotFound:
+            return self.getPhysicalDisplayInfo()['density']
+        return -1.0
+
+    def getSystemProperty(self, key, strip=True):
+        self.__checkTransport()
+        return self.getProperty(key, strip)
+
+    def getProperty(self, key, strip=True):
+        ''' Gets the property value for key '''
+
+        self.__checkTransport()
+        import collections
+        MAP_PROPS = collections.OrderedDict([
+            (re.compile('display.width'), self.__getDisplayWidth),
+            (re.compile('display.height'), self.__getDisplayHeight),
+            (re.compile('display.density'), self.__getDisplayDensity),
+            (re.compile('display.orientation'), self.__getDisplayOrientation),
+            (re.compile('.*'), self.__getProp),
+        ])
+        '''Maps properties key values (as regexps) to instance methods to obtain its values.'''
+
+        for kre in MAP_PROPS.keys():
+            if kre.match(key):
+                return MAP_PROPS[kre](key=key, strip=strip)
+        raise ValueError("key='%s' does not match any map entry")
+
+    def getSdkVersion(self):
+        '''
+        Gets the SDK version.
+        '''
+
+        self.__checkTransport()
+        return self.build[VERSION_SDK_PROPERTY]
+
+    def press(self, name, eventType=DOWN_AND_UP):
+        self.__checkTransport()
+        if isinstance(name, unicode):
+            name = name.decode('ascii', errors='replace')
+        cmd = 'input keyevent %s' % name
+        if DEBUG:
+            print >> sys.stderr, "press(%s)" % cmd
+        self.shell(cmd)
+
+    def longPress(self, name, duration=0.5, dev='/dev/input/event0'):
+        self.__checkTransport()
+        # WORKAROUND:
+        # Using 'input keyevent --longpress POWER' does not work correctly in
+        # KitKat (API 19), it sends a short instead of a long press.
+        # This uses the events instead, but it may vary from device to device.
+        # The events sent are device dependent and may not work on other devices.
+        # If this does not work on your device please do:
+        #     $ adb shell getevent -l
+        # and post the output to https://github.com/dtmilano/AndroidViewClient/issues
+        # specifying the device and API level.
+        if name[0:4] == 'KEY_':
+            name = name[4:]
+        if name in KEY_MAP:
+            self.shell('sendevent %s 1 %d 1' % (dev, KEY_MAP[name]))
+            self.shell('sendevent %s 0 0 0' % dev)
+            time.sleep(duration)
+            self.shell('sendevent %s 1 %d 0' % (dev, KEY_MAP[name]))
+            self.shell('sendevent %s 0 0 0' % dev)
+            return
+
+        version = self.getSdkVersion()
+        if version >= 19:
+            cmd = 'input keyevent --longpress %s' % name
+            if DEBUG:
+                print >> sys.stderr, "longPress(%s)" % cmd
+            self.shell(cmd)
+        else:
+            raise RuntimeError("longpress: not supported for API < 19 (version=%d)" % version)
+
+    def startActivity(self, component=None, flags=None, uri=None):
+        self.__checkTransport()
+        cmd = 'am start'
+        if component:
+            cmd += ' -n %s' % component
+        if flags:
+            cmd += ' -f %s' % flags
+        if uri:
+            cmd += ' %s' % uri
+        if DEBUG:
+            print >> sys.stderr, "Starting activity: %s" % cmd
+        out = self.shell(cmd)
+        if re.search(r"(Error type)|(Error: )|(Cannot find 'App')", out, re.IGNORECASE | re.MULTILINE):
+            raise RuntimeError(out)
+
+    def takeSnapshot(self, reconnect=False):
+        '''
+        Takes a snapshot of the device and return it as a PIL Image.
+        '''
+
+        if PROFILE:
+            profileStart()
+
+        global PIL_AVAILABLE
+        if not PIL_AVAILABLE:
+            try:
+                global Image
+                from PIL import Image
+                PIL_AVAILABLE = True
+            except:
+                raise Exception("You have to install PIL to use takeSnapshot()")
+
+        USE_ADB_FRAMEBUFFER_METHOD = (self.getSdkVersion() < 14 or self.getSdkVersion() >= 23)
+        if USE_ADB_FRAMEBUFFER_METHOD:
+            self.__checkTransport()
+
+            self.__send('framebuffer:', checkok=True, reconnect=False)
+            # case 1: // version
+            #           return 12; // bpp, size, width, height, 4*(length, offset)
+            received = self.__receive(1 * 4 + 12 * 4)
+            (version, bpp, size, width, height, roffset, rlen, boffset, blen, goffset, glen, aoffset,
+             alen) = struct.unpack(
+                '<' + 'L' * 13, received)
+            if DEBUG:
+                print >> sys.stderr, "    takeSnapshot:", (
+                    version, bpp, size, width, height, roffset, rlen, boffset, blen, goffset, glen, aoffset, alen)
+            offsets = {roffset: 'R', goffset: 'G', boffset: 'B'}
+            if bpp == 32:
+                if alen != 0:
+                    offsets[aoffset] = 'A'
+                else:
+                    warnings.warn('''framebuffer is specified as 32bpp but alpha length is 0''')
+            argMode = ''.join([offsets[o] for o in sorted(offsets)])
+            if DEBUG:
+                print >> sys.stderr, "    takeSnapshot:", (
+                    version, bpp, size, width, height, roffset, rlen, boffset, blen, goffset, blen, aoffset, alen,
+                    argMode)
+            if argMode == 'BGRA':
+                argMode = 'RGBA'
+            if bpp == 16:
+                mode = 'RGB'
+                argMode += ';16'
+            else:
+                mode = argMode
+            self.__send('\0', checkok=False, reconnect=False)
+            if DEBUG:
+                print >> sys.stderr, "    takeSnapshot: reading %d bytes" % (size)
+            received = self.__receive(size)
+            if reconnect:
+                self.socket = AdbClient.connect(self.hostname, self.port, self.timeout)
+                self.__setTransport()
+            if DEBUG:
+                print >> sys.stderr, "    takeSnapshot: Image.frombuffer(%s, %s, %s, %s, %s, %s, %s)" % (
+                    mode, (width, height), 'data', 'raw', argMode, 0, 1)
+            image = Image.frombuffer(mode, (width, height), received, 'raw', argMode, 0, 1)
+        else:
+            # ALTERNATIVE_METHOD: screencap
+            received = self.shell('/system/bin/screencap -p').replace("\r\n", "\n")
+            stream = StringIO.StringIO(received)
+            try:
+                image = Image.open(stream)
+            except IOError, ex:
+                print >> sys.stderr, ex
+                print repr(stream)
+                sys.exit(1)
+
+        # Just in case let's get the real image size
+        (w, h) = image.size
+        if w == self.display['height'] and h == self.display['width']:
+            # FIXME: We are not catching the 180 degrees rotation here
+            if 'orientation' in self.display:
+                r = (0, 90, 180, -90)[self.display['orientation']]
+            else:
+                r = 90
+            image = image.rotate(r, expand=1).resize((h, w))
+
+        if PROFILE:
+            profileEnd()
+        return image
+
+    def __transformPointByOrientation(self, (x, y), orientationOrig, orientationDest):
+        if orientationOrig != orientationDest:
+            if orientationDest == 1:
+                _x = x
+                x = self.display['width'] - y
+                y = _x
+            elif orientationDest == 3:
+                _x = x
+                x = y
+                y = self.display['height'] - _x
+        return (x, y)
+
+    def touch(self, x, y, orientation=-1, eventType=DOWN_AND_UP):
+        if DEBUG_TOUCH:
+            print >> sys.stderr, "touch(x=", x, ", y=", y, ", orientation=", orientation, ", eventType=", eventType, ")"
+        self.__checkTransport()
+        if orientation == -1:
+            orientation = self.display['orientation']
+        self.shell(
+            'input tap %d %d' % self.__transformPointByOrientation((x, y), orientation, self.display['orientation']))
+
+    def touchDip(self, x, y, orientation=-1, eventType=DOWN_AND_UP):
+        if DEBUG_TOUCH:
+            print >> sys.stderr, "touchDip(x=", x, ", y=", y, ", orientation=", orientation, ", eventType=", eventType, ")"
+        self.__checkTransport()
+        if orientation == -1:
+            orientation = self.display['orientation']
+        x = x * self.display['density']
+        y = y * self.display['density']
+        self.touch(x, y, orientation, eventType)
+
+    def longTouch(self, x, y, duration=2000, orientation=-1):
+        '''
+        Long touches at (x, y)
+
+        @param duration: duration in ms
+        @param orientation: the orientation (-1: undefined)
+
+        This workaround was suggested by U{HaMi<http://stackoverflow.com/users/2571957/hami>}
+        '''
+
+        self.__checkTransport()
+        self.drag((x, y), (x, y), duration, orientation)
+
+    def drag(self, (x0, y0), (x1, y1), duration, steps=1, orientation=-1):
+        '''
+        Sends drag event n PX (actually it's using C{input swipe} command.
+
+        @param (x0, y0): starting point in PX
+        @param (x1, y1): ending point in PX
+        @param duration: duration of the event in ms
+        @param steps: number of steps (currently ignored by @{input swipe})
+        @param orientation: the orientation (-1: undefined)
+        '''
+
+        self.__checkTransport()
+        if orientation == -1:
+            orientation = self.display['orientation']
+        (x0, y0) = self.__transformPointByOrientation((x0, y0), orientation, self.display['orientation'])
+        (x1, y1) = self.__transformPointByOrientation((x1, y1), orientation, self.display['orientation'])
+
+        version = self.getSdkVersion()
+        if version <= 15:
+            raise RuntimeError('drag: API <= 15 not supported (version=%d)' % version)
+        elif version <= 17:
+            self.shell('input swipe %d %d %d %d' % (x0, y0, x1, y1))
+        else:
+            self.shell('input touchscreen swipe %d %d %d %d %d' % (x0, y0, x1, y1, duration))
+
+    def dragDip(self, (x0, y0), (x1, y1), duration, steps=1, orientation=-1):
+        '''
+        Sends drag event in DIP (actually it's using C{input swipe} command.
+
+        @param (x0, y0): starting point in DIP
+        @param (x1, y1): ending point in DIP
+        @param duration: duration of the event in ms
+        @param steps: number of steps (currently ignored by @{input swipe}
+        '''
+
+        self.__checkTransport()
+        if orientation == -1:
+            orientation = self.display['orientation']
+        density = self.display['density'] if self.display['density'] > 0 else 1
+        x0 = x0 * density
+        y0 = y0 * density
+        x1 = x1 * density
+        y1 = y1 * density
+        self.drag((x0, y0), (x1, y1), duration, steps, orientation)
+
+    def type(self, text):
+        self.__checkTransport()
+        if type(text) is str:
+            escaped = text.replace('%s', '\\%s')
+            encoded = escaped.replace(' ', '%s')
+        else:
+            encoded = str(text);
+        #FIXME find out which characters can be dangerous,
+        # for exmaple not worst idea to escape " 
+        self.shell(u'input text "%s"' % encoded)
+
+    def wake(self):
+        self.__checkTransport()
+        if not self.isScreenOn():
+            self.shell('input keyevent POWER')
+
+    def isLocked(self):
+        '''
+        Checks if the device screen is locked.
+
+        @return True if the device screen is locked
+        '''
+
+        self.__checkTransport()
+        lockScreenRE = re.compile('mShowingLockscreen=(true|false)')
+        m = lockScreenRE.search(self.shell('dumpsys window policy'))
+        if m:
+            return (m.group(1) == 'true')
+        raise RuntimeError("Couldn't determine screen lock state")
+
+    def isScreenOn(self):
+        '''
+        Checks if the screen is ON.
+
+        @return True if the device screen is ON
+        '''
+
+        self.__checkTransport()
+        screenOnRE = re.compile('mScreenOnFully=(true|false)')
+        m = screenOnRE.search(self.shell('dumpsys window policy'))
+        if m:
+            return (m.group(1) == 'true')
+        raise RuntimeError("Couldn't determine screen ON state")
+
+    def unlock(self):
+        '''
+        Unlocks the screen of the device.
+        '''
+
+        self.__checkTransport()
+        self.shell('input keyevent MENU')
+        self.shell('input keyevent BACK')
+
+    @staticmethod
+    def percentSame(image1, image2):
+        '''
+        Returns the percent of pixels that are equal
+
+        @author: catshoes
+        '''
+
+        # If the images differ in size, return 0% same.
+        size_x1, size_y1 = image1.size
+        size_x2, size_y2 = image2.size
+        if (size_x1 != size_x2 or
+                    size_y1 != size_y2):
+            return 0
+
+        # Images are the same size
+        # Return the percent of pixels that are equal.
+        numPixelsSame = 0
+        numPixelsTotal = size_x1 * size_y1
+        image1Pixels = image1.load()
+        image2Pixels = image2.load()
+
+        # Loop over all pixels, comparing pixel in image1 to image2
+        for x in range(size_x1):
+            for y in range(size_y1):
+                if (image1Pixels[x, y] == image2Pixels[x, y]):
+                    numPixelsSame += 1
+
+        return numPixelsSame / float(numPixelsTotal)
+
+    @staticmethod
+    def sameAs(image1, image2, percent=1.0):
+        '''
+        Compares 2 images
+
+        @author: catshoes
+        '''
+
+        return (AdbClient.percentSame(image1, image2) >= percent)
+
+    @staticmethod
+    def imageInScreen(screen, image):
+        '''
+        Checks if image is on the screen
+
+        :param screen: the screen image
+        :param image: the partial image to look for
+        :return: True or False
+
+        @author: Perry Tsai <ripple0129@gmail.com>
+        '''
+
+        # To make sure image smaller than screen.
+        size_x1, size_y1 = screen.size
+        size_x2, size_y2 = image.size
+        if size_x1 <= size_x2 or size_y1 <= size_y2:
+            return 0
+
+        # Load pixels.
+        screenPixels = screen.load()
+        imagePixels = image.load()
+
+        # Loop over all pixels, if pixel image[0,0] same as pixel screen[x,y] do crop and compare
+        for x in range(size_x1 - size_x2):
+            for y in range(size_y1 - size_y2):
+                if imagePixels[0, 0] == screenPixels[x, y]:
+                    croppedScreen = screen.crop((x, y, x + size_x2, y + size_y2))
+                    size_x3, size_y3 = croppedScreen.size
+                    croppedPixels = croppedScreen.load()
+                    for x in range(size_x3):
+                        for y in range(size_y3):
+                            if imagePixels[x, y] == croppedPixels[x, y]:
+                                return True
+
+
+    def isKeyboardShown(self):
+        '''
+        Whether the keyboard is displayed.
+        '''
+
+        self.__checkTransport()
+        dim = self.shell('dumpsys input_method')
+        if dim:
+            # FIXME: API >= 15 ?
+            return "mInputShown=true" in dim
+        return False
+
+    def initDisplayProperties(self):
+        self.__checkTransport()
+        self.__displayInfo = None
+        self.display['width'] = self.getProperty('display.width')
+        self.display['height'] = self.getProperty('display.height')
+        self.display['density'] = self.getProperty('display.density')
+        self.display['orientation'] = self.getProperty('display.orientation')
+
+    def log(self, tag, message, priority='D', verbose=False):
+        if DEBUG_LOG:
+            print >> sys.stderr, "log(tag=%s, message=%s, priority=%s, verbose=%s)" % (tag, message, priority, verbose)
+        self.__checkTransport()
+        message = self.substituteDeviceTemplate(message)
+        if verbose or priority == 'V':
+            print >> sys.stderr, tag + ':', message
+        self.shell('log -p %c -t "%s" %s' % (priority, tag, message))
+
+    class __Log():
+        '''
+        Log class to simulate C{android.util.Log}
+        '''
+
+        def __init__(self, adbClient):
+            self.adbClient = adbClient
+
+        def __getattr__(self, attr):
+            '''
+            Returns the corresponding log method or @C{AttributeError}.
+            '''
+
+            if attr in ['v', 'd', 'i', 'w', 'e']:
+                return lambda tag, message, verbose: self.adbClient.log(tag, message, priority=attr.upper(),
+                                                                        verbose=verbose)
+            raise AttributeError(self.__class__.__name__ + ' has no attribute "%s"' % attr)
+
+    def getSystemService(self, name):
+        if name == WIFI_SERVICE:
+            return WifiManager(self)
+
+    def getWindows(self):
+        self.__checkTransport()
+        windows = {}
+        dww = self.shell('dumpsys window windows')
+        if DEBUG_WINDOWS: print >> sys.stderr, dww
+        lines = dww.splitlines()
+        widRE = re.compile('^ *Window #%s Window{%s (u\d+ )?%s?.*}:' %
+                           (_nd('num'), _nh('winId'), _ns('activity', greedy=True)))
+        currentFocusRE = re.compile('^  mCurrentFocus=Window{%s .*' % _nh('winId'))
+        viewVisibilityRE = re.compile(' mViewVisibility=0x%s ' % _nh('visibility'))
+        # This is for 4.0.4 API-15
+        containingFrameRE = re.compile('^   *mContainingFrame=\[%s,%s\]\[%s,%s\] mParentFrame=\[%s,%s\]\[%s,%s\]' %
+                                       (_nd('cx'), _nd('cy'), _nd('cw'), _nd('ch'), _nd('px'), _nd('py'), _nd('pw'),
+                                        _nd('ph')))
+        contentFrameRE = re.compile('^   *mContentFrame=\[%s,%s\]\[%s,%s\] mVisibleFrame=\[%s,%s\]\[%s,%s\]' %
+                                    (_nd('x'), _nd('y'), _nd('w'), _nd('h'), _nd('vx'), _nd('vy'), _nd('vx1'),
+                                     _nd('vy1')))
+        # This is for 4.1 API-16
+        framesRE = re.compile('^   *Frames: containing=\[%s,%s\]\[%s,%s\] parent=\[%s,%s\]\[%s,%s\]' %
+                              (_nd('cx'), _nd('cy'), _nd('cw'), _nd('ch'), _nd('px'), _nd('py'), _nd('pw'), _nd('ph')))
+        contentRE = re.compile('^     *content=\[%s,%s\]\[%s,%s\] visible=\[%s,%s\]\[%s,%s\]' %
+                               (_nd('x'), _nd('y'), _nd('w'), _nd('h'), _nd('vx'), _nd('vy'), _nd('vx1'), _nd('vy1')))
+        policyVisibilityRE = re.compile('mPolicyVisibility=%s ' % _ns('policyVisibility', greedy=True))
+
+        currentFocus = None
+
+        for l in range(len(lines)):
+            m = widRE.search(lines[l])
+            if m:
+                num = int(m.group('num'))
+                winId = m.group('winId')
+                activity = m.group('activity')
+                wvx = 0
+                wvy = 0
+                wvw = 0
+                wvh = 0
+                px = 0
+                py = 0
+                visibility = -1
+                policyVisibility = 0x0
+
+                for l2 in range(l + 1, len(lines)):
+                    m = widRE.search(lines[l2])
+                    if m:
+                        l += (l2 - 1)
+                        break
+                    m = viewVisibilityRE.search(lines[l2])
+                    if m:
+                        visibility = int(m.group('visibility'))
+                        if DEBUG_COORDS: print >> sys.stderr, "getWindows: visibility=", visibility
+                    if self.build[VERSION_SDK_PROPERTY] >= 17:
+                        wvx, wvy = (0, 0)
+                        wvw, wvh = (0, 0)
+                    if self.build[VERSION_SDK_PROPERTY] >= 16:
+                        m = framesRE.search(lines[l2])
+                        if m:
+                            px, py = obtainPxPy(m)
+                            m = contentRE.search(lines[l2 + 1])
+                            if m:
+                                # FIXME: the information provided by 'dumpsys window windows' in 4.2.1 (API 16)
+                                # when there's a system dialog may not be correct and causes the View coordinates
+                                # be offset by this amount, see
+                                # https://github.com/dtmilano/AndroidViewClient/issues/29
+                                wvx, wvy = obtainVxVy(m)
+                                wvw, wvh = obtainVwVh(m)
+                    elif self.build[VERSION_SDK_PROPERTY] == 15:
+                        m = containingFrameRE.search(lines[l2])
+                        if m:
+                            px, py = obtainPxPy(m)
+                            m = contentFrameRE.search(lines[l2 + 1])
+                            if m:
+                                wvx, wvy = obtainVxVy(m)
+                                wvw, wvh = obtainVwVh(m)
+                    elif self.build[VERSION_SDK_PROPERTY] == 10:
+                        m = containingFrameRE.search(lines[l2])
+                        if m:
+                            px, py = obtainPxPy(m)
+                            m = contentFrameRE.search(lines[l2 + 1])
+                            if m:
+                                wvx, wvy = obtainVxVy(m)
+                                wvw, wvh = obtainVwVh(m)
+                    else:
+                        warnings.warn("Unsupported Android version %d" % self.build[VERSION_SDK_PROPERTY])
+
+                    # print >> sys.stderr, "Searching policyVisibility in", lines[l2]
+                    m = policyVisibilityRE.search(lines[l2])
+                    if m:
+                        policyVisibility = 0x0 if m.group('policyVisibility') == 'true' else 0x8
+
+                windows[winId] = Window(num, winId, activity, wvx, wvy, wvw, wvh, px, py, visibility + policyVisibility)
+            else:
+                m = currentFocusRE.search(lines[l])
+                if m:
+                    currentFocus = m.group('winId')
+
+        if currentFocus in windows and windows[currentFocus].visibility == 0:
+            if DEBUG_COORDS:
+                print >> sys.stderr, "getWindows: focus=", currentFocus
+                print >> sys.stderr, "getWindows:", windows[currentFocus]
+            windows[currentFocus].focused = True
+
+        return windows
+
+    def getFocusedWindow(self):
+        '''
+        Gets the focused window.
+
+        @return: The focused L{Window}.
+        '''
+
+        for window in self.getWindows().values():
+            if window.focused:
+                return window
+        return None
+
+    def getFocusedWindowName(self):
+        '''
+        Gets the focused window name.
+
+        This is much like monkeyRunner's C{HierarchyView.getWindowName()}
+
+        @return: The focused window name
+        '''
+
+        window = self.getFocusedWindow()
+        if window:
+            return window.activity
+        return None
+
+    def getTopActivityNameAndPid(self):
+        dat = self.shell('dumpsys activity top')
+        lines = dat.splitlines()
+        activityRE = re.compile('\s*ACTIVITY ([A-Za-z0-9_.]+)/([A-Za-z0-9_.]+) \w+ pid=(\d+)')
+        m = activityRE.search(lines[1])
+        if m:
+            return (m.group(1), m.group(2), m.group(3))
+        else:
+            warnings.warn("NO MATCH:" + lines[1])
+            return None
+
+    def getTopActivityName(self):
+        tanp = self.getTopActivityNameAndPid()
+        if tanp:
+            return tanp[0] + '/' + tanp[1]
+        else:
+            return None
+
+    def substituteDeviceTemplate(self, template):
+        serialno = self.serialno.replace('.', '_').replace(':', '-')
+        focusedWindowName = self.getFocusedWindowName().replace('/', '-').replace('.', '_')
+        timestamp = datetime.datetime.now().isoformat()
+        osName = platform.system()
+        if osName.startswith('Windows'):  # ':' not supported in filenames
+            timestamp.replace(':', '_')
+        _map = {
+            'serialno': serialno,
+            'focusedwindowname': focusedWindowName,
+            'timestamp': timestamp
+        }
+        return string.Template(template).substitute(_map)
+
+
+if __name__ == '__main__':
+    adbClient = AdbClient(os.environ['ANDROID_SERIAL'])
+    INTERACTIVE = False
+    if INTERACTIVE:
+        sout = adbClient.shell()
+        prompt = re.compile(".+@android:(.*) [$#] \r\r\n")
+        while True:
+            try:
+                cmd = raw_input('adb $ ')
+            except EOFError:
+                break
+            if cmd == 'exit':
+                break
+            adbClient.socket.__send(cmd + "\r\n")
+            sout.readline(4096)  # eat first line, which is the command
+            while True:
+                line = sout.readline(4096)
+                if prompt.match(line):
+                    break
+                print line,
+                if not line:
+                    break
+
+        print "\nBye"
+    else:
+        print 'date:', adbClient.shell('date')
diff --git a/AndroidViewClient/src/com/dtmilano/android/adb/androidkeymap.py b/AndroidViewClient/src/com/dtmilano/android/adb/androidkeymap.py
new file mode 100755
index 0000000..bdededc
--- /dev/null
+++ b/AndroidViewClient/src/com/dtmilano/android/adb/androidkeymap.py
@@ -0,0 +1,241 @@
+'''
+Created on Jun 13, 2014
+
+@author: diego
+'''
+
+KEY_MAP = dict()
+KEY_MAP["ESCAPE"]=1
+KEY_MAP["1"]=2
+KEY_MAP["2"]=3
+KEY_MAP["3"]=4
+KEY_MAP["4"]=5
+KEY_MAP["5"]=6
+KEY_MAP["6"]=7
+KEY_MAP["7"]=8
+KEY_MAP["8"]=9
+KEY_MAP["9"]=10
+KEY_MAP["0"]=11
+KEY_MAP["MINUS"]=12
+KEY_MAP["EQUALS"]=13
+KEY_MAP["DEL"]=14
+KEY_MAP["TAB"]=15
+KEY_MAP["Q"]=16
+KEY_MAP["W"]=17
+KEY_MAP["E"]=18
+KEY_MAP["R"]=19
+KEY_MAP["T"]=20
+KEY_MAP["Y"]=21
+KEY_MAP["U"]=22
+KEY_MAP["I"]=23
+KEY_MAP["O"]=24
+KEY_MAP["P"]=25
+KEY_MAP["LEFT_BRACKET"]=26
+KEY_MAP["RIGHT_BRACKET"]=27
+KEY_MAP["ENTER"]=28
+KEY_MAP["CTRL_LEFT"]=29
+KEY_MAP["A"]=30
+KEY_MAP["S"]=31
+KEY_MAP["D"]=32
+KEY_MAP["F"]=33
+KEY_MAP["G"]=34
+KEY_MAP["H"]=35
+KEY_MAP["J"]=36
+KEY_MAP["K"]=37
+KEY_MAP["L"]=38
+KEY_MAP["SEMICOLON"]=39
+KEY_MAP["APOSTROPHE"]=40
+KEY_MAP["GRAVE"]=41
+KEY_MAP["SHIFT_LEFT"]=42
+KEY_MAP["BACKSLASH"]=43
+KEY_MAP["Z"]=44
+KEY_MAP["X"]=45
+KEY_MAP["C"]=46
+KEY_MAP["V"]=47
+KEY_MAP["B"]=48
+KEY_MAP["N"]=49
+KEY_MAP["M"]=50
+KEY_MAP["COMMA"]=51
+KEY_MAP["PERIOD"]=52
+KEY_MAP["SLASH"]=53
+KEY_MAP["SHIFT_RIGHT"]=54
+KEY_MAP["NUMPAD_MULTIPLY"]=55
+KEY_MAP["ALT_LEFT"]=56
+KEY_MAP["SPACE"]=57
+KEY_MAP["CAPS_LOCK"]=58
+KEY_MAP["F1"]=59
+KEY_MAP["F2"]=60
+KEY_MAP["F3"]=61
+KEY_MAP["F4"]=62
+KEY_MAP["F5"]=63
+KEY_MAP["F6"]=64
+KEY_MAP["F7"]=65
+KEY_MAP["F8"]=66
+KEY_MAP["F9"]=67
+KEY_MAP["F10"]=68
+KEY_MAP["NUM_LOCK"]=69
+KEY_MAP["SCROLL_LOCK"]=70
+KEY_MAP["NUMPAD_7"]=71
+KEY_MAP["NUMPAD_8"]=72
+KEY_MAP["NUMPAD_9"]=73
+KEY_MAP["NUMPAD_SUBTRACT"]=74
+KEY_MAP["NUMPAD_4"]=75
+KEY_MAP["NUMPAD_5"]=76
+KEY_MAP["NUMPAD_6"]=77
+KEY_MAP["NUMPAD_ADD"]=78
+KEY_MAP["NUMPAD_1"]=79
+KEY_MAP["NUMPAD_2"]=80
+KEY_MAP["NUMPAD_3"]=81
+KEY_MAP["NUMPAD_0"]=82
+KEY_MAP["NUMPAD_DOT"]=83
+KEY_MAP["ZENKAKU_HANKAKU"]=85
+KEY_MAP["BACKSLASH"]=86
+KEY_MAP["F11"]=87
+KEY_MAP["F12"]=88
+KEY_MAP["RO"]=89
+KEY_MAP["HENKAN"]=92
+KEY_MAP["KATAKANA_HIRAGANA"]=93
+KEY_MAP["MUHENKAN"]=94
+KEY_MAP["NUMPAD_COMMA"]=95
+KEY_MAP["NUMPAD_ENTER"]=96
+KEY_MAP["CTRL_RIGHT"]=97
+KEY_MAP["NUMPAD_DIVIDE"]=98
+KEY_MAP["SYSRQ"]=99
+KEY_MAP["ALT_RIGHT"]=100
+KEY_MAP["MOVE_HOME"]=102
+KEY_MAP["DPAD_UP"]=103
+KEY_MAP["PAGE_UP"]=104
+KEY_MAP["DPAD_LEFT"]=105
+KEY_MAP["DPAD_RIGHT"]=106
+KEY_MAP["MOVE_END"]=107
+KEY_MAP["DPAD_DOWN"]=108
+KEY_MAP["PAGE_DOWN"]=109
+KEY_MAP["INSERT"]=110
+KEY_MAP["FORWARD_DEL"]=111
+KEY_MAP["VOLUME_MUTE"]=113
+KEY_MAP["VOLUME_DOWN"]=114
+KEY_MAP["VOLUME_UP"]=115
+KEY_MAP["POWER"]=116
+KEY_MAP["NUMPAD_EQUALS"]=117
+KEY_MAP["BREAK"]=119
+KEY_MAP["NUMPAD_COMMA"]=121
+KEY_MAP["KANA"]=122
+KEY_MAP["EISU"]=123
+KEY_MAP["YEN"]=124
+KEY_MAP["META_LEFT"]=125
+KEY_MAP["META_RIGHT"]=126
+KEY_MAP["MENU"]=127
+KEY_MAP["MEDIA_STOP"]=128
+KEY_MAP["MENU"]=139
+KEY_MAP["CALCULATOR"]=140
+#KEY_MAP["POWER"]=142
+#KEY_MAP["POWER"]=143
+KEY_MAP["EXPLORER"]=150
+#KEY_MAP["POWER"]=152
+KEY_MAP["ENVELOPE"]=155
+KEY_MAP["BOOKMARK"]=156
+KEY_MAP["BACK"]=158
+KEY_MAP["FORWARD"]=159
+KEY_MAP["MEDIA_CLOSE"]=160
+KEY_MAP["MEDIA_EJECT"]=161
+KEY_MAP["MEDIA_EJECT"]=162
+KEY_MAP["MEDIA_NEXT"]=163
+KEY_MAP["MEDIA_PLAY_PAUSE"]=164
+KEY_MAP["MEDIA_PREVIOUS"]=165
+KEY_MAP["MEDIA_STOP"]=166
+KEY_MAP["MEDIA_RECORD"]=167
+KEY_MAP["MEDIA_REWIND"]=168
+KEY_MAP["CALL"]=169
+KEY_MAP["MUSIC"]=171
+KEY_MAP["HOME"]=172
+KEY_MAP["PAGE_UP"]=177
+KEY_MAP["PAGE_DOWN"]=178
+KEY_MAP["NUMPAD_LEFT_PAREN"]=179
+KEY_MAP["NUMPAD_RIGHT_PAREN"]=180
+KEY_MAP["MEDIA_PLAY"]=200
+KEY_MAP["MEDIA_PAUSE"]=201
+KEY_MAP["MEDIA_PLAY"]=207
+KEY_MAP["MEDIA_FAST_FORWARD"]=208
+KEY_MAP["CAMERA"]=212
+KEY_MAP["MUSIC"]=213
+KEY_MAP["ENVELOPE"]=215
+KEY_MAP["SEARCH"]=217
+KEY_MAP["BRIGHTNESS_DOWN"]=224
+KEY_MAP["BRIGHTNESS_UP"]=225
+KEY_MAP["HEADSETHOOK"]=226
+KEY_MAP["BUTTON_1"]=256
+KEY_MAP["BUTTON_2"]=257
+KEY_MAP["BUTTON_3"]=258
+KEY_MAP["BUTTON_4"]=259
+KEY_MAP["BUTTON_5"]=260
+KEY_MAP["BUTTON_6"]=261
+KEY_MAP["BUTTON_7"]=262
+KEY_MAP["BUTTON_8"]=263
+KEY_MAP["BUTTON_9"]=264
+KEY_MAP["BUTTON_10"]=265
+KEY_MAP["BUTTON_11"]=266
+KEY_MAP["BUTTON_12"]=267
+KEY_MAP["BUTTON_13"]=268
+KEY_MAP["BUTTON_14"]=269
+KEY_MAP["BUTTON_15"]=270
+KEY_MAP["BUTTON_16"]=271
+KEY_MAP["BUTTON_1"]=288
+KEY_MAP["BUTTON_2"]=289
+KEY_MAP["BUTTON_3"]=290
+KEY_MAP["BUTTON_4"]=291
+KEY_MAP["BUTTON_5"]=292
+KEY_MAP["BUTTON_6"]=293
+KEY_MAP["BUTTON_7"]=294
+KEY_MAP["BUTTON_8"]=295
+KEY_MAP["BUTTON_9"]=296
+KEY_MAP["BUTTON_10"]=297
+KEY_MAP["BUTTON_11"]=298
+KEY_MAP["BUTTON_12"]=299
+KEY_MAP["BUTTON_13"]=300
+KEY_MAP["BUTTON_14"]=301
+KEY_MAP["BUTTON_15"]=302
+KEY_MAP["BUTTON_16"]=303
+KEY_MAP["BUTTON_A"]=304
+KEY_MAP["BUTTON_B"]=305
+KEY_MAP["BUTTON_C"]=306
+KEY_MAP["BUTTON_X"]=307
+KEY_MAP["BUTTON_Y"]=308
+KEY_MAP["BUTTON_Z"]=309
+KEY_MAP["BUTTON_L1"]=310
+KEY_MAP["BUTTON_R1"]=311
+KEY_MAP["BUTTON_L2"]=312
+KEY_MAP["BUTTON_R2"]=313
+KEY_MAP["BUTTON_SELECT"]=314
+KEY_MAP["BUTTON_START"]=315
+KEY_MAP["BUTTON_MODE"]=316
+KEY_MAP["BUTTON_THUMBL"]=317
+KEY_MAP["BUTTON_THUMBR"]=318
+KEY_MAP["DPAD_CENTER"]=353
+KEY_MAP["GUIDE"]=362
+KEY_MAP["DVR"]=366
+KEY_MAP["TV"]=377
+KEY_MAP["CALENDAR"]=397
+KEY_MAP["CHANNEL_UP"]=402
+KEY_MAP["CHANNEL_DOWN"]=403
+KEY_MAP["CONTACTS"]=429
+KEY_MAP["FUNCTION"]=464
+KEY_MAP["ESCAPE"]=465
+KEY_MAP["F1"]=466
+KEY_MAP["F2"]=467
+KEY_MAP["F3"]=468
+KEY_MAP["F4"]=469
+KEY_MAP["F5"]=470
+KEY_MAP["F6"]=471
+KEY_MAP["F7"]=472
+KEY_MAP["F8"]=473
+KEY_MAP["F9"]=474
+KEY_MAP["F10"]=475
+KEY_MAP["F11"]=476
+KEY_MAP["F12"]=477
+KEY_MAP["1"]=478
+KEY_MAP["2"]=479
+KEY_MAP["D"]=480
+KEY_MAP["E"]=481
+KEY_MAP["F"]=482
+KEY_MAP["S"]=483
+KEY_MAP["B"]=484
\ No newline at end of file
diff --git a/AndroidViewClient/src/com/dtmilano/android/common.py b/AndroidViewClient/src/com/dtmilano/android/common.py
new file mode 100755
index 0000000..25a9b41
--- /dev/null
+++ b/AndroidViewClient/src/com/dtmilano/android/common.py
@@ -0,0 +1,158 @@
+# -*- coding: utf-8 -*-
+'''
+Copyright (C) 2012-2015  Diego Torres Milano
+Created on Jan 5, 2015
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+@author: Diego Torres Milano
+'''
+import platform
+import os
+
+
+def _nd(name):
+    '''
+    @return: Returns a named decimal regex
+    '''
+    return '(?P<%s>\d+)' % name
+
+
+def _nh(name):
+    '''
+    @return: Returns a named hex regex
+    '''
+    return '(?P<%s>[0-9a-f]+)' % name
+
+
+def _ns(name, greedy=False):
+    '''
+    NOTICE: this is using a non-greedy (or minimal) regex
+
+    @type name: str
+    @param name: the name used to tag the expression
+    @type greedy: bool
+    @param greedy: Whether the regex is greedy or not
+
+    @return: Returns a named string regex (only non-whitespace characters allowed)
+    '''
+    return '(?P<%s>\S+%s)' % (name, '' if greedy else '?')
+
+
+def obtainPxPy(m):
+    px = int(m.group('px'))
+    py = int(m.group('py'))
+    return (px, py)
+
+
+def obtainVxVy(m):
+    wvx = int(m.group('vx'))
+    wvy = int(m.group('vy'))
+    return wvx, wvy
+
+
+def obtainVwVh(m):
+    (wvx, wvy) = obtainVxVy(m)
+    wvx1 = int(m.group('vx1'))
+    wvy1 = int(m.group('vy1'))
+    return (wvx1 - wvx, wvy1 - wvy)
+
+
+def obtainAdbPath():
+    '''
+    Obtains the ADB path attempting know locations for different OSs
+    '''
+
+    FORCE_FAIL = False
+    ''' Sometimes, you want it to fail to check the error messages '''
+    osName = platform.system()
+    isWindows = False
+    adb = 'adb'
+
+    if (osName.startswith('Windows')) or (osName.startswith('Java')):
+        envOSName = os.getenv('os')  # this should work as it has been set since xp.
+        if envOSName.startswith('Windows'):
+            adb = 'adb.exe'
+            isWindows = True
+
+    ANDROID_HOME = os.environ['ANDROID_HOME'] if os.environ.has_key('ANDROID_HOME') else '/opt/android-sdk'
+    HOME = os.environ['HOME'] if os.environ.has_key('HOME') else ''
+
+    possibleChoices = [os.path.join(ANDROID_HOME, 'platform-tools', adb),
+                       os.path.join(HOME, "android", 'platform-tools', adb),
+                       os.path.join(HOME, "android-sdk", 'platform-tools', adb),
+                       ]
+
+    if osName.startswith('Windows'):
+        possibleChoices.append(os.path.join("""C:\Program Files\Android\android-sdk\platform-tools""", adb))
+        possibleChoices.append(os.path.join("""C:\Program Files (x86)\Android\android-sdk\platform-tools""", adb))
+    elif osName.startswith('Linux'):
+        possibleChoices.append(os.path.join("opt", "android-sdk-linux", 'platform-tools', adb))
+        possibleChoices.append(os.path.join(HOME, "opt", "android-sdk-linux", 'platform-tools', adb))
+        possibleChoices.append(os.path.join(HOME, "android-sdk-linux", 'platform-tools', adb))
+        possibleChoices.append(os.path.join(HOME, 'Android', 'Sdk', 'platform-tools', adb))
+    elif osName.startswith('Mac'):
+        possibleChoices.append(os.path.join(HOME, "Library", "Android", "sdk", 'platform-tools', adb))
+        possibleChoices.append(os.path.join("opt", "android-sdk-mac_x86", 'platform-tools', adb))
+        possibleChoices.append(os.path.join(HOME, "opt", "android-sdk-mac", 'platform-tools', adb))
+        possibleChoices.append(os.path.join(HOME, "android-sdk-mac", 'platform-tools', adb))
+        possibleChoices.append(os.path.join(HOME, "opt", "android-sdk-mac_x86", 'platform-tools', adb))
+        possibleChoices.append(os.path.join(HOME, "android-sdk-mac_x86", 'platform-tools', adb))
+    else:
+        # Unsupported OS
+        pass
+
+    possibleChoices.append(adb)
+
+    checkedFiles = []
+
+    for exeFile in possibleChoices:
+        checkedFiles.append(exeFile)
+        if not FORCE_FAIL and os.access(exeFile, os.X_OK):
+            return exeFile
+
+    for path in os.environ["PATH"].split(os.pathsep):
+        exeFile = os.path.join(path, adb)
+        checkedFiles.append(exeFile)
+        if not FORCE_FAIL and exeFile is not None and os.access(exeFile, os.X_OK if not isWindows else os.F_OK):
+            return exeFile
+
+    if not os.environ.has_key('ANDROID_HOME'):
+        helpMsg = 'Did you forget to set ANDROID_HOME in the environment?'
+    else:
+        helpMsg = ''
+
+    raise Exception('''adb="%s" is not executable. %s
+
+These files we unsuccessfully checked to find a suitable '%s' executable:
+    %s
+    ''' % (adb, helpMsg, adb, "\n    ".join(checkedFiles)))
+
+
+def profileStart():
+    import cProfile
+    global profile
+    profile = cProfile.Profile()
+    profile.enable()
+
+
+def profileEnd():
+    profile.disable()
+    import StringIO, pstats
+    import sys
+    s = StringIO.StringIO()
+    ps = pstats.Stats(profile, stream=s).sort_stats('cumulative')
+    ps.print_stats()
+    print >> sys.stderr, '.' * 60
+    print >> sys.stderr, "STATS:\n", s.getvalue()
+    print >> sys.stderr, '.' * 60
diff --git a/AndroidViewClient/src/com/dtmilano/android/concertina.py b/AndroidViewClient/src/com/dtmilano/android/concertina.py
new file mode 100755
index 0000000..53a3646
--- /dev/null
+++ b/AndroidViewClient/src/com/dtmilano/android/concertina.py
@@ -0,0 +1,248 @@
+# -*- coding: utf-8 -*-
+'''
+Copyright (C) 2012-2015  Diego Torres Milano
+Created on Jul 6, 2015
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+@author: Diego Torres Milano
+
+'''
+import random
+import subprocess
+import platform
+import sys
+import time
+
+__author__ = 'diego'
+__version__ = '11.5.9'
+
+DEBUG = True
+
+class Concertina:
+    osName = platform.system()
+    ''' The OS name. We sometimes need specific behavior. '''
+    isLinux = (osName == 'Linux')
+    isDarwin = (osName == 'Darwin')
+
+    PHRASES = [
+        "Chicken Wings grow on trees",
+        "Carrot sticks help the mind think",
+        "Farts cause neurological damage",
+        "Jennifer Lopez is a Man (only on Tuesday)",
+        "That... Is what she said",
+        "Make me a sandwich",
+        "King Kongs brother was a Rabbit... Hmmm",
+        "Tuesday, thats when it will all begin",
+        "Rulers, do they rule the world?",
+        "Can a pen write without writing it down.",
+        "The iPod is a gigantic hummer",
+        "A calculator can save the world. Just press \"On\"",
+        "Cell phones... Do they have cells in them?",
+        "A battery can produce random flashes and generate helium. Doubtful",
+        "A flash drive produces no flash what so ever",
+        "A card can be a type of a pickle, if its a pickle card",
+        "just a minute",
+        "wait for me",
+        "it was silent",
+        "chaos reigned",
+        "be on time",
+        "get away from me",
+        "Hold that thought",
+        "settle down",
+        "by the light of the street lamp",
+        "slippers soaked from the heavy dew",
+        "haunted by the oddly familiar musid",
+        "The 'poke' button on facebook is awesome...\nBut I think there should be a 'stab' button...",
+#
+# Was riding a horse yesterday and fell off. I almost got killed! THANK GOODNESS
+# the Walmart greeter saw what happened and came over and unplugged it.
+#
+# Ayone who says "nothing is impossible" has obviously never  tried to staple jello to a tree.
+#
+# Text someone and tell them "Hey, I lost my phone, can you call it?"  and see how many people call it
+#
+# Bottles of bleach: $15.00. One rope, 3 rolls of duct tape, and a shovel: $35.00. 3 boxes of trash bags: $10.00. The look on the cashier's face: Priceless!
+#
+# Don't you hate it when you're texting and laying on your back and  your phone decides to be a ninja, slips through your fingers, and attacks your face!
+#
+# Robin Hood was a thief, Mario gets high off of Mushrooms, Snow White lived with 7 men,  Sleeping Beauty always slept in, and our parents wonder why WE are bad!
+#
+# In my will, I'm giving $50 to anyone who wears a Grim Reaper costume to my funeral and doesn't say a word
+#
+# "You know you're too drunk to drive when you swerve to miss a tree,  and then realize it was just your air freshener hanging from the rear view mirror."
+#
+# Dares you to go outside, throw a rock at your car and yell  "like a good neighbor statefarm is there!"
+#
+# My doctor asked if any members of my family suffered from insanity, I replied, no, we all seem to enjoy it
+#
+# Pshhhh I did not fall... The floor looked at me funny so I used my mad ninja skills to attack
+#
+# My new word for the day is FOCUS, when someone irritates you tell them 2 FOCUS (F*** Off Cuz Ur Stupid)
+#
+# Just remember, everything happens for a reason. So when I smack you upside the head, remember... I had a reason!
+#
+# Have you ever started laughing for no reason, then started laughing even harder because you were laughing for no reason? I Love those moments.
+#
+# Today I went on thesaurus.com and searched "ninjas". The computer told me "ninjas cannot be found"  Well played, ninjas, well played
+#
+# What the voices in my head tell me to do would get me arrested in all 50 states and 26 countries
+#
+# Stalking is such a strong word  ~ I prefer to think of it more as 'intense research' on one individual  ~ By the way, your missing sock is under your bed, with me
+#
+# I think my guardian angel is bipolar
+#
+# WARNING: I have officially been left unsupervised.  I take no responsibility for what may happen in the next few hours.
+#
+# I didn't trip, I... I was... uh... just... uh... checking the gravity!
+# Yeah! Just so you know, it's all good, it still works.
+#
+# I dare someone to kidnap me as soon as my meds wear off..they'll pay me to leave!
+#
+# I wonder if its bad when I'm talking to myself and I'm not even listening
+#
+#  I'm going out to look for myself, if you see me before i return, please tell myself to call me so i know where i am.
+#
+# I know what your doing,I'm watching u do this, if your wondering what your doing i would know,wanna know what your doing?  you reading my status you stalker!
+#
+# This year I'm using big words to sound smart...  Sorry, I meant utilizing gargantuan idioms to simulate intelligence.
+#
+# Y'know those signs you see in towns that say,  "Drive careful, we love our children".  DUH, you're not gonna see a sign that says, "GUN IT, WE'LL MAKE MORE!"
+#
+# No officer, I did not hit her, I simply Fist Pumped her face!
+#
+# I like throwing Skittles at people and shouting TASTE THE RAINBOW!!  but it's more fun to throw tacos at people yelling '  THINK OUTSIDE THE BUN!!
+#
+# I love to stand in line at ATM machines, and when people put in their PIN, I yell GOT IT then run away
+#
+# Like a weird neighbor, stalkers are there!
+#
+# Some people were dropped as a baby
+# . YOU were clearly thrown at a wall. Then feed a bottle of wacko-o juice!
+#
+# Do you ever find yourself really bored so you go on Facebook
+# yet you find that there is nothing to do except refresh the page until something new pops up?
+#
+# OK think of a number. Add 12 to the number. Subtract 2. Divide that number by 5. Add 20. Did you get 12? Neither did I.
+# I just wanted to see if you would do it!
+#
+#  im going to get a job at walmart as a greeter
+# and my words of welcome will be "Welcome to freaking walmart! Get ur sh*t and get the hell out!!"
+#
+# Brunette:When I grow up, I'LL GO TO MARS.
+# Blondie:When I grow up I'LL GO TO THE SUN.
+# Brunette:But you will burn!
+# Blondie:Don't be stupid, I'll go at night
+#
+# If somebody throws skittles at me and yells "TASTE THE RAINBOW",
+# I'm gonna throw a 2 liter bottle of Dr.Pepper and yell "TRUST ME I'M THE DOCTOR
+#
+# a few days ago I very sternly told the voices in my head to stop talking to me.
+# Now they are sending me txt mgs say that they r sorry and want to get back2gethr
+#
+# things to do at Walmart: hide behind teddy bears and make evil laughing noises when little kids come by
+#
+# Ever feel like beating someone with a baseball bat to the point of almost unconsciousness, then setting them on fire? No? Just me?
+#
+#  I'm not crazy.. don't you judge me! Your just jealous cause i get texts from the flying gummy bears and you don't!
+#
+# i saw a flying cow yesterday. it was purple and i named him Phillip...i wish the dancing unicorn had seen him but she was too busy laughing at Steve the snake
+#
+#  i was sitting there when i got attacked by the purple hedgehogs, neon dragons, and glow-in-the-dark leprechauns that kid-napped the unicorn and strawberry king
+#
+# I have decided to stop pretending and just be that ninja with the magical penguins and dinosaurs and unicorns that everyone KNOWS I am.
+#
+# Have you ever tried walking into Walmart and yelling red robin! and seeing how many people say YUM red robin, red robin, come on just say yum!
+#
+#  Things to do at Walmart #365: bring or take a tent, set it up in a camping supplies corner, and camp out for the weekend until they kick you out!
+#
+# After watching CSI, Cold case, Law & Order, and all those other educational shows, I'm 99% sure I can make sure nobody notices you missing. Just saying...
+#
+# I like to call it doing the world a favor. Homicide is just the technical term
+#
+#  i think there's something wrong with my guardian angel.
+# her wings are black and she's sitting with the devil and laughing hysterically at everything and everyone
+#
+# I got a special care pkg. in the mail. It had duct tape, a meat tenderizer,
+# a hole punch and a note saying " don't get caught"! (sigh) I love my friends!
+#
+# I find myself meeting people who give me the honor of thinking up new words... Dipshidiot! (dip-shid-iot)
+#
+# backwards this read you making am i why exactly is that, never? you to nice been ever I have when since (now read it backwards)
+#
+# What happens in an exam : Tik tok , Mind block , Pen stop , Eye pop , Full shock , Jaw drop , Time up , No Luck
+#
+#  O I dare you to walk up to any officer and say:
+# I didnt do it I didnt kill her, the assassination wasnt part of the plan.' Then run fast! I bet they'll chase u
+#
+# I'm bored & in need of some adventure. I say we get drunk, get stupid, get a stick, go poke something with teeth and see if we can outrun it.
+#
+# Why do people always think my friends and I are high? WE'RE NOT ON DRUGS! We're just crazy, and loud, and random, and scooby doo (but that's a different story)
+#
+#  Smile people will wonder what your up to.But grin like crazy and they will want to know what the hell you just did
+#
+# Isn't it funny how everyone thinks they are the normal one in their family?
+#
+# For Sale! One used alarm clock. damn thing rings when I am trying to sleep.
+#
+#  im on my way to Walmart to take the "try me" stickers off the noise making toys and stick them on condom boxes.
+
+    ]
+
+    EMAILS = [
+        "user@example.com",
+        "user@gmail.com",
+        "user@yahoo.com",
+        "user@outlook.com",
+        "user@mail.com",
+        "user@outlook.co.uk",
+    ]
+
+    PASSWORDS = [
+        "123456",
+        "password",
+        "12345678",
+        "qwerty",
+        "abc123",
+    ]
+
+    def __init__(self):
+        pass
+
+    @staticmethod
+    def getRandomText():
+        return random.choice(Concertina.PHRASES)
+
+    @staticmethod
+    def sayRandomText():
+        text = Concertina.getRandomText()
+        if Concertina.isLinux:
+            if DEBUG:
+                print >> sys.stderr, 'Saying "%s" using festival' % text
+            pipe = subprocess.Popen(['/usr/bin/festival'])
+            pipe.communicate('(SayText "%s")' % text)
+            pipe.terminate()
+        elif Concertina.isDarwin:
+            if DEBUG:
+                print >> sys.stderr, 'Saying "%s"' % text
+            #subprocess.check_call(['/usr/bin/say', 'OK Google'])
+            #time.sleep(2)
+            subprocess.check_call(['/usr/bin/say', text])
+
+    @staticmethod
+    def getRandomEmail():
+        return random.choice(Concertina.EMAILS)
+
+    @staticmethod
+    def getRandomPassword():
+        return random.choice(Concertina.PASSWORDS)
diff --git a/AndroidViewClient/src/com/dtmilano/android/controlpanel.py b/AndroidViewClient/src/com/dtmilano/android/controlpanel.py
new file mode 100755
index 0000000..2d1533e
--- /dev/null
+++ b/AndroidViewClient/src/com/dtmilano/android/controlpanel.py
@@ -0,0 +1,145 @@
+# -*- coding: utf-8 -*-
+'''
+    Copyright (C) 2012-2014  Diego Torres Milano
+    Created on oct 30, 2014
+    
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+    
+    http://www.apache.org/licenses/LICENSE-2.0
+    
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+    
+    @author: Diego Torres Milano
+    @author: Ahmed Kasem
+    '''
+
+__version__ = '11.5.9'
+
+import sys, os
+import Tkinter, tkFileDialog, ttk
+
+from com.dtmilano.android.culebron import Operation, Unit, Color
+
+class Key:
+    GOOGLE_NOW='KEYCODE_ASSIST'
+    PERIOD='KEYCODE_PERIOD'
+    GO='KEYCODE_ENTER'
+
+class Layout:
+    BUTTON_WIDTH=13
+    BUTTONS_NUMBER=9
+
+class ControlPanel(Tkinter.Toplevel):
+
+    def __init__(self, culebron, printOperation, **kwargs):
+        self.culebron = culebron
+        self.printOperation = printOperation
+        self.parent = culebron.window
+        self.childWindow = Tkinter.Toplevel(self.parent)
+        self.notebook = ttk.Notebook(self.childWindow)
+        self.notebook.pack(fill=Tkinter.BOTH, padx=2, pady=3)
+        self.keycodeTab = ttk.Frame(self.notebook)
+        self.keyboardTab = ttk.Frame(self.notebook)
+        self.notebook.add(self.keycodeTab, text='KEYCODE')
+        self.notebook.add(self.keyboardTab, text='KEYBOARD')
+        self.childWindow.title('Control Panel')
+        self.childWindow.resizable(width=Tkinter.FALSE, height=Tkinter.FALSE)
+        self.childWindow.printOperation = printOperation
+        self.childWindow.grid()
+        self.childWindow.column = self.childWindow.row = 0
+        self.createKeycodeTab()
+        self.createKeyboardTab()
+
+    def createKeycodeTab(self):
+        ''' KEYCODE '''
+        self.keycodeList = [
+                             'KEYCODE_HOME', 'KEYCODE_DPAD_UP', 'KEYCODE_BACK', 'KEYCODE_SEARCH', 'KEYCODE_CHANNEL_UP', 'KEYCODE_TV', 
+                             'KEYCODE_MUSIC', 'KEYCODE_EXPLORER', 'KEYCODE_CAMERA', 'KEYCODE_POWER', 'KEYCODE_DPAD_LEFT','KEYCODE_DPAD_DOWN',
+                             'KEYCODE_DPAD_RIGHT', 'KEYCODE_PAGE_UP', 'KEYCODE_CHANNEL_DOWN', 'KEYCODE_VOLUME_UP', 'KEYCODE_MEDIA_PLAY',
+                             'KEYCODE_CONTACTS', 'KEYCODE_ZOOM_IN', 'SNAPSHOPT', 'KEYCODE_MENU', 'KEYCODE_DPAD_CENTER', 'KEYCODE_ENTER',
+                             'KEYCODE_PAGE_DOWN', 'KEYCODE_BRIGHTNESS_DOWN', 'KEYCODE_VOLUME_DOWN', 'KEYCODE_MEDIA_PAUSE', 'KEYCODE_BOOKMARK',
+                             'KEYCODE_ZOOM_OUT', 'REFRESH', 'KEYCODE_APP_SWITCH', 'KEYCODE_GOOGLE_NOW', 'KEYCODE_CALL', 'KEYCODE_ESCAPE',
+                             'KEYCODE_BRIGHTNESS_UP', 'KEYCODE_VOLUME_MUTE', 'KEYCODE_MEDIA_STOP', 'KEYCODE_CALCULATOR', 'KEYCODE_SETTINGS', 'QUIT'
+                            ]
+        for keycode in self.keycodeList:
+            self.keycode = ControlPanelButton(self.keycodeTab, self.culebron, self.printOperation, value=keycode, text=keycode[8:],
+                                              width=Layout.BUTTON_WIDTH, bg=Color.DARK_GRAY, fg=Color.LIGHT_GRAY,
+                                              highlightbackground=Color.DARK_GRAY)
+
+            if keycode == 'REFRESH':
+                self.keycode.configure(fg=Color.BLUE, bg=Color.DARK_GRAY, text=keycode, command=self.keycode.refreshScreen)
+                self.keycode.grid(column=self.childWindow.column, row=self.childWindow.row)
+            elif keycode == 'SNAPSHOPT':
+                self.keycode.configure(fg=Color.BLUE, bg=Color.DARK_GRAY, text=keycode, command=self.keycode.takeSnapshot)
+                self.keycode.grid(column=self.childWindow.column, row=self.childWindow.row)
+            elif keycode == 'QUIT':
+                self.keycode.configure(fg=Color.BLUE, bg=Color.DARK_GRAY, text=keycode, command=self.childWindow.destroy)
+                self.keycode.grid(column=self.childWindow.column, row=self.childWindow.row)
+            else:
+                self.keycode.configure(command=self.keycode.command)
+                self.keycode.grid(column=self.childWindow.column, row=self.childWindow.row)
+            self.tabLayout()
+
+    def createKeyboardTab(self):
+        ''' KEYBOARD '''
+        self.keyboardList = [
+                              'KEYCODE_1', 'KEYCODE_2', 'KEYCODE_3', 'KEYCODE_4', 'KEYCODE_5', 'KEYCODE_6', 'KEYCODE_7', 'KEYCODE_8', 'KEYCODE_9', 'KEYCODE_0',
+                              'KEYCODE_Q', 'KEYCODE_W', 'KEYCODE_E', 'KEYCODE_R', 'KEYCODE_T', 'KEYCODE_Y', 'KEYCODE_U', 'KEYCODE_I', 'KEYCODE_O', 'KEYCODE_P',
+                              'KEYCODE_A', 'KEYCODE_S', 'KEYCODE_D', 'KEYCODE_F', 'KEYCODE_G', 'KEYCODE_H', 'KEYCODE_J', 'KEYCODE_K', 'KEYCODE_L',
+                              'KEYCODE_DEL', 'KEYCODE_Z', 'KEYCODE_X', 'KEYCODE_C', 'KEYCODE_V', 'KEYCODE_B', 'KEYCODE_N', 'KEYCODE_M',
+                              'KEYCODE_.', 'KEYCODE_SPACE', 'KEYCODE_GO'
+                             ]
+
+        for keyboard in self.keyboardList:
+            self.keyboard = ControlPanelButton(self.keyboardTab, self.culebron, self.printOperation, value=keyboard, text=keyboard[8:],
+                                               width=Layout.BUTTON_WIDTH, bg=Color.DARK_GRAY, fg=Color.LIGHT_GRAY,
+                                               highlightbackground=Color.DARK_GRAY)
+
+            self.keyboard.configure(command=self.keyboard.command)
+            self.keyboard.grid(column=self.childWindow.column, row=self.childWindow.row)
+            self.tabLayout()
+
+    def tabLayout(self):
+        ''' For all tabs, specify the number of buttons in a row '''
+        self.childWindow.column += 1
+        if self.childWindow.column > Layout.BUTTONS_NUMBER:
+            self.childWindow.column = 0
+            self.childWindow.row += 1
+
+
+class ControlPanelButton(Tkinter.Button):
+
+    def __init__(self, parent, culebron, printOperation, value=None, **kwargs):
+        Tkinter.Button.__init__(self, parent, kwargs)
+        self.culebron = culebron
+        self.printOperation = printOperation
+        self.value = value
+        self.device = culebron.device
+
+    def command(self):
+        key = self.value
+        if key == 'KEYCODE_GOOGLE_NOW':
+            self.device.press(Key.GOOGLE_NOW)
+            self.printOperation(None, Operation.PRESS, Key.GOOGLE_NOW)
+        elif key == 'KEYCODE_.':
+            self.device.press(Key.PERIOD)
+            self.printOperation(None, Operation.PRESS, Key.PERIOD)
+        elif key == 'KEYCODE_GO':
+            self.device.press(Key.GO)
+            self.printOperation(None, Operation.PRESS, Key.GO)
+        else:
+            self.device.press(key)
+            self.printOperation(None, Operation.PRESS, key)
+
+    def refreshScreen(self):
+        self.culebron.refresh()
+
+    def takeSnapshot(self):
+        # No need to retake snapshot as it is already shown
+        self.culebron.saveSnapshot()
diff --git a/AndroidViewClient/src/com/dtmilano/android/culebron.py b/AndroidViewClient/src/com/dtmilano/android/culebron.py
new file mode 100755
index 0000000..b7548b3
--- /dev/null
+++ b/AndroidViewClient/src/com/dtmilano/android/culebron.py
@@ -0,0 +1,2146 @@
+# -*- coding: utf-8 -*-
+'''
+Copyright (C) 2012-2015  Diego Torres Milano
+Created on oct 6, 2014
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+@author: Diego Torres Milano
+
+'''
+import StringIO
+import random
+import time
+import re
+from com.dtmilano.android.common import profileStart
+from com.dtmilano.android.common import profileEnd
+from com.dtmilano.android.concertina import Concertina
+
+__version__ = '11.5.9'
+
+import sys
+import threading
+import warnings
+import copy
+import string
+import os
+import platform
+from pkg_resources import Requirement, resource_filename
+
+try:
+    import PIL
+    from PIL import Image, ImageTk
+
+    PIL_AVAILABLE = True
+except:
+    PIL_AVAILABLE = False
+
+try:
+    import Tkinter
+    import tkSimpleDialog
+    import tkFileDialog
+    import tkFont
+    import ScrolledText
+    import ttk
+    from Tkconstants import DISABLED, NORMAL
+
+    TKINTER_AVAILABLE = True
+except:
+    TKINTER_AVAILABLE = False
+
+from ast import literal_eval as make_tuple
+
+CHECK_KEYBOARD_SHOWN = False
+PROFILE = False
+
+DEBUG = False
+DEBUG_MOVE = DEBUG and False
+DEBUG_TOUCH = DEBUG and False
+DEBUG_POINT = DEBUG and False
+DEBUG_KEY = DEBUG and False
+DEBUG_ISCCOF = DEBUG and False
+DEBUG_FIND_VIEW = DEBUG and False
+DEBUG_CONTEXT_MENU = DEBUG and False
+DEBUG_CONCERTINA = DEBUG and False
+DEBUG_UI_AUTOMATOR_HELPER = DEBUG and False
+
+
+class Color:
+    GOLD = '#d19615'
+    GREEN = '#15d137'
+    BLUE = '#1551d1'
+    MAGENTA = '#d115af'
+    DARK_GRAY = '#222222'
+    LIGHT_GRAY = '#dddddd'
+
+
+class Unit:
+    PX = 'PX'
+    DIP = 'DIP'
+
+
+class Operation:
+    ASSIGN = 'assign'
+    CHANGE_LANGUAGE = 'change_language'
+    DEFAULT = 'default'
+    DRAG = 'drag'
+    DUMP = 'dump'
+    FLING_BACKWARD = 'fling_backward'
+    FLING_FORWARD = 'fling_forward'
+    FLING_TO_BEGINNING = 'fling_to_beginning'
+    FLING_TO_END = 'fling_to_end'
+    TEST = 'test'
+    TEST_TEXT = 'test_text'
+    TOUCH_VIEW = 'touch_view'
+    TOUCH_VIEW_UI_AUTOMATOR_HELPER = 'touch_view_ui_automator_helper'
+    TOUCH_POINT = 'touch_point'
+    LONG_TOUCH_POINT = 'long_touch_point'
+    LONG_TOUCH_VIEW = 'long_touch_view'
+    LONG_TOUCH_VIEW_UI_AUTOMATOR_HELPER = 'long_touch_view_ui_automator_helper'
+    OPEN_NOTIFICATION = 'open_notification'
+    OPEN_QUICK_SETTINGS = 'open_quick_settings'
+    TYPE = 'type'
+    PRESS = 'press'
+    PRESS_BACK = 'press_back'
+    PRESS_BACK_UI_AUTOMATOR_HELPER = 'press_back_ui_automator_helper'
+    PRESS_HOME = 'press_home'
+    PRESS_HOME_UI_AUTOMATOR_HELPER = 'press_home_ui_automator_helper'
+    PRESS_RECENT_APPS = 'press_recent_apps'
+    PRESS_RECENT_APPS_UI_AUTOMATOR_HELPER = 'press_recent_apps_ui_automator_helper'
+    SET_TEXT = 'set_text'
+    SNAPSHOT = 'snapshot'
+    START_ACTIVITY = 'start_activity'
+    SLEEP = 'sleep'
+    SWIPE_UI_AUTOMATOR_HELPER = 'swipe_ui_automator_helper'
+    TRAVERSE = 'traverse'
+    VIEW_SNAPSHOT = 'view_snapshot'
+    WAKE = 'wake'
+
+    COMMAND_NAME_OPERATION_MAP = {'flingBackward': FLING_BACKWARD, 'flingForward': FLING_FORWARD,
+                                  'flingToBeginning': FLING_TO_BEGINNING, 'flingToEnd': FLING_TO_END,
+                                  'openNotification': OPEN_NOTIFICATION, 'openQuickSettings': OPEN_QUICK_SETTINGS,
+                                  }
+
+    @staticmethod
+    def fromCommandName(commandName):
+        return Operation.COMMAND_NAME_OPERATION_MAP[commandName]
+
+    @staticmethod
+    def toCommandName(operation):
+        return next((cmd for cmd, op in Operation.COMMAND_NAME_OPERATION_MAP.items() if op == operation), None)
+
+
+class Culebron:
+    APPLICATION_NAME = "Culebra"
+
+    UPPERCASE_CHARS = string.uppercase[:26]
+
+    KEYSYM_TO_KEYCODE_MAP = {
+        'Home': 'HOME',
+        'BackSpace': 'BACK',
+        'Left': 'DPAD_LEFT',
+        'Right': 'DPAD_RIGHT',
+        'Up': 'DPAD_UP',
+        'Down': 'DPAD_DOWN',
+    }
+
+    KEYSYM_CULEBRON_COMMANDS = {
+        'F1': None,
+        'F5': None
+    }
+
+    canvas = None
+    imageId = None
+    vignetteId = None
+    areTargetsMarked = False
+    isDragDialogShowed = False
+    isGrabbingTouch = False
+    isGeneratingTestCondition = False
+    isTouchingPoint = False
+    isLongTouchingPoint = False
+    isLongTouchingView = False
+    onTouchListener = None
+    snapshotDir = '/tmp'
+    snapshotFormat = 'PNG'
+    deviceArt = None
+    dropShadow = False
+    screenGlare = False
+    osName = platform.system()
+    ''' The OS name. We sometimes need specific behavior. '''
+    isDarwin = (osName == 'Darwin')
+    ''' Is it Mac OSX? '''
+
+    @staticmethod
+    def checkSupportedSdkVersion(sdkVersion):
+        if sdkVersion <= 10:
+            raise Exception('''culebra GUI requires Android API > 10 to work''')
+
+    @staticmethod
+    def checkDependencies():
+        if not PIL_AVAILABLE:
+            raise Exception('''PIL or Pillow is needed for GUI mode
+
+On Ubuntu install
+
+   $ sudo apt-get install python-imaging python-imaging-tk
+
+On OSX install
+
+   $ brew install homebrew/python/pillow
+
+or, preferred since El Capitan
+
+   $ sudo easy_install pip
+   $ sudo pip install pillow
+
+''')
+        if not TKINTER_AVAILABLE:
+            raise Exception('''Tkinter is needed for GUI mode
+
+This is usually installed by python package. Check your distribution details.
+''')
+
+    def __init__(self, vc, device, serialno, printOperation, scale=1, concertina=False):
+        '''
+        Culebron constructor.
+        
+        @param vc: The ViewClient used by this Culebron instance. Can be C{None} if no back-end is used.
+        @type vc: ViewClient
+        @param device: The device
+        @type device: L{AdbClient}
+        @param serialno: The device's serial number
+        @type serialno: str
+        @param printOperation: the method invoked to print operations to the script
+        @type printOperation: method
+        @param scale: the scale of the device screen used to show it on the window
+        @type scale: float
+        @:param concertina: bool
+        @:type concertina: enable concertina mode (see documentation)
+        '''
+
+        self.vc = vc
+        self.printOperation = printOperation
+        self.device = device
+        self.sdkVersion = device.getSdkVersion()
+        self.serialno = serialno
+        self.scale = scale
+        self.concertina = concertina
+        self.window = Tkinter.Tk()
+        try:
+            f = resource_filename(Requirement.parse("androidviewclient"),
+                                 "share/pixmaps/culebra.png")
+            icon = ImageTk.PhotoImage(file=f)
+        except:
+            icon = None
+        if icon:
+            self.window.tk.call('wm', 'iconphoto', self.window._w, icon)
+        self.mainMenu = MainMenu(self)
+        self.window.config(menu=self.mainMenu)
+        self.mainFrame = Tkinter.Frame(self.window)
+        self.placeholder = Tkinter.Frame(self.mainFrame, width=400, height=400, background=Color.LIGHT_GRAY)
+        self.placeholder.grid(row=1, column=1, rowspan=4)
+        self.sideFrame = Tkinter.Frame(self.window)
+        self.viewTree = ViewTree(self.sideFrame)
+        self.viewDetails = ViewDetails(self.sideFrame)
+        self.mainFrame.grid(row=1, column=1, columnspan=1, rowspan=4, sticky=Tkinter.N + Tkinter.S)
+        self.isSideFrameShown = False
+        self.isViewTreeShown = False
+        self.isViewDetailsShown = False
+        self.statusBar = StatusBar(self.window)
+        self.statusBar.grid(row=5, column=1, columnspan=2)
+        self.statusBar.set("Always press F1 for help")
+        self.window.update_idletasks()
+        self.markedTargetIds = {}
+        self.isTouchingPoint = self.vc is None
+        self.coordinatesUnit = Unit.DIP
+        self.isLongTouchingPoint = False
+        self.isLongTouchingView = False
+        self.permanentlyDisableEvents = False
+        self.unscaledScreenshot = None
+        self.image = None
+        self.screenshot = None
+        if DEBUG:
+            try:
+                self.printGridInfo()
+            except:
+                pass
+
+    def printGridInfo(self):
+        print >> sys.stderr, "window:", repr(self.window)
+        print >> sys.stderr, "main:", repr(self.mainFrame)
+        print >> sys.stderr, "main:", self.mainFrame.grid_info()
+        print >> sys.stderr, "side:", repr(self.sideFrame)
+        print >> sys.stderr, "side:", self.sideFrame.grid_info()
+        print >> sys.stderr, "tree:", repr(self.viewTree)
+        print >> sys.stderr, "tree:", self.viewTree.grid_info()
+        print >> sys.stderr, "details:", repr(self.viewDetails)
+        print >> sys.stderr, "details:", self.viewDetails.grid_info()
+
+    def takeScreenshotAndShowItOnWindow(self):
+        '''
+        Takes the current screenshot and shows it on the main window.
+        It also:
+         - sizes the window
+         - create the canvas
+         - set the focus
+         - enable the events
+         - create widgets
+         - finds the targets (as explained in L{findTargets})
+         - hides the vignette (that could have been showed before)
+        '''
+
+        if PROFILE:
+            print >> sys.stderr, "PROFILING: takeScreenshotAndShowItOnWindow()"
+            profileStart()
+
+        if DEBUG:
+            print >> sys.stderr, "takeScreenshotAndShowItOnWindow()"
+        if self.vc and self.vc.uiAutomatorHelper:
+            received = self.vc.uiAutomatorHelper.takeScreenshot()
+            stream = StringIO.StringIO(received)
+            self.unscaledScreenshot = Image.open(stream)
+        else:
+            self.unscaledScreenshot = self.device.takeSnapshot(reconnect=True)
+        self.image = self.unscaledScreenshot
+        (width, height) = self.image.size
+        if self.scale != 1:
+            scaledWidth = int(width * self.scale)
+            scaledHeight = int(height * self.scale)
+            self.image = self.image.resize((scaledWidth, scaledHeight), PIL.Image.ANTIALIAS)
+            (width, height) = self.image.size
+            if self.isDarwin and 14 < self.sdkVersion < 23:
+                stream = StringIO.StringIO()
+                self.image.save(stream, 'GIF')
+                import base64
+                gif = base64.b64encode(stream.getvalue())
+                stream.close()
+        if self.canvas is None:
+            if DEBUG:
+                print >> sys.stderr, "Creating canvas", width, 'x', height
+            self.placeholder.grid_forget()
+            self.canvas = Tkinter.Canvas(self.mainFrame, width=width, height=height)
+            self.canvas.focus_set()
+            self.enableEvents()
+            self.createMessageArea(width, height)
+            self.createVignette(width, height)
+        if self.isDarwin and self.scale != 1 and 14 < self.sdkVersion < 23:
+            # Extremely weird Tkinter bug, I guess
+            # If the image was rotated and then resized if ImageTk.PhotoImage(self.image)
+            # is used as usual then the result is a completely transparent image and only
+            # the "Please wait..." is seen.
+            # Converting it to GIF seems to solve the problem
+            self.screenshot = Tkinter.PhotoImage(data=gif)
+        else:
+            self.screenshot = ImageTk.PhotoImage(self.image)
+        if self.imageId is not None:
+            self.canvas.delete(self.imageId)
+        self.imageId = self.canvas.create_image(0, 0, anchor=Tkinter.NW, image=self.screenshot)
+        if DEBUG:
+            try:
+                print >> sys.stderr, "Grid info", self.canvas.grid_info()
+            except:
+                print >> sys.stderr, "Exception getting grid info"
+        gridInfo = None
+        try:
+            gridInfo = self.canvas.grid_info()
+        except:
+            if DEBUG:
+                print >> sys.stderr, "Adding canvas to grid (1,1)"
+            self.canvas.grid(row=1, column=1, rowspan=4)
+        if not gridInfo:
+            self.canvas.grid(row=1, column=1, rowspan=4)
+        self.findTargets()
+        self.hideVignette()
+        if DEBUG:
+            try:
+                self.printGridInfo()
+            except:
+                pass
+        if PROFILE:
+            profileEnd()
+
+    def createMessageArea(self, width, height):
+        self.__message = Tkinter.Label(self.window, text='', background=Color.GOLD, font=('Helvetica', 16),
+                                       anchor=Tkinter.W)
+        self.__message.configure(width=width)
+        self.__messageAreaId = self.canvas.create_window(0, 0, anchor=Tkinter.NW, window=self.__message)
+        self.canvas.itemconfig(self.__messageAreaId, state='hidden')
+        self.isMessageAreaVisible = False
+
+    def showMessageArea(self):
+        if self.__messageAreaId:
+            self.canvas.itemconfig(self.__messageAreaId, state='normal')
+            self.isMessageAreaVisible = True
+            self.canvas.update_idletasks()
+
+    def hideMessageArea(self):
+        if self.__messageAreaId and self.isMessageAreaVisible:
+            self.canvas.itemconfig(self.__messageAreaId, state='hidden')
+            self.isMessageAreaVisible = False
+            self.canvas.update_idletasks()
+
+    def toggleMessageArea(self):
+        if self.isMessageAreaVisible:
+            self.hideMessageArea()
+        else:
+            self.showMessageArea()
+
+    def message(self, text, background=None):
+        self.__message.config(text=text)
+        if background:
+            self.__message.config(background=background)
+        self.showMessageArea()
+
+    def toast(self, text, background=None, timeout=5):
+        if DEBUG:
+            print >> sys.stderr, "toast(", text, ",", background, ")"
+        self.message(text, background)
+        if text:
+            t = threading.Timer(timeout, self.hideMessageArea)
+            t.start()
+        else:
+            self.hideMessageArea()
+
+    def createVignette(self, width, height):
+        if DEBUG:
+            print >> sys.stderr, "createVignette(%d, %d)" % (width, height)
+        self.vignetteId = self.canvas.create_rectangle(0, 0, width, height, fill=Color.MAGENTA,
+                                                       stipple='gray50')
+        font = tkFont.Font(family='Helvetica', size=int(144 * self.scale))
+        msg = "Please\nwait..."
+        self.waitMessageShadowId = self.canvas.create_text(width / 2 + 2, height / 2 + 2, text=msg,
+                                                           fill=Color.DARK_GRAY, font=font)
+        self.waitMessageId = self.canvas.create_text(width / 2, height / 2, text=msg,
+                                                     fill=Color.LIGHT_GRAY, font=font)
+        self.canvas.update_idletasks()
+
+    def showVignette(self):
+        if DEBUG:
+            print >> sys.stderr, "showVignette()"
+        if self.canvas is None:
+            return
+        if self.vignetteId:
+            if DEBUG:
+                print >> sys.stderr, "    showing vignette"
+            # disable events while we are processing one
+            self.disableEvents()
+            self.canvas.lift(self.vignetteId)
+            self.canvas.lift(self.waitMessageShadowId)
+            self.canvas.lift(self.waitMessageId)
+            self.canvas.update_idletasks()
+
+    def hideVignette(self):
+        if DEBUG:
+            print >> sys.stderr, "hideVignette()"
+        if self.canvas is None:
+            return
+        if self.vignetteId:
+            if DEBUG:
+                print >> sys.stderr, "    hiding vignette"
+            self.canvas.lift(self.imageId)
+            self.canvas.update_idletasks()
+            self.enableEvents()
+
+    def deleteVignette(self):
+        if self.canvas is not None:
+            self.canvas.delete(self.vignetteId)
+            self.vignetteId = None
+            self.canvas.delete(self.waitMessageShadowId)
+            self.waitMessageShadowId = None
+            self.canvas.delete(self.waitMessageId)
+            self.waitMessageId = None
+
+    def showPopupMenu(self, event):
+        (scaledX, scaledY) = (event.x / self.scale, event.y / self.scale)
+        v = self.findViewContainingPointInTargets(scaledX, scaledY)
+        ContextMenu(self, view=v).showPopupMenu(event)
+
+    def showHelp(self):
+        d = HelpDialog(self)
+        self.window.wait_window(d)
+
+    def showSideFrame(self):
+        if not self.isSideFrameShown:
+            self.sideFrame.grid(row=1, column=2, rowspan=4, sticky=Tkinter.N + Tkinter.S)
+            self.isSideFrameSown = True
+        if DEBUG:
+            self.printGridInfo()
+
+    def hideSideFrame(self):
+        self.sideFrame.grid_forget()
+        self.isSideFrameShown = False
+        if DEBUG:
+            self.printGridInfo()
+
+    def showViewTree(self):
+        self.showSideFrame()
+        self.viewTree.grid(row=1, column=1, rowspan=3, sticky=Tkinter.N + Tkinter.S)
+        self.isViewTreeShown = True
+        if DEBUG:
+            self.printGridInfo()
+
+    def hideViewTree(self):
+        self.unmarkTargets()
+        self.viewTree.grid_forget()
+        self.isViewTreeShown = False
+        if not self.isViewDetailsShown:
+            self.hideSideFrame()
+        if DEBUG:
+            self.printGridInfo()
+
+    def showViewDetails(self):
+        self.showSideFrame()
+        row = 4
+        # if self.viewTree.grid_info() != {}:
+        #    row += 1
+        self.viewDetails.grid(row=row, column=1, rowspan=1, sticky=Tkinter.S)
+        self.isViewDetailsShown = True
+        if DEBUG:
+            self.printGridInfo()
+
+    def hideViewDetails(self):
+        self.viewDetails.grid_forget()
+        self.isViewDetailsShown = False
+        if not self.isViewTreeShown:
+            self.hideSideFrame()
+        if DEBUG:
+            self.printGridInfo()
+
+    def viewTreeItemClicked(self, event):
+        if DEBUG:
+            print >> sys.stderr, "viewTreeitemClicked:", event.__dict__
+        self.unmarkTargets()
+        vuid = self.viewTree.viewTree.identify_row(event.y)
+        if vuid:
+            view = self.vc.viewsById[vuid]
+            if view:
+                coords = view.getCoords()
+                if view.isTarget():
+                    self.markTarget(coords[0][0], coords[0][1], coords[1][0], coords[1][1])
+                self.viewDetails.set(view)
+
+    def populateViewTree(self, view):
+        '''
+        Populates the View tree.
+        '''
+
+        vuid = view.getUniqueId()
+        text = view.__smallStr__()
+        if view.getParent() is None:
+            self.viewTree.insert('', Tkinter.END, vuid, text=text)
+        else:
+            self.viewTree.insert(view.getParent().getUniqueId(), Tkinter.END, vuid, text=text, tags=('ttk'))
+            self.viewTree.set(vuid, 'T', '*' if view.isTarget() else ' ')
+            self.viewTree.tag_bind('ttk', '<1>', self.viewTreeItemClicked)
+
+    def findTargets(self):
+        '''
+        Finds the target Views (i.e. for touches).
+        '''
+
+        if DEBUG:
+            print >> sys.stderr, "findTargets()"
+        LISTVIEW_CLASS = 'android.widget.ListView'
+        ''' The ListView class name '''
+        self.targets = []
+        ''' The list of target coordinates (x1, y1, x2, y2) '''
+        self.targetViews = []
+        ''' The list of target Views '''
+        if CHECK_KEYBOARD_SHOWN:
+            if self.device.isKeyboardShown():
+                print >> sys.stderr, "#### keyboard is show but handling it is not implemented yet ####"
+                # FIXME: still no windows in uiautomator
+                window = -1
+            else:
+                window = -1
+        else:
+            window = -1
+        if self.vc:
+            dump = self.vc.dump(window=window, sleep=0.1)
+            self.printOperation(None, Operation.DUMP, window, dump)
+        else:
+            dump = []
+        # the root element cannot be deleted from Treeview once added.
+        # We have no option but to recreate it
+        self.viewTree = ViewTree(self.sideFrame)
+        for v in dump:
+            if DEBUG:
+                print >> sys.stderr, "    findTargets: analyzing", v.getClass(), v.getId()
+            if v.getClass() == LISTVIEW_CLASS:
+                # We may want to touch ListView elements, not just the ListView
+                continue
+            parent = v.getParent()
+            if (parent and parent.getClass() == LISTVIEW_CLASS and self.isClickableCheckableOrFocusable(parent)) \
+                    or self.isClickableCheckableOrFocusable(v):
+                # If this is a touchable ListView, let's add its children instead
+                # or add it if it's touchable, focusable, whatever
+                ((x1, y1), (x2, y2)) = v.getCoords()
+                if DEBUG:
+                    print >> sys.stderr, "appending target", ((x1, y1, x2, y2))
+                v.setTarget(True)
+                self.targets.append((x1, y1, x2, y2))
+                self.targetViews.append(v)
+                target = True
+            else:
+                target = False
+
+        if self.vc:
+            self.vc.traverse(transform=self.populateViewTree)
+
+    def getViewContainingPointAndGenerateTestCondition(self, x, y):
+        if DEBUG:
+            print >> sys.stderr, 'getViewContainingPointAndGenerateTestCondition(%d, %d)' % (x, y)
+        self.finishGeneratingTestCondition()
+        vlist = self.vc.findViewsContainingPoint((x, y))
+        vlist.reverse()
+        for v in vlist:
+            text = v.getText()
+            if text:
+                self.toast(u'Asserting view with text=%s' % text, timeout=5)
+                # FIXME: only getText() is invoked by the generated assert(), a parameter
+                # should be used to provide different alternatives to printOperation()
+                self.printOperation(v, Operation.TEST, text)
+                break
+
+    def findViewContainingPointInTargets(self, x, y):
+        if self.vc:
+            vlist = self.vc.findViewsContainingPoint((x, y))
+            if DEBUG_FIND_VIEW:
+                print >> sys.stderr, "Views found:"
+                for v in vlist:
+                    print >> sys.stderr, "   ", v.__smallStr__()
+            vlist.reverse()
+            for v in vlist:
+                if DEBUG:
+                    print >> sys.stderr, "checking if", v, "is in", self.targetViews
+                if v in self.targetViews:
+                    if DEBUG_TOUCH:
+                        print >> sys.stderr
+                        print >> sys.stderr, "I guess you are trying to touch:", v
+                        print >> sys.stderr
+                    return v
+
+        return None
+
+    def getViewContainingPointAndTouch(self, x, y):
+        if DEBUG:
+            print >> sys.stderr, 'getViewContainingPointAndTouch(%d, %d)' % (x, y)
+        if self.areEventsDisabled:
+            if DEBUG:
+                print >> sys.stderr, "Ignoring event"
+            self.canvas.update_idletasks()
+            return
+
+        self.showVignette()
+        if DEBUG_POINT:
+            print >> sys.stderr, "getViewsContainingPointAndTouch(x=%s, y=%s)" % (x, y)
+            print >> sys.stderr, "self.vc=", self.vc
+        v = self.findViewContainingPointInTargets(x, y)
+
+        if v is None:
+            self.hideVignette()
+            msg = "There are no explicitly touchable or clickable views here!  Touching with [x,y]"
+            self.toast(msg)
+            # A partial hack which temporarily toggles touch point
+            self.toggleTouchPoint()
+            self.touchPoint(x, y)
+            self.toggleTouchPoint()
+        else:
+            if self.vc.uiAutomatorHelper:
+                # These operations are only available through uiAutomatorHelper
+                if v == self.vc.navBack:
+                    self.pressBack()
+                    return
+                elif v == self.vc.navHome:
+                    self.pressHome()
+                    return
+                elif v == self.vc.navRecentApps:
+                    self.pressRecentApps()
+                    return
+
+            clazz = v.getClass()
+            if clazz == 'android.widget.EditText':
+                title = "EditText"
+                kwargs = {}
+                if DEBUG:
+                    print >> sys.stderr, v
+                if v.isPassword():
+                    title = "Password"
+                    kwargs = {'show': '*'}
+                text = tkSimpleDialog.askstring(title, "Enter text to type into this field", **kwargs)
+                self.canvas.focus_set()
+                if text:
+                    self.vc.setText(v, text)
+                    self.printOperation(v, Operation.SET_TEXT, text)
+                else:
+                    self.hideVignette()
+                    return
+            else:
+                candidates = [v]
+
+                def findBestCandidate(view):
+                    isccf = Culebron.isClickableCheckableOrFocusable(view)
+                    cd = view.getContentDescription()
+                    text = view.getText()
+                    if (cd or text) and not isccf:
+                        # because isccf==False this view was not added to the list of targets
+                        # (i.e. Settings)
+                        candidates.insert(0, view)
+                    return None
+
+                if not (v.getText() or v.getContentDescription()) and v.getChildren():
+                    self.vc.traverse(root=v, transform=findBestCandidate, stream=None)
+                if len(candidates) > 2:
+                    warnings.warn("We are in trouble, we have more than one candidate to touch", stacklevel=0)
+                candidate = candidates[0]
+                self.touchView(candidate, v if candidate != v else None)
+
+        self.printOperation(None, Operation.SLEEP, Operation.DEFAULT)
+        self.vc.sleep(5)
+        self.takeScreenshotAndShowItOnWindow()
+
+    def pressBack(self):
+        self.showVignette()
+        self.vc.pressBack()
+        if self.vc.uiAutomatorHelper:
+            self.printOperation(None, Operation.PRESS_BACK_UI_AUTOMATOR_HELPER)
+        else:
+            self.printOperation(None, Operation.PRESS_BACK)
+        self.takeScreenshotAndShowItOnWindow()
+
+    def pressHome(self):
+        self.showVignette()
+        self.vc.pressHome()
+        if self.vc.uiAutomatorHelper:
+            self.printOperation(None, Operation.PRESS_HOME_UI_AUTOMATOR_HELPER)
+        else:
+            self.printOperation(None, Operation.PRESS_HOME)
+        self.takeScreenshotAndShowItOnWindow()
+
+    def pressRecentApps(self):
+        self.showVignette()
+        self.vc.pressRecentApps()
+        if self.vc.uiAutomatorHelper:
+            self.printOperation(None, Operation.PRESS_RECENT_APPS_UI_AUTOMATOR_HELPER)
+        else:
+            self.printOperation(None, Operation.PRESS_RECENT_APPS)
+        self.vc.sleep(1)
+        self.takeScreenshotAndShowItOnWindow()
+
+    def setText(self, v, text):
+        if DEBUG:
+            print >> sys.stderr, "setText(%s, '%s')" % (v.__tinyStr__(), text)
+        # This is deleting the existing text, which should be asked in the dialog, but I would have to implement
+        # the dialog myself
+        v.setText(text)
+        # This is not deleting the text, so appending if there's something
+        # v.type(text)
+        self.printOperation(v, Operation.TYPE, text)
+
+    def touchView(self, v, root=None):
+        v.touch()
+        if v.uiAutomatorHelper:
+            self.printOperation(v, Operation.TOUCH_VIEW_UI_AUTOMATOR_HELPER, v.obtainSelectorForView())
+        else:
+            # we pass root=v as an argument so the corresponding findView*() searches in this
+            # subtree instead of the full tree
+            self.printOperation(v, Operation.TOUCH_VIEW, root)
+
+    def touchPoint(self, x, y):
+        '''
+        Touches a point in the device screen.
+        The generated operation will use the units specified in L{coordinatesUnit} and the
+        orientation in L{vc.display['orientation']}.
+        '''
+
+        if DEBUG:
+            print >> sys.stderr, 'touchPoint(%d, %d)' % (x, y)
+            print >> sys.stderr, 'touchPoint:', type(x), type(y)
+        if self.areEventsDisabled:
+            if DEBUG:
+                print >> sys.stderr, "Ignoring event"
+            self.canvas.update_idletasks()
+            return
+        if DEBUG:
+            print >> sys.stderr, "Is touching point:", self.isTouchingPoint
+        if self.isTouchingPoint:
+            self.showVignette()
+            self.vc.touch(x, y)
+            if self.coordinatesUnit == Unit.DIP:
+                x = round(x / self.device.display['density'], 2)
+                y = round(y / self.device.display['density'], 2)
+            self.printOperation(None, Operation.TOUCH_POINT, x, y, self.coordinatesUnit,
+                                self.device.display['orientation'])
+            self.printOperation(None, Operation.SLEEP, Operation.DEFAULT)
+            # FIXME: can we reduce this sleep? (was 5)
+            time.sleep(1)
+            self.isTouchingPoint = self.vc is None
+            self.takeScreenshotAndShowItOnWindow()
+            # self.hideVignette()
+            self.statusBar.clear()
+            return
+
+    def longTouchPoint(self, x, y):
+        '''
+        Long-touches a point in the device screen.
+        The generated operation will use the units specified in L{coordinatesUnit} and the
+        orientation in L{vc.display['orientation']}.
+        '''
+
+        if DEBUG:
+            print >> sys.stderr, 'longTouchPoint(%d, %d)' % (x, y)
+        if self.areEventsDisabled:
+            if DEBUG:
+                print >> sys.stderr, "Ignoring event"
+            self.canvas.update_idletasks()
+            return
+        if DEBUG:
+            print >> sys.stderr, "Is long touching point:", self.isLongTouchingPoint
+        if self.isLongTouchingPoint:
+            self.showVignette()
+            self.vc.longTouch(x, y)
+            if self.coordinatesUnit == Unit.DIP:
+                x = round(x / self.device.display['density'], 2)
+                y = round(y / self.device.display['density'], 2)
+            self.printOperation(None, Operation.LONG_TOUCH_POINT, x, y, 2000, self.coordinatesUnit,
+                                self.device.display['orientation'])
+            self.printOperation(None, Operation.SLEEP, 5)
+            time.sleep(5)
+            self.isLongTouchingPoint = False
+            self.takeScreenshotAndShowItOnWindow()
+            # self.hideVignette()
+            self.statusBar.clear()
+            return
+
+    def longTouchView(self, v, root=None):
+        v.longTouch()
+        if v.uiAutomatorHelper:
+            self.printOperation(v, Operation.LONG_TOUCH_VIEW_UI_AUTOMATOR_HELPER, v.obtainSelectorForView())
+        else:
+            # we pass root=v as an argument so the corresponding findView*() searches in this
+            # subtree instead of the full tree
+            self.printOperation(v, Operation.LONG_TOUCH_VIEW, root)
+        self.isLongTouchingView = False
+
+    def onButton1Pressed(self, event):
+        if DEBUG:
+            print >> sys.stderr, "onButton1Pressed((", event.x, ", ", event.y, "))"
+        (scaledX, scaledY) = (event.x / self.scale, event.y / self.scale)
+        if DEBUG:
+            print >> sys.stderr, "    onButton1Pressed: scaled: (", scaledX, ", ", scaledY, ")"
+            print >> sys.stderr, "    onButton1Pressed: is grabbing:", self.isGrabbingTouch
+
+        if self.isGrabbingTouch:
+            self.onTouchListener((scaledX, scaledY))
+            self.isGrabbingTouch = False
+        elif self.isDragDialogShowed:
+            self.toast("No touch events allowed while setting drag parameters", background=Color.GOLD)
+            return
+        elif self.isTouchingPoint:
+            self.touchPoint(scaledX, scaledY)
+        elif self.isLongTouchingPoint:
+            self.longTouchPoint(scaledX, scaledY)
+        elif self.isLongTouchingView:
+            self.getViewContainingPointAndLongTouch(scaledX, scaledY)
+        elif self.isGeneratingTestCondition:
+            self.getViewContainingPointAndGenerateTestCondition(scaledX, scaledY)
+        else:
+            if self.vc:
+                self.getViewContainingPointAndTouch(scaledX, scaledY)
+            else:
+                # If we don't have Views, there no other option than touching points
+                self.touchPoint(scaledX, scaledY)
+
+    def onCtrlButton1Pressed(self, event):
+        if DEBUG:
+            print >> sys.stderr, "onCtrlButton1Pressed((", event.x, ", ", event.y, "))"
+        (scaledX, scaledY) = (event.x / self.scale, event.y / self.scale)
+        l = self.vc.findViewsContainingPoint((scaledX, scaledY))
+        if l and len(l) > 0:
+            self.saveViewSnapshot(l[-1])
+        else:
+            msg = "There are no views here!"
+            self.toast(msg)
+            return
+
+    def onButton2Pressed(self, event):
+        if DEBUG:
+            print >> sys.stderr, "onButton2Pressed((", event.x, ", ", event.y, "))"
+        osName = platform.system()
+        if osName == 'Darwin':
+            self.showPopupMenu(event)
+
+    def onButton3Pressed(self, event):
+        if DEBUG:
+            print >> sys.stderr, "onButton3Pressed((", event.x, ", ", event.y, "))"
+        self.showPopupMenu(event)
+
+    def command(self, keycode):
+        '''
+        Presses a key.
+        Generates the actual key press on the device and prints the line in the script.
+        '''
+
+        self.device.press(keycode)
+        self.printOperation(None, Operation.PRESS, keycode)
+
+    def onKeyPressed(self, event):
+        if DEBUG_KEY:
+            print >> sys.stderr, "onKeyPressed(", repr(event), ")"
+            print >> sys.stderr, "    event", type(event.char), len(event.char), repr(
+                event.char), event.keysym, event.keycode, event.type
+            print >> sys.stderr, "    events disabled:", self.areEventsDisabled
+        if self.areEventsDisabled:
+            if DEBUG_KEY:
+                print >> sys.stderr, "ignoring event"
+            self.canvas.update_idletasks()
+            return
+
+        char = event.char
+        keysym = event.keysym
+
+        if len(char) == 0 and not (
+                        keysym in Culebron.KEYSYM_TO_KEYCODE_MAP or keysym in Culebron.KEYSYM_CULEBRON_COMMANDS):
+            if DEBUG_KEY:
+                print >> sys.stderr, "returning because len(char) == 0"
+            return
+
+        ###
+        ### internal commands: no output to generated script
+        ###
+        try:
+            handler = getattr(self, 'onCtrl%s' % self.UPPERCASE_CHARS[ord(char) - 1])
+        except:
+            handler = None
+        if handler:
+            return handler(event)
+        elif keysym == 'F1':
+            self.showHelp()
+            return
+        elif keysym == 'F5':
+            self.refresh()
+            return
+        elif keysym == 'F8':
+            self.printGridInfo()
+            return
+        elif keysym == 'Alt_L':
+            return
+        elif keysym == 'Control_L':
+            return
+        elif keysym == 'Escape':
+            # we cannot send Escape to the device, but I think it's fine
+            self.cancelOperation()
+            return
+
+        ### empty char (modifier) ###
+        # here does not process events  like Home where char is ''
+        # if char == '':
+        #    return
+
+        ###
+        ### target actions
+        ###
+        self.showVignette()
+
+        if keysym in Culebron.KEYSYM_TO_KEYCODE_MAP:
+            if DEBUG_KEY:
+                print >> sys.stderr, "Pressing", Culebron.KEYSYM_TO_KEYCODE_MAP[keysym]
+            self.command(Culebron.KEYSYM_TO_KEYCODE_MAP[keysym])
+        elif char == '\r':
+            self.command('ENTER')
+        elif char == '':
+            # do nothing
+            pass
+        else:
+            self.command(char.decode('ascii', errors='replace'))
+        # commented out (profile)
+        # time.sleep(1)
+        self.takeScreenshotAndShowItOnWindow()
+
+    def wake(self):
+        self.refresh()
+        self.printOperation(None, Operation.WAKE)
+
+    def refresh(self):
+        self.showVignette()
+        self.device.wake()
+        display = copy.copy(self.device.display)
+        self.device.initDisplayProperties()
+        changed = False
+        for prop in display:
+            if display[prop] != self.device.display[prop]:
+                changed = True
+                break
+        if changed:
+            self.window.geometry('%dx%d' % (self.device.display['width'] * self.scale,
+                                            self.device.display['height'] * self.scale + int(
+                                                self.statusBar.winfo_height())))
+            self.deleteVignette()
+            self.canvas.destroy()
+            self.canvas = None
+            self.window.update_idletasks()
+        self.takeScreenshotAndShowItOnWindow()
+
+    def cancelOperation(self):
+        '''
+        Cancels the ongoing operation if any.
+        '''
+        if self.isLongTouchingPoint:
+            self.toggleLongTouchPoint()
+        elif self.isTouchingPoint:
+            self.toggleTouchPoint()
+        elif self.isGeneratingTestCondition:
+            self.toggleGenerateTestCondition()
+
+    def printStartActivityAtTop(self):
+        self.printOperation(None, Operation.START_ACTIVITY, self.device.getTopActivityName())
+
+    def onCtrlA(self, event):
+        if DEBUG:
+            print >> sys.stderr, "onCtrlA(", event, ")"
+        self.printStartActivityAtTop()
+
+    def showDragDialog(self):
+        d = DragDialog(self)
+        self.window.wait_window(d)
+        self.setDragDialogShowed(False)
+
+    def onCtrlD(self, event):
+        self.showDragDialog()
+
+    def onCtrlF(self, event):
+        self.saveSnapshot()
+
+    def saveSnapshot(self):
+        '''
+        Saves the current shanpshot to the specified file.
+        Current snapshot is the image being displayed on the main window.
+        '''
+
+        filename = self.snapshotDir + os.sep + '${serialno}-${focusedwindowname}-${timestamp}' + '.' + self.snapshotFormat.lower()
+        # We have the snapshot already taken, no need to retake
+        d = FileDialog(self, self.device.substituteDeviceTemplate(filename))
+        saveAsFilename = d.askSaveAsFilename()
+        if saveAsFilename:
+            _format = os.path.splitext(saveAsFilename)[1][1:].upper()
+            self.printOperation(None, Operation.SNAPSHOT, filename, _format, self.deviceArt, self.dropShadow,
+                                self.screenGlare)
+            # FIXME: we should add deviceArt, dropShadow and screenGlare to the saved image
+            # self.unscaledScreenshot.save(saveAsFilename, _format, self.deviceArt, self.dropShadow, self.screenGlare)
+            self.unscaledScreenshot.save(saveAsFilename, _format)
+
+    def saveViewSnapshot(self, view):
+        '''
+        Saves the View snapshot.
+        '''
+
+        if not view:
+            raise ValueError("view must be provided to take snapshot")
+        filename = self.snapshotDir + os.sep + '${serialno}-' + view.variableNameFromId() + '-${timestamp}' + '.' + self.snapshotFormat.lower()
+        d = FileDialog(self, self.device.substituteDeviceTemplate(filename))
+        saveAsFilename = d.askSaveAsFilename()
+        if saveAsFilename:
+            _format = os.path.splitext(saveAsFilename)[1][1:].upper()
+            self.printOperation(view, Operation.VIEW_SNAPSHOT, filename, _format)
+            view.writeImageToFile(saveAsFilename, _format)
+
+    def toggleTouchPointDip(self):
+        '''
+        Toggles the touch point operation using L{Unit.DIP}.
+        This invokes L{toggleTouchPoint}.
+        '''
+
+        self.coordinatesUnit = Unit.DIP
+        self.toggleTouchPoint()
+
+    def onCtrlI(self, event):
+        self.toggleTouchPointDip()
+
+    def toggleLongTouchPoint(self):
+        '''
+        Toggles the long touch point operation.
+        '''
+        if not self.isLongTouchingPoint:
+            msg = 'Long touching point'
+            self.toast(msg, background=Color.GREEN)
+            self.statusBar.set(msg)
+            self.isLongTouchingPoint = True
+            # FIXME: There should be 2 methods DIP & PX
+            self.coordinatesUnit = Unit.PX
+        else:
+            self.toast(None)
+            self.statusBar.clear()
+            self.isLongTouchingPoint = False
+
+    def toggleLongTouchView(self):
+        '''
+        Toggles the long touch View operation.
+        :return:
+        '''
+        if not self.isLongTouchingView:
+            msg = 'Long touching View'
+            self.toast(msg, background=Color.GREEN)
+            self.statusBar.set(msg)
+            self.isLongTouchingView = True
+        else:
+            self.toast(None)
+            self.statusBar.clear()
+            self.isLongTouchingView = False
+
+    def onCtrlL(self, event):
+        self.toggleLongTouchPoint()
+
+    def toggleTouchPoint(self):
+        '''
+        Toggles the touch point operation using the units specified in L{coordinatesUnit}.
+
+        When there are L{View}s (obtained from the back-end) we have to determine if the
+        intention when something is touched on the window if we want to touch the L{View}
+        or the point.
+
+        If there's no back-end, we don't allow L{self.isTouchingPoint} to be disabled so we will
+        never be attempting to touch L{View}s.
+        '''
+
+        if not self.isTouchingPoint:
+            msg = 'Touching point (units=%s)' % self.coordinatesUnit
+            self.toast(msg, background=Color.GREEN)
+            self.statusBar.set(msg)
+            self.isTouchingPoint = True
+        else:
+            self.toast(None)
+            self.statusBar.clear()
+            self.isTouchingPoint = self.vc is None
+
+    def toggleTouchPointPx(self):
+        self.coordinatesUnit = Unit.PX
+        self.toggleTouchPoint()
+
+    def onCtrlP(self, event):
+        self.toggleTouchPointPx()
+
+    def onCtrlQ(self, event):
+        if DEBUG:
+            print >> sys.stderr, "onCtrlQ(%s)" % event
+        self.quit()
+
+    def quit(self):
+        if self.vc.uiAutomatorHelper:
+            if DEBUG or True:
+                print >> sys.stderr, "Quitting UiAutomatorHelper..."
+            self.vc.uiAutomatorHelper.quit()
+        self.window.destroy()
+
+    def showSleepDialog(self):
+        seconds = tkSimpleDialog.askfloat('Sleep Interval', 'Value in seconds:', initialvalue=1, minvalue=0,
+                                          parent=self.window)
+        if seconds is not None:
+            self.printOperation(None, Operation.SLEEP, seconds)
+        self.canvas.focus_set()
+
+    def onCtrlS(self, event):
+        self.showSleepDialog()
+
+    def startGeneratingTestCondition(self):
+        self.message('Generating test condition...', background=Color.GREEN)
+        self.isGeneratingTestCondition = True
+
+    def finishGeneratingTestCondition(self):
+        self.isGeneratingTestCondition = False
+        self.hideMessageArea()
+
+    def toggleGenerateTestCondition(self):
+        '''
+        Toggles generating test condition
+        '''
+
+        if self.vc is None:
+            self.toast('Test conditions can be generated when a back-end is defined')
+            return
+        if self.isGeneratingTestCondition:
+            self.finishGeneratingTestCondition()
+        else:
+            self.startGeneratingTestCondition()
+
+    def onCtrlT(self, event):
+        if DEBUG:
+            print >> sys.stderr, "onCtrlT()"
+        if self.vc is None:
+            self.toast('Test conditions can be generated when a back-end is defined')
+            return
+        # FIXME: This is only valid if we are generating a test case
+        self.toggleGenerateTestCondition()
+
+    def onCtrlU(self, event):
+        if DEBUG:
+            print >> sys.stderr, "onCtrlU()"
+
+    def onCtrlV(self, event):
+        if DEBUG:
+            print >> sys.stderr, "onCtrlV()"
+        self.printOperation(None, Operation.TRAVERSE)
+
+    def toggleTargetZones(self):
+        self.toggleTargets()
+        self.canvas.update_idletasks()
+
+    def onCtrlZ(self, event):
+        if DEBUG:
+            print >> sys.stderr, "onCtrlZ()"
+        self.toggleTargetZones()
+
+    def showControlPanel(self):
+        from com.dtmilano.android.controlpanel import ControlPanel
+
+        self.controlPanel = ControlPanel(self, self.printOperation)
+
+    def onCtrlK(self, event):
+        self.showControlPanel()
+
+    def drag(self, start, end, duration, steps, units=Unit.DIP):
+        self.showVignette()
+        # the operation on this current device is always done in PX
+        # so let's do it before any conversion takes place
+        self.device.drag(start, end, duration, steps)
+        if units == Unit.DIP:
+            x0 = round(start[0] / self.device.display['density'], 2)
+            y0 = round(start[1] / self.device.display['density'], 2)
+            x1 = round(end[0] / self.device.display['density'], 2)
+            y1 = round(end[1] / self.device.display['density'], 2)
+            start = (x0, y0)
+            end = (x1, y1)
+        if self.vc.uiAutomatorHelper:
+            self.printOperation(None, Operation.SWIPE_UI_AUTOMATOR_HELPER, x0, y0, x1, y1, steps, units,
+                            self.device.display['orientation'])
+        else:
+            self.printOperation(None, Operation.DRAG, start, end, duration, steps, units,
+                            self.device.display['orientation'])
+        self.printOperation(None, Operation.SLEEP, 1)
+        time.sleep(1)
+        self.takeScreenshotAndShowItOnWindow()
+
+
+    def enableEvents(self):
+        if self.permanentlyDisableEvents:
+            return
+        self.canvas.update_idletasks()
+        self.canvas.bind("<Button-1>", self.onButton1Pressed)
+        self.canvas.bind("<Control-Button-1>", self.onCtrlButton1Pressed)
+        self.canvas.bind("<Button-2>", self.onButton2Pressed)
+        self.canvas.bind("<Button-3>", self.onButton3Pressed)
+        self.canvas.bind("<BackSpace>", self.onKeyPressed)
+        # self.canvas.bind("<Control-Key-S>", self.onCtrlS)
+        self.canvas.bind("<Key>", self.onKeyPressed)
+        self.areEventsDisabled = False
+
+
+    def disableEvents(self, permanently=False):
+        self.permanentlyDisableEvents = permanently
+        if self.canvas is not None:
+            self.canvas.update_idletasks()
+            self.areEventsDisabled = True
+            self.canvas.unbind("<Button-1>")
+            self.canvas.unbind("<Control-Button-1>")
+            self.canvas.unbind("<Button-2>")
+            self.canvas.unbind("<Button-3>")
+            self.canvas.unbind("<BackSpace>")
+            # self.canvas.unbind("<Control-Key-S>")
+            self.canvas.unbind("<Key>")
+
+
+    def toggleTargets(self):
+        if DEBUG:
+            print >> sys.stderr, "toggletargets: aretargetsmarked=", self.areTargetsMarked
+        if not self.areTargetsMarked:
+            self.markTargets()
+        else:
+            self.unmarkTargets()
+
+
+    def markTargets(self):
+        if DEBUG:
+            print >> sys.stderr, "marktargets: aretargetsmarked=", self.areTargetsMarked
+            print >> sys.stderr, "    marktargets: targets=", self.targets
+        colors = ["#ff00ff", "#ffff00", "#00ffff"]
+
+        self.markedTargetIds = {}
+        c = 0
+        for (x1, y1, x2, y2) in self.targets:
+            if DEBUG:
+                print "adding rectangle:", x1, y1, x2, y2
+            self.markTarget(x1, y1, x2, y2, colors[c % len(colors)])
+            c += 1
+        self.areTargetsMarked = True
+
+
+    def markTarget(self, x1, y1, x2, y2, color='#ff00ff'):
+        '''
+        @return the id of the rectangle added
+        '''
+
+        # self.areTargetsMarked = True
+        _id = self.canvas.create_rectangle(x1 * self.scale, y1 * self.scale, x2 * self.scale, y2 * self.scale,
+                                           fill=color,
+                                           stipple="gray25")
+        self.markedTargetIds[_id] = (x1, y1, x2, y2)
+        return _id
+
+
+    def unmarkTarget(self, _id):
+        self.canvas.delete(_id)
+
+
+    def unmarkTargets(self):
+        if not self.areTargetsMarked:
+            return
+        for _id in self.markedTargetIds:
+            self.unmarkTarget(_id)
+        self.markedTargetIds = {}
+        self.areTargetsMarked = False
+
+
+    def setDragDialogShowed(self, showed):
+        self.isDragDialogShowed = showed
+        if showed:
+            pass
+        else:
+            self.isGrabbingTouch = False
+
+
+    def drawTouchedPoint(self, x, y):
+        if DEBUG:
+            print >> sys.stderr, "drawTouchedPoint(", x, ",", y, ")"
+        size = 50
+        return self.canvas.create_oval((x - size) * self.scale, (y - size) * self.scale, (x + size) * self.scale,
+                                       (y + size) * self.scale, fill=Color.MAGENTA)
+
+
+    def drawDragLine(self, x0, y0, x1, y1):
+        if DEBUG:
+            print >> sys.stderr, "drawDragLine(", x0, ",", y0, ",", x1, ",", y1, ")"
+        width = 15
+        return self.canvas.create_line(x0 * self.scale, y0 * self.scale, x1 * self.scale, y1 * self.scale, width=width,
+                                       fill=Color.MAGENTA, arrow="last", arrowshape=(50, 50, 30), dash=(50, 25))
+
+
+    def executeCommandAndRefresh(self, command):
+        self.showVignette()
+        if DEBUG:
+            print >> sys.stderr, 'DEBUG: command=', command, command.__name__
+            print >> sys.stderr, 'DEBUG: command=', command.__self__, command.__self__.view
+        try:
+            view = command.__self__.view
+        except AttributeError:
+            view = None
+        # FIXME: If we are not dumping the Views and assigning to variables (i.e -u was used on command line) then
+        # when we try to do an operation on the View via its variable name it's going to fail when the saved script
+        # is executed
+        self.printOperation(view, Operation.fromCommandName(command.__name__))
+        command()
+        self.printOperation(None, Operation.SLEEP, Operation.DEFAULT)
+        self.vc.sleep(5)
+        # FIXME: perhaps refresh() should be invoked here just in case size or orientation changed
+        self.takeScreenshotAndShowItOnWindow()
+
+
+    def changeLanguage(self):
+        code = tkSimpleDialog.askstring("Change language", "Enter the language code")
+        self.vc.uiDevice.changeLanguage(code)
+        self.printOperation(None, Operation.CHANGE_LANGUAGE, code)
+        self.refresh()
+
+
+    def setOnTouchListener(self, listener):
+        self.onTouchListener = listener
+
+
+    def setGrab(self, state):
+        if DEBUG:
+            print >> sys.stderr, "Culebron.setGrab(%s)" % state
+        if state and not self.onTouchListener:
+            warnings.warn('Starting to grab but no onTouchListener')
+        self.isGrabbingTouch = state
+        if state:
+            self.toast('Grabbing drag points...', background=Color.GREEN)
+        else:
+            self.hideMessageArea()
+
+
+    @staticmethod
+    def isClickableCheckableOrFocusable(v):
+        if DEBUG_ISCCOF:
+            print >> sys.stderr, "isClickableCheckableOrFocusable(", v.__tinyStr__(), ")"
+        try:
+            if not v.isEnabled():
+                # if not enabled, then it cannot be a target
+                return False
+        except AttributeError:
+            pass
+        try:
+            return v.isClickable()
+        except AttributeError:
+            pass
+        try:
+            return v.isCheckable()
+        except AttributeError:
+            pass
+        try:
+            return v.isFocusable()
+        except AttributeError:
+            pass
+        return False
+
+
+    def mainloop(self):
+        self.window.title("%s v%s" % (Culebron.APPLICATION_NAME, __version__))
+        self.window.resizable(width=Tkinter.FALSE, height=Tkinter.FALSE)
+        self.window.lift()
+        if self.concertina:
+            self.concertinaLoop()
+        else:
+            self.window.mainloop()
+
+
+    def concertinaLoop(self):
+        random.seed()
+        self.disableEvents(permanently=True)
+        self.concertinaLoopCallback(dontinteract=True)
+        self.window.mainloop()
+
+
+    def concertinaLoopCallback(self, dontinteract=False):
+        if not dontinteract:
+            if DEBUG_CONCERTINA:
+                print >> sys.stderr, "CONCERTINA: should select one of these targets:"
+                for v in self.targetViews:
+                    print >> sys.stderr, "    ", unicode(v.__tinyStr__())
+            rand = random.random()
+            if DEBUG_CONCERTINA:
+                print >> sys.stderr, "CONCERTINA: random=%f" % rand
+            if rand > 0.85:
+                # Send key events
+                k = random.choice(['ENTER', 'BACK', 'HOME', 'MENU'])
+                if DEBUG_CONCERTINA:
+                    print >> sys.stderr, "CONCERTINA: key=" + k
+                # DEBUG ONLY!
+                # print >> sys.stderr, "Not sending key event"
+                self.command(k)
+            else:
+                # Act on views
+                _len = len(self.targetViews)
+                if _len > 0:
+                    i = random.randrange(len(self.targetViews))
+                    target = self.targetViews[i]
+                    z = self.targets[i]
+                    if DEBUG_CONCERTINA:
+                        print >> sys.stderr, "CONCERTINA: selected", unicode(target.__smallStr__())
+                        print >> sys.stderr, "CONCERTINA: selected", z
+                    _id = self.markTarget(*z)
+                    self.window.update_idletasks()
+                    time.sleep(1)
+                    self.unmarkTarget(_id)
+                    self.window.update_idletasks()
+                    clazz = target.getClass()
+                    parent = target.getParent()
+                    if parent:
+                        parentClass = parent.getClass()
+                    else:
+                        parentClass = None
+                    isScrollable = target.isScrollable()
+                    if DEBUG_CONCERTINA:
+                        print >> sys.stderr, "CONCERTINA: is scrollable: ", isScrollable
+                        if parent:
+                            print >> sys.stderr, "CONCERTINA: is scrollable parent: ", parent.isScrollable()
+                            # cond = (isScrollable or parent.isScrollable() or parentClass == 'android.widget.ScrollView')
+                            # DEBUG ONLY!
+                            # print >> sys.stderr, "CONCERTINA: check:", cond
+                            # if not cond:
+                            #     self.window.after(500, self.concertinaLoopCallback)
+                            #     return
+                    if clazz == 'android.widget.EditText':
+                        id = target.getId()
+                        txt = target.getText()
+                        if target.isPassword() or re.search('password', id, re.IGNORECASE) or re.search('password', txt,
+                                                                                                        re.IGNORECASE):
+                            text = Concertina.getRandomPassword()
+                        elif re.search('email', id, re.IGNORECASE) or re.search('email', txt, re.IGNORECASE):
+                            text = Concertina.getRandomEmail()
+                        else:
+                            text = Concertina.getRandomText()
+                        if DEBUG_CONCERTINA:
+                            print >> sys.stderr, "Entering text: ", text
+                        if not text:
+                            raise RuntimeError('text is None')
+                        self.setText(target, text)
+                    elif target.getContentDescription() in ['Voice Search', 'Tap to speak']:
+                        Concertina.sayRandomText()
+                        time.sleep(5)
+                    elif random.choice(['SCROLL', 'TOUCH']) == 'SCROLL' and (
+                                    isScrollable or parent.isScrollable() or parentClass == 'android.widget.ScrollView'):
+                        # NOTE: The order here is important because some EditText are inside ScrollView's and we want to
+                        # capture the case of other ScrollViews
+                        if isScrollable:
+                            ((l, t), (r, b)) = target.getBounds()
+                        else:
+                            if DEBUG_CONCERTINA:
+                                print >> sys.stderr, "CONCERTINA: using parent bounds because it's scrollable"
+                            ((l, t), (r, b)) = parent.getBounds()
+                        if DEBUG_CONCERTINA:
+                            print >> sys.stderr, "CONCERTINA: bounds=", ((l, t), (r, b))
+                        if random.choice(['VERTICAL', 'HORIZONTAL']) == 'VERTICAL':
+                            if DEBUG_CONCERTINA:
+                                print >> sys.stderr, 'CONCERTINA: VERTICAL'
+                            sp = (l + (r - l) / 2, t + 50)
+                            ep = (l + (r - l) / 2, b - 50)
+                        else:
+                            if DEBUG_CONCERTINA:
+                                print >> sys.stderr, 'CONCERTINA: HORIZONTAL'
+                            sp = (l + 50, t + (b - t) / 2)
+                            ep = (r - 50, t + (b - t) / 2)
+                        if random.choice(['FORWARD', 'REVERSE']) == 'REVERSE':
+                            if DEBUG_CONCERTINA:
+                                print >> sys.stderr, 'CONCERTINA: REVERSE'
+                            temp = sp
+                            sp = ep
+                            ep = temp
+                        else:
+                            if DEBUG_CONCERTINA:
+                                print >> sys.stderr, 'CONCERTINA: FORWARD'
+                        d = 500
+                        s = 20
+                        _id = self.canvas.create_rectangle(l * self.scale, t * self.scale, r * self.scale,
+                                                           b * self.scale,
+                                                           fill="#00ffff", stipple="gray12")
+                        self.window.update_idletasks()
+                        units = Unit.PX
+                        self.drawTouchedPoint(sp[0], sp[1])
+                        self.window.update_idletasks()
+                        self.drawDragLine(sp[0], sp[1], ep[0], ep[1])
+                        self.window.update_idletasks()
+                        time.sleep(5)
+                        if DEBUG_CONCERTINA:
+                            print >> sys.stderr, "CONCERTINA: dragging %s %s %s %s %s" % (sp, ep, d, s, units)
+                        self.drag(sp, ep, d, s, units)
+                    else:
+                        self.touchView(target)
+                    self.printOperation(None, Operation.SLEEP, Operation.DEFAULT)
+                    if DEBUG_CONCERTINA:
+                        print >> sys.stderr, "CONCERTINA: waiting 5 secs"
+                    time.sleep(5)
+                    if DEBUG_CONCERTINA:
+                        print >> sys.stderr, "CONCERTINA: taking screenshot"
+                    self.takeScreenshotAndShowItOnWindow()
+                else:
+                    print >> sys.stderr, "CONCERTINA: No target views"
+        self.window.after(5000, self.concertinaLoopCallback)
+
+
+    def getViewContainingPointAndLongTouch(self, x, y):
+        # FIXME: this method is almost exactly as getViewContainingPointAndTouch()
+        if DEBUG:
+            print >> sys.stderr, 'getViewContainingPointAndLongTouch(%d, %d)' % (x, y)
+        if self.areEventsDisabled:
+            if DEBUG:
+                print >> sys.stderr, "Ignoring event"
+            self.canvas.update_idletasks()
+            return
+
+        self.showVignette()
+        if DEBUG_POINT:
+            print >> sys.stderr, "getViewsContainingPointAndLongTouch(x=%s, y=%s)" % (x, y)
+            print >> sys.stderr, "self.vc=", self.vc
+        v = self.findViewContainingPointInTargets(x, y)
+
+        if v is None:
+            # FIXME: We can touch by DIP by default if no Views were found
+            self.hideVignette()
+            msg = "There are no touchable or clickable views here!"
+            self.toast(msg)
+            return
+
+        clazz = v.getClass()
+        candidates = [v]
+
+        def findBestCandidate(view):
+            isccf = Culebron.isClickableCheckableOrFocusable(view)
+            cd = view.getContentDescription()
+            text = view.getText()
+            if (cd or text) and not isccf:
+                # because isccf==False this view was not added to the list of targets
+                # (i.e. Settings)
+                candidates.insert(0, view)
+            return None
+
+        if not (v.getText() or v.getContentDescription()) and v.getChildren():
+            self.vc.traverse(root=v, transform=findBestCandidate, stream=None)
+        if len(candidates) > 2:
+            warnings.warn("We are in trouble, we have more than one candidate to touch", stacklevel=0)
+        candidate = candidates[0]
+        self.longTouchView(candidate, v if candidate != v else None)
+
+        self.printOperation(None, Operation.SLEEP, Operation.DEFAULT)
+        self.vc.sleep(5)
+        self.takeScreenshotAndShowItOnWindow()
+
+
+if TKINTER_AVAILABLE:
+    class MainMenu(Tkinter.Menu):
+        def __init__(self, culebron):
+            Tkinter.Menu.__init__(self, culebron.window)
+            self.culebron = culebron
+
+            self.fileMenu = Tkinter.Menu(self, tearoff=False)
+            self.fileMenu.add_command(label="Quit", underline=0, accelerator='Command-Q', command=self.culebron.quit)
+            self.add_cascade(label="File", underline=0, menu=self.fileMenu)
+
+            self.viewMenu = Tkinter.Menu(self, tearoff=False)
+            self.showViewTree = Tkinter.BooleanVar()
+            self.showViewTree.set(False)
+            state = NORMAL if culebron.vc else DISABLED
+            self.viewMenu.add_checkbutton(label="Tree", underline=0, accelerator='Command-T', onvalue=True,
+                                          offvalue=False, variable=self.showViewTree, state=state,
+                                          command=self.onshowViewTreeChanged)
+            self.showViewDetails = Tkinter.BooleanVar()
+            self.showViewDetails.set(False)
+            state = NORMAL if culebron.vc else DISABLED
+            self.viewMenu.add_checkbutton(label="View details", underline=0, accelerator='Command-V', onvalue=True,
+                                          offvalue=False, variable=self.showViewDetails, state=state,
+                                          command=self.onShowViewDetailsChanged)
+            self.add_cascade(label="View", underline=0, menu=self.viewMenu)
+
+            self.uiDeviceMenu = Tkinter.Menu(self, tearoff=False)
+            state = NORMAL if culebron.vc else DISABLED
+            self.uiDeviceMenu.add_command(label="Open Notification", underline=6, state=state,
+                                          command=lambda: culebron.executeCommandAndRefresh(
+                                              self.culebron.vc.uiDevice.openNotification))
+            state = NORMAL if culebron.vc else DISABLED
+            self.uiDeviceMenu.add_command(label="Open Quick settings", underline=6, state=state,
+                                          command=lambda: culebron.executeCommandAndRefresh(
+                                              command=self.culebron.vc.uiDevice.openQuickSettings))
+            state = NORMAL if culebron.vc else DISABLED
+            self.uiDeviceMenu.add_command(label="Change Language", underline=7, state=state,
+                                          command=self.culebron.changeLanguage)
+            self.add_cascade(label="UiDevice", menu=self.uiDeviceMenu)
+
+            self.helpMenu = Tkinter.Menu(self, tearoff=False)
+            self.helpMenu.add_command(label="Keyboard shortcuts", underline=0, accelerator='Command-K',
+                                      command=self.culebron.showHelp)
+            self.add_cascade(label="Help", underline=0, menu=self.helpMenu)
+
+        def callback(self):
+            pass
+
+        def onshowViewTreeChanged(self):
+            if self.showViewTree.get() == 1:
+                self.culebron.showViewTree()
+            else:
+                self.culebron.hideViewTree()
+
+        def onShowViewDetailsChanged(self):
+            if self.showViewDetails.get() == 1:
+                self.culebron.showViewDetails()
+            else:
+                self.culebron.hideViewDetails()
+
+
+    class ViewTree(Tkinter.Frame):
+        def __init__(self, parent):
+            Tkinter.Frame.__init__(self, parent)
+            self.viewTree = ttk.Treeview(self, columns=['T'], height=35)
+            self.viewTree.column(0, width=20)
+            self.viewTree.heading('#0', None, text='View', anchor=Tkinter.W)
+            self.viewTree.heading(0, None, text='T', anchor=Tkinter.W)
+            self.scrollbar = ttk.Scrollbar(self, orient=Tkinter.HORIZONTAL, command=self.__xscroll)
+            self.viewTree.grid(row=1, rowspan=1, column=1, sticky=Tkinter.N + Tkinter.S)
+            self.scrollbar.grid(row=2, rowspan=1, column=1, sticky=Tkinter.E + Tkinter.W)
+            self.viewTree.configure(xscrollcommand=self.scrollbar.set)
+
+        def __xscroll(self, *args):
+            if DEBUG:
+                print >> sys.stderr, "__xscroll:", args
+            self.viewTree.xview(*args)
+
+        def insert(self, parent, index, iid=None, **kw):
+            """Creates a new item and return the item identifier of the newly
+            created item.
+    
+            parent is the item ID of the parent item, or the empty string
+            to create a new top-level item. index is an integer, or the value
+            end, specifying where in the list of parent's children to insert
+            the new item. If index is less than or equal to zero, the new node
+            is inserted at the beginning, if index is greater than or equal to
+            the current number of children, it is inserted at the end. If iid
+            is specified, it is used as the item identifier, iid must not
+            already exist in the tree. Otherwise, a new unique identifier
+            is generated."""
+
+            return self.viewTree.insert(parent, index, iid, **kw)
+
+        def set(self, item, column=None, value=None):
+            """With one argument, returns a dictionary of column/value pairs
+            for the specified item. With two arguments, returns the current
+            value of the specified column. With three arguments, sets the
+            value of given column in given item to the specified value."""
+
+            return self.viewTree.set(item, column, value)
+
+        def tag_bind(self, tagname, sequence=None, callback=None):
+            if DEBUG:
+                print >> sys.stderr, 'ViewTree.tag_bind(', tagname, ',', sequence, ',', callback, ')'
+            return self.viewTree.tag_bind(tagname, sequence, callback)
+
+
+    class ViewDetails(Tkinter.Frame):
+        VIEW_DETAILS = "View Details:\n"
+
+        def __init__(self, parent):
+            Tkinter.Frame.__init__(self, parent)
+            self.label = Tkinter.Label(self, bd=1, width=30, wraplength=200, justify=Tkinter.LEFT, anchor=Tkinter.NW)
+            self.label.configure(text=self.VIEW_DETAILS)
+            self.label.configure(bg="white")
+            self.label.grid(row=3, column=1, rowspan=1)
+
+        def set(self, view):
+            self.label.configure(text=self.VIEW_DETAILS + view.__str__())
+
+
+    class StatusBar(Tkinter.Frame):
+
+        def __init__(self, parent):
+            Tkinter.Frame.__init__(self, parent)
+            self.label = Tkinter.Label(self, bd=1, relief=Tkinter.SUNKEN, anchor=Tkinter.W)
+            self.label.grid(row=1, column=1, columnspan=2, sticky=Tkinter.E + Tkinter.W)
+
+        def set(self, fmt, *args):
+            self.label.config(text=fmt % args)
+            self.label.update_idletasks()
+
+        def clear(self):
+            self.label.config(text="")
+            self.label.update_idletasks()
+
+
+    class LabeledEntry():
+        def __init__(self, parent, text, validate, validatecmd):
+            self.f = Tkinter.Frame(parent)
+            Tkinter.Label(self.f, text=text, anchor="w", padx=8).grid(row=1, column=1, sticky=Tkinter.E)
+            self.entry = Tkinter.Entry(self.f, validate=validate, validatecommand=validatecmd)
+            self.entry.grid(row=1, column=2, padx=5, sticky=Tkinter.E)
+
+        def grid(self, **kwargs):
+            self.f.grid(kwargs)
+
+        def get(self):
+            return self.entry.get()
+
+        def set(self, text):
+            self.entry.delete(0, Tkinter.END)
+            self.entry.insert(0, text)
+
+
+    class LabeledEntryWithButton(LabeledEntry):
+        def __init__(self, parent, text, buttonText, command, validate, validatecmd):
+            LabeledEntry.__init__(self, parent, text, validate, validatecmd)
+            self.button = Tkinter.Button(self.f, text=buttonText, command=command)
+            self.button.grid(row=1, column=3)
+
+
+    class DragDialog(Tkinter.Toplevel):
+
+        DEFAULT_DURATION = 1000
+        DEFAULT_STEPS = 20
+
+        spX = None
+        spY = None
+        epX = None
+        epY = None
+        spId = None
+        epId = None
+
+        def __init__(self, culebron):
+            self.culebron = culebron
+            self.parent = culebron.window
+            Tkinter.Toplevel.__init__(self, self.parent)
+            self.transient(self.parent)
+            self.culebron.setDragDialogShowed(True)
+            self.title("Drag: selecting parameters")
+
+            # valid percent substitutions (from the Tk entry man page)
+            # %d = Type of action (1=insert, 0=delete, -1 for others)
+            # %i = index of char string to be inserted/deleted, or -1
+            # %P = value of the entry if the edit is allowed
+            # %s = value of entry prior to editing
+            # %S = the text string being inserted or deleted, if any
+            # %v = the type of validation that is currently set
+            # %V = the type of validation that triggered the callback
+            #      (key, focusin, focusout, forced)
+            # %W = the tk name of the widget
+            self.validate = (self.parent.register(self.onValidate), '%P')
+            self.sp = LabeledEntryWithButton(self, "Start point", "Grab", command=self.onGrabSp, validate="focusout",
+                                             validatecmd=self.validate)
+            self.sp.grid(row=1, column=1, columnspan=3, pady=5)
+
+            self.ep = LabeledEntryWithButton(self, "End point", "Grab", command=self.onGrabEp, validate="focusout",
+                                             validatecmd=self.validate)
+            self.ep.grid(row=2, column=1, columnspan=3, pady=5)
+
+            l = Tkinter.Label(self, text="Units")
+            l.grid(row=3, column=1, sticky=Tkinter.E)
+
+            self.units = Tkinter.StringVar()
+            self.units.set(Unit.DIP)
+            col = 2
+            for u in dir(Unit):
+                if u.startswith('_'):
+                    continue
+                rb = Tkinter.Radiobutton(self, text=u, variable=self.units, value=u)
+                rb.grid(row=3, column=col, padx=20, sticky=Tkinter.E)
+                col += 1
+
+            self.d = LabeledEntry(self, "Duration", validate="focusout", validatecmd=self.validate)
+            self.d.set(DragDialog.DEFAULT_DURATION)
+            self.d.grid(row=4, column=1, columnspan=3, pady=5)
+
+            self.s = LabeledEntry(self, "Steps", validate="focusout", validatecmd=self.validate)
+            self.s.set(DragDialog.DEFAULT_STEPS)
+            self.s.grid(row=5, column=1, columnspan=2, pady=5)
+
+            self.buttonBox()
+
+        def buttonBox(self):
+            # add standard button box. override if you don't want the
+            # standard buttons
+
+            box = Tkinter.Frame(self)
+
+            self.ok = Tkinter.Button(box, text="OK", width=10, command=self.onOk, default=Tkinter.ACTIVE,
+                                     state=Tkinter.DISABLED)
+            self.ok.grid(row=6, column=1, sticky=Tkinter.E, padx=5, pady=5)
+            w = Tkinter.Button(box, text="Cancel", width=10, command=self.onCancel)
+            w.grid(row=6, column=2, sticky=Tkinter.E, padx=5, pady=5)
+
+            self.bind("<Return>", self.onOk)
+            self.bind("<Escape>", self.onCancel)
+
+            box.grid(row=6, column=1, columnspan=3)
+
+        def onValidate(self, value):
+            if self.sp.get() and self.ep.get() and self.d.get() and self.s.get():
+                self.ok.configure(state=Tkinter.NORMAL)
+            else:
+                self.ok.configure(state=Tkinter.DISABLED)
+
+        def onOk(self, event=None):
+            if DEBUG:
+                print >> sys.stderr, "onOK()"
+                print >> sys.stderr, "values are:",
+                print >> sys.stderr, self.sp.get(),
+                print >> sys.stderr, self.ep.get(),
+                print >> sys.stderr, self.d.get(),
+                print >> sys.stderr, self.s.get(),
+                print >> sys.stderr, self.units.get()
+
+            sp = make_tuple(self.sp.get())
+            ep = make_tuple(self.ep.get())
+            d = int(self.d.get())
+            s = int(self.s.get())
+            self.cleanUp()
+            # put focus back to the parent window's canvas
+            self.culebron.canvas.focus_set()
+            self.destroy()
+            self.culebron.drag(sp, ep, d, s, self.units.get())
+
+        def onCancel(self, event=None):
+            self.culebron.setGrab(False)
+            self.cleanUp()
+            # put focus back to the parent window's canvas
+            self.culebron.canvas.focus_set()
+            self.destroy()
+
+        def onGrabSp(self):
+            '''
+            Grab starting point
+            '''
+
+            self.sp.entry.focus_get()
+            self.onGrab(self.sp)
+
+        def onGrabEp(self):
+            '''
+            Grab ending point
+            '''
+
+            self.ep.entry.focus_get()
+            self.onGrab(self.ep)
+
+        def onGrab(self, entry):
+            '''
+            Generic grab method.
+            
+            @param entry: the entry being grabbed
+            @type entry: Tkinter.Entry
+            '''
+
+            self.culebron.setOnTouchListener(self.onTouchListener)
+            self.__grabbing = entry
+            self.culebron.setGrab(True)
+
+        def onTouchListener(self, point):
+            '''
+            Listens for touch events and draws the corresponding shapes on the Culebron canvas.
+            If the starting point is being grabbed it draws the touching point via
+            C{Culebron.drawTouchedPoint()} and if the end point is being grabbed it draws
+            using C{Culebron.drawDragLine()}.
+            
+            @param point: the point touched
+            @type point: tuple
+            '''
+
+            x = point[0]
+            y = point[1]
+            value = "(%d,%d)" % (x, y)
+            self.__grabbing.set(value)
+            self.onValidate(value)
+            self.culebron.setGrab(False)
+            if self.__grabbing == self.sp:
+                self.__cleanUpSpId()
+                self.__cleanUpEpId()
+                self.spX = x
+                self.spY = y
+            elif self.__grabbing == self.ep:
+                self.__cleanUpEpId()
+                self.epX = x
+                self.epY = y
+            if self.spX and self.spY and not self.spId:
+                self.spId = self.culebron.drawTouchedPoint(self.spX, self.spY)
+            if self.spX and self.spY and self.epX and self.epY and not self.epId:
+                self.epId = self.culebron.drawDragLine(self.spX, self.spY, self.epX, self.epY)
+            self.__grabbing = None
+            self.culebron.setOnTouchListener(None)
+
+        def __cleanUpSpId(self):
+            if self.spId:
+                self.culebron.canvas.delete(self.spId)
+                self.spId = None
+
+        def __cleanUpEpId(self):
+            if self.epId:
+                self.culebron.canvas.delete(self.epId)
+                self.epId = None
+
+        def cleanUp(self):
+            self.__cleanUpSpId()
+            self.__cleanUpEpId()
+
+
+    class ContextMenu(Tkinter.Menu):
+        # FIXME: should get rid of the nested classes, otherwise it's not possible to create a parent class
+        # SubMenu for UiScrollableSubMenu
+        '''
+        The context menu (popup).
+        '''
+
+        PADDING = '  '
+        ''' Padding used to separate menu entries from border '''
+
+        class Separator():
+            SEPARATOR = 'SEPARATOR'
+
+            def __init__(self):
+                self.description = self.SEPARATOR
+
+        class Command():
+            def __init__(self, description, underline, shortcut, event, command):
+                self.description = description
+                self.underline = underline
+                self.shortcut = shortcut
+                self.event = event
+                self.command = command
+
+        class UiScrollableSubMenu(Tkinter.Menu):
+            def __init__(self, menu, description, view, culebron):
+                # Tkninter.Menu is not extending object, so we can't do this:
+                # super(ContextMenu, self).__init__(culebron.window, tearoff=False)
+                Tkinter.Menu.__init__(self, menu, tearoff=False)
+                self.description = description
+                self.add_command(label='Fling backward',
+                                 command=lambda: culebron.executeCommandAndRefresh(view.uiScrollable.flingBackward))
+                self.add_command(label='Fling forward',
+                                 command=lambda: culebron.executeCommandAndRefresh(view.uiScrollable.flingForward))
+                self.add_command(label='Fling to beginning',
+                                 command=lambda: culebron.executeCommandAndRefresh(view.uiScrollable.flingToBeginning))
+                self.add_command(label='Fling to end',
+                                 command=lambda: culebron.executeCommandAndRefresh(view.uiScrollable.flingToEnd))
+
+        def __init__(self, culebron, view):
+            # Tkninter.Menu is not extending object, so we can't do this:
+            # super(ContextMenu, self).__init__(culebron.window, tearoff=False)
+            Tkinter.Menu.__init__(self, culebron.window, tearoff=False)
+            if DEBUG_CONTEXT_MENU:
+                print >> sys.stderr, "Creating ContextMenu for", view.__smallStr__() if view else "No View"
+            self.view = view
+            items = []
+
+            if self.view:
+                _saveViewSnapshotForSelectedView = lambda: culebron.saveViewSnapshot(self.view)
+                items.append(ContextMenu.Command('Take view snapshot and save to file', 5, 'Ctrl+W', '<Control-W>',
+                                                 _saveViewSnapshotForSelectedView))
+                if self.view.uiScrollable:
+                    items.append(ContextMenu.UiScrollableSubMenu(self, 'UiScrollable', view, culebron))
+                else:
+                    parent = self.view.parent
+                    while parent:
+                        if parent.uiScrollable:
+                            # WARNING:
+                            # A bit dangerous, but may work
+                            # If we click ona ListView then the View pased to this ContextMenu is the child,
+                            # perhaps we want to scroll the parent
+                            items.append(ContextMenu.UiScrollableSubMenu(self, 'UiScrollable', parent, culebron))
+                            break
+                        parent = parent.parent
+                items.append(ContextMenu.Separator())
+
+            items.append(ContextMenu.Command('Drag dialog', 0, 'Ctrl+D', '<Control-D>', culebron.showDragDialog))
+            items.append(ContextMenu.Command('Take snapshot and save to file', 26, 'Ctrl+F', '<Control-F>',
+                                             culebron.saveSnapshot))
+            items.append(ContextMenu.Command('Control Panel', 0, 'Ctrl+K', '<Control-K>', culebron.showControlPanel))
+            items.append(ContextMenu.Command('Long touch point using PX', 0, 'Ctrl+L', '<Control-L>',
+                                             culebron.toggleLongTouchPoint))
+            items.append(ContextMenu.Command('Long touch View', 0, None, None,
+                                             culebron.toggleLongTouchView))
+            items.append(
+                ContextMenu.Command('Touch using DIP', 13, 'Ctrl+I', '<Control-I>', culebron.toggleTouchPointDip))
+            items.append(
+                ContextMenu.Command('Touch using PX', 12, 'Ctrl+P', '<Control-P>', culebron.toggleTouchPointPx))
+            items.append(ContextMenu.Command('Generates a Sleep() on output script', 12, 'Ctrl+S', '<Control-S>',
+                                             culebron.showSleepDialog))
+            if culebron.vc is not None:
+                items.append(ContextMenu.Command('Toggle generating Test Condition', 18, 'Ctrl+T', '<Control-T>',
+                                                 culebron.toggleGenerateTestCondition))
+            items.append(ContextMenu.Command('Touch Zones', 6, 'Ctrl+Z', '<Control-Z>', culebron.toggleTargetZones))
+            items.append(ContextMenu.Command('Generates a startActivity()', 17, 'Ctrl+A', '<Control-A>',
+                                             culebron.printStartActivityAtTop))
+            items.append(ContextMenu.Command('Refresh', 0, 'F5', '<F5>', culebron.refresh))
+            items.append(ContextMenu.Command('Wake up', 0, None, None, culebron.wake))
+            items.append(ContextMenu.Separator())
+            items.append(ContextMenu.Command('Quit', 0, 'Ctrl+Q', '<Control-Q>', culebron.quit))
+
+            for item in items:
+                self.addItem(item)
+
+        def addItem(self, item):
+            if isinstance(item, ContextMenu.Separator):
+                self.addSeparator()
+            elif isinstance(item, ContextMenu.Command):
+                self.addCommand(item)
+            elif isinstance(item, ContextMenu.UiScrollableSubMenu):
+                self.addSubMenu(item)
+            else:
+                raise RuntimeError("Unsupported item=" + str(item))
+
+        def addSeparator(self):
+            self.add_separator()
+
+        def addCommand(self, item):
+            self.add_command(label=self.PADDING + item.description, underline=item.underline + len(self.PADDING),
+                             command=item.command, accelerator=item.shortcut)
+            # if item.event:
+            #    # These bindings remain even after the menu has been dismissed, so it seems not a good idea
+            #    #self.bind_all(item.event, item.command)
+            #    pass
+
+        def addSubMenu(self, item):
+            self.add_cascade(label=self.PADDING + item.description, menu=item)
+
+        def showPopupMenu(self, event):
+            try:
+                self.tk_popup(event.x_root, event.y_root)
+            finally:
+                # make sure to release the grab (Tk 8.0a1 only)
+                # self.grab_release()
+                pass
+
+
+    class HelpDialog(Tkinter.Toplevel):
+
+        def __init__(self, culebron):
+            self.culebron = culebron
+            self.parent = culebron.window
+            Tkinter.Toplevel.__init__(self, self.parent)
+            # self.transient(self.parent)
+            self.title("%s: help" % Culebron.APPLICATION_NAME)
+
+            self.text = ScrolledText.ScrolledText(self, width=60, height=40)
+            self.text.insert(Tkinter.INSERT, '''
+    Special keys
+    ------------
+    
+    F1: Help
+    F5: Refresh
+    
+    Mouse Buttons
+    -------------
+    <1>: Touch the underlying View
+    
+    Commands
+    --------
+    Ctrl-A: Generates startActivity() call on output script
+    Ctrl-D: Drag dialog
+    Ctrl-F: Take snapshot and save to file
+    Ctrl-K: Control Panel
+    Ctrl-L: Long touch point using PX
+    Ctrl-I: Touch using DIP
+    Ctrl-P: Touch using PX
+    Ctrl-Q: Quit
+    Ctrl-S: Generates a sleep() on output script
+    Ctrl-T: Toggle generating test condition
+    Ctrl-V: Verifies the content of the screen dump
+    Ctrl-Z: Touch zones
+    ''')
+            self.text.grid(row=1, column=1)
+
+            self.buttonBox()
+
+        def buttonBox(self):
+            # add standard button box. override if you don't want the
+            # standard buttons
+
+            box = Tkinter.Frame(self)
+
+            w = Tkinter.Button(box, text="Dismiss", width=10, command=self.onDismiss, default=Tkinter.ACTIVE)
+            w.grid(row=1, column=1, padx=5, pady=5)
+
+            self.bind("<Return>", self.onDismiss)
+            self.bind("<Escape>", self.onDismiss)
+
+            box.grid(row=1, column=1)
+
+        def onDismiss(self, event=None):
+            # put focus back to the parent window's canvas
+            self.culebron.canvas.focus_set()
+            self.destroy()
+
+
+    class FileDialog():
+        def __init__(self, culebron, filename):
+            self.parent = culebron.window
+            self.filename = filename
+            self.basename = os.path.basename(self.filename)
+            self.dirname = os.path.dirname(self.filename)
+            self.ext = os.path.splitext(self.filename)[1]
+            self.fileTypes = [('images', self.ext)]
+
+        def askSaveAsFilename(self):
+            return tkFileDialog.asksaveasfilename(parent=self.parent, filetypes=self.fileTypes,
+                                                  defaultextension=self.ext, initialdir=self.dirname,
+                                                  initialfile=self.basename)
diff --git a/AndroidViewClient/src/com/dtmilano/android/robotframework/__init__.py b/AndroidViewClient/src/com/dtmilano/android/robotframework/__init__.py
new file mode 100755
index 0000000..d9b1a4e
--- /dev/null
+++ b/AndroidViewClient/src/com/dtmilano/android/robotframework/__init__.py
@@ -0,0 +1 @@
+__author__ = 'diego'
diff --git a/AndroidViewClient/src/com/dtmilano/android/robotframework/viewclientwrapper.py b/AndroidViewClient/src/com/dtmilano/android/robotframework/viewclientwrapper.py
new file mode 100755
index 0000000..2fb11a2
--- /dev/null
+++ b/AndroidViewClient/src/com/dtmilano/android/robotframework/viewclientwrapper.py
@@ -0,0 +1,105 @@
+# -*- coding: utf-8 -*-
+'''
+Copyright (C) 2012-2015  Diego Torres Milano
+Created on Nov 10, 2015
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+@author: Diego Torres Milano
+'''
+
+__version__ = '11.5.9'
+__author__ = 'diego'
+
+import sys
+from com.dtmilano.android.viewclient import ViewClient
+
+
+"""A library to integrate *AndroidViewClient/culebra* tests with Robotframework.
+
+To import this wrapper you have to use::
+
+**Settings**
+...
+Library     com.dtmilano.android.robotframework.viewclientwrapper.ViewClientWrapper   serialno=<your-device>
+
+
+This documentation is created using reStructuredText__.
+
+__ http://docutils.sourceforge.net
+"""
+
+DEBUG = False
+ROBOT_LIBRARY_DOC_FORMAT = 'reST'
+
+class ViewClientWrapper:
+    def __init__(self, serialno):
+        device, serialno = ViewClient.connectToDeviceOrExit(serialno=serialno)
+        self.vc = ViewClient(device, serialno)
+        self.device = device
+        if DEBUG:
+            print >> sys.stderr, "ViewClientWrapper: connected to", device, serialno
+
+    def dump(self):
+        """Dumps window hierarchy."""
+        return self.vc.dump()
+
+    def touch(self, x, y):
+        """Touches a point.
+
+        :param x: x
+        :param y: y
+        :return:
+        """
+        return self.vc.touch(x, y)
+
+    @staticmethod
+    def long_touch_view(view):
+        """Long-touches the view."""
+        return view.longTouch()
+
+    @staticmethod
+    def touch_view(view):
+        """Touches the View"""
+        return view.touch()
+
+    @staticmethod
+    def get_view_position_and_size(view):
+        """ Gets the View position and size
+        :param view: the View
+        :return: the position and size
+        """
+        return view.getPositionAndSize()
+
+    def find_view_with_text(self, text):
+        return self.vc.findViewWithText(text)
+
+    def find_view_by_id(self, id):
+        return self.vc.findViewById(id)
+
+    def start_activity(self, component):
+        """Starts Activity."""
+        return self.vc.device.startActivity(component)
+
+    def get_top_activity_name(self):
+        return self.device.getTopActivityName()
+
+    def force_stop_package(self, package):
+        self.device.shell('am force-stop %s' % package)
+
+    def get_windows(self):
+        return self.device.getWindows()
+
+    def is_keyboard_show(self):
+        return self.device.isKeyboardShown()
+
diff --git a/AndroidViewClient/src/com/dtmilano/android/uiautomator/__init__.py b/AndroidViewClient/src/com/dtmilano/android/uiautomator/__init__.py
new file mode 100755
index 0000000..d9b1a4e
--- /dev/null
+++ b/AndroidViewClient/src/com/dtmilano/android/uiautomator/__init__.py
@@ -0,0 +1 @@
+__author__ = 'diego'
diff --git a/AndroidViewClient/src/com/dtmilano/android/uiautomator/uiautomatorhelper.py b/AndroidViewClient/src/com/dtmilano/android/uiautomator/uiautomatorhelper.py
new file mode 100755
index 0000000..87ab95f
--- /dev/null
+++ b/AndroidViewClient/src/com/dtmilano/android/uiautomator/uiautomatorhelper.py
@@ -0,0 +1,305 @@
+# -*- coding: utf-8 -*-
+'''
+Copyright (C) 2012-2015  Diego Torres Milano
+Created on Feb 2, 2015
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+@author: Diego Torres Milano
+'''
+
+__version__ = '11.5.9'
+
+import os
+import subprocess
+import sys
+import platform
+import threading
+import re
+import json
+try:
+    import requests
+    REQUESTS_AVAILABLE = True
+except:
+    REQUESTS_AVAILABLE = False
+import time
+from com.dtmilano.android.adb.adbclient import AdbClient
+from com.dtmilano.android.common import obtainAdbPath
+
+__author__ = 'diego'
+
+
+DEBUG = False
+
+lock = threading.Lock()
+
+class RunTestsThread(threading.Thread):
+    """
+    Runs the instrumentation for the specified package in a new thread.
+    """
+    def __init__(self, group=None, target=None, name=None, args=(), kwargs=None, verbose=None, adbClient=None, testClass=None, testRunner=None):
+        threading.Thread.__init__(self, group=group, target=target, name=name, verbose=verbose)
+        self.adbClient = adbClient
+        self.testClass = testClass
+        self.testRunner = testRunner
+        self.pkg = re.sub('\.test$', '', self.testClass)
+
+    def run(self):
+        if DEBUG:
+            print >> sys.stderr, "RunTestsThread: Acquiring lock"
+        lock.acquire()
+        if DEBUG:
+            print >> sys.stderr, "RunTestsThread: Lock acquired"
+        self.forceStop()
+        time.sleep(3)
+        if DEBUG:
+            print >> sys.stderr, "Starting test..."
+            print >> sys.stderr, "RunTestsThread: Releasing lock"
+        lock.release()
+        out = self.adbClient.shell('am instrument -w ' + self.testClass + '/' + self.testRunner + '; echo "ERROR: $?"')
+        if DEBUG:
+            print >> sys.stderr, "\nFinished test."
+        errmsg = out.splitlines()[-1]
+        m = re.match('ERROR: (\d+)', errmsg)
+        if m:
+            exitval = int(m.group(1))
+            if exitval != 0:
+                raise RuntimeError('Cannot start test on device: ' + out)
+        else:
+            raise RuntimeError('Unknown message')
+
+    def forceStop(self):
+        if DEBUG:
+            print >> sys.stderr, "Cleaning up before start. Stopping '%s'" % self.pkg
+        self.adbClient.shell('am force-stop ' + self.pkg)
+
+
+class UiAutomatorHelper:
+    PACKAGE = 'com.dtmilano.android.culebratester'
+    TEST_CLASS = PACKAGE + '.test'
+    TEST_RUNNER = 'com.dtmilano.android.uiautomatorhelper.UiAutomatorHelperTestRunner'
+
+    def __init__(self, adbclient, adb=None, localport=9999, remoteport=9999, hostname='localhost'):
+        if not REQUESTS_AVAILABLE:
+            raise Exception('''Python Requests is needed for UiAutomatorHelper to work.
+
+On Ubuntu install
+
+   $ sudo apt-get install python-requests
+
+On OSX install
+
+   $ easy_install requests
+''')
+
+        self.adbClient = adbclient
+        ''' The adb client (a.k.a. device) '''
+        instrumentation = self.adbClient.shell('pm list instrumentation %s' % self.PACKAGE)
+        if not re.match('instrumentation:%s/%s \(target=%s\)' % (self.TEST_CLASS, self.TEST_RUNNER, self.PACKAGE), instrumentation):
+            raise RuntimeError('The target device does not contain the instrumentation for %s' % self.PACKAGE)
+        self.adb = self.__whichAdb(adb)
+        ''' The adb command '''
+        self.osName = platform.system()
+        ''' The OS name. We sometimes need specific behavior. '''
+        self.isDarwin = (self.osName == 'Darwin')
+        ''' Is it Mac OSX? '''
+        self.hostname = hostname
+        ''' The hostname we are connecting to. '''
+        if hostname in ['localhost', '127.0.0.1']:
+            self.__redirectPort(localport, remoteport)
+        self.__runTests()
+        self.baseUrl = 'http://%s:%d' % (hostname, localport)
+        try:
+            self.session = self.__connectSession()
+        except RuntimeError, ex:
+            self.thread.forceStop()
+            raise ex
+
+
+    def __connectSession(self):
+        if DEBUG:
+            print >> sys.stderr, "UiAutomatorHelper: Acquiring lock"
+        lock.acquire()
+        if DEBUG:
+            print >> sys.stderr, "UiAutomatorHelper: Lock acquired"
+            print >> sys.stderr, "UiAutomatorHelper: Connecting session"
+        session = requests.Session()
+        if not session:
+            raise RuntimeError("Cannot create session")
+        tries = 10
+        while tries > 0:
+            time.sleep(0.5)
+            if DEBUG:
+                print >> sys.stderr, "UiAutomatorHelper: Attempting to connect to", self.baseUrl, '(tries=%s)' % tries
+            try:
+                response = session.head(self.baseUrl)
+                if response.status_code == 200:
+                    break
+            except requests.exceptions.ConnectionError, ex:
+                tries -= 1
+        lock.release()
+        if tries == 0:
+            raise RuntimeError("Cannot connect to " + self.baseUrl)
+        if DEBUG:
+            print >> sys.stderr, "UiAutomatorHelper: HEAD", response
+            print >> sys.stderr, "UiAutomatorHelper: Releasing lock"
+        #lock.release()
+        return session
+
+    def __whichAdb(self, adb):
+        if adb:
+            if not os.access(adb, os.X_OK):
+                raise Exception('adb="%s" is not executable' % adb)
+        else:
+            # Using adbclient we don't need adb executable yet (maybe it's needed if we want to
+            # start adb if not running) or to redirect ports
+            adb = obtainAdbPath()
+
+        return adb
+
+    def __redirectPort(self, localport, remoteport):
+        self.localPort = localport
+        self.remotePort = remoteport
+        subprocess.check_call([self.adb, '-s', self.adbClient.serialno, 'forward', 'tcp:%d' % self.localPort,
+                               'tcp:%d' % self.remotePort])
+
+    def __runTests(self):
+        if DEBUG:
+            print >> sys.stderr, "__runTests: start"
+        # We need a new AdbClient instance with timeout=None (means, no timeout) for the long running test service
+        newAdbClient = AdbClient(self.adbClient.serialno, self.adbClient.hostname, self.adbClient.port, timeout=None)
+        self.thread = RunTestsThread(adbClient=newAdbClient, testClass=self.TEST_CLASS, testRunner=self.TEST_RUNNER)
+        if DEBUG:
+            print >> sys.stderr, "__runTests: starting thread"
+        self.thread.start()
+        if DEBUG:
+            print >> sys.stderr, "__runTests: end"
+
+
+    def __httpCommand(self, url, params=None, method='GET'):
+        if method == 'GET':
+            if params:
+                response = self.session.get(self.baseUrl + url, params=params)
+            else:
+                response = self.session.get(self.baseUrl + url)
+        elif method == 'PUT':
+            response = self.session.put(self.baseUrl + url, params=params)
+        else:
+            raise RuntimeError("method not supported: " + method)
+        return response.content
+
+    #
+    # Device
+    #
+    def getDisplayRealSize(self):
+        return self.__httpCommand('/Device/getDisplayRealSize')
+
+    #
+    # UiAutomatorHelper internal commands
+    #
+    def quit(self):
+        try:
+            self.__httpCommand('/UiAutomatorHelper/quit')
+        except:
+            pass
+        self.session.close()
+
+    #
+    # UiDevice
+    #
+    def click(self, **kwargs):
+        params = kwargs
+        if not ((params.has_key('x') and params.has_key('y')) or params.has_key('oid')):
+            raise RuntimeError('click: (x, y) or oid must have a value')
+        if params.has_key('oid'):
+            return self.__httpCommand('/UiObject2/%d/click' % params['oid'])
+        else:
+            return self.__httpCommand('/UiDevice/click', params)
+
+    def dumpWindowHierarchy(self):
+        dump = self.__httpCommand('/UiDevice/dumpWindowHierarchy').decode(encoding='UTF-8', errors='replace')
+        if DEBUG:
+            print >> sys.stderr, "DUMP: ", dump
+        return dump
+
+    def findObject(self, **kwargs):
+        params = kwargs
+        if not (params.has_key('resourceId') or params.has_key('bySelector')):
+            raise RuntimeError('findObject: resourceId or bySelector must have a value')
+        response = self.__httpCommand('/UiDevice/findObject', params)
+        # { "status": "OK", "oid": 1, "className": "android.view.View"}
+        if DEBUG:
+            print >> sys.stderr, "UiAutomatorHelper: findObject: response=", response
+        r = json.loads(response)
+        if r[u'status'] == 'OK':
+            if DEBUG:
+                print >> sys.stderr, "UiAutomatorHelper: findObject: returning", int(r[u'oid'])
+            return UiObject(self, int(r[u'oid']))
+        raise RuntimeError("Error: " + response)
+
+    def longClick(self, **kwargs):
+        params = kwargs
+        if not ((params.has_key('x') and params.has_key('y')) or params.has_key('oid')):
+            raise RuntimeError('longClick: (x, y) or oid must have a value')
+        if params.has_key('oid'):
+            return self.__httpCommand('/UiObject2/%d/longClick' % params['oid'])
+        else:
+            return self.__httpCommand('/UiDevice/longClick', params)
+
+    def pressBack(self):
+        return self.__httpCommand('/UiDevice/pressBack')
+
+    def pressHome(self):
+        return self.__httpCommand('/UiDevice/pressHome')
+
+    def pressKeyCode(self, keyCode, metaState=0):
+        params = {'keyCode': keyCode, 'metaState': metaState}
+        return self.__httpCommand('/UiDevice/pressKeyCode', params)
+
+    def pressRecentApps(self):
+        return self.__httpCommand('/UiDevice/pressRecentApps')
+
+    def swipe(self, startX=-1, startY=-1, endX=-1, endY=-1, steps=10, segments=[], segmentSteps=5):
+        if startX != -1 and startY != -1:
+            params = {'startX': startX, 'startY': startY, 'endX': endX, 'endY': endY, 'steps': steps}
+        elif segments:
+            params = {'segments': ','.join(str(p) for p in segments), "segmentSteps": segmentSteps}
+        else:
+            raise RuntimeError("Cannot determine method invocation from provided parameters. startX and startY or segments must be provided.")
+        return self.__httpCommand('/UiDevice/swipe', params)
+
+    def takeScreenshot(self, scale=1.0, quality=90):
+        params = {'scale': scale, 'quality': quality}
+        return self.__httpCommand('/UiDevice/takeScreenshot', params)
+
+    #
+    # UiObject
+    #
+    def setText(self, uiObject, text):
+        params = {'text': text}
+        return self.__httpCommand('/UiObject/0x%x/setText' % (uiObject.oid), params)
+
+
+class UiObject:
+    def __init__(self, uiAutomatorHelper, oid):
+        self.uiAutomatorHelper = uiAutomatorHelper
+        self.oid = oid
+
+    def click(self):
+        self.uiAutomatorHelper.click(oid=self.oid)
+
+    def longClick(self):
+        self.uiAutomatorHelper.longClick(oid=self.oid)
+
+    def setText(self, text):
+        self.uiAutomatorHelper.setText(uiObject=self, text=text)
diff --git a/AndroidViewClient/src/com/dtmilano/android/viewclient.py b/AndroidViewClient/src/com/dtmilano/android/viewclient.py
new file mode 100755
index 0000000..820a8b2
--- /dev/null
+++ b/AndroidViewClient/src/com/dtmilano/android/viewclient.py
@@ -0,0 +1,4544 @@
+# -*- coding: utf-8 -*-
+'''
+Copyright (C) 2012-2015  Diego Torres Milano
+Created on Feb 2, 2012
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+@author: Diego Torres Milano
+'''
+
+__version__ = '11.5.9'
+
+import sys
+import warnings
+if sys.executable:
+    if 'monkeyrunner' in sys.executable:
+        warnings.warn(
+    '''
+
+    You should use a 'python' interpreter, not 'monkeyrunner' for this module
+
+    ''', RuntimeWarning)
+import subprocess
+import re
+import socket
+import os
+import types
+import time
+import signal
+import copy
+import pickle
+import platform
+import xml.parsers.expat
+import unittest
+import StringIO
+from com.dtmilano.android.common import _nd, _nh, _ns, obtainPxPy, obtainVxVy,\
+    obtainVwVh, obtainAdbPath
+from com.dtmilano.android.window import Window
+from com.dtmilano.android.adb import adbclient
+from com.dtmilano.android.uiautomator.uiautomatorhelper import UiAutomatorHelper
+
+DEBUG = False
+DEBUG_DEVICE = DEBUG and False
+DEBUG_RECEIVED = DEBUG and False
+DEBUG_TREE = DEBUG and False
+DEBUG_GETATTR = DEBUG and False
+DEBUG_CALL = DEBUG and False
+DEBUG_COORDS = DEBUG and False
+DEBUG_TOUCH = DEBUG and False
+DEBUG_STATUSBAR = DEBUG and False
+DEBUG_WINDOWS = DEBUG and False
+DEBUG_BOUNDS = DEBUG and False
+DEBUG_DISTANCE = DEBUG and False
+DEBUG_MULTI = DEBUG and False
+DEBUG_VIEW = DEBUG and False
+DEBUG_VIEW_FACTORY = DEBUG and False
+DEBUG_CHANGE_LANGUAGE = DEBUG and False
+DEBUG_UI_AUTOMATOR_HELPER = DEBUG and False
+DEBUG_NAV_BUTTONS = DEBUG and False
+
+WARNINGS = False
+
+VIEW_SERVER_HOST = 'localhost'
+VIEW_SERVER_PORT = 4939
+
+ADB_DEFAULT_PORT = 5555
+
+OFFSET = 25
+''' This assumes the smallest touchable view on the screen is approximately 50px x 50px
+    and touches it at M{(x+OFFSET, y+OFFSET)} '''
+
+USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES = True
+''' Use C{AdbClient} to obtain the needed properties. If this is
+    C{False} then C{adb shell getprop} is used '''
+
+USE_PHYSICAL_DISPLAY_INFO = True
+''' Use C{dumpsys display} to obtain display properties. If this is
+    C{False} then C{USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES} is used '''
+
+SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED = False
+''' Skips some classes related with the Action Bar and the PhoneWindow$DecorView in the
+    coordinates calculation
+    @see: L{View.getXY()} '''
+
+VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED = False
+''' Under some conditions the touch event should be longer [t(DOWN) << t(UP)]. C{True} enables a
+    workaround to delay the events.'''
+
+# some device properties
+VERSION_SDK_PROPERTY = 'ro.build.version.sdk'
+VERSION_RELEASE_PROPERTY = 'ro.build.version.release'
+
+# some constants for the attributes
+ID_PROPERTY = 'mID'
+ID_PROPERTY_UI_AUTOMATOR = 'uniqueId'
+TEXT_PROPERTY = 'text:mText'
+TEXT_PROPERTY_API_10 = 'mText'
+TEXT_PROPERTY_UI_AUTOMATOR = 'text'
+WS = u"\xfe" # the whitespace replacement char for TEXT_PROPERTY
+TAG_PROPERTY = 'getTag()'
+LEFT_PROPERTY = 'layout:mLeft'
+LEFT_PROPERTY_API_8 = 'mLeft'
+TOP_PROPERTY = 'layout:mTop'
+TOP_PROPERTY_API_8 = 'mTop'
+WIDTH_PROPERTY = 'layout:getWidth()'
+WIDTH_PROPERTY_API_8 = 'getWidth()'
+HEIGHT_PROPERTY = 'layout:getHeight()'
+HEIGHT_PROPERTY_API_8 = 'getHeight()'
+GET_VISIBILITY_PROPERTY = 'getVisibility()'
+LAYOUT_TOP_MARGIN_PROPERTY = 'layout:layout_topMargin'
+IS_FOCUSED_PROPERTY_UI_AUTOMATOR = 'focused'
+IS_FOCUSED_PROPERTY = 'focus:isFocused()'
+
+# visibility
+VISIBLE = 0x0
+INVISIBLE = 0x4
+GONE = 0x8
+
+RegexType = type(re.compile(''))
+IP_RE = re.compile('^(\d{1,3}\.){3}\d{1,3}$')
+ID_RE = re.compile('id/([^/]*)(/(\d+))?')
+
+
+class ViewNotFoundException(Exception):
+    '''
+    ViewNotFoundException is raised when a View is not found.
+    '''
+
+    def __init__(self, attr, value, root):
+        if isinstance(value, RegexType):
+            msg = "Couldn't find View with %s that matches '%s' in tree with root=%s" % (attr, value.pattern, root)
+        else:
+            msg = "Couldn't find View with %s='%s' in tree with root=%s" % (attr, value, root)
+        super(Exception, self).__init__(msg)
+
+class View:
+    '''
+    View class
+    '''
+
+    @staticmethod
+    def factory(arg1, arg2, version=-1, forceviewserveruse=False, windowId=None, uiAutomatorHelper=None):
+        '''
+        View factory
+
+        @type arg1: ClassType or dict
+        @type arg2: View instance or AdbClient
+        '''
+
+        if DEBUG_VIEW_FACTORY:
+            print >> sys.stderr, "View.factory(%s, %s, %s, %s, %s, %s)" % (arg1, arg2, version, forceviewserveruse, windowId, uiAutomatorHelper)
+        if type(arg1) == types.ClassType:
+            cls = arg1
+            attrs = None
+        else:
+            cls = None
+            attrs = arg1
+        if isinstance(arg2, View):
+            view = arg2
+            device = None
+        else:
+            device = arg2
+            view = None
+
+        if attrs and attrs.has_key('class'):
+            clazz = attrs['class']
+            if DEBUG_VIEW_FACTORY:
+                print >> sys.stderr, "    View.factory: creating View with specific class: %s" % clazz
+            if clazz == 'android.widget.TextView':
+                return TextView(attrs, device, version, forceviewserveruse, windowId, uiAutomatorHelper)
+            elif clazz == 'android.widget.EditText':
+                return EditText(attrs, device, version, forceviewserveruse, windowId, uiAutomatorHelper)
+            elif clazz == 'android.widget.ListView':
+                return ListView(attrs, device, version, forceviewserveruse, windowId, uiAutomatorHelper)
+            else:
+                return View(attrs, device, version, forceviewserveruse, windowId, uiAutomatorHelper)
+        elif cls:
+            if view:
+                return cls.__copy(view)
+            else:
+                return cls(attrs, device, version, forceviewserveruse, windowId, uiAutomatorHelper)
+        elif view:
+            return copy.copy(view)
+        else:
+            if DEBUG_VIEW_FACTORY:
+                print >> sys.stderr, "    View.factory: creating generic View"
+            return View(attrs, device, version, forceviewserveruse, windowId, uiAutomatorHelper)
+
+    @classmethod
+    def __copy(cls, view):
+        '''
+        Copy constructor
+        '''
+
+        return cls(view.map, view.device, view.version, view.forceviewserveruse, view.windowId, view.uiAutomatorHelper)
+
+    def __init__(self, _map, device, version=-1, forceviewserveruse=False, windowId=None, uiAutomatorHelper=None):
+        '''
+        Constructor
+
+        @type _map: map
+        @param _map: the map containing the (attribute, value) pairs
+        @type device: AdbClient
+        @param device: the device containing this View
+        @type version: int
+        @param version: the Android SDK version number of the platform where this View belongs. If
+                        this is C{-1} then the Android SDK version will be obtained in this
+                        constructor.
+        @type forceviewserveruse: boolean
+        @param forceviewserveruse: Force the use of C{ViewServer} even if the conditions were given
+                        to use C{UiAutomator}.
+        @type uiAutomatorHelper: UiAutomatorHelper
+        @:param uiAutomatorHelper: The UiAutomatorHelper if available
+        '''
+
+        if DEBUG_VIEW:
+            print >> sys.stderr, "View.__init__(%s, %s, %s, %s)" % ("map" if _map is not None else None, device, version, forceviewserveruse)
+            if _map:
+                print >> sys.stderr, "    map:", type(_map)
+                for attr, val in _map.iteritems():
+                    if len(val) > 50:
+                        val = val[:50] + "..."
+                    print >> sys.stderr, "        %s=%s" % (attr, val)
+        self.map = _map
+        ''' The map that contains the C{attr},C{value} pairs '''
+        self.device = device
+        ''' The AdbClient '''
+        self.children = []
+        ''' The children of this View '''
+        self.parent = None
+        ''' The parent of this View '''
+        self.windows = {}
+        self.currentFocus = None
+        ''' The current focus '''
+        self.windowId = windowId
+        ''' The window this view resides '''
+        self.build = {}
+        ''' Build properties '''
+        self.version = version
+        ''' API version number '''
+        self.forceviewserveruse = forceviewserveruse
+        ''' Force ViewServer use '''
+        self.uiScrollable = None
+        ''' If this is a scrollable View this keeps the L{UiScrollable} object '''
+        self.target = False
+        ''' Is this a touch target zone '''
+        self.uiAutomatorHelper = uiAutomatorHelper
+        ''' The UiAutomatorHelper '''
+
+        if version != -1:
+            self.build[VERSION_SDK_PROPERTY] = version
+        else:
+            try:
+                if USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES:
+                    self.build[VERSION_SDK_PROPERTY] = int(device.getProperty(VERSION_SDK_PROPERTY))
+                else:
+                    self.build[VERSION_SDK_PROPERTY] = int(device.shell('getprop ' + VERSION_SDK_PROPERTY)[:-2])
+            except:
+                self.build[VERSION_SDK_PROPERTY] = -1
+
+        version = self.build[VERSION_SDK_PROPERTY]
+        self.useUiAutomator = (version >= 16) and not forceviewserveruse
+        ''' Whether to use UIAutomator or ViewServer '''
+        self.idProperty = None
+        ''' The id property depending on the View attribute format '''
+        self.textProperty = None
+        ''' The text property depending on the View attribute format '''
+        self.tagProperty = None
+        ''' The tag property depending on the View attribute format '''
+        self.leftProperty = None
+        ''' The left property depending on the View attribute format '''
+        self.topProperty = None
+        ''' The top property depending on the View attribute format '''
+        self.widthProperty = None
+        ''' The width property depending on the View attribute format '''
+        self.heightProperty = None
+        ''' The height property depending on the View attribute format '''
+        self.isFocusedProperty = None
+        ''' The focused property depending on the View attribute format '''
+
+        if version >= 16 and self.useUiAutomator:
+            self.idProperty = ID_PROPERTY_UI_AUTOMATOR
+            self.textProperty = TEXT_PROPERTY_UI_AUTOMATOR
+            self.leftProperty = LEFT_PROPERTY
+            self.topProperty = TOP_PROPERTY
+            self.widthProperty = WIDTH_PROPERTY
+            self.heightProperty = HEIGHT_PROPERTY
+            self.isFocusedProperty = IS_FOCUSED_PROPERTY_UI_AUTOMATOR
+        elif version > 10 and (version < 16 or self.useUiAutomator):
+            self.idProperty = ID_PROPERTY
+            self.textProperty = TEXT_PROPERTY
+            self.tagProperty = TAG_PROPERTY
+            self.leftProperty = LEFT_PROPERTY
+            self.topProperty = TOP_PROPERTY
+            self.widthProperty = WIDTH_PROPERTY
+            self.heightProperty = HEIGHT_PROPERTY
+            self.isFocusedProperty = IS_FOCUSED_PROPERTY
+        elif version == 10:
+            self.idProperty = ID_PROPERTY
+            self.textProperty = TEXT_PROPERTY_API_10
+            self.tagProperty = TAG_PROPERTY
+            self.leftProperty = LEFT_PROPERTY
+            self.topProperty = TOP_PROPERTY
+            self.widthProperty = WIDTH_PROPERTY
+            self.heightProperty = HEIGHT_PROPERTY
+            self.isFocusedProperty = IS_FOCUSED_PROPERTY
+        elif version >= 7 and version < 10:
+            self.idProperty = ID_PROPERTY
+            self.textProperty = TEXT_PROPERTY_API_10
+            self.tagProperty = TAG_PROPERTY
+            self.leftProperty = LEFT_PROPERTY_API_8
+            self.topProperty = TOP_PROPERTY_API_8
+            self.widthProperty = WIDTH_PROPERTY_API_8
+            self.heightProperty = HEIGHT_PROPERTY_API_8
+            self.isFocusedProperty = IS_FOCUSED_PROPERTY
+        elif version > 0 and version < 7:
+            self.idProperty = ID_PROPERTY
+            self.textProperty = TEXT_PROPERTY_API_10
+            self.tagProperty = TAG_PROPERTY
+            self.leftProperty = LEFT_PROPERTY
+            self.topProperty = TOP_PROPERTY
+            self.widthProperty = WIDTH_PROPERTY
+            self.heightProperty = HEIGHT_PROPERTY
+            self.isFocusedProperty = IS_FOCUSED_PROPERTY
+        elif version == -1:
+            self.idProperty = ID_PROPERTY
+            self.textProperty = TEXT_PROPERTY
+            self.tagProperty = TAG_PROPERTY
+            self.leftProperty = LEFT_PROPERTY
+            self.topProperty = TOP_PROPERTY
+            self.widthProperty = WIDTH_PROPERTY
+            self.heightProperty = HEIGHT_PROPERTY
+            self.isFocusedProperty = IS_FOCUSED_PROPERTY
+        else:
+            self.idProperty = ID_PROPERTY
+            self.textProperty = TEXT_PROPERTY
+            self.tagProperty = TAG_PROPERTY
+            self.leftProperty = LEFT_PROPERTY
+            self.topProperty = TOP_PROPERTY
+            self.widthProperty = WIDTH_PROPERTY
+            self.heightProperty = HEIGHT_PROPERTY
+            self.isFocusedProperty = IS_FOCUSED_PROPERTY
+
+        try:
+            if self.isScrollable():
+                self.uiScrollable = UiScrollable(self)
+        except AttributeError:
+            pass
+
+    def __getitem__(self, key):
+        return self.map[key]
+
+    def __getattr__(self, name):
+        if DEBUG_GETATTR:
+            print >>sys.stderr, "__getattr__(%s)    version: %d" % (name, self.build[VERSION_SDK_PROPERTY])
+
+        # NOTE:
+        # I should try to see if 'name' is a defined method
+        # but it seems that if I call locals() here an infinite loop is entered
+
+        if self.map.has_key(name):
+            r = self.map[name]
+        elif self.map.has_key(name + '()'):
+            # the method names are stored in the map with their trailing '()'
+            r = self.map[name + '()']
+        elif name.count("_") > 0:
+            mangledList = self.allPossibleNamesWithColon(name)
+            mangledName = self.intersection(mangledList, self.map.keys())
+            if len(mangledName) > 0 and self.map.has_key(mangledName[0]):
+                r = self.map[mangledName[0]]
+            else:
+                # Default behavior
+                raise AttributeError, name
+        elif name.startswith('is'):
+            # try removing 'is' prefix
+            if DEBUG_GETATTR:
+                print >> sys.stderr, "    __getattr__: trying without 'is' prefix"
+            suffix = name[2:].lower()
+            if self.map.has_key(suffix):
+                r = self.map[suffix]
+            else:
+                # Default behavior
+                raise AttributeError, name
+        elif name.startswith('get'):
+            # try removing 'get' prefix
+            if DEBUG_GETATTR:
+                print >> sys.stderr, "    __getattr__: trying without 'get' prefix"
+            suffix = name[3:].lower()
+            if self.map.has_key(suffix):
+                r = self.map[suffix]
+            else:
+                # Default behavior
+                raise AttributeError, name
+        elif name == 'getResourceId':
+            if DEBUG_GETATTR:
+                print >> sys.stderr, "    __getattr__: getResourceId"
+            if self.map.has_key('resource-id'):
+                r = self.map['resource-id']
+            else:
+                # Default behavior
+                raise AttributeError, name
+        else:
+            # Default behavior
+            raise AttributeError, name
+
+
+        # if the method name starts with 'is' let's assume its return value is boolean
+#         if name[:2] == 'is':
+#             r = True if r == 'true' else False
+        if r == 'true':
+            r = True
+        elif r == 'false':
+            r = False
+
+        # this should not cached in some way
+        def innerMethod():
+            if DEBUG_GETATTR:
+                print >>sys.stderr, "innerMethod: %s returning %s" % (innerMethod.__name__, r)
+            return r
+
+        innerMethod.__name__ = name
+
+        # this should work, but then there's problems with the arguments of innerMethod
+        # even if innerMethod(self) is added
+        #setattr(View, innerMethod.__name__, innerMethod)
+        #setattr(self, innerMethod.__name__, innerMethod)
+
+        return innerMethod
+
+    def __call__(self, *args, **kwargs):
+        if DEBUG_CALL:
+            print >>sys.stderr, "__call__(%s)" % (args if args else None)
+
+    def getClass(self):
+        '''
+        Gets the L{View} class
+
+        @return:  the L{View} class or C{None} if not defined
+        '''
+
+        try:
+            return self.map['class']
+        except:
+            return None
+
+    def getId(self):
+        '''
+        Gets the L{View} Id
+
+        @return: the L{View} C{Id} or C{None} if not defined
+        @see: L{getUniqueId()}
+        '''
+
+        try:
+            return self.map['resource-id']
+        except:
+            pass
+
+        try:
+            return self.map[self.idProperty]
+        except:
+            return None
+
+    def getContentDescription(self):
+        '''
+        Gets the content description.
+        '''
+
+        try:
+            return self.map['content-desc']
+        except:
+            return None
+
+    def getTag(self):
+        '''
+        Gets the tag.
+        '''
+
+        try:
+            return self.map[self.tagProperty]
+        except:
+            return None
+
+    def getParent(self):
+        '''
+        Gets the parent.
+        '''
+
+        return self.parent
+
+    def getChildren(self):
+        '''
+        Gets the children of this L{View}.
+        '''
+
+        return self.children
+
+    def getText(self):
+        '''
+        Gets the text attribute.
+
+        @return: the text attribute or C{None} if not defined
+        '''
+
+        try:
+            return self.map[self.textProperty]
+        except Exception:
+            return None
+
+    def getHeight(self):
+        '''
+        Gets the height.
+        '''
+
+        if self.useUiAutomator:
+            return self.map['bounds'][1][1] - self.map['bounds'][0][1]
+        else:
+            try:
+                return int(self.map[self.heightProperty])
+            except:
+                return 0
+
+    def getWidth(self):
+        '''
+        Gets the width.
+        '''
+
+        if self.useUiAutomator:
+            return self.map['bounds'][1][0] - self.map['bounds'][0][0]
+        else:
+            try:
+                return int(self.map[self.widthProperty])
+            except:
+                return 0
+
+    def getUniqueId(self):
+        '''
+        Gets the unique Id of this View.
+
+        @see: L{ViewClient.__splitAttrs()} for a discussion on B{Unique Ids}
+        '''
+
+        try:
+            return self.map['uniqueId']
+        except:
+            return None
+
+    def getVisibility(self):
+        '''
+        Gets the View visibility
+        '''
+
+        try:
+            if self.map[GET_VISIBILITY_PROPERTY] == 'VISIBLE':
+                return VISIBLE
+            elif self.map[GET_VISIBILITY_PROPERTY] == 'INVISIBLE':
+                return INVISIBLE
+            elif self.map[GET_VISIBILITY_PROPERTY] == 'GONE':
+                return GONE
+            else:
+                return -2
+        except:
+            return -1
+
+    def getX(self):
+        '''
+        Gets the View X coordinate
+        '''
+
+        return self.getXY()[0]
+
+    def __getX(self):
+        '''
+        Gets the View X coordinate
+        '''
+
+        if DEBUG_COORDS:
+            print >>sys.stderr, "getX(%s %s ## %s)" % (self.getClass(), self.getId(), self.getUniqueId())
+        x = 0
+
+        if self.useUiAutomator:
+            x = self.map['bounds'][0][0]
+        else:
+            try:
+                if GET_VISIBILITY_PROPERTY in self.map and self.map[GET_VISIBILITY_PROPERTY] == 'VISIBLE':
+                    _x = int(self.map[self.leftProperty])
+                    if DEBUG_COORDS: print >>sys.stderr, "   getX: VISIBLE adding %d" % _x
+                    x += _x
+            except:
+                warnings.warn("View %s has no '%s' property" % (self.getId(), self.leftProperty))
+
+        if DEBUG_COORDS: print >>sys.stderr, "   getX: returning %d" % (x)
+        return x
+
+    def getY(self):
+        '''
+        Gets the View Y coordinate
+        '''
+
+        return self.getXY()[1]
+
+    def __getY(self):
+        '''
+        Gets the View Y coordinate
+        '''
+
+        if DEBUG_COORDS:
+            print >>sys.stderr, "getY(%s %s ## %s)" % (self.getClass(), self.getId(), self.getUniqueId())
+        y = 0
+
+        if self.useUiAutomator:
+            y = self.map['bounds'][0][1]
+        else:
+            try:
+                if GET_VISIBILITY_PROPERTY in self.map and self.map[GET_VISIBILITY_PROPERTY] == 'VISIBLE':
+                    _y = int(self.map[self.topProperty])
+                    if DEBUG_COORDS: print >>sys.stderr, "   getY: VISIBLE adding %d" % _y
+                    y += _y
+            except:
+                warnings.warn("View %s has no '%s' property" % (self.getId(), self.topProperty))
+
+        if DEBUG_COORDS: print >>sys.stderr, "   getY: returning %d" % (y)
+        return y
+
+    def getXY(self, debug=False):
+        '''
+        Returns the I{screen} coordinates of this C{View}.
+
+        WARNING: Don't call self.getX() or self.getY() inside this method
+        or it will enter an infinite loop
+
+        @return: The I{screen} coordinates of this C{View}
+        '''
+
+        if DEBUG_COORDS or debug:
+            try:
+                _id = self.getId()
+            except:
+                _id = "NO_ID"
+            print >> sys.stderr, "getXY(%s %s ## %s)" % (self.getClass(), _id, self.getUniqueId())
+
+        x = self.__getX()
+        y = self.__getY()
+        if self.useUiAutomator:
+            return (x, y)
+
+        parent = self.parent
+        if DEBUG_COORDS: print >> sys.stderr, "   getXY: x=%s y=%s parent=%s" % (x, y, parent.getUniqueId() if parent else "None")
+        hx = 0
+        ''' Hierarchy accumulated X '''
+        hy = 0
+        ''' Hierarchy accumulated Y '''
+
+        if DEBUG_COORDS: print >> sys.stderr, "   getXY: not using UiAutomator, calculating parent coordinates"
+        while parent != None:
+            if DEBUG_COORDS: print >> sys.stderr, "      getXY: parent: %s %s <<<<" % (parent.getClass(), parent.getId())
+            if SKIP_CERTAIN_CLASSES_IN_GET_XY_ENABLED:
+                if parent.getClass() in [ 'com.android.internal.widget.ActionBarView',
+                                   'com.android.internal.widget.ActionBarContextView',
+                                   'com.android.internal.view.menu.ActionMenuView',
+                                   'com.android.internal.policy.impl.PhoneWindow$DecorView' ]:
+                    if DEBUG_COORDS: print >> sys.stderr, "   getXY: skipping %s %s (%d,%d)" % (parent.getClass(), parent.getId(), parent.__getX(), parent.__getY())
+                    parent = parent.parent
+                    continue
+            if DEBUG_COORDS: print >> sys.stderr, "   getXY: parent=%s x=%d hx=%d y=%d hy=%d" % (parent.getId(), x, hx, y, hy)
+            hx += parent.__getX()
+            hy += parent.__getY()
+            parent = parent.parent
+
+        (wvx, wvy) = self.__dumpWindowsInformation(debug=debug)
+        if DEBUG_COORDS or debug:
+            print >>sys.stderr, "   getXY: wv=(%d, %d) (windows information)" % (wvx, wvy)
+        try:
+            if self.windowId:
+                fw = self.windows[self.windowId]
+            else:
+                fw = self.windows[self.currentFocus]
+            if DEBUG_STATUSBAR:
+                print >> sys.stderr, "    getXY: focused window=", fw
+                print >> sys.stderr, "    getXY: deciding whether to consider statusbar offset because current focused windows is at", (fw.wvx, fw.wvy), "parent", (fw.px, fw.py)
+        except KeyError:
+            fw = None
+        (sbw, sbh) = self.__obtainStatusBarDimensionsIfVisible()
+        if DEBUG_COORDS or debug:
+            print >>sys.stderr, "   getXY: sb=(%d, %d) (statusbar dimensions)" % (sbw, sbh)
+        statusBarOffset = 0
+        pwx = 0
+        pwy = 0
+
+        if fw:
+            if DEBUG_COORDS:
+                print >>sys.stderr, "    getXY: focused window=", fw, "sb=", (sbw, sbh)
+            if fw.wvy <= sbh: # it's very unlikely that fw.wvy < sbh, that is a window over the statusbar
+                if DEBUG_STATUSBAR: print >>sys.stderr, "        getXY: yes, considering offset=", sbh
+                statusBarOffset = sbh
+            else:
+                if DEBUG_STATUSBAR: print >>sys.stderr, "        getXY: no, ignoring statusbar offset fw.wvy=", fw.wvy, ">", sbh
+
+            if fw.py == fw.wvy:
+                if DEBUG_STATUSBAR: print >>sys.stderr, "        getXY: but wait, fw.py == fw.wvy so we are adjusting by ", (fw.px, fw.py)
+                pwx = fw.px
+                pwy = fw.py
+            else:
+                if DEBUG_STATUSBAR: print >>sys.stderr, "    getXY: fw.py=%d <= fw.wvy=%d, no adjustment" % (fw.py, fw.wvy)
+
+        if DEBUG_COORDS or DEBUG_STATUSBAR or debug:
+            print >>sys.stderr, "   getXY: returning (%d, %d) ***" % (x+hx+wvx+pwx, y+hy+wvy-statusBarOffset+pwy)
+            print >>sys.stderr, "                     x=%d+%d+%d+%d" % (x,hx,wvx,pwx)
+            print >>sys.stderr, "                     y=%d+%d+%d-%d+%d" % (y,hy,wvy,statusBarOffset,pwy)
+        return (x+hx+wvx+pwx, y+hy+wvy-statusBarOffset+pwy)
+
+    def getCoords(self):
+        '''
+        Gets the coords of the View
+
+        @return: A tuple containing the View's coordinates ((L, T), (R, B))
+        '''
+
+        if DEBUG_COORDS:
+            print >>sys.stderr, "getCoords(%s %s ## %s)" % (self.getClass(), self.getId(), self.getUniqueId())
+
+        (x, y) = self.getXY();
+        w = self.getWidth()
+        h = self.getHeight()
+        return ((x, y), (x+w, y+h))
+
+    def getPositionAndSize(self):
+        '''
+        Gets the position and size (X,Y, W, H)
+
+        @return: A tuple containing the View's coordinates (X, Y, W, H)
+        '''
+
+        (x, y) = self.getXY();
+        w = self.getWidth()
+        h = self.getHeight()
+        return (x, y, w, h)
+
+    def getBounds(self):
+        '''
+        Gets the View bounds
+        '''
+
+        if 'bounds' in self.map:
+            return self.map['bounds']
+        else:
+            return self.getCoords()
+
+    def getCenter(self):
+        '''
+        Gets the center coords of the View
+
+        @author: U{Dean Morin <https://github.com/deanmorin>}
+        '''
+
+        (left, top), (right, bottom) = self.getCoords()
+        x = left + (right - left) / 2
+        y = top + (bottom - top) / 2
+        return (x, y)
+
+    def __obtainStatusBarDimensionsIfVisible(self):
+        sbw = 0
+        sbh = 0
+        for winId in self.windows:
+            w = self.windows[winId]
+            if DEBUG_COORDS: print >> sys.stderr, "      __obtainStatusBarDimensionsIfVisible: w=", w, "   w.activity=", w.activity, "%%%"
+            if w.activity == 'StatusBar':
+                if w.wvy == 0 and w.visibility == 0:
+                    if DEBUG_COORDS: print >> sys.stderr, "      __obtainStatusBarDimensionsIfVisible: statusBar=", (w.wvw, w.wvh)
+                    sbw = w.wvw
+                    sbh = w.wvh
+                break
+
+        return (sbw, sbh)
+
+    def __obtainVxVy(self, m):
+        return obtainVxVy(m)
+
+    def __obtainVwVh(self, m):
+        return obtainVwVh(m)
+
+    def __obtainPxPy(self, m):
+        return obtainPxPy(m)
+
+    def __dumpWindowsInformation(self, debug=False):
+        self.windows = {}
+        self.currentFocus = None
+        dww = self.device.shell('dumpsys window windows')
+        if DEBUG_WINDOWS or debug: print >> sys.stderr, dww
+        lines = dww.splitlines()
+        widRE = re.compile('^ *Window #%s Window\{%s (u\d+ )?%s?.*\}:' %
+                            (_nd('num'), _nh('winId'), _ns('activity', greedy=True)))
+        currentFocusRE = re.compile('^  mCurrentFocus=Window\{%s .*' % _nh('winId'))
+        viewVisibilityRE = re.compile(' mViewVisibility=0x%s ' % _nh('visibility'))
+        # This is for 4.0.4 API-15
+        containingFrameRE = re.compile('^   *mContainingFrame=\[%s,%s\]\[%s,%s\] mParentFrame=\[%s,%s\]\[%s,%s\]' %
+                             (_nd('cx'), _nd('cy'), _nd('cw'), _nd('ch'), _nd('px'), _nd('py'), _nd('pw'), _nd('ph')))
+        contentFrameRE = re.compile('^   *mContentFrame=\[%s,%s\]\[%s,%s\] mVisibleFrame=\[%s,%s\]\[%s,%s\]' %
+                             (_nd('x'), _nd('y'), _nd('w'), _nd('h'), _nd('vx'), _nd('vy'), _nd('vx1'), _nd('vy1')))
+        # This is for 4.1 API-16
+        framesRE = re.compile('^   *Frames: containing=\[%s,%s\]\[%s,%s\] parent=\[%s,%s\]\[%s,%s\]' %
+                               (_nd('cx'), _nd('cy'), _nd('cw'), _nd('ch'), _nd('px'), _nd('py'), _nd('pw'), _nd('ph')))
+        contentRE = re.compile('^     *content=\[%s,%s\]\[%s,%s\] visible=\[%s,%s\]\[%s,%s\]' %
+                               (_nd('x'), _nd('y'), _nd('w'), _nd('h'), _nd('vx'), _nd('vy'), _nd('vx1'), _nd('vy1')))
+        policyVisibilityRE = re.compile('mPolicyVisibility=%s ' % _ns('policyVisibility', greedy=True))
+
+        for l in range(len(lines)):
+            m = widRE.search(lines[l])
+            if m:
+                num = int(m.group('num'))
+                winId = m.group('winId')
+                activity = m.group('activity')
+                wvx = 0
+                wvy = 0
+                wvw = 0
+                wvh = 0
+                px = 0
+                py = 0
+                visibility = -1
+                policyVisibility = 0x0
+
+                for l2 in range(l+1, len(lines)):
+                    m = widRE.search(lines[l2])
+                    if m:
+                        l += (l2-1)
+                        break
+                    m = viewVisibilityRE.search(lines[l2])
+                    if m:
+                        visibility = int(m.group('visibility'))
+                        if DEBUG_COORDS: print >> sys.stderr, "__dumpWindowsInformation: visibility=", visibility
+                    if self.build[VERSION_SDK_PROPERTY] >= 17:
+                        m = framesRE.search(lines[l2])
+                        if m:
+                            px, py = obtainPxPy(m)
+                            m = contentRE.search(lines[l2+2])
+                            if m:
+                                wvx, wvy = obtainVxVy(m)
+                                wvw, wvh = obtainVwVh(m)
+                    elif self.build[VERSION_SDK_PROPERTY] >= 16:
+                        m = framesRE.search(lines[l2])
+                        if m:
+                            px, py = self.__obtainPxPy(m)
+                            m = contentRE.search(lines[l2+1])
+                            if m:
+                                # FIXME: the information provided by 'dumpsys window windows' in 4.2.1 (API 16)
+                                # when there's a system dialog may not be correct and causes the View coordinates
+                                # be offset by this amount, see
+                                # https://github.com/dtmilano/AndroidViewClient/issues/29
+                                wvx, wvy = self.__obtainVxVy(m)
+                                wvw, wvh = self.__obtainVwVh(m)
+                    elif self.build[VERSION_SDK_PROPERTY] == 15:
+                        m = containingFrameRE.search(lines[l2])
+                        if m:
+                            px, py = self.__obtainPxPy(m)
+                            m = contentFrameRE.search(lines[l2+1])
+                            if m:
+                                wvx, wvy = self.__obtainVxVy(m)
+                                wvw, wvh = self.__obtainVwVh(m)
+                    elif self.build[VERSION_SDK_PROPERTY] == 10:
+                        m = containingFrameRE.search(lines[l2])
+                        if m:
+                            px, py = self.__obtainPxPy(m)
+                            m = contentFrameRE.search(lines[l2+1])
+                            if m:
+                                wvx, wvy = self.__obtainVxVy(m)
+                                wvw, wvh = self.__obtainVwVh(m)
+                    else:
+                        warnings.warn("Unsupported Android version %d" % self.build[VERSION_SDK_PROPERTY])
+
+                    #print >> sys.stderr, "Searching policyVisibility in", lines[l2]
+                    m = policyVisibilityRE.search(lines[l2])
+                    if m:
+                        policyVisibility = 0x0 if m.group('policyVisibility') == 'true' else 0x8
+
+                self.windows[winId] = Window(num, winId, activity, wvx, wvy, wvw, wvh, px, py, visibility + policyVisibility)
+            else:
+                m = currentFocusRE.search(lines[l])
+                if m:
+                    self.currentFocus = m.group('winId')
+
+        if  self.windowId and self.windowId in self.windows and self.windows[self.windowId].visibility == 0:
+            w = self.windows[self.windowId]
+            return (w.wvx, w.wvy)
+        elif self.currentFocus in self.windows and self.windows[self.currentFocus].visibility == 0:
+            if DEBUG_COORDS or debug:
+                print >> sys.stderr, "__dumpWindowsInformation: focus=", self.currentFocus
+                print >> sys.stderr, "__dumpWindowsInformation:", self.windows[self.currentFocus]
+            w = self.windows[self.currentFocus]
+            return (w.wvx, w.wvy)
+        else:
+            if DEBUG_COORDS: print >> sys.stderr, "__dumpWindowsInformation: (0,0)"
+            return (0,0)
+
+    def touch(self, eventType=adbclient.DOWN_AND_UP, deltaX=0, deltaY=0):
+        '''
+        Touches the center of this C{View}. The touch can be displaced from the center by
+        using C{deltaX} and C{deltaY} values.
+
+        @param eventType: The event type
+        @type eventType: L{adbclient.DOWN}, L{adbclient.UP} or L{adbclient.DOWN_AND_UP}
+        @param deltaX: Displacement from center (X axis)
+        @type deltaX: int
+        @param deltaY: Displacement from center (Y axis)
+        @type deltaY: int
+        '''
+
+        (x, y) = self.getCenter()
+        if deltaX:
+            x += deltaX
+        if deltaY:
+            y += deltaY
+        if DEBUG_TOUCH:
+            print >>sys.stderr, "should touch @ (%d, %d)" % (x, y)
+        if VIEW_CLIENT_TOUCH_WORKAROUND_ENABLED and eventType == adbclient.DOWN_AND_UP:
+            if WARNINGS:
+                print >> sys.stderr, "ViewClient: touch workaround enabled"
+            self.device.touch(x, y, eventType=adbclient.DOWN)
+            time.sleep(50/1000.0)
+            self.device.touch(x+10, y+10, eventType=adbclient.UP)
+        else:
+            if self.uiAutomatorHelper:
+                selector = self.obtainSelectorForView()
+                if selector:
+                    try:
+                        oid = self.uiAutomatorHelper.findObject(bySelector=selector)
+                        if DEBUG_UI_AUTOMATOR_HELPER:
+                            print >> sys.stderr, "oid=", oid
+                            print >> sys.stderr, "ignoring click delta to click View as UiObject"
+                        oid.click();
+                    except RuntimeError as e:
+                        print >> sys.stderr, e.message
+                        print >> sys.stderr, "UiObject click failed, using co-ordinates"
+                        self.uiAutomatorHelper.click(x=x, y=y)
+                else:
+                    # FIXME:
+                    # The View has no CD, TEXT or ID so we cannot use it in a selector to findObject()
+                    # We should try content description, text, and perhaps other properties before surrendering.
+                    # For now, tet's fall back to click(x, y)
+                    self.uiAutomatorHelper.click(x=x, y=y)
+            else:
+                self.device.touch(x, y, eventType=eventType)
+
+    def escapeSelectorChars(self, selector):
+        return selector.replace('@', '\\@').replace(',', '\\,')
+
+    def obtainSelectorForView(self):
+        selector = ''
+        if self.getContentDescription():
+            selector += 'desc@' + self.escapeSelectorChars(self.getContentDescription())
+        if self.getText():
+            if selector:
+                selector += ','
+            selector += 'text@' + self.escapeSelectorChars(self.getText())
+        if self.getId():
+            if selector:
+                selector += ','
+            selector += 'res@' + self.escapeSelectorChars(self.getId())
+        return selector
+
+    def longTouch(self, duration=2000):
+        '''
+        Long touches this C{View}
+
+        @param duration: duration in ms
+        '''
+
+        (x, y) = self.getCenter()
+        if self.uiAutomatorHelper:
+            self.uiAutomatorHelper.swipe(startX=x, startY=y, endX=x, endY=y, steps=200)
+        else:
+            # FIXME: get orientation
+            self.device.longTouch(x, y, duration, orientation=-1)
+
+    def allPossibleNamesWithColon(self, name):
+        l = []
+        for _ in range(name.count("_")):
+            name = name.replace("_", ":", 1)
+            l.append(name)
+        return l
+
+    def intersection(self, l1, l2):
+        return list(set(l1) & set(l2))
+
+    def containsPoint(self, (x, y)):
+        (X, Y, W, H) = self.getPositionAndSize()
+        return (((x >= X) and (x <= (X+W)) and ((y >= Y) and (y <= (Y+H)))))
+
+    def add(self, child):
+        '''
+        Adds a child
+
+        @type child: View
+        @param child: The child to add
+        '''
+        child.parent = self
+        self.children.append(child)
+
+    def isClickable(self):
+        return self.__getattr__('isClickable')()
+
+
+    def isFocused(self):
+        '''
+        Gets the focused value
+
+        @return: the focused value. If the property cannot be found returns C{False}
+        '''
+
+        try:
+            return True if self.map[self.isFocusedProperty].lower() == 'true' else False
+        except Exception:
+            return False
+
+    def variableNameFromId(self):
+        _id = self.getId()
+        if _id:
+            var = _id.replace('.', '_').replace(':', '___').replace('/', '_')
+        else:
+            _id = self.getUniqueId()
+            m = ID_RE.match(_id)
+            if m:
+                var = m.group(1)
+                if m.group(3):
+                    var += m.group(3)
+                if re.match('^\d', var):
+                    var = 'id_' + var
+        return var
+
+    def setTarget(self, target):
+        self.target = target
+
+    def isTarget(self):
+        return self.target
+
+    def writeImageToFile(self, filename, _format="PNG"):
+        '''
+        Write the View image to the specified filename in the specified format.
+
+        @type filename: str
+        @param filename: Absolute path and optional filename receiving the image. If this points to
+                         a directory, then the filename is determined by this View unique ID and
+                         format extension.
+        @type _format: str
+        @param _format: Image format (default format is PNG)
+        '''
+
+        filename = self.device.substituteDeviceTemplate(filename)
+        if not os.path.isabs(filename):
+            raise ValueError("writeImageToFile expects an absolute path (fielname='%s')" % filename)
+        if os.path.isdir(filename):
+            filename = os.path.join(filename, self.variableNameFromId() + '.' + _format.lower())
+        if DEBUG:
+            print >> sys.stderr, "writeImageToFile: saving image to '%s' in %s format" % (filename, _format)
+        #self.device.takeSnapshot().getSubImage(self.getPositionAndSize()).writeToFile(filename, _format)
+        # crop:
+        # im.crop(box) ⇒ image
+        # Returns a copy of a rectangular region from the current image.
+        # The box is a 4-tuple defining the left, upper, right, and lower pixel coordinate.
+        ((l, t), (r, b)) = self.getCoords()
+        box = (l, t, r, b)
+        if DEBUG:
+            print >> sys.stderr, "writeImageToFile: cropping", box, "    reconnect=", self.device.reconnect
+        if self.uiAutomatorHelper:
+            if DEBUG_UI_AUTOMATOR_HELPER:
+                print >> sys.stderr, "Taking screenshot using UiAutomatorHelper"
+            received = self.uiAutomatorHelper.takeScreenshot()
+            stream = StringIO.StringIO(received)
+            try:
+                from PIL import Image
+                image = Image.open(stream)
+            except ImportError as ex:
+                # FIXME: this method should be global
+                self.pilNotInstalledWarning()
+                sys.exit(1)
+            except IOError, ex:
+                print >> sys.stderr, ex
+                print repr(stream)
+                sys.exit(1)
+        else:
+            image = self.device.takeSnapshot(reconnect=self.device.reconnect)
+        image.crop(box).save(filename, _format)
+
+    def __smallStr__(self):
+        __str = unicode("View[", 'utf-8', 'replace')
+        if "class" in self.map:
+            __str += " class=" + self.map['class']
+        __str += " id=%s" % self.getId()
+        __str += " ]   parent="
+        if self.parent and "class" in self.parent.map:
+            __str += "%s" % self.parent.map["class"]
+        else:
+            __str += "None"
+
+        return __str
+
+    def __tinyStr__(self):
+        __str = unicode("View[", 'utf-8', 'replace')
+        if "class" in self.map:
+            __str += " class=" + re.sub('.*\.', '', self.map['class'])
+        __str += " id=%s" % self.getId()
+        __str += " ]"
+
+        return __str
+
+    def __microStr__(self):
+        __str = unicode('', 'utf-8', 'replace')
+        if "class" in self.map:
+            __str += re.sub('.*\.', '', self.map['class'])
+        _id = self.getId().replace('id/no_id/', '-')
+        __str += _id
+        ((L, T), (R, B)) = self.getCoords()
+        __str += '@%04d%04d%04d%04d' % (L, T, R, B)
+        __str += ''
+
+        return __str
+
+
+    def __str__(self):
+        __str = unicode("View[", 'utf-8', 'replace')
+        if "class" in self.map:
+            __str += " class=" + self.map["class"].__str__() + " "
+        for a in self.map:
+            __str += a + "="
+            # decode() works only on python's 8-bit strings
+            if isinstance(self.map[a], unicode):
+                __str += self.map[a]
+            else:
+                __str += unicode(str(self.map[a]), 'utf-8', errors='replace')
+            __str += " "
+        __str += "]   parent="
+        if self.parent:
+            if "class" in self.parent.map:
+                __str += "%s" % self.parent.map["class"]
+            else:
+                __str += self.parent.getId().__str__()
+        else:
+            __str += "None"
+
+        return __str
+
+class TextView(View):
+    '''
+    TextView class.
+    '''
+
+    pass
+
+class EditText(TextView):
+    '''
+    EditText class.
+    '''
+
+    def type(self, text, alreadyTouched=False):
+        if not text:
+            return
+        if not alreadyTouched:
+            self.touch()
+        time.sleep(0.5)
+        self.device.type(text)
+        time.sleep(0.5)
+
+    def setText(self, text):
+        """
+        This function makes sure that any previously entered text is deleted before
+        setting the value of the field.
+        """
+        if self.text() == text:
+            return
+        self.touch()
+        guardrail = 0
+        maxSize = len(self.text()) + 1
+        while maxSize > guardrail:
+            guardrail += 1
+            self.device.press('KEYCODE_DEL', adbclient.DOWN_AND_UP)
+            self.device.press('KEYCODE_FORWARD_DEL', adbclient.DOWN_AND_UP)
+        self.type(text, alreadyTouched=True)
+
+    def backspace(self):
+        self.touch()
+        time.sleep(1)
+        self.device.press('KEYCODE_DEL', adbclient.DOWN_AND_UP)
+
+class UiDevice():
+    '''
+    Provides access to state information about the device. You can also use this class to simulate
+    user actions on the device, such as pressing the d-pad or pressing the Home and Menu buttons.
+    '''
+
+    def __init__(self, vc):
+        self.vc = vc
+        self.device = self.vc.device
+
+    def openNotification(self):
+        '''
+        Opens the notification shade.
+        '''
+
+        # the tablet has a different Notification/Quick Settings bar depending on x
+        w13 = self.device.display['width'] / 3
+        s = (w13, 0)
+        e = (w13, self.device.display['height']/2)
+        self.device.drag(s, e, 500, 20, -1)
+        self.vc.sleep(1)
+        self.vc.dump(-1)
+
+    def openQuickSettings(self):
+        '''
+        Opens the Quick Settings shade.
+        '''
+
+        # the tablet has a different Notification/Quick Settings bar depending on x
+        w23 = 2 * self.device.display['width'] / 3
+        s = (w23, 0)
+        e = (w23, self.device.display['height']/2)
+        self.device.drag(s, e, 500, 20, -1)
+        self.vc.sleep(1)
+        if self.vc.getSdkVersion() >= 20:
+            self.device.drag(s, e, 500, 20, -1)
+            self.vc.sleep(1)
+        self.vc.dump(-1)
+
+    def openQuickSettingsSettings(self):
+        '''
+        Opens the Quick Settings shade and then tries to open Settings from there.
+        '''
+
+        STATUS_BAR_SETTINGS_SETTINGS_BUTTON = [
+            u"Settings", u"Cài đặt", u"Instellingen", u"Կարգավորումներ", u"设置", u"Nastavitve", u"සැකසීම්", u"Ayarlar",
+            u"Setelan", u"Настройки", u"تنظیمات", u"Mga Setting", u"Тохиргоо", u"Configuració", u"Setări", u"Налады",
+            u"Einstellungen", u"პარამეტრები", u"सेटिङहरू", u"Կարգավորումներ", u"Nustatymai", u"Beállítások", u"設定",
+            u"सेटिंग", u"Настройки", u"Inställningar", u"設定", u"ການຕັ້ງຄ່າ", u"Configurações", u"Tetapan", u"설정",
+            u"ការ​កំណត់", u"Ajustes", u"הגדרות", u"Ustawienia", u"Nastavení", u"Ρυθμίσεις", u"Тохиргоо", u"Ayarlar",
+            u"Indstillinger", u"Налаштування", u"Mipangilio", u"Izilungiselelo", u"設定", u"Nastavenia", u"Paramètres",
+            u"ቅንብሮች", u"การตั้งค่า", u"Seaded", u"Iestatījumi", u"Innstillinger", u"Подешавања", u"الإعدادات", u"සැකසීම්",
+            u"Definições", u"Configuración", u"პარამეტრები", u"Postavke", u"Ayarlar", u"Impostazioni", u"Asetukset",
+            u"Instellings", u"Seaded", u"ការ​កំណត់", u"सेटिङहरू", u"Tetapan"
+            ]
+
+        self.openQuickSettings()
+
+        # this works on API >= 20
+        found = False
+        for s in STATUS_BAR_SETTINGS_SETTINGS_BUTTON:
+            if DEBUG:
+                print >> sys.stderr, u"finding view with cd=", type(s)
+            view = self.vc.findViewWithContentDescription(u'''{0}'''.format(s))
+            if view:
+                found = True
+                view.touch()
+                break
+
+        if not found:
+            # for previous APIs, let's find the text
+            for s in STATUS_BAR_SETTINGS_SETTINGS_BUTTON:
+                if DEBUG:
+                    print >> sys.stderr, "s=", type(s)
+                    try:
+                        print >> sys.stderr, "finding view with text=", u'''{0}'''.format(s)
+                    except:
+                        pass
+                view = self.vc.findViewWithText(s)
+                if view:
+                    found = True
+                    view.touch()
+                    break
+
+        if not found:
+            raise ViewNotFoundException("content-description", "'Settings' or text 'Settings'", "ROOT")
+
+        self.vc.sleep(1)
+        self.vc.dump(window=-1)
+
+    def changeLanguage(self, languageTo):
+        LANGUAGE_SETTINGS = {
+            "en":    u"Language & input",
+            "af":    u"Taal en invoer",
+            "am":    u"ቋንቋ እና ግቤት",
+            "ar":    u"اللغة والإدخال",
+            "az":    u"Dil və daxiletmə",
+            "az-rAZ":    u"Dil və daxiletmə",
+            "be":    u"Мова і ўвод",
+            "bg":    u"Език и въвеждане",
+            "ca":    u"Idioma i introducció de text",
+            "cs":    u"Jazyk a zadávání",
+            "da":    u"Sprog og input",
+            "de":    u"Sprache & Eingabe",
+            "el":    u"Γλώσσα και εισαγωγή",
+            "en-rGB":    u"Language & input",
+            "en-rIN":    u"Language & input",
+            "es":    u"Idioma e introducción de texto",
+            "es-rUS":    u"Teclado e idioma",
+            "et":    u"Keeled ja sisestamine",
+            "et-rEE":    u"Keeled ja sisestamine",
+            "fa":    u"زبان و ورود اطلاعات",
+            "fi":    u"Kieli ja syöttötapa",
+            "fr":    u"Langue et saisie",
+            "fr-rCA":    u"Langue et saisie",
+            "hi":    u"भाषा और अक्षर",
+            "hr":    u"Jezik i ulaz",
+            "hu":    u"Nyelv és bevitel",
+            "hy":    u"Լեզվի & ներմուծում",
+            "hy-rAM":    u"Լեզու և ներմուծում",
+            "in":    u"Bahasa & masukan",
+            "it":    u"Lingua e immissione",
+            "iw":    u"שפה וקלט",
+            "ja":    u"言語と入力",
+            "ka":    u"ენისა და შეყვანის პარამეტრები",
+            "ka-rGE":    u"ენისა და შეყვანის პარამეტრები",
+            "km":    u"ភាសា & ការ​បញ្ចូល",
+            "km-rKH":    u"ភាសា & ការ​បញ្ចូល",
+            "ko":    u"언어 및 키보드",
+            "lo":    u"ພາສາ & ການປ້ອນຂໍ້ມູນ",
+            "lo-rLA":    u"ພາສາ & ການປ້ອນຂໍ້ມູນ",
+            "lt":    u"Kalba ir įvestis",
+            "lv":    u"Valodas ievade",
+            "mn":    u"Хэл & оруулах",
+            "mn-rMN":    u"Хэл & оруулах",
+            "ms":    u"Bahasa & input",
+            "ms-rMY":    u"Bahasa & input",
+            "nb":    u"Språk og inndata",
+            "ne":    u"भाषा र इनपुट",
+            "ne-rNP":    u"भाषा र इनपुट",
+            "nl":    u"Taal en invoer",
+            "pl":    u"Język, klawiatura, głos",
+            "pt":    u"Idioma e entrada",
+            "pt-rPT":    u"Idioma e entrada",
+            "ro":    u"Limbă și introducere de text",
+            "ru":    u"Язык и ввод",
+            "si":    u"භාෂාව සහ ආදානය",
+            "si-rLK":    u"භාෂාව සහ ආදානය",
+            "sk":    u"Jazyk & vstup",
+            "sl":    u"Jezik in vnos",
+            "sr":    u"Језик и унос",
+            "sv":    u"Språk och inmatning",
+            "sw":    u"Lugha, Kibodi na Sauti",
+            "th":    u"ภาษาและการป้อนข้อมูล",
+            "tl":    u"Wika at input",
+            "tr":    u"Dil ve giriş",
+            "uk":    u"Мова та введення",
+            "vi":    u"Ngôn ngữ & phương thức nhập",
+            "zh-rCN":    u"语言和输入法",
+            "zh-rHK":    u"語言與輸入裝置",
+            "zh-rTW":    u"語言與輸入設定",
+            "zu":    u"Ulimi & ukufakwa",
+        }
+
+        PHONE_LANGUAGE = {
+            "en":    u"Language",
+            "af":    u"Taal",
+            "am":    u"ቋንቋ",
+            "ar":    u"اللغة",
+            "az":    u"Dil",
+            "az-rAZ":    u"Dil",
+            "be":    u"Мова",
+            "bg":    u"Език",
+            "ca":    u"Idioma",
+            "cs":    u"Jazyk",
+            "da":    u"Sprog",
+            "de":    u"Sprache",
+            "el":    u"Γλώσσα",
+            "en-rGB":    u"Language",
+            "en-rIN":    u"Language",
+            "es":    u"Idioma",
+            "es-rUS":    u"Idioma",
+            "et":    u"Keel",
+            "et-rEE":    u"Keel",
+            "fa":    u"زبان",
+            "fi":    u"Kieli",
+            "fr":    u"Langue",
+            "fr-rCA":    u"Langue",
+            "hi":    u"भाषा",
+            "hr":    u"Jezik",
+            "hu":    u"Nyelv",
+            "hy":    u"Lեզուն",
+            "hy-rAM":    u"Lեզուն",
+            "in":    u"Bahasa",
+            "it":    u"Lingua",
+            "iw":    u"שפה",
+            "ja":    u"言語",
+            "ka":    u"ენა",
+            "ka-rGE":    u"ენა",
+            "km":    u"ភាសា",
+            "km-rKH":    u"ភាសា",
+            "ko":    u"언어",
+            "lo":    u"ພາສາ",
+            "lo-rLA":    u"ພາສາ",
+            "lt":    u"Kalba",
+            "lv":    u"Valoda",
+            "mn":    u"Хэл",
+            "mn-rMN":    u"Хэл",
+            "ms":    u"Bahasa",
+            "ms-rMY":    u"Bahasa",
+            "nb":    u"Språk",
+            "ne":    u"भाषा",
+            "nl":    u"Taal",
+            "pl":    u"Język",
+            "pt":    u"Idioma",
+            "pt-rPT":    u"Idioma",
+            "ro":    u"Limba",
+            "ru":    u"Язык",
+            "si":    u"භාෂාව",
+            "si-rLK":    u"භාෂාව",
+            "sk":    u"Jazyk",
+            "sl":    u"Jezik",
+            "sr":    u"Језик",
+            "sv":    u"Språk",
+            "sw":    u"Lugha",
+            "th":    u"ภาษา",
+            "tl":    u"Wika",
+            "tr":    u"Dil",
+            "uk":    u"Мова",
+            "vi":    u"Ngôn ngữ",
+            "zh-rCN":    u"语言",
+            "zh-rHK":    u"語言",
+            "zh-rTW":    u"語言",
+            "zu":    u"Ulimi",
+        }
+
+        LANGUAGES = {
+            "en": u"English (United States)",
+            "es-rUS": u"Español (Estados Unidos)",
+            "af": u"Afrikaans", # Afrikaans
+            "af-rNA": u"Afrikaans (Namibië)", # Afrikaans (Namibia)
+            "af-rZA": u"Afrikaans (Suid-Afrika)", # Afrikaans (South Africa)
+            "agq": u"Aghem", # Aghem
+            "agq-rCM": u"Aghem (Kàmàlûŋ)", # Aghem (Cameroon)
+            "ak": u"Akan", # Akan
+            "ak-rGH": u"Akan (Gaana)", # Akan (Ghana)
+            "am": u"አማርኛ", # Amharic
+            "am-rET": u"አማርኛ (ኢትዮጵያ)", # Amharic (Ethiopia)
+            "ar": u"العربية", # Arabic
+            "ar_001": u"العربية (العالم)", # Arabic (World)
+            "ar-rAE": u"العربية (الإمارات العربية المتحدة)", # Arabic (United Arab Emirates)
+            "ar-rBH": u"العربية (البحرين)", # Arabic (Bahrain)
+            "ar-rDJ": u"العربية (جيبوتي)", # Arabic (Djibouti)
+            "ar-rDZ": u"العربية (الجزائر)", # Arabic (Algeria)
+            "ar-rEG": u"العربية (مصر)", # Arabic (Egypt)
+            "ar-rEH": u"العربية (الصحراء الغربية)", # Arabic (Western Sahara)
+            "ar-rER": u"العربية (أريتريا)", # Arabic (Eritrea)
+            "ar-rIL": u"العربية (إسرائيل)", # Arabic (Israel)
+            "ar-rIQ": u"العربية (العراق)", # Arabic (Iraq)
+            "ar-rJO": u"العربية (الأردن)", # Arabic (Jordan)
+            "ar-rKM": u"العربية (جزر القمر)", # Arabic (Comoros)
+            "ar-rKW": u"العربية (الكويت)", # Arabic (Kuwait)
+            "ar-rLB": u"العربية (لبنان)", # Arabic (Lebanon)
+            "ar-rLY": u"العربية (ليبيا)", # Arabic (Libya)
+            "ar-rMA": u"العربية (المغرب)", # Arabic (Morocco)
+            "ar-rMR": u"العربية (موريتانيا)", # Arabic (Mauritania)
+            "ar-rOM": u"العربية (عُمان)", # Arabic (Oman)
+            "ar-rPS": u"العربية (فلسطين)", # Arabic (Palestine)
+            "ar-rQA": u"العربية (قطر)", # Arabic (Qatar)
+            "ar-rSA": u"العربية (المملكة العربية السعودية)", # Arabic (Saudi Arabia)
+            "ar-rSD": u"العربية (السودان)", # Arabic (Sudan)
+            "ar-rSO": u"العربية (الصومال)", # Arabic (Somalia)
+            "ar-rSY": u"العربية (سوريا)", # Arabic (Syria)
+            "ar-rTD": u"العربية (تشاد)", # Arabic (Chad)
+            "ar-rTN": u"العربية (تونس)", # Arabic (Tunisia)
+            "ar-rYE": u"العربية (اليمن)", # Arabic (Yemen)
+            "as": u"অসমীয়া", # Assamese
+            "as-rIN": u"অসমীয়া (ভাৰত)", # Assamese (India)
+            "asa": u"Kipare", # Asu
+            "asa-rTZ": u"Kipare (Tadhania)", # Asu (Tanzania)
+            "az": u"Azərbaycanca", # Azerbaijani
+            "az-rCYRL": u"Азәрбајҹан (CYRL)", # Azerbaijani (CYRL)
+            "az-rCYRL_AZ": u"Азәрбајҹан (Азәрбајҹан,AZ)", # Azerbaijani (Azerbaijan,AZ)
+            "az-rLATN": u"Azərbaycanca (LATN)", # Azerbaijani (LATN)
+            "az-rLATN_AZ": u"Azərbaycanca (Azərbaycan,AZ)", # Azerbaijani (Azerbaijan,AZ)
+            "bas": u"Ɓàsàa", # Basaa
+            "bas-rCM": u"Ɓàsàa (Kàmɛ̀rûn)", # Basaa (Cameroon)
+            "be": u"беларуская", # Belarusian
+            "be-rBY": u"беларуская (Беларусь)", # Belarusian (Belarus)
+            "bem": u"Ichibemba", # Bemba
+            "bem-rZM": u"Ichibemba (Zambia)", # Bemba (Zambia)
+            "bez": u"Hibena", # Bena
+            "bez-rTZ": u"Hibena (Hutanzania)", # Bena (Tanzania)
+            "bg": u"български", # Bulgarian
+            "bg-rBG": u"български (България)", # Bulgarian (Bulgaria)
+            "bm": u"Bamanakan", # Bambara
+            "bm-rML": u"Bamanakan (Mali)", # Bambara (Mali)
+            "bn": u"বাংলা", # Bengali
+            "bn-rBD": u"বাংলা (বাংলাদেশ)", # Bengali (Bangladesh)
+            "bn-rIN": u"বাংলা (ভারত)", # Bengali (India)
+            "bo": u"པོད་སྐད་", # Tibetan
+            "bo-rCN": u"པོད་སྐད་ (རྒྱ་ནག)", # Tibetan (China)
+            "bo-rIN": u"པོད་སྐད་ (རྒྱ་གར་)", # Tibetan (India)
+            "br": u"Brezhoneg", # Breton
+            "br-rFR": u"Brezhoneg (Frañs)", # Breton (France)
+            "brx": u"बड़ो", # Bodo
+            "brx-rIN": u"बड़ो (भारत)", # Bodo (India)
+            "bs": u"Bosanski", # Bosnian
+            "bs-rCYRL": u"босански (CYRL)", # Bosnian (CYRL)
+            "bs-rCYRL_BA": u"босански (Босна и Херцеговина,BA)", # Bosnian (Bosnia and Herzegovina,BA)
+            "bs-rLATN": u"Bosanski (LATN)", # Bosnian (LATN)
+            "bs-rLATN_BA": u"Bosanski (Bosna i Hercegovina,BA)", # Bosnian (Bosnia and Herzegovina,BA)
+            "ca": u"Català", # Catalan
+            "ca-rAD": u"Català (Andorra)", # Catalan (Andorra)
+            "ca-rES": u"Català (Espanya)", # Catalan (Spain)
+            "cgg": u"Rukiga", # Chiga
+            "cgg-rUG": u"Rukiga (Uganda)", # Chiga (Uganda)
+            "chr": u"ᏣᎳᎩ", # Cherokee
+            "chr-rUS": u"ᏣᎳᎩ (ᎠᎹᏰᏟ)", # Cherokee (United States)
+            "cs": u"čeština", # Czech
+            "cs-rCZ": u"čeština (Česká republika)", # Czech (Czech Republic)
+            "cy": u"Cymraeg", # Welsh
+            "cy-rGB": u"Cymraeg (y Deyrnas Unedig)", # Welsh (United Kingdom)
+            "da": u"Dansk", # Danish
+            "da-rDK": u"Dansk (Danmark)", # Danish (Denmark)
+            "dav": u"Kitaita", # Taita
+            "dav-rKE": u"Kitaita (Kenya)", # Taita (Kenya)
+            "de": u"Deutsch", # German
+            "de-rAT": u"Deutsch (Österreich)", # German (Austria)
+            "de-rBE": u"Deutsch (Belgien)", # German (Belgium)
+            "de-rCH": u"Deutsch (Schweiz)", # German (Switzerland)
+            "de-rDE": u"Deutsch (Deutschland)", # German (Germany)
+            "de-rLI": u"Deutsch (Liechtenstein)", # German (Liechtenstein)
+            "de-rLU": u"Deutsch (Luxemburg)", # German (Luxembourg)
+            "dje": u"Zarmaciine", # Zarma
+            "dje-rNE": u"Zarmaciine (Nižer)", # Zarma (Niger)
+            "dua": u"Duálá", # Duala
+            "dua-rCM": u"Duálá (Cameroun)", # Duala (Cameroon)
+            "dyo": u"Joola", # Jola-Fonyi
+            "dyo-rSN": u"Joola (Senegal)", # Jola-Fonyi (Senegal)
+            "dz": u"རྫོང་ཁ", # Dzongkha
+            "dz-rBT": u"རྫོང་ཁ (འབྲུག)", # Dzongkha (Bhutan)
+            "ebu": u"Kĩembu", # Embu
+            "ebu-rKE": u"Kĩembu (Kenya)", # Embu (Kenya)
+            "ee": u"Eʋegbe", # Ewe
+            "ee-rGH": u"Eʋegbe (Ghana nutome)", # Ewe (Ghana)
+            "ee-rTG": u"Eʋegbe (Togo nutome)", # Ewe (Togo)
+            "el": u"Ελληνικά", # Greek
+            "el-rCY": u"Ελληνικά (Κύπρος)", # Greek (Cyprus)
+            "el-rGR": u"Ελληνικά (Ελλάδα)", # Greek (Greece)
+            "en": u"English", # English
+            "en_150": u"English (Europe)", # English (Europe)
+            "en-rAG": u"English (Antigua and Barbuda)", # English (Antigua and Barbuda)
+            "en-rAS": u"English (American Samoa)", # English (American Samoa)
+            "en-rAU": u"English (Australia)", # English (Australia)
+            "en-rBB": u"English (Barbados)", # English (Barbados)
+            "en-rBE": u"English (Belgium)", # English (Belgium)
+            "en-rBM": u"English (Bermuda)", # English (Bermuda)
+            "en-rBS": u"English (Bahamas)", # English (Bahamas)
+            "en-rBW": u"English (Botswana)", # English (Botswana)
+            "en-rBZ": u"English (Belize)", # English (Belize)
+            "en-rCA": u"English (Canada)", # English (Canada)
+            "en-rCM": u"English (Cameroon)", # English (Cameroon)
+            "en-rDM": u"English (Dominica)", # English (Dominica)
+            "en-rFJ": u"English (Fiji)", # English (Fiji)
+            "en-rFM": u"English (Micronesia)", # English (Micronesia)
+            "en-rGB": u"English (United Kingdom)", # English (United Kingdom)
+            "en-rGD": u"English (Grenada)", # English (Grenada)
+            "en-rGG": u"English (Guernsey)", # English (Guernsey)
+            "en-rGH": u"English (Ghana)", # English (Ghana)
+            "en-rGI": u"English (Gibraltar)", # English (Gibraltar)
+            "en-rGM": u"English (Gambia)", # English (Gambia)
+            "en-rGU": u"English (Guam)", # English (Guam)
+            "en-rGY": u"English (Guyana)", # English (Guyana)
+            "en-rHK": u"English (Hong Kong)", # English (Hong Kong)
+            "en-rIE": u"English (Ireland)", # English (Ireland)
+            "en-rIM": u"English (Isle of Man)", # English (Isle of Man)
+            "en-rIN": u"English (India)", # English (India)
+            "en-rJE": u"English (Jersey)", # English (Jersey)
+            "en-rJM": u"English (Jamaica)", # English (Jamaica)
+            "en-rKE": u"English (Kenya)", # English (Kenya)
+            "en-rKI": u"English (Kiribati)", # English (Kiribati)
+            "en-rKN": u"English (Saint Kitts and Nevis)", # English (Saint Kitts and Nevis)
+            "en-rKY": u"English (Cayman Islands)", # English (Cayman Islands)
+            "en-rLC": u"English (Saint Lucia)", # English (Saint Lucia)
+            "en-rLR": u"English (Liberia)", # English (Liberia)
+            "en-rLS": u"English (Lesotho)", # English (Lesotho)
+            "en-rMG": u"English (Madagascar)", # English (Madagascar)
+            "en-rMH": u"English (Marshall Islands)", # English (Marshall Islands)
+            "en-rMP": u"English (Northern Mariana Islands)", # English (Northern Mariana Islands)
+            "en-rMT": u"English (Malta)", # English (Malta)
+            "en-rMU": u"English (Mauritius)", # English (Mauritius)
+            "en-rMW": u"English (Malawi)", # English (Malawi)
+            "en-rNA": u"English (Namibia)", # English (Namibia)
+            "en-rNG": u"English (Nigeria)", # English (Nigeria)
+            "en-rNZ": u"English (New Zealand)", # English (New Zealand)
+            "en-rPG": u"English (Papua New Guinea)", # English (Papua New Guinea)
+            "en-rPH": u"English (Philippines)", # English (Philippines)
+            "en-rPK": u"English (Pakistan)", # English (Pakistan)
+            "en-rPR": u"English (Puerto Rico)", # English (Puerto Rico)
+            "en-rPW": u"English (Palau)", # English (Palau)
+            "en-rSB": u"English (Solomon Islands)", # English (Solomon Islands)
+            "en-rSC": u"English (Seychelles)", # English (Seychelles)
+            "en-rSG": u"English (Singapore)", # English (Singapore)
+            "en-rSL": u"English (Sierra Leone)", # English (Sierra Leone)
+            "en-rSS": u"English (South Sudan)", # English (South Sudan)
+            "en-rSZ": u"English (Swaziland)", # English (Swaziland)
+            "en-rTC": u"English (Turks and Caicos Islands)", # English (Turks and Caicos Islands)
+            "en-rTO": u"English (Tonga)", # English (Tonga)
+            "en-rTT": u"English (Trinidad and Tobago)", # English (Trinidad and Tobago)
+            "en-rTZ": u"English (Tanzania)", # English (Tanzania)
+            "en-rUG": u"English (Uganda)", # English (Uganda)
+            "en-rUM": u"English (U.S. Outlying Islands)", # English (U.S. Outlying Islands)
+            "en-rUS": u"English (United States)", # English (United States)
+            "en-rUS_POSIX": u"English (United States,Computer)", # English (United States,Computer)
+            "en-rVC": u"English (Saint Vincent and the Grenadines)", # English (Saint Vincent and the Grenadines)
+            "en-rVG": u"English (British Virgin Islands)", # English (British Virgin Islands)
+            "en-rVI": u"English (U.S. Virgin Islands)", # English (U.S. Virgin Islands)
+            "en-rVU": u"English (Vanuatu)", # English (Vanuatu)
+            "en-rWS": u"English (Samoa)", # English (Samoa)
+            "en-rZA": u"English (South Africa)", # English (South Africa)
+            "en-rZM": u"English (Zambia)", # English (Zambia)
+            "en-rZW": u"English (Zimbabwe)", # English (Zimbabwe)
+            "eo": u"Esperanto", # Esperanto
+            "es": u"Español", # Spanish
+            "es_419": u"Español (Latinoamérica)", # Spanish (Latin America)
+            "es-rAR": u"Español (Argentina)", # Spanish (Argentina)
+            "es-rBO": u"Español (Bolivia)", # Spanish (Bolivia)
+            "es-rCL": u"Español (Chile)", # Spanish (Chile)
+            "es-rCO": u"Español (Colombia)", # Spanish (Colombia)
+            "es-rCR": u"Español (Costa Rica)", # Spanish (Costa Rica)
+            "es-rCU": u"Español (Cuba)", # Spanish (Cuba)
+            "es-rDO": u"Español (República Dominicana)", # Spanish (Dominican Republic)
+            "es-rEA": u"Español (Ceuta y Melilla)", # Spanish (Ceuta and Melilla)
+            "es-rEC": u"Español (Ecuador)", # Spanish (Ecuador)
+            "es-rES": u"Español (España)", # Spanish (Spain)
+            "es-rGQ": u"Español (Guinea Ecuatorial)", # Spanish (Equatorial Guinea)
+            "es-rGT": u"Español (Guatemala)", # Spanish (Guatemala)
+            "es-rHN": u"Español (Honduras)", # Spanish (Honduras)
+            "es-rIC": u"Español (Islas Canarias)", # Spanish (Canary Islands)
+            "es-rMX": u"Español (México)", # Spanish (Mexico)
+            "es-rNI": u"Español (Nicaragua)", # Spanish (Nicaragua)
+            "es-rPA": u"Español (Panamá)", # Spanish (Panama)
+            "es-rPE": u"Español (Perú)", # Spanish (Peru)
+            "es-rPH": u"Español (Filipinas)", # Spanish (Philippines)
+            "es-rPR": u"Español (Puerto Rico)", # Spanish (Puerto Rico)
+            "es-rPY": u"Español (Paraguay)", # Spanish (Paraguay)
+            "es-rSV": u"Español (El Salvador)", # Spanish (El Salvador)
+            "es-rUS": u"Español (Estados Unidos)", # Spanish (United States)
+            "es-rUY": u"Español (Uruguay)", # Spanish (Uruguay)
+            "es-rVE": u"Español (Venezuela)", # Spanish (Venezuela)
+            "et": u"Eesti", # Estonian
+            "et-rEE": u"Eesti (Eesti)", # Estonian (Estonia)
+            "eu": u"Euskara", # Basque
+            "eu-rES": u"Euskara (Espainia)", # Basque (Spain)
+            "ewo": u"Ewondo", # Ewondo
+            "ewo-rCM": u"Ewondo (Kamərún)", # Ewondo (Cameroon)
+            "fa": u"فارسی", # Persian
+            "fa-rAF": u"دری (افغانستان)", # Persian (Afghanistan)
+            "fa-rIR": u"فارسی (ایران)", # Persian (Iran)
+            "ff": u"Pulaar", # Fulah
+            "ff-rSN": u"Pulaar (Senegaal)", # Fulah (Senegal)
+            "fi": u"Suomi", # Finnish
+            "fi-rFI": u"Suomi (Suomi)", # Finnish (Finland)
+            "fil": u"Filipino", # Filipino
+            "fil-rPH": u"Filipino (Pilipinas)", # Filipino (Philippines)
+            "fo": u"Føroyskt", # Faroese
+            "fo-rFO": u"Føroyskt (Føroyar)", # Faroese (Faroe Islands)
+            "fr": u"Français", # French
+            "fr-rBE": u"Français (Belgique)", # French (Belgium)
+            "fr-rBF": u"Français (Burkina Faso)", # French (Burkina Faso)
+            "fr-rBI": u"Français (Burundi)", # French (Burundi)
+            "fr-rBJ": u"Français (Bénin)", # French (Benin)
+            "fr-rBL": u"Français (Saint-Barthélémy)", # French (Saint Barthélemy)
+            "fr-rCA": u"Français (Canada)", # French (Canada)
+            "fr-rCD": u"Français (République démocratique du Congo)", # French (Congo [DRC])
+            "fr-rCF": u"Français (République centrafricaine)", # French (Central African Republic)
+            "fr-rCG": u"Français (Congo-Brazzaville)", # French (Congo [Republic])
+            "fr-rCH": u"Français (Suisse)", # French (Switzerland)
+            "fr-rCI": u"Français (Côte d’Ivoire)", # French (Côte d’Ivoire)
+            "fr-rCM": u"Français (Cameroun)", # French (Cameroon)
+            "fr-rDJ": u"Français (Djibouti)", # French (Djibouti)
+            "fr-rDZ": u"Français (Algérie)", # French (Algeria)
+            "fr-rFR": u"Français (France)", # French (France)
+            "fr-rGA": u"Français (Gabon)", # French (Gabon)
+            "fr-rGF": u"Français (Guyane française)", # French (French Guiana)
+            "fr-rGN": u"Français (Guinée)", # French (Guinea)
+            "fr-rGP": u"Français (Guadeloupe)", # French (Guadeloupe)
+            "fr-rGQ": u"Français (Guinée équatoriale)", # French (Equatorial Guinea)
+            "fr-rHT": u"Français (Haïti)", # French (Haiti)
+            "fr-rKM": u"Français (Comores)", # French (Comoros)
+            "fr-rLU": u"Français (Luxembourg)", # French (Luxembourg)
+            "fr-rMA": u"Français (Maroc)", # French (Morocco)
+            "fr-rMC": u"Français (Monaco)", # French (Monaco)
+            "fr-rMF": u"Français (Saint-Martin [partie française])", # French (Saint Martin)
+            "fr-rMG": u"Français (Madagascar)", # French (Madagascar)
+            "fr-rML": u"Français (Mali)", # French (Mali)
+            "fr-rMQ": u"Français (Martinique)", # French (Martinique)
+            "fr-rMR": u"Français (Mauritanie)", # French (Mauritania)
+            "fr-rMU": u"Français (Maurice)", # French (Mauritius)
+            "fr-rNC": u"Français (Nouvelle-Calédonie)", # French (New Caledonia)
+            "fr-rNE": u"Français (Niger)", # French (Niger)
+            "fr-rPF": u"Français (Polynésie française)", # French (French Polynesia)
+            "fr-rRE": u"Français (Réunion)", # French (Réunion)
+            "fr-rRW": u"Français (Rwanda)", # French (Rwanda)
+            "fr-rSC": u"Français (Seychelles)", # French (Seychelles)
+            "fr-rSN": u"Français (Sénégal)", # French (Senegal)
+            "fr-rSY": u"Français (Syrie)", # French (Syria)
+            "fr-rTD": u"Français (Tchad)", # French (Chad)
+            "fr-rTG": u"Français (Togo)", # French (Togo)
+            "fr-rTN": u"Français (Tunisie)", # French (Tunisia)
+            "fr-rVU": u"Français (Vanuatu)", # French (Vanuatu)
+            "fr-rYT": u"Français (Mayotte)", # French (Mayotte)
+            "ga": u"Gaeilge", # Irish
+            "ga-rIE": u"Gaeilge (Éire)", # Irish (Ireland)
+            "gl": u"Galego", # Galician
+            "gl-rES": u"Galego (España)", # Galician (Spain)
+            "gsw": u"Schwiizertüütsch", # Swiss German
+            "gsw-rCH": u"Schwiizertüütsch (Schwiiz)", # Swiss German (Switzerland)
+            "gu": u"ગુજરાતી", # Gujarati
+            "gu-rIN": u"ગુજરાતી (ભારત)", # Gujarati (India)
+            "guz": u"Ekegusii", # Gusii
+            "guz-rKE": u"Ekegusii (Kenya)", # Gusii (Kenya)
+            "gv": u"Gaelg", # Manx
+            "gv-rGB": u"Gaelg (Rywvaneth Unys)", # Manx (United Kingdom)
+            "ha": u"Hausa", # Hausa
+            "ha-rLATN": u"Hausa (LATN)", # Hausa (LATN)
+            "ha-rLATN_GH": u"Hausa (Gana,GH)", # Hausa (Ghana,GH)
+            "ha-rLATN_NE": u"Hausa (Nijar,NE)", # Hausa (Niger,NE)
+            "ha-rLATN_NG": u"Hausa (Najeriya,NG)", # Hausa (Nigeria,NG)
+            "haw": u"ʻŌlelo Hawaiʻi", # Hawaiian
+            "haw-rUS": u"ʻŌlelo Hawaiʻi (ʻAmelika Hui Pū ʻIa)", # Hawaiian (United States)
+            "iw": u"עברית", # Hebrew
+            "iw-rIL": u"עברית (ישראל)", # Hebrew (Israel)
+            "hi": u"हिन्दी", # Hindi
+            "hi-rIN": u"हिन्दी (भारत)", # Hindi (India)
+            "hr": u"Hrvatski", # Croatian
+            "hr-rBA": u"Hrvatski (Bosna i Hercegovina)", # Croatian (Bosnia and Herzegovina)
+            "hr-rHR": u"Hrvatski (Hrvatska)", # Croatian (Croatia)
+            "hu": u"Magyar", # Hungarian
+            "hu-rHU": u"Magyar (Magyarország)", # Hungarian (Hungary)
+            "hy": u"հայերեն", # Armenian
+            "hy-rAM": u"հայերեն (Հայաստան)", # Armenian (Armenia)
+            "in": u"Bahasa Indonesia", # Indonesian
+            "in-rID": u"Bahasa Indonesia (Indonesia)", # Indonesian (Indonesia)
+            "ig": u"Igbo", # Igbo
+            "ig-rNG": u"Igbo (Nigeria)", # Igbo (Nigeria)
+            "ii": u"ꆈꌠꉙ", # Sichuan Yi
+            "ii-rCN": u"ꆈꌠꉙ (ꍏꇩ)", # Sichuan Yi (China)
+            "is": u"íslenska", # Icelandic
+            "is-rIS": u"íslenska (Ísland)", # Icelandic (Iceland)
+            "it": u"Italiano", # Italian
+            "it-rCH": u"Italiano (Svizzera)", # Italian (Switzerland)
+            "it-rIT": u"Italiano (Italia)", # Italian (Italy)
+            "it-rSM": u"Italiano (San Marino)", # Italian (San Marino)
+            "ja": u"日本語", # Japanese
+            "ja-rJP": u"日本語 (日本)", # Japanese (Japan)
+            "jgo": u"Ndaꞌa", # Ngomba
+            "jgo-rCM": u"Ndaꞌa (Kamɛlûn)", # Ngomba (Cameroon)
+            "jmc": u"Kimachame", # Machame
+            "jmc-rTZ": u"Kimachame (Tanzania)", # Machame (Tanzania)
+            "ka": u"ქართული", # Georgian
+            "ka-rGE": u"ქართული (საქართველო)", # Georgian (Georgia)
+            "kab": u"Taqbaylit", # Kabyle
+            "kab-rDZ": u"Taqbaylit (Lezzayer)", # Kabyle (Algeria)
+            "kam": u"Kikamba", # Kamba
+            "kam-rKE": u"Kikamba (Kenya)", # Kamba (Kenya)
+            "kde": u"Chimakonde", # Makonde
+            "kde-rTZ": u"Chimakonde (Tanzania)", # Makonde (Tanzania)
+            "kea": u"Kabuverdianu", # Kabuverdianu
+            "kea-rCV": u"Kabuverdianu (Kabu Verdi)", # Kabuverdianu (Cape Verde)
+            "khq": u"Koyra ciini", # Koyra Chiini
+            "khq-rML": u"Koyra ciini (Maali)", # Koyra Chiini (Mali)
+            "ki": u"Gikuyu", # Kikuyu
+            "ki-rKE": u"Gikuyu (Kenya)", # Kikuyu (Kenya)
+            "kk": u"қазақ тілі", # Kazakh
+            "kk-rCYRL": u"қазақ тілі (CYRL)", # Kazakh (CYRL)
+            "kk-rCYRL_KZ": u"қазақ тілі (Қазақстан,KZ)", # Kazakh (Kazakhstan,KZ)
+            "kl": u"Kalaallisut", # Kalaallisut
+            "kl-rGL": u"Kalaallisut (Kalaallit Nunaat)", # Kalaallisut (Greenland)
+            "kln": u"Kalenjin", # Kalenjin
+            "kln-rKE": u"Kalenjin (Emetab Kenya)", # Kalenjin (Kenya)
+            "km": u"ខ្មែរ", # Khmer
+            "km-rKH": u"ខ្មែរ (កម្ពុជា)", # Khmer (Cambodia)
+            "kn": u"ಕನ್ನಡ", # Kannada
+            "kn-rIN": u"ಕನ್ನಡ (ಭಾರತ)", # Kannada (India)
+            "ko": u"한국어", # Korean
+            "ko-rKP": u"한국어 (조선 민주주의 인민 공화국)", # Korean (North Korea)
+            "ko-rKR": u"한국어 (대한민국)", # Korean (South Korea)
+            "kok": u"कोंकणी", # Konkani
+            "kok-rIN": u"कोंकणी (भारत)", # Konkani (India)
+            "ks": u"کٲشُر", # Kashmiri
+            "ks-rARAB": u"کٲشُر (ARAB)", # Kashmiri (ARAB)
+            "ks-rARAB_IN": u"کٲشُر (ہِنٛدوستان,IN)", # Kashmiri (India,IN)
+            "ksb": u"Kishambaa", # Shambala
+            "ksb-rTZ": u"Kishambaa (Tanzania)", # Shambala (Tanzania)
+            "ksf": u"Rikpa", # Bafia
+            "ksf-rCM": u"Rikpa (kamɛrún)", # Bafia (Cameroon)
+            "kw": u"Kernewek", # Cornish
+            "kw-rGB": u"Kernewek (Rywvaneth Unys)", # Cornish (United Kingdom)
+            "lag": u"Kɨlaangi", # Langi
+            "lag-rTZ": u"Kɨlaangi (Taansanía)", # Langi (Tanzania)
+            "lg": u"Luganda", # Ganda
+            "lg-rUG": u"Luganda (Yuganda)", # Ganda (Uganda)
+            "ln": u"Lingála", # Lingala
+            "ln-rAO": u"Lingála (Angóla)", # Lingala (Angola)
+            "ln-rCD": u"Lingála (Repibiki demokratiki ya Kongó)", # Lingala (Congo [DRC])
+            "ln-rCF": u"Lingála (Repibiki ya Afríka ya Káti)", # Lingala (Central African Republic)
+            "ln-rCG": u"Lingála (Kongo)", # Lingala (Congo [Republic])
+            "lo": u"ລາວ", # Lao
+            "lo-rLA": u"ລາວ (ສ.ປ.ປ ລາວ)", # Lao (Laos)
+            "lt": u"Lietuvių", # Lithuanian
+            "lt-rLT": u"Lietuvių (Lietuva)", # Lithuanian (Lithuania)
+            "lu": u"Tshiluba", # Luba-Katanga
+            "lu-rCD": u"Tshiluba (Ditunga wa Kongu)", # Luba-Katanga (Congo [DRC])
+            "luo": u"Dholuo", # Luo
+            "luo-rKE": u"Dholuo (Kenya)", # Luo (Kenya)
+            "luy": u"Luluhia", # Luyia
+            "luy-rKE": u"Luluhia (Kenya)", # Luyia (Kenya)
+            "lv": u"Latviešu", # Latvian
+            "lv-rLV": u"Latviešu (Latvija)", # Latvian (Latvia)
+            "mas": u"Maa", # Masai
+            "mas-rKE": u"Maa (Kenya)", # Masai (Kenya)
+            "mas-rTZ": u"Maa (Tansania)", # Masai (Tanzania)
+            "mer": u"Kĩmĩrũ", # Meru
+            "mer-rKE": u"Kĩmĩrũ (Kenya)", # Meru (Kenya)
+            "mfe": u"Kreol morisien", # Morisyen
+            "mfe-rMU": u"Kreol morisien (Moris)", # Morisyen (Mauritius)
+            "mg": u"Malagasy", # Malagasy
+            "mg-rMG": u"Malagasy (Madagasikara)", # Malagasy (Madagascar)
+            "mgh": u"Makua", # Makhuwa-Meetto
+            "mgh-rMZ": u"Makua (Umozambiki)", # Makhuwa-Meetto (Mozambique)
+            "mgo": u"Metaʼ", # Meta'
+            "mgo-rCM": u"Metaʼ (Kamalun)", # Meta' (Cameroon)
+            "mk": u"македонски", # Macedonian
+            "mk-rMK": u"македонски (Македонија)", # Macedonian (Macedonia [FYROM])
+            "ml": u"മലയാളം", # Malayalam
+            "ml-rIN": u"മലയാളം (ഇന്ത്യ)", # Malayalam (India)
+            "mn": u"монгол", # Mongolian
+            "mn-rCYRL": u"монгол (CYRL)", # Mongolian (CYRL)
+            "mn-rCYRL_MN": u"монгол (Монгол,MN)", # Mongolian (Mongolia,MN)
+            "mr": u"मराठी", # Marathi
+            "mr-rIN": u"मराठी (भारत)", # Marathi (India)
+            "ms": u"Bahasa Melayu", # Malay
+            "ms-rLATN": u"Bahasa Melayu (LATN)", # Malay (LATN)
+            "ms-rLATN_BN": u"Bahasa Melayu (Brunei,BN)", # Malay (Brunei,BN)
+            "ms-rLATN_MY": u"Bahasa Melayu (Malaysia,MY)", # Malay (Malaysia,MY)
+            "ms-rLATN_SG": u"Bahasa Melayu (Singapura,SG)", # Malay (Singapore,SG)
+            "mt": u"Malti", # Maltese
+            "mt-rMT": u"Malti (Malta)", # Maltese (Malta)
+            "mua": u"MUNDAŊ", # Mundang
+            "mua-rCM": u"MUNDAŊ (kameruŋ)", # Mundang (Cameroon)
+            "my": u"ဗမာ", # Burmese
+            "my-rMM": u"ဗမာ (မြန်မာ)", # Burmese (Myanmar [Burma])
+            "naq": u"Khoekhoegowab", # Nama
+            "naq-rNA": u"Khoekhoegowab (Namibiab)", # Nama (Namibia)
+            "nb": u"Norsk bokmål", # Norwegian Bokmål
+            "nb-rNO": u"Norsk bokmål (Norge)", # Norwegian Bokmål (Norway)
+            "nd": u"IsiNdebele", # North Ndebele
+            "nd-rZW": u"IsiNdebele (Zimbabwe)", # North Ndebele (Zimbabwe)
+            "ne": u"नेपाली", # Nepali
+            "ne-rIN": u"नेपाली (भारत)", # Nepali (India)
+            "ne-rNP": u"नेपाली (नेपाल)", # Nepali (Nepal)
+            "nl": u"Nederlands", # Dutch
+            "nl-rAW": u"Nederlands (Aruba)", # Dutch (Aruba)
+            "nl-rBE": u"Nederlands (België)", # Dutch (Belgium)
+            "nl-rCW": u"Nederlands (Curaçao)", # Dutch (Curaçao)
+            "nl-rNL": u"Nederlands (Nederland)", # Dutch (Netherlands)
+            "nl-rSR": u"Nederlands (Suriname)", # Dutch (Suriname)
+            "nl-rSX": u"Nederlands (Sint-Maarten)", # Dutch (Sint Maarten)
+            "nmg": u"Nmg", # Kwasio
+            "nmg-rCM": u"Nmg (Kamerun)", # Kwasio (Cameroon)
+            "nn": u"Nynorsk", # Norwegian Nynorsk
+            "nn-rNO": u"Nynorsk (Noreg)", # Norwegian Nynorsk (Norway)
+            "nus": u"Thok Nath", # Nuer
+            "nus-rSD": u"Thok Nath (Sudan)", # Nuer (Sudan)
+            "nyn": u"Runyankore", # Nyankole
+            "nyn-rUG": u"Runyankore (Uganda)", # Nyankole (Uganda)
+            "om": u"Oromoo", # Oromo
+            "om-rET": u"Oromoo (Itoophiyaa)", # Oromo (Ethiopia)
+            "om-rKE": u"Oromoo (Keeniyaa)", # Oromo (Kenya)
+            "or": u"ଓଡ଼ିଆ", # Oriya
+            "or-rIN": u"ଓଡ଼ିଆ (ଭାରତ)", # Oriya (India)
+            "pa": u"ਪੰਜਾਬੀ", # Punjabi
+            "pa-rARAB": u"پنجاب (ARAB)", # Punjabi (ARAB)
+            "pa-rARAB_PK": u"پنجاب (پکستان,PK)", # Punjabi (Pakistan,PK)
+            "pa-rGURU": u"ਪੰਜਾਬੀ (GURU)", # Punjabi (GURU)
+            "pa-rGURU_IN": u"ਪੰਜਾਬੀ (ਭਾਰਤ,IN)", # Punjabi (India,IN)
+            "pl": u"Polski", # Polish
+            "pl-rPL": u"Polski (Polska)", # Polish (Poland)
+            "ps": u"پښتو", # Pashto
+            "ps-rAF": u"پښتو (افغانستان)", # Pashto (Afghanistan)
+            "pt": u"Português", # Portuguese
+            "pt-rAO": u"Português (Angola)", # Portuguese (Angola)
+            "pt-rBR": u"Português (Brasil)", # Portuguese (Brazil)
+            "pt-rCV": u"Português (Cabo Verde)", # Portuguese (Cape Verde)
+            "pt-rGW": u"Português (Guiné Bissau)", # Portuguese (Guinea-Bissau)
+            "pt-rMO": u"Português (Macau)", # Portuguese (Macau)
+            "pt-rMZ": u"Português (Moçambique)", # Portuguese (Mozambique)
+            "pt-rPT": u"Português (Portugal)", # Portuguese (Portugal)
+            "pt-rST": u"Português (São Tomé e Príncipe)", # Portuguese (São Tomé and Príncipe)
+            "pt-rTL": u"Português (Timor-Leste)", # Portuguese (Timor-Leste)
+            "rm": u"Rumantsch", # Romansh
+            "rm-rCH": u"Rumantsch (Svizra)", # Romansh (Switzerland)
+            "rn": u"Ikirundi", # Rundi
+            "rn-rBI": u"Ikirundi (Uburundi)", # Rundi (Burundi)
+            "ro": u"Română", # Romanian
+            "ro-rMD": u"Română (Republica Moldova)", # Romanian (Moldova)
+            "ro-rRO": u"Română (România)", # Romanian (Romania)
+            "rof": u"Kihorombo", # Rombo
+            "rof-rTZ": u"Kihorombo (Tanzania)", # Rombo (Tanzania)
+            "ru": u"русский", # Russian
+            "ru-rBY": u"русский (Беларусь)", # Russian (Belarus)
+            "ru-rKG": u"русский (Киргизия)", # Russian (Kyrgyzstan)
+            "ru-rKZ": u"русский (Казахстан)", # Russian (Kazakhstan)
+            "ru-rMD": u"русский (Молдова)", # Russian (Moldova)
+            "ru-rRU": u"русский (Россия)", # Russian (Russia)
+            "ru-rUA": u"русский (Украина)", # Russian (Ukraine)
+            "rw": u"Kinyarwanda", # Kinyarwanda
+            "rw-rRW": u"Kinyarwanda (Rwanda)", # Kinyarwanda (Rwanda)
+            "rwk": u"Kiruwa", # Rwa
+            "rwk-rTZ": u"Kiruwa (Tanzania)", # Rwa (Tanzania)
+            "saq": u"Kisampur", # Samburu
+            "saq-rKE": u"Kisampur (Kenya)", # Samburu (Kenya)
+            "sbp": u"Ishisangu", # Sangu
+            "sbp-rTZ": u"Ishisangu (Tansaniya)", # Sangu (Tanzania)
+            "seh": u"Sena", # Sena
+            "seh-rMZ": u"Sena (Moçambique)", # Sena (Mozambique)
+            "ses": u"Koyraboro senni", # Koyraboro Senni
+            "ses-rML": u"Koyraboro senni (Maali)", # Koyraboro Senni (Mali)
+            "sg": u"Sängö", # Sango
+            "sg-rCF": u"Sängö (Ködörösêse tî Bêafrîka)", # Sango (Central African Republic)
+            "shi": u"ⵜⴰⵎⴰⵣⵉⵖⵜ", # Tachelhit
+            "shi-rLATN": u"Tamazight (LATN)", # Tachelhit (LATN)
+            "shi-rLATN_MA": u"Tamazight (lmɣrib,MA)", # Tachelhit (Morocco,MA)
+            "shi-rTFNG": u"ⵜⴰⵎⴰⵣⵉⵖⵜ (TFNG)", # Tachelhit (TFNG)
+            "shi-rTFNG_MA": u"ⵜⴰⵎⴰⵣⵉⵖⵜ (ⵍⵎⵖⵔⵉⴱ,MA)", # Tachelhit (Morocco,MA)
+            "si": u"සිංහල", # Sinhala
+            "si-rLK": u"සිංහල (ශ්‍රී ලංකාව)", # Sinhala (Sri Lanka)
+            "sk": u"Slovenčina", # Slovak
+            "sk-rSK": u"Slovenčina (Slovensko)", # Slovak (Slovakia)
+            "sl": u"Slovenščina", # Slovenian
+            "sl-rSI": u"Slovenščina (Slovenija)", # Slovenian (Slovenia)
+            "sn": u"ChiShona", # Shona
+            "sn-rZW": u"ChiShona (Zimbabwe)", # Shona (Zimbabwe)
+            "so": u"Soomaali", # Somali
+            "so-rDJ": u"Soomaali (Jabuuti)", # Somali (Djibouti)
+            "so-rET": u"Soomaali (Itoobiya)", # Somali (Ethiopia)
+            "so-rKE": u"Soomaali (Kiiniya)", # Somali (Kenya)
+            "so-rSO": u"Soomaali (Soomaaliya)", # Somali (Somalia)
+            "sq": u"Shqip", # Albanian
+            "sq-rAL": u"Shqip (Shqipëria)", # Albanian (Albania)
+            "sq-rMK": u"Shqip (Maqedoni)", # Albanian (Macedonia [FYROM])
+            "sr": u"Српски", # Serbian
+            "sr-rCYRL": u"Српски (CYRL)", # Serbian (CYRL)
+            "sr-rCYRL_BA": u"Српски (Босна и Херцеговина,BA)", # Serbian (Bosnia and Herzegovina,BA)
+            "sr-rCYRL_ME": u"Српски (Црна Гора,ME)", # Serbian (Montenegro,ME)
+            "sr-rCYRL_RS": u"Српски (Србија,RS)", # Serbian (Serbia,RS)
+            "sr-rLATN": u"Srpski (LATN)", # Serbian (LATN)
+            "sr-rLATN_BA": u"Srpski (Bosna i Hercegovina,BA)", # Serbian (Bosnia and Herzegovina,BA)
+            "sr-rLATN_ME": u"Srpski (Crna Gora,ME)", # Serbian (Montenegro,ME)
+            "sr-rLATN_RS": u"Srpski (Srbija,RS)", # Serbian (Serbia,RS)
+            "sv": u"Svenska", # Swedish
+            "sv-rAX": u"Svenska (Åland)", # Swedish (Åland Islands)
+            "sv-rFI": u"Svenska (Finland)", # Swedish (Finland)
+            "sv-rSE": u"Svenska (Sverige)", # Swedish (Sweden)
+            "sw": u"Kiswahili", # Swahili
+            "sw-rKE": u"Kiswahili (Kenya)", # Swahili (Kenya)
+            "sw-rTZ": u"Kiswahili (Tanzania)", # Swahili (Tanzania)
+            "sw-rUG": u"Kiswahili (Uganda)", # Swahili (Uganda)
+            "swc": u"Kiswahili ya Kongo", # Congo Swahili
+            "swc-rCD": u"Kiswahili ya Kongo (Jamhuri ya Kidemokrasia ya Kongo)", # Congo Swahili (Congo [DRC])
+            "ta": u"தமிழ்", # Tamil
+            "ta-rIN": u"தமிழ் (இந்தியா)", # Tamil (India)
+            "ta-rLK": u"தமிழ் (இலங்கை)", # Tamil (Sri Lanka)
+            "ta-rMY": u"தமிழ் (மலேஷியா)", # Tamil (Malaysia)
+            "ta-rSG": u"தமிழ் (சிங்கப்பூர்)", # Tamil (Singapore)
+            "te": u"తెలుగు", # Telugu
+            "te-rIN": u"తెలుగు (భారత దేశం)", # Telugu (India)
+            "teo": u"Kiteso", # Teso
+            "teo-rKE": u"Kiteso (Kenia)", # Teso (Kenya)
+            "teo-rUG": u"Kiteso (Uganda)", # Teso (Uganda)
+            "th": u"ไทย", # Thai
+            "th-rTH": u"ไทย (ไทย)", # Thai (Thailand)
+            "ti": u"ትግርኛ", # Tigrinya
+            "ti-rER": u"ትግርኛ (ER)", # Tigrinya (Eritrea)
+            "ti-rET": u"ትግርኛ (ET)", # Tigrinya (Ethiopia)
+            "to": u"Lea fakatonga", # Tongan
+            "to-rTO": u"Lea fakatonga (Tonga)", # Tongan (Tonga)
+            "tr": u"Türkçe", # Turkish
+            "tr-rCY": u"Türkçe (Güney Kıbrıs Rum Kesimi)", # Turkish (Cyprus)
+            "tr-rTR": u"Türkçe (Türkiye)", # Turkish (Turkey)
+            "twq": u"Tasawaq senni", # Tasawaq
+            "twq-rNE": u"Tasawaq senni (Nižer)", # Tasawaq (Niger)
+            "tzm": u"Tamaziɣt", # Central Atlas Tamazight
+            "tzm-rLATN": u"Tamaziɣt (LATN)", # Central Atlas Tamazight (LATN)
+            "tzm-rLATN_MA": u"Tamaziɣt (Meṛṛuk,MA)", # Central Atlas Tamazight (Morocco,MA)
+            "uk": u"українська", # Ukrainian
+            "uk-rUA": u"українська (Україна)", # Ukrainian (Ukraine)
+            "ur": u"اردو", # Urdu
+            "ur-rIN": u"اردو (بھارت)", # Urdu (India)
+            "ur-rPK": u"اردو (پاکستان)", # Urdu (Pakistan)
+            "uz": u"Ўзбек", # Uzbek
+            "uz-rARAB": u"اوزبیک (ARAB)", # Uzbek (ARAB)
+            "uz-rARAB_AF": u"اوزبیک (افغانستان,AF)", # Uzbek (Afghanistan,AF)
+            "uz-rCYRL": u"Ўзбек (CYRL)", # Uzbek (CYRL)
+            "uz-rCYRL_UZ": u"Ўзбек (Ўзбекистон,UZ)", # Uzbek (Uzbekistan,UZ)
+            "uz-rLATN": u"Oʻzbekcha (LATN)", # Uzbek (LATN)
+            "uz-rLATN_UZ": u"Oʻzbekcha (Oʻzbekiston,UZ)", # Uzbek (Uzbekistan,UZ)
+            "vai": u"ꕙꔤ", # Vai
+            "vai-rLATN": u"Vai (LATN)", # Vai (LATN)
+            "vai-rLATN_LR": u"Vai (Laibhiya,LR)", # Vai (Liberia,LR)
+            "vai-rVAII": u"ꕙꔤ (VAII)", # Vai (VAII)
+            "vai-rVAII_LR": u"ꕙꔤ (ꕞꔤꔫꕩ,LR)", # Vai (Liberia,LR)
+            "vi": u"Tiếng Việt", # Vietnamese
+            "vi-rVN": u"Tiếng Việt (Việt Nam)", # Vietnamese (Vietnam)
+            "vun": u"Kyivunjo", # Vunjo
+            "vun-rTZ": u"Kyivunjo (Tanzania)", # Vunjo (Tanzania)
+            "xog": u"Olusoga", # Soga
+            "xog-rUG": u"Olusoga (Yuganda)", # Soga (Uganda)
+            "yav": u"Nuasue", # Yangben
+            "yav-rCM": u"Nuasue (Kemelún)", # Yangben (Cameroon)
+            "yo": u"Èdè Yorùbá", # Yoruba
+            "yo-rNG": u"Èdè Yorùbá (Orílẹ́ède Nàìjíríà)", # Yoruba (Nigeria)
+            # This was the obtained from Locale, but it seems it's different in Settings
+            #"zh": u"中文", # Chinese
+            "zh": u"中文 (简体)", # Chinese
+            "zh-rHANS": u"中文 (HANS)", # Chinese (HANS)
+            "zh-rHANS_CN": u"中文 (中国,CN)", # Chinese (China,CN)
+            "zh-rHANS_HK": u"中文 (香港,HK)", # Chinese (Hong Kong,HK)
+            "zh-rHANS_MO": u"中文 (澳门,MO)", # Chinese (Macau,MO)
+            "zh-rHANS_SG": u"中文 (新加坡,SG)", # Chinese (Singapore,SG)
+            "zh-rHANT": u"中文 (HANT)", # Chinese (HANT)
+            "zh-rHANT_HK": u"中文 (香港,HK)", # Chinese (Hong Kong,HK)
+            "zh-rHANT_MO": u"中文 (澳門,MO)", # Chinese (Macau,MO)
+            "zh-rHANT_TW": u"中文 (台灣,TW)", # Chinese (Taiwan,TW)
+            "zu": u"IsiZulu", # Zulu
+            "zu-rZA": u"IsiZulu (iNingizimu Afrika)", # Zulu (South Africa)
+        }
+
+        if not languageTo in LANGUAGES.keys():
+            raise RuntimeError("%s is not a supported language by AndroidViewClient" % languageTo)
+        self.openQuickSettingsSettings()
+        view = None
+        currentLanguage = None
+        ATTEMPTS = 10
+        if self.vc.getSdkVersion() >= 20:
+            for _ in range(ATTEMPTS):
+                com_android_settings___id_dashboard = self.vc.findViewByIdOrRaise("com.android.settings:id/dashboard")
+                for k, v in LANGUAGE_SETTINGS.iteritems():
+                    if DEBUG_CHANGE_LANGUAGE:
+                        print >> sys.stderr, "searching for", v
+                    view = self.vc.findViewWithText(v, root=com_android_settings___id_dashboard)
+                    if view:
+                        currentLanguage = k
+                        if DEBUG_CHANGE_LANGUAGE:
+                            print >> sys.stderr, "found current language:", k
+                        break
+                if view:
+                    break
+                com_android_settings___id_dashboard.uiScrollable.flingForward()
+                self.vc.sleep(1)
+                self.vc.dump(-1)
+            if view is None:
+                raise ViewNotFoundException("text", "'Language & input' (any language)", "ROOT")
+            view.touch()
+            self.vc.sleep(1)
+            self.vc.dump(-1)
+            self.vc.findViewWithTextOrRaise(PHONE_LANGUAGE[currentLanguage]).touch()
+            self.vc.sleep(1)
+            self.vc.dump(-1)
+        else:
+            for _ in range(ATTEMPTS):
+                android___id_list = self.vc.findViewByIdOrRaise("android:id/list")
+                for k, v in LANGUAGE_SETTINGS.iteritems():
+                    view = self.vc.findViewWithText(v, root=android___id_list)
+                    if view:
+                        currentLanguage = k
+                        break
+                if view:
+                    break
+                android___id_list.uiScrollable.flingForward()
+                self.vc.sleep(1)
+                self.vc.dump(-1)
+            if view is None:
+                raise ViewNotFoundException("text", "'Language & input' (any language)", "ROOT")
+            view.touch()
+            self.vc.sleep(1)
+            self.vc.dump(-1)
+            self.vc.findViewWithTextOrRaise(PHONE_LANGUAGE[currentLanguage]).touch()
+            self.vc.sleep(1)
+            self.vc.dump(-1)
+
+        android___id_list = self.vc.findViewByIdOrRaise("android:id/list")
+        android___id_list.uiScrollable.setViewClient(self.vc)
+        if DEBUG_CHANGE_LANGUAGE:
+            print >> sys.stderr, "scrolling to find", LANGUAGES[languageTo]
+        view = android___id_list.uiScrollable.scrollTextIntoView(LANGUAGES[languageTo])
+        if view is not None:
+            view.touch()
+        else:
+            #raise RuntimeError(u"Couldn't change language to %s (%s)" % (LANGUAGES[languageTo], languageTo))
+            raise RuntimeError("Couldn't change language to %s" % languageTo)
+        self.vc.device.press('BACK')
+        self.vc.sleep(1)
+        self.vc.device.press('BACK')
+
+class UiCollection():
+    '''
+    Used to enumerate a container's user interface (UI) elements for the purpose of counting, or
+    targeting a sub elements by a child's text or description.
+    '''
+
+    pass
+
+class UiScrollable(UiCollection):
+    '''
+    A L{UiCollection} that supports searching for items in scrollable layout elements.
+
+    This class can be used with horizontally or vertically scrollable controls.
+    '''
+
+    def __init__(self, view):
+        self.vc = None
+        self.view = view
+        self.vertical = True
+        self.bounds = view.getBounds()
+        (self.x, self.y, self.w, self.h) = view.getPositionAndSize()
+        self.steps = 10
+        self.duration = 500
+        self.swipeDeadZonePercentage = 0.1
+        self.maxSearchSwipes = 10
+
+    def flingBackward(self):
+        if self.vertical:
+            s = (self.x + self.w/2, self.y + self.h * self.swipeDeadZonePercentage)
+            e = (self.x + self.w/2, self.y + self.h - self.h * self.swipeDeadZonePercentage)
+        else:
+            s = (self.x + self.w * self.swipeDeadZonePercentage, self.y + self.h/2)
+            e = (self.x + self.w * (1.0 - self.swipeDeadZonePercentage), self.y + self.h/2)
+        if DEBUG:
+            print >> sys.stderr, "flingBackward: view=", self.view.__smallStr__(), self.view.getPositionAndSize()
+            print >> sys.stderr, "self.view.device.drag(%s, %s, %s, %s)" % (s, e, self.duration, self.steps)
+        self.view.device.drag(s, e, self.duration, self.steps, self.view.device.display['orientation'])
+
+    def flingForward(self):
+        if self.vertical:
+            s = (self.x + self.w/2, (self.y + self.h ) - self.h * self.swipeDeadZonePercentage)
+            e = (self.x + self.w/2, self.y + self.h * self.swipeDeadZonePercentage)
+        else:
+            s = (self.x + self.w * (1.0 - self.swipeDeadZonePercentage), self.y + self.h/2)
+            e = (self.x + self.w * self.swipeDeadZonePercentage, self.y + self.h/2)
+        if DEBUG:
+            print >> sys.stderr, "flingForward: view=", self.view.__smallStr__(), self.view.getPositionAndSize()
+            print >> sys.stderr, "self.view.device.drag(%s, %s, %s, %s)" % (s, e, self.duration, self.steps)
+        self.view.device.drag(s, e, self.duration, self.steps, self.view.device.display['orientation'])
+
+    def flingToBeginning(self, maxSwipes=10):
+        if self.vertical:
+            for _ in range(maxSwipes):
+                if DEBUG:
+                    print >> sys.stderr, "flinging to beginning"
+                self.flingBackward()
+
+    def flingToEnd(self, maxSwipes=10):
+        if self.vertical:
+            for _ in range(maxSwipes):
+                if DEBUG:
+                    print >> sys.stderr, "flinging to end"
+                self.flingForward()
+
+    def scrollTextIntoView(self, text):
+        '''
+        Performs a forward scroll action on the scrollable layout element until the text you provided is visible,
+        or until swipe attempts have been exhausted. See setMaxSearchSwipes(int)
+        '''
+
+        if self.vc is None:
+            raise ValueError('vc must be set in order to use this method')
+        for n in range(self.maxSearchSwipes):
+            # FIXME: now I need to figure out the best way of navigating to the ViewClient asossiated
+            # with this UiScrollable.
+            # It's using setViewClient() now.
+            if DEBUG or DEBUG_CHANGE_LANGUAGE:
+                print >> sys.stderr, u"Searching for text='%s'" % text
+                for v in self.vc.views:
+                    try:
+                        print >> sys.stderr, "    scrollTextIntoView: v=", v.getId(),
+                        print >> sys.stderr, v.getText()
+                    except Exception, e:
+                        print >> sys.stderr, e
+                        pass
+            #v = self.vc.findViewWithText(text, root=self.view)
+            v = self.vc.findViewWithText(text)
+            if v is not None:
+                return v
+            self.flingForward()
+            #self.vc.sleep(1)
+            self.vc.dump(-1)
+            # WARNING: after this dump, the value kept in self.view is outdated, it should be refreshed
+            # in some way
+        return None
+
+    def setAsHorizontalList(self):
+        self.vertical = False
+
+    def setAsVerticalList(self):
+        self.vertical = True
+
+    def setMaxSearchSwipes(self, maxSwipes):
+        self.maxSearchSwipes = maxSwipes
+
+    def setViewClient(self, vc):
+        self.vc = vc
+
+
+class ListView(View):
+    '''
+    ListView class.
+    '''
+
+    pass
+
+class UiAutomator2AndroidViewClient():
+    '''
+    UiAutomator XML to AndroidViewClient
+    '''
+
+    def __init__(self, device, version, uiAutomatorHelper):
+        self.device = device
+        self.version = version
+        self.uiAutomatorHelper = uiAutomatorHelper
+        self.root = None
+        self.nodeStack = []
+        self.parent = None
+        self.views = []
+        self.idCount = 1
+
+    def StartElement(self, name, attributes):
+        '''
+        Expat start element event handler
+        '''
+        if name == 'hierarchy':
+            pass
+        elif name == 'node':
+            # Instantiate an Element object
+            attributes['uniqueId'] = 'id/no_id/%d' % self.idCount
+            bounds = re.split('[\][,]', attributes['bounds'])
+            attributes['bounds'] = ((int(bounds[1]), int(bounds[2])), (int(bounds[4]), int(bounds[5])))
+            if DEBUG_BOUNDS:
+                print >> sys.stderr, "bounds=", attributes['bounds']
+            self.idCount += 1
+            child = View.factory(attributes, self.device, version=self.version, uiAutomatorHelper=self.uiAutomatorHelper)
+            self.views.append(child)
+            # Push element onto the stack and make it a child of parent
+            if not self.nodeStack:
+                self.root = child
+            else:
+                self.parent = self.nodeStack[-1]
+                self.parent.add(child)
+            self.nodeStack.append(child)
+
+    def EndElement(self, name):
+        '''
+        Expat end element event handler
+        '''
+
+        if name == 'hierarchy':
+            pass
+        elif name == 'node':
+            self.nodeStack.pop()
+
+    def CharacterData(self, data):
+        '''
+        Expat character data event handler
+        '''
+
+        if data.strip():
+            data = data.encode()
+            element = self.nodeStack[-1]
+            element.cdata += data
+
+    def Parse(self, uiautomatorxml):
+        # Create an Expat parser
+        parser = xml.parsers.expat.ParserCreate()  # @UndefinedVariable
+        # Set the Expat event handlers to our methods
+        parser.StartElementHandler = self.StartElement
+        parser.EndElementHandler = self.EndElement
+        parser.CharacterDataHandler = self.CharacterData
+        # Parse the XML File
+        try:
+            encoded = uiautomatorxml.encode(encoding='utf-8', errors='replace')
+            _ = parser.Parse(encoded, True)
+        except xml.parsers.expat.ExpatError, ex:  # @UndefinedVariable
+            print >>sys.stderr, "ERROR: Offending XML:\n", repr(uiautomatorxml)
+            raise RuntimeError(ex)
+        return self.root
+
+class Excerpt2Code():
+    ''' Excerpt XML to code '''
+
+    def __init__(self):
+        self.data = None
+
+    def StartElement(self, name, attributes):
+        '''
+        Expat start element event handler
+        '''
+        if name == 'excerpt':
+            pass
+        else:
+            warnings.warn("Unexpected element: '%s'" % name)
+
+    def EndElement(self, name):
+        '''
+        Expat end element event handler
+        '''
+
+        if name == 'excerpt':
+            pass
+
+    def CharacterData(self, data):
+        '''
+        Expat character data event handler
+        '''
+
+        if data.strip():
+            data = data.encode()
+            if not self.data:
+                self.data = data
+            else:
+                self.data += data
+
+    def Parse(self, excerpt):
+        # Create an Expat parser
+        parser = xml.parsers.expat.ParserCreate()  # @UndefinedVariable
+        # Set the Expat event handlers to our methods
+        parser.StartElementHandler = self.StartElement
+        parser.EndElementHandler = self.EndElement
+        parser.CharacterDataHandler = self.CharacterData
+        # Parse the XML
+        _ = parser.Parse(excerpt, 1)
+        return self.data
+
+class ViewClientOptions:
+    '''
+    ViewClient options helper class
+    '''
+
+    DEVIDE = 'device'
+    SERIALNO = 'serialno'
+    AUTO_DUMP = 'autodump'
+    FORCE_VIEW_SERVER_USE = 'forceviewserveruse'
+    LOCAL_PORT = 'localport' # ViewServer local port
+    REMOTE_PORT = 'remoteport' # ViewServer remote port
+    START_VIEW_SERVER = 'startviewserver'
+    IGNORE_UIAUTOMATOR_KILLED = 'ignoreuiautomatorkilled'
+    COMPRESSED_DUMP = 'compresseddump'
+    USE_UIAUTOMATOR_HELPER = 'useuiautomatorhelper'
+
+class ViewClient:
+    '''
+    ViewClient is a I{ViewServer} client.
+
+    ViewServer backend
+    ==================
+    If not running the ViewServer is started on the target device or emulator and then the port
+    mapping is created.
+
+    LocalViewServer backend
+    =======================
+    ViewServer is started as an application services instead of as a system service.
+
+    UiAutomator backend
+    ===================
+    No service is started.
+
+    null backend
+    ============
+    Allows only operations using PX or DIP as hierarchy is not dumped and thus Views not recognized.
+
+    UiAutomatorHelper backend
+    =========================
+    Requires B{Culebra Tester} installed on Android device.
+    '''
+
+    imageDirectory = None
+    ''' The directory used to store screenshot images '''
+
+    def __init__(self, device, serialno, adb=None, autodump=True, forceviewserveruse=False, localport=VIEW_SERVER_PORT, remoteport=VIEW_SERVER_PORT, startviewserver=True, ignoreuiautomatorkilled=False, compresseddump=True, useuiautomatorhelper=False):
+        '''
+        Constructor
+
+        @type device: AdbClient
+        @param device: The device running the C{View server} to which this client will connect
+        @type serialno: str
+        @param serialno: the serial number of the device or emulator to connect to
+        @type adb: str
+        @param adb: the path of the C{adb} executable or None and C{ViewClient} will try to find it
+        @type autodump: boolean
+        @param autodump: whether an automatic dump is performed at the end of this constructor
+        @type forceviewserveruse: boolean
+        @param forceviewserveruse: Force the use of C{ViewServer} even if the conditions to use
+                            C{UiAutomator} are satisfied
+        @type localport: int
+        @param localport: the local port used in the redirection
+        @type remoteport: int
+        @param remoteport: the remote port used to start the C{ViewServer} in the device or
+                           emulator
+        @type startviewserver: boolean
+        @param startviewserver: Whether to start the B{global} ViewServer
+        @type ignoreuiautomatorkilled: boolean
+        @param ignoreuiautomatorkilled: Ignores received B{Killed} message from C{uiautomator}
+        @type compresseddump: boolean
+        @param compresseddump: turns --compressed flag for uiautomator dump on/off
+        @:type useuiautomatorhelper: boolean
+        @:param useuiautomatorhelper: use UiAutomatorHelper Android app as backend
+        '''
+
+        if not device:
+            raise Exception('Device is not connected')
+        self.device = device
+        ''' The C{AdbClient} device instance '''
+
+        if not serialno:
+            raise ValueError("Serialno cannot be None")
+        self.serialno = self.__mapSerialNo(serialno)
+        ''' The serial number of the device '''
+
+        self.uiAutomatorHelper = None
+        ''' The UiAutomatorHelper '''
+
+        if DEBUG_DEVICE: print >> sys.stderr, "ViewClient: using device with serialno", self.serialno
+
+        if adb:
+            if not os.access(adb, os.X_OK):
+                raise Exception('adb="%s" is not executable' % adb)
+        else:
+            # Using adbclient we don't need adb executable yet (maybe it's needed if we want to
+            # start adb if not running)
+            adb = obtainAdbPath()
+
+        self.adb = adb
+        ''' The adb command '''
+        self.root = None
+        ''' The root node '''
+        self.viewsById = {}
+        ''' The map containing all the L{View}s indexed by their L{View.getUniqueId()} '''
+        self.display = {}
+        ''' The map containing the device's display properties: width, height and density '''
+
+        for prop in [ 'width', 'height', 'density', 'orientation' ]:
+            self.display[prop] = -1
+            if USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES:
+                try:
+                    self.display[prop] = device.display[prop]
+                except:
+                    if WARNINGS:
+                        warnings.warn("Couldn't determine display %s" % prop)
+            else:
+                # these values are usually not defined as properties, so we stick to the -1 set
+                # before
+                pass
+
+        self.build = {}
+        ''' The map containing the device's build properties: version.sdk, version.release '''
+
+        for prop in [VERSION_SDK_PROPERTY, VERSION_RELEASE_PROPERTY]:
+            self.build[prop] = -1
+            try:
+                if USE_ADB_CLIENT_TO_GET_BUILD_PROPERTIES:
+                    self.build[prop] = device.getProperty(prop)
+                else:
+                    self.build[prop] = device.shell('getprop ro.build.' + prop)[:-2]
+            except:
+                if WARNINGS:
+                    warnings.warn("Couldn't determine build %s" % prop)
+
+            if prop == VERSION_SDK_PROPERTY:
+                # we expect it to be an int
+                self.build[prop] = int(self.build[prop] if self.build[prop] else -1)
+
+        self.ro = {}
+        ''' The map containing the device's ro properties: secure, debuggable '''
+        for prop in ['secure', 'debuggable']:
+            try:
+                self.ro[prop] = device.shell('getprop ro.' + prop)[:-2]
+            except:
+                if WARNINGS:
+                    warnings.warn("Couldn't determine ro %s" % prop)
+                self.ro[prop] = 'UNKNOWN'
+
+        self.forceViewServerUse = forceviewserveruse
+        ''' Force the use of ViewServer even if the conditions to use UiAutomator are satisfied '''
+        self.useUiAutomator = (self.build[VERSION_SDK_PROPERTY] >= 16) and not forceviewserveruse # jelly bean 4.1 & 4.2
+        if DEBUG:
+            print >> sys.stderr, "    ViewClient.__init__: useUiAutomator=", self.useUiAutomator, "sdk=", self.build[VERSION_SDK_PROPERTY], "forceviewserveruse=", forceviewserveruse
+        ''' If UIAutomator is supported by the device it will be used '''
+        self.ignoreUiAutomatorKilled = ignoreuiautomatorkilled
+        ''' On some devices (i.e. Nexus 7 running 4.2.2) uiautomator is killed just after generating
+        the dump file. In many cases the file is already complete so we can ask to ignore the 'Killed'
+        message by setting L{ignoreuiautomatorkilled} to C{True}.
+
+        Changes in v2.3.21 that uses C{/dev/tty} instead of a file may have turned this variable
+        unnecessary, however it has been kept for backward compatibility.
+        '''
+
+        if self.useUiAutomator:
+            self.textProperty = TEXT_PROPERTY_UI_AUTOMATOR
+        else:
+            if self.build[VERSION_SDK_PROPERTY] <= 10:
+                self.textProperty = TEXT_PROPERTY_API_10
+            else:
+                self.textProperty = TEXT_PROPERTY
+            if startviewserver:
+                if not self.serviceResponse(device.shell('service call window 3')):
+                    try:
+                        self.assertServiceResponse(device.shell('service call window 1 i32 %d' %
+                                                        remoteport))
+                    except:
+                        msg = 'Cannot start View server.\n' \
+                            'This only works on emulator and devices running developer versions.\n' \
+                            'Does hierarchyviewer work on your device?\n' \
+                            'See https://github.com/dtmilano/AndroidViewClient/wiki/Secure-mode\n\n' \
+                            'Device properties:\n' \
+                            '    ro.secure=%s\n' \
+                            '    ro.debuggable=%s\n' % (self.ro['secure'], self.ro['debuggable'])
+                        raise Exception(msg)
+
+            self.localPort = localport
+            self.remotePort = remoteport
+            # FIXME: it seems there's no way of obtaining the serialno from the MonkeyDevice
+            subprocess.check_call([self.adb, '-s', self.serialno, 'forward', 'tcp:%d' % self.localPort,
+                                    'tcp:%d' % self.remotePort])
+
+        self.windows = None
+        ''' The list of windows as obtained by L{ViewClient.list()} '''
+
+
+        # FIXME: may not be true, one may want UiAutomator but without UiAutomatorHelper
+        if self.useUiAutomator:
+            if useuiautomatorhelper:
+                self.uiAutomatorHelper = UiAutomatorHelper(device)
+            else:
+                # culebratester Intrumentation running prevents `uiautomator dump` from working correctly, then if we are not
+                # using UiAutomatorHelper let's kill it, just in case
+                subprocess.check_call([self.adb, '-s', self.serialno, 'shell', 'am', 'force-stop', 'com.dtmilano.android.culebratester'])
+
+
+        self.uiDevice = UiDevice(self)
+        ''' The L{UiDevice} '''
+
+        ''' The output of compressed dump is different than output of uncompressed one.
+        If one requires uncompressed output, this option should be set to False
+        '''
+        self.compressedDump = compresseddump
+
+        self.navBack = None
+        self.navHome = None
+        self.navRecentApps = None
+
+        if autodump:
+            self.dump()
+
+    def __del__(self):
+        # should clean up some things
+        if hasattr(self, 'uiAutomatorHelper') and self.uiAutomatorHelper:
+            if DEBUG or True:
+                print >> sys.stderr, "Stopping UiAutomatorHelper..."
+            self.uiAutomatorHelper.quit()
+
+    @staticmethod
+    def __obtainAdbPath():
+        return obtainAdbPath()
+
+    @staticmethod
+    def __mapSerialNo(serialno):
+        serialno = serialno.strip()
+        #ipRE = re.compile('^\d+\.\d+.\d+.\d+$')
+        if IP_RE.match(serialno):
+            if DEBUG_DEVICE: print >>sys.stderr, "ViewClient: adding default port to serialno", serialno, ADB_DEFAULT_PORT
+            return serialno + ':%d' % ADB_DEFAULT_PORT
+
+        ipPortRE = re.compile('^\d+\.\d+.\d+.\d+:\d+$')
+        if ipPortRE.match(serialno):
+            # nothing to map
+            return serialno
+
+        if re.search("[.*()+]", serialno):
+            raise ValueError("Regular expression not supported as serialno in ViewClient. Found '%s'" % serialno)
+
+        return serialno
+
+    @staticmethod
+    def __obtainDeviceSerialNumber(device):
+        if DEBUG_DEVICE: print >>sys.stderr, "ViewClient: obtaining serial number for connected device"
+        serialno = device.getProperty('ro.serialno')
+        if not serialno:
+            serialno = device.shell('getprop ro.serialno')
+            if serialno:
+                serialno = serialno[:-2]
+        if not serialno:
+            qemu = device.shell('getprop ro.kernel.qemu')
+            if qemu:
+                qemu = qemu[:-2]
+                if qemu and int(qemu) == 1:
+                    # FIXME !!!!!
+                    # this must be calculated from somewhere, though using a fixed serialno for now
+                    warnings.warn("Running on emulator but no serial number was specified then 'emulator-5554' is used")
+                    serialno = 'emulator-5554'
+        if not serialno:
+            # If there's only one device connected get its serialno
+            adb = ViewClient.__obtainAdbPath()
+            if DEBUG_DEVICE: print >>sys.stderr, "    using adb=%s" % adb
+            s = subprocess.Popen([adb, 'get-serialno'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, env={}).communicate()[0][:-1]
+            if s != 'unknown':
+                serialno = s
+        if DEBUG_DEVICE: print >>sys.stderr, "    serialno=%s" % serialno
+        if not serialno:
+            warnings.warn("Couldn't obtain the serialno of the connected device")
+        return serialno
+
+    @staticmethod
+    def setAlarm(timeout):
+        osName = platform.system()
+        if osName.startswith('Windows'): # alarm is not implemented in Windows
+            return
+        signal.alarm(timeout)
+
+    @staticmethod
+    def connectToDeviceOrExit(timeout=60, verbose=False, ignoresecuredevice=False, ignoreversioncheck=False, serialno=None):
+        '''
+        Connects to a device which serial number is obtained from the script arguments if available
+        or using the default regex C{.*}.
+
+        If the connection is not successful the script exits.
+
+        History
+        -------
+        In MonkeyRunner times, this method was a way of overcoming one of its limitations.
+        L{MonkeyRunner.waitForConnection()} returns a L{MonkeyDevice} even if the connection failed.
+        Then, to detect this situation, C{device.wake()} is attempted and if it fails then it is
+        assumed the previous connection failed.
+
+        @type timeout: int
+        @param timeout: timeout for the connection
+        @type verbose: bool
+        @param verbose: Verbose output
+        @type ignoresecuredevice: bool
+        @param ignoresecuredevice: Ignores the check for a secure device
+        @type ignoreversioncheck: bool
+        @param ignoreversioncheck: Ignores the check for a supported ADB version
+        @type serialno: str
+        @param serialno: The device or emulator serial number
+
+        @return: the device and serialno used for the connection
+        '''
+
+        progname = os.path.basename(sys.argv[0])
+        if serialno is None:
+            # eat all the extra options the invoking script may have added
+            args = sys.argv
+            while len(args) > 1 and args[1][0] == '-':
+                args.pop(1)
+            serialno = args[1] if len(args) > 1 else \
+                    os.environ['ANDROID_SERIAL'] if os.environ.has_key('ANDROID_SERIAL') \
+                    else '.*'
+        if IP_RE.match(serialno):
+            # If matches an IP address format and port was not specified add the default
+            serialno += ':%d' % ADB_DEFAULT_PORT
+        if verbose:
+            print >> sys.stderr, 'Connecting to a device with serialno=%s with a timeout of %d secs...' % \
+                (serialno, timeout)
+        ViewClient.setAlarm(timeout+5)
+        # NOTE: timeout is used for 2 different timeouts, the one to set the alarm to timeout the connection with
+        # adb and the timeout used by adb (once connected) for the sockets
+        device = adbclient.AdbClient(serialno, ignoreversioncheck=ignoreversioncheck, timeout=timeout)
+        ViewClient.setAlarm(0)
+        if verbose:
+            print >> sys.stderr, 'Connected to device with serialno=%s' % serialno
+        secure = device.getSystemProperty('ro.secure')
+        debuggable = device.getSystemProperty('ro.debuggable')
+        versionProperty = device.getProperty(VERSION_SDK_PROPERTY)
+        if versionProperty:
+            version = int(versionProperty)
+        else:
+            if verbose:
+                print "Couldn't obtain device SDK version"
+            version = -1
+
+        # we are going to use UiAutomator for versions >= 16 that's why we ignore if the device
+        # is secure if this is true
+        if secure == '1' and debuggable == '0' and not ignoresecuredevice and version < 16:
+            print >> sys.stderr, "%s: ERROR: Device is secure, AndroidViewClient won't work." % progname
+            if verbose:
+                print >> sys.stderr, "    secure=%s debuggable=%s version=%d ignoresecuredevice=%s" % \
+                    (secure, debuggable, version, ignoresecuredevice)
+            sys.exit(2)
+        if re.search("[.*()+]", serialno) and not re.search("(\d{1,3}\.){3}\d{1,3}", serialno):
+            # if a regex was used we have to determine the serialno used
+            serialno = ViewClient.__obtainDeviceSerialNumber(device)
+        if verbose:
+            print >> sys.stderr, 'Actual device serialno=%s' % serialno
+        return device, serialno
+
+    @staticmethod
+    def traverseShowClassIdAndText(view, extraInfo=None, noExtraInfo=None, extraAction=None):
+        '''
+        Shows the View class, id and text if available.
+        This function can be used as a transform function to L{ViewClient.traverse()}
+
+        @type view: I{View}
+        @param view: the View
+        @type extraInfo: method
+        @param extraInfo: the View method to add extra info
+        @type noExtraInfo: bool
+        @param noExtraInfo: Don't add extra info
+        @type extraAction: method
+        @param extraAction: An extra action to be invoked for every view
+
+        @return: the string containing class, id, and text if available
+        '''
+
+        try:
+            eis = ''
+            if extraInfo:
+                eis = extraInfo(view)
+                if not eis and noExtraInfo:
+                    eis = noExtraInfo
+            if eis:
+                eis = ' {0}'.format(eis)
+            if extraAction:
+                extraAction(view)
+            _str = unicode(view.getClass())
+            _str += ' '
+            _str += '%s' % view.getId()
+            _str += ' '
+            _str += view.getText() if view.getText() else ''
+            if eis:
+                _str += eis
+            return _str
+        except Exception, e:
+            import traceback
+            return u'Exception in view=%s: %s:%s\n%s' % (view.__smallStr__(), sys.exc_info()[0].__name__, e, traceback.format_exc())
+
+    @staticmethod
+    def traverseShowClassIdTextAndUniqueId(view):
+        '''
+        Shows the View class, id, text if available and unique id.
+        This function can be used as a transform function to L{ViewClient.traverse()}
+
+        @type view: I{View}
+        @param view: the View
+        @return: the string containing class, id, and text if available and unique Id
+        '''
+
+        return ViewClient.traverseShowClassIdAndText(view, View.getUniqueId)
+
+    @staticmethod
+    def traverseShowClassIdTextAndContentDescription(view):
+        '''
+        Shows the View class, id, text if available and content description.
+        This function can be used as a transform function to L{ViewClient.traverse()}
+
+        @type view: I{View}
+        @param view: the View
+        @return: the string containing class, id, and text if available and the content description
+        '''
+
+        return ViewClient.traverseShowClassIdAndText(view, View.getContentDescription, 'NAF')
+
+    @staticmethod
+    def traverseShowClassIdTextAndTag(view):
+        '''
+        Shows the View class, id, text if available and tag.
+        This function can be used as a transform function to L{ViewClient.traverse()}
+
+        @type view: I{View}
+        @param view: the View
+        @return: the string containing class, id, and text if available and tag
+        '''
+
+        return ViewClient.traverseShowClassIdAndText(view, View.getTag, None)
+
+    @staticmethod
+    def traverseShowClassIdTextContentDescriptionAndScreenshot(view):
+        '''
+        Shows the View class, id, text if available and unique id and takes the screenshot.
+        This function can be used as a transform function to L{ViewClient.traverse()}
+
+        @type view: I{View}
+        @param view: the View
+        @return: the string containing class, id, and text if available and the content description
+        '''
+
+        return ViewClient.traverseShowClassIdAndText(view, View.getContentDescription, 'NAF', extraAction=ViewClient.writeViewImageToFileInDir)
+
+    @staticmethod
+    def traverseShowClassIdTextAndCenter(view):
+        '''
+        Shows the View class, id and text if available and center.
+        This function can be used as a transform function to L{ViewClient.traverse()}
+
+        @type view: I{View}
+        @param view: the View
+        @return: the string containing class, id, and text if available
+        '''
+
+        return ViewClient.traverseShowClassIdAndText(view, View.getCenter)
+
+    @staticmethod
+    def traverseShowClassIdTextPositionAndSize(view):
+        '''
+        Shows the View class, id and text if available.
+        This function can be used as a transform function to L{ViewClient.traverse()}
+
+        @type view: I{View}
+        @param view: the View
+        @return: the string containing class, id, and text if available
+        '''
+
+        return ViewClient.traverseShowClassIdAndText(view, View.getPositionAndSize)
+
+    @staticmethod
+    def traverseShowClassIdTextAndBounds(view):
+        '''
+        Shows the View class, id and text if available.
+        This function can be used as a transform function to L{ViewClient.traverse()}
+
+        @type view: I{View}
+        @param view: the View
+        @return: the string containing class, id, and text if available plus
+                 View bounds
+        '''
+
+        return ViewClient.traverseShowClassIdAndText(view, View.getBounds)
+
+    @staticmethod
+    def traverseTakeScreenshot(view):
+        '''
+        Don't show any any, just takes the screenshot.
+        This function can be used as a transform function to L{ViewClient.traverse()}
+
+        @type view: I{View}
+        @param view: the View
+        @return: None
+        '''
+
+        return ViewClient.writeViewImageToFileInDir(view)
+
+
+    # methods that can be used to transform ViewClient.traverse output
+    TRAVERSE_CIT = traverseShowClassIdAndText
+    ''' An alias for L{traverseShowClassIdAndText(view)} '''
+    TRAVERSE_CITUI = traverseShowClassIdTextAndUniqueId
+    ''' An alias for L{traverseShowClassIdTextAndUniqueId(view)} '''
+    TRAVERSE_CITCD = traverseShowClassIdTextAndContentDescription
+    ''' An alias for L{traverseShowClassIdTextAndContentDescription(view)} '''
+    TRAVERSE_CITG = traverseShowClassIdTextAndTag
+    ''' An alias for L{traverseShowClassIdTextAndTag(view)} '''
+    TRAVERSE_CITC = traverseShowClassIdTextAndCenter
+    ''' An alias for L{traverseShowClassIdTextAndCenter(view)} '''
+    TRAVERSE_CITPS = traverseShowClassIdTextPositionAndSize
+    ''' An alias for L{traverseShowClassIdTextPositionAndSize(view)} '''
+    TRAVERSE_CITB = traverseShowClassIdTextAndBounds
+    ''' An alias for L{traverseShowClassIdTextAndBounds(view)} '''
+    TRAVERSE_CITCDS = traverseShowClassIdTextContentDescriptionAndScreenshot
+    ''' An alias for L{traverseShowClassIdTextContentDescriptionAndScreenshot(view)} '''
+    TRAVERSE_S = traverseTakeScreenshot
+    ''' An alias for L{traverseTakeScreenshot(view)} '''
+
+    @staticmethod
+    def sleep(secs=1.0):
+        '''
+        Sleeps for the specified number of seconds.
+
+        @type secs: float
+        @param secs: number of seconds
+        '''
+        time.sleep(secs)
+
+    def assertServiceResponse(self, response):
+        '''
+        Checks whether the response received from the server is correct or raises and Exception.
+
+        @type response: str
+        @param response: Response received from the server
+
+        @raise Exception: If the response received from the server is invalid
+        '''
+
+        if not self.serviceResponse(response):
+            raise Exception('Invalid response received from service.')
+
+    def serviceResponse(self, response):
+        '''
+        Checks the response received from the I{ViewServer}.
+
+        @return: C{True} if the response received matches L{PARCEL_TRUE}, C{False} otherwise
+        '''
+
+        PARCEL_TRUE = "Result: Parcel(00000000 00000001   '........')\r\n"
+        ''' The TRUE response parcel '''
+        if DEBUG:
+            print >>sys.stderr, "serviceResponse: comparing '%s' vs Parcel(%s)" % (response, PARCEL_TRUE)
+        return response == PARCEL_TRUE
+
+    def setViews(self, received, windowId=None):
+        '''
+        Sets L{self.views} to the received value splitting it into lines.
+
+        @type received: str
+        @param received: the string received from the I{View Server}
+        '''
+
+        if not received or received == "":
+            raise ValueError("received is empty")
+        self.views = []
+        ''' The list of Views represented as C{str} obtained after splitting it into lines after being received from the server. Done by L{self.setViews()}. '''
+        self.__parseTree(received.split("\n"), windowId)
+        if DEBUG:
+            print >>sys.stderr, "there are %d views in this dump" % len(self.views)
+
+    def setViewsFromUiAutomatorDump(self, received):
+        '''
+        Sets L{self.views} to the received value parsing the received XML.
+
+        @type received: str
+        @param received: the string received from the I{UI Automator}
+        '''
+
+        if not received or received == "":
+            raise ValueError("received is empty")
+        self.views = []
+        ''' The list of Views represented as C{str} obtained after splitting it into lines after being received from the server. Done by L{self.setViews()}. '''
+        self.__parseTreeFromUiAutomatorDump(received)
+        if DEBUG:
+            print >>sys.stderr, "there are %d views in this dump" % len(self.views)
+
+
+    def __splitAttrs(self, strArgs):
+        '''
+        Splits the C{View} attributes in C{strArgs} and optionally adds the view id to the C{viewsById} list.
+
+        Unique Ids
+        ==========
+        It is very common to find C{View}s having B{NO_ID} as the Id. This turns very difficult to
+        use L{self.findViewById()}. To help in this situation this method assigns B{unique Ids}.
+
+        The B{unique Ids} are generated using the pattern C{id/no_id/<number>} with C{<number>} starting
+        at 1.
+
+        @type strArgs: str
+        @param strArgs: the string containing the raw list of attributes and values
+
+        @return: Returns the attributes map.
+        '''
+
+        if self.useUiAutomator:
+            raise RuntimeError("This method is not compatible with UIAutomator")
+        # replace the spaces in text:mText to preserve them in later split
+        # they are translated back after the attribute matches
+        textRE = re.compile('%s=%s,' % (self.textProperty, _nd('len')))
+        m = textRE.search(strArgs)
+        if m:
+            __textStart = m.end()
+            __textLen = int(m.group('len'))
+            __textEnd = m.end() + __textLen
+            s1 = strArgs[__textStart:__textEnd]
+            s2 = s1.replace(' ', WS)
+            strArgs = strArgs.replace(s1, s2, 1)
+
+        idRE = re.compile("(?P<viewId>id/\S+)")
+        attrRE = re.compile('%s(?P<parens>\(\))?=%s,(?P<val>[^ ]*)' % (_ns('attr'), _nd('len')), flags=re.DOTALL)
+        hashRE = re.compile('%s@%s' % (_ns('class'), _nh('oid')))
+
+        attrs = {}
+        viewId = None
+        m = idRE.search(strArgs)
+        if m:
+            viewId = m.group('viewId')
+            if DEBUG:
+                print >>sys.stderr, "found view with id=%s" % viewId
+
+        for attr in strArgs.split():
+            m = attrRE.match(attr)
+            if m:
+                __attr = m.group('attr')
+                __parens = '()' if m.group('parens') else ''
+                __len = int(m.group('len'))
+                __val = m.group('val')
+                if WARNINGS and __len != len(__val):
+                    warnings.warn("Invalid len: expected: %d   found: %d   s=%s   e=%s" % (__len, len(__val), __val[:50], __val[-50:]))
+                if __attr == self.textProperty:
+                    # restore spaces that have been replaced
+                    __val = __val.replace(WS, ' ')
+                attrs[__attr + __parens] = __val
+            else:
+                m = hashRE.match(attr)
+                if m:
+                    attrs['class'] = m.group('class')
+                    attrs['oid'] = m.group('oid')
+                else:
+                    if DEBUG:
+                        print >>sys.stderr, attr, "doesn't match"
+
+        if True: # was assignViewById
+            if not viewId:
+                # If the view has NO_ID we are assigning a default id here (id/no_id) which is
+                # immediately incremented if another view with no id was found before to generate
+                # a unique id
+                viewId = "id/no_id/1"
+            if viewId in self.viewsById:
+                # sometimes the view ids are not unique, so let's generate a unique id here
+                i = 1
+                while True:
+                    newId = re.sub('/\d+$', '', viewId) + '/%d' % i
+                    if not newId in self.viewsById:
+                        break
+                    i += 1
+                viewId = newId
+                if DEBUG:
+                    print >>sys.stderr, "adding viewById %s" % viewId
+            # We are assigning a new attribute to keep the original id preserved, which could have
+            # been NO_ID repeated multiple times
+            attrs['uniqueId'] = viewId
+
+        return attrs
+
+    def __parseTree(self, receivedLines, windowId=None):
+        '''
+        Parses the View tree contained in L{receivedLines}. The tree is created and the root node assigned to L{self.root}.
+        This method also assigns L{self.viewsById} values using L{View.getUniqueId} as the key.
+
+        @type receivedLines: str
+        @param receivedLines: the string received from B{View Server}
+        '''
+
+        self.root = None
+        self.viewsById = {}
+        self.views = []
+        parent = None
+        parents = []
+        treeLevel = -1
+        newLevel = -1
+        lastView = None
+        for v in receivedLines:
+            if v == '' or v == 'DONE' or v == 'DONE.':
+                break
+            attrs = self.__splitAttrs(v)
+            if not self.root:
+                if v[0] == ' ':
+                    raise Exception("Unexpected root element starting with ' '.")
+                self.root = View.factory(attrs, self.device, self.build[VERSION_SDK_PROPERTY], self.forceViewServerUse, windowId, self.uiAutomatorHelper)
+                if DEBUG: self.root.raw = v
+                treeLevel = 0
+                newLevel = 0
+                lastView = self.root
+                parent = self.root
+                parents.append(parent)
+            else:
+                newLevel = (len(v) - len(v.lstrip()))
+                if newLevel == 0:
+                    raise Exception("newLevel==0 treeLevel=%d but tree can have only one root, v=%s" % (treeLevel, v))
+                child = View.factory(attrs, self.device, self.build[VERSION_SDK_PROPERTY], self.forceViewServerUse, windowId, self.uiAutomatorHelper)
+                if DEBUG: child.raw = v
+                if newLevel == treeLevel:
+                    parent.add(child)
+                    lastView = child
+                elif newLevel > treeLevel:
+                    if (newLevel - treeLevel) != 1:
+                        raise Exception("newLevel jumps %d levels, v=%s" % ((newLevel-treeLevel), v))
+                    parent = lastView
+                    parents.append(parent)
+                    parent.add(child)
+                    lastView = child
+                    treeLevel = newLevel
+                else: # newLevel < treeLevel
+                    for _ in range(treeLevel - newLevel):
+                        parents.pop()
+                    parent = parents.pop()
+                    parents.append(parent)
+                    parent.add(child)
+                    treeLevel = newLevel
+                    lastView = child
+            self.views.append(lastView)
+            self.viewsById[lastView.getUniqueId()] = lastView
+
+    def __updateNavButtons(self):
+        """
+        Updates the navigation buttons that might be on the device screen.
+        """
+
+        navButtons = None
+        for v in self.views:
+            if v.getId() == 'com.android.systemui:id/nav_buttons':
+                navButtons = v
+                break
+        if navButtons:
+            self.navBack = self.findViewById('com.android.systemui:id/back', navButtons)
+            self.navHome = self.findViewById('com.android.systemui:id/home', navButtons)
+            self.navRecentApps = self.findViewById('com.android.systemui:id/recent_apps', navButtons)
+        else:
+            if self.uiAutomatorHelper:
+                print >> sys.stderr, "WARNING: nav buttons not found. Perhaps the device has hardware buttons."
+            self.navBack = None
+            self.navHome = None
+            self.navRecentApps = None
+
+    def __parseTreeFromUiAutomatorDump(self, receivedXml):
+        if DEBUG:
+            print >> sys.stderr, "__parseTreeFromUiAutomatorDump(", receivedXml[:40], "...)"
+        parser = UiAutomator2AndroidViewClient(self.device, self.build[VERSION_SDK_PROPERTY], self.uiAutomatorHelper)
+        try:
+            start_xml_index = receivedXml.index("<")
+            end_xml_index = receivedXml.rindex(">")
+        except ValueError:
+            raise ValueError("received does not contain valid XML: " + receivedXml)
+        self.root = parser.Parse(receivedXml[start_xml_index:end_xml_index+1])
+        self.views = parser.views
+        self.viewsById = {}
+        for v in self.views:
+            self.viewsById[v.getUniqueId()] = v
+        self.__updateNavButtons()
+        if DEBUG_NAV_BUTTONS:
+            if not self.navBack:
+                print >> sys.stderr, "WARNING: navBack not found"
+            if not self.navHome:
+                print >> sys.stderr, "WARNING: navHome not found"
+            if not self.navRecentApps:
+                print >> sys.stderr, "WARNING: navRecentApps not found"
+
+    def getRoot(self):
+        '''
+        Gets the root node of the C{View} tree
+
+        @return: the root node of the C{View} tree
+        '''
+        return self.root
+
+    def traverse(self, root="ROOT", indent="", transform=None, stream=sys.stdout):
+        '''
+        Traverses the C{View} tree and prints its nodes.
+
+        The nodes are printed converting them to string but other transformations can be specified
+        by providing a method name as the C{transform} parameter.
+
+        @type root: L{View}
+        @param root: the root node from where the traverse starts
+        @type indent: str
+        @param indent: the indentation string to use to print the nodes
+        @type transform: method
+        @param transform: a method to use to transform the node before is printed
+        '''
+
+        if transform is None:
+            # this cannot be a default value, otherwise
+            # TypeError: 'staticmethod' object is not callable
+            # is raised
+            transform = ViewClient.TRAVERSE_CIT
+
+        if type(root) == types.StringType and root == "ROOT":
+            root = self.root
+
+        return ViewClient.__traverse(root, indent, transform, stream)
+#         if not root:
+#             return
+#
+#         s = transform(root)
+#         if s:
+#             print >>stream, "%s%s" % (indent, s)
+#
+#         for ch in root.children:
+#             self.traverse(ch, indent=indent+"   ", transform=transform, stream=stream)
+
+    @staticmethod
+    def __traverse(root, indent="", transform=View.__str__, stream=sys.stdout):
+        if not root:
+            return
+
+        s = transform(root)
+        if stream and s:
+            ius = "%s%s" % (indent, s if isinstance(s, unicode) else unicode(s, 'utf-8', 'replace'))
+            print >>stream, ius.encode('utf-8', 'replace')
+
+        for ch in root.children:
+            ViewClient.__traverse(ch, indent=indent+"   ", transform=transform, stream=stream)
+
+    def dump(self, window=-1, sleep=1):
+        '''
+        Dumps the window content.
+
+        Sleep is useful to wait some time before obtaining the new content when something in the
+        window has changed.
+
+        @type window: int or str
+        @param window: the window id or name of the window to dump.
+                    The B{name} is the package name or the window name (i.e. StatusBar) for
+                    system windows.
+                    The window id can be provided as C{int} or C{str}. The C{str} should represent
+                    and C{int} in either base 10 or 16.
+                    Use -1 to dump all windows.
+                    This parameter only is used when the backend is B{ViewServer} and it's
+                    ignored for B{UiAutomator}.
+        @type sleep: int
+        @param sleep: sleep in seconds before proceeding to dump the content
+
+        @return: the list of Views as C{str} received from the server after being split into lines
+        '''
+
+        if sleep > 0:
+            time.sleep(sleep)
+
+        if self.useUiAutomator:
+            if self.uiAutomatorHelper:
+                received = self.uiAutomatorHelper.dumpWindowHierarchy()
+            else:
+                api = self.getSdkVersion()
+                if api >= 23:
+                    # In API 23 the process' stdout,in and err are connected to the socket not to the pts as in
+                    # previous versions, so we can't redirect to /dev/tty
+                    # Also, if we want to write to /sdcard/something it fails event though /sdcard is a symlink
+                    if self.serialno.startswith('emulator'):
+                        pathname = '/storage/self'
+                    else:
+                        pathname = '/sdcard'
+                    filename = 'window_dump.xml'
+                    cmd = 'uiautomator dump %s %s/%s >/dev/null && cat %s/%s' % ('--compressed' if self.compressedDump else '', pathname, filename, pathname, filename)
+                    received = self.device.shell(cmd)
+                else:
+                    # NOTICE:
+                    # Using /dev/tty this works even on devices with no sdcard
+                    received = self.device.shell('uiautomator dump %s /dev/tty >/dev/null' % ('--compressed' if api >= 18 and self.compressedDump else ''))
+                if received:
+                    received = unicode(received, encoding='utf-8', errors='replace')
+            if not received:
+                raise RuntimeError('ERROR: Empty UiAutomator dump was received')
+            if DEBUG:
+                self.received = received
+            if DEBUG_RECEIVED:
+                print >>sys.stderr, "received %d chars" % len(received)
+                print >>sys.stderr
+                print >>sys.stderr, repr(received)
+                print >>sys.stderr
+            onlyKilledRE = re.compile('Killed$')
+            if onlyKilledRE.search(received):
+                MONKEY = 'com.android.commands.monkey'
+                extraInfo = ''
+                if self.device.shell('ps | grep "%s"' % MONKEY):
+                    extraInfo = "\nIt is know that '%s' conflicts with 'uiautomator'. Please kill it and try again." % MONKEY
+                raise RuntimeError('''ERROR: UiAutomator output contains no valid information. UiAutomator was killed, no reason given.''' + extraInfo)
+            if self.ignoreUiAutomatorKilled:
+                if DEBUG_RECEIVED:
+                    print >>sys.stderr, "ignoring UiAutomator Killed"
+                killedRE = re.compile('</hierarchy>[\n\S]*Killed', re.MULTILINE)
+                if killedRE.search(received):
+                    received = re.sub(killedRE, '</hierarchy>', received)
+                elif DEBUG_RECEIVED:
+                    print "UiAutomator Killed: NOT FOUND!"
+                # It seems that API18 uiautomator spits this message to stdout
+                dumpedToDevTtyRE = re.compile('</hierarchy>[\n\S]*UI hierchary dumped to: /dev/tty.*', re.MULTILINE)
+                if dumpedToDevTtyRE.search(received):
+                    received = re.sub(dumpedToDevTtyRE, '</hierarchy>', received)
+                if DEBUG_RECEIVED:
+                    print >>sys.stderr, "received=", received
+            # API19 seems to send this warning as part of the XML.
+            # Let's remove it if present
+            received = received.replace('WARNING: linker: libdvm.so has text relocations. This is wasting memory and is a security risk. Please fix.\r\n', '')
+            if re.search('\[: not found', received):
+                raise RuntimeError('''ERROR: Some emulator images (i.e. android 4.1.2 API 16 generic_x86) does not include the '[' command.
+While UiAutomator back-end might be supported 'uiautomator' command fails.
+You should force ViewServer back-end.''')
+
+            if received.startswith('ERROR: could not get idle state.'):
+                # See https://android.googlesource.com/platform/frameworks/testing/+/jb-mr2-release/uiautomator/cmds/uiautomator/src/com/android/commands/uiautomator/DumpCommand.java
+                raise RuntimeError('''The views are being refreshed too frequently to dump.''')
+            if received.find(u'Only ROTATION_0 supported') != -1:
+                raise RuntimeError('''UiAutomatorHelper backend with support for only ROTATION_0 found.''')
+            self.setViewsFromUiAutomatorDump(received)
+        else:
+            if isinstance(window, str):
+                if window != '-1':
+                    self.list(sleep=0)
+                    found = False
+                    for wId in self.windows:
+                        try:
+                            if window == self.windows[wId]:
+                                window = wId
+                                found = True
+                                break
+                        except:
+                            pass
+                        try:
+                            if int(window) == wId:
+                                window = wId
+                                found = True
+                                break
+                        except:
+                            pass
+                        try:
+                            if int(window, 16) == wId:
+                                window = wId
+                                found = True
+                                break
+                        except:
+                            pass
+
+                    if not found:
+                        raise RuntimeError("ERROR: Cannot find window '%s' in %s" % (window, self.windows))
+                else:
+                    window = -1
+
+            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+            try:
+                s.connect((VIEW_SERVER_HOST, self.localPort))
+            except socket.error, ex:
+                raise RuntimeError("ERROR: Connecting to %s:%d: %s" % (VIEW_SERVER_HOST, self.localPort, ex))
+            cmd = 'dump %x\r\n' % window
+            if DEBUG:
+                print >>sys.stderr, "executing: '%s'" % cmd
+            s.send(cmd)
+            received = ""
+            doneRE = re.compile("DONE")
+            ViewClient.setAlarm(120)
+            while True:
+                if DEBUG_RECEIVED:
+                    print >>sys.stderr, "    reading from socket..."
+                received += s.recv(1024)
+                if doneRE.search(received[-7:]):
+                    break
+            s.close()
+            ViewClient.setAlarm(0)
+            if DEBUG:
+                self.received = received
+            if DEBUG_RECEIVED:
+                print >>sys.stderr, "received %d chars" % len(received)
+                print >>sys.stderr
+                print >>sys.stderr, received
+                print >>sys.stderr
+            if received:
+                for c in received:
+                    if ord(c) > 127:
+                        received = unicode(received, encoding='utf-8', errors='replace')
+                        break
+            self.setViews(received, hex(window)[2:])
+
+            if DEBUG_TREE:
+                self.traverse(self.root)
+
+        return self.views
+
+    def list(self, sleep=1):
+        '''
+        List the windows.
+
+        Sleep is useful to wait some time before obtaining the new content when something in the
+        window has changed.
+        This also sets L{self.windows} as the list of windows.
+
+        @type sleep: int
+        @param sleep: sleep in seconds before proceeding to dump the content
+
+        @return: the list of windows
+        '''
+
+        if sleep > 0:
+            time.sleep(sleep)
+
+        if self.useUiAutomator:
+            raise Exception("Not implemented yet: listing windows with UiAutomator")
+        else:
+            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+            try:
+                s.connect((VIEW_SERVER_HOST, self.localPort))
+            except socket.error, ex:
+                raise RuntimeError("ERROR: Connecting to %s:%d: %s" % (VIEW_SERVER_HOST, self.localPort, ex))
+            s.send('list\r\n')
+            received = ""
+            doneRE = re.compile("DONE")
+            while True:
+                received += s.recv(1024)
+                if doneRE.search(received[-7:]):
+                    break
+            s.close()
+            if DEBUG:
+                self.received = received
+            if DEBUG_RECEIVED:
+                print >>sys.stderr, "received %d chars" % len(received)
+                print >>sys.stderr
+                print >>sys.stderr, received
+                print >>sys.stderr
+
+            self.windows = {}
+            for line in received.split('\n'):
+                if not line:
+                    break
+                if doneRE.search(line):
+                    break
+                values = line.split()
+                if len(values) > 1:
+                    package = values[1]
+                else:
+                    package = "UNKNOWN"
+                if len(values) > 0:
+                    wid = values[0]
+                else:
+                    wid = '00000000'
+                self.windows[int('0x' + wid, 16)] = package
+            return self.windows
+
+
+    def findViewById(self, viewId, root="ROOT", viewFilter=None):
+        '''
+        Finds the View with the specified viewId.
+
+        @type viewId: str
+        @param viewId: the ID of the view to find
+        @type root: str
+        @type root: View
+        @param root: the root node of the tree where the View will be searched
+        @type: viewFilter: function
+        @param viewFilter: a function that will be invoked providing the candidate View as a parameter
+                           and depending on the return value (C{True} or C{False}) the View will be
+                           selected and returned as the result of C{findViewById()} or ignored.
+                           This can be C{None} and no extra filtering is applied.
+
+        @return: the C{View} found or C{None}
+        '''
+
+        if not root:
+            return None
+
+        if type(root) == types.StringType and root == "ROOT":
+            return self.findViewById(viewId, self.root, viewFilter)
+
+        if root.getId() == viewId:
+            if viewFilter:
+                if viewFilter(root):
+                    return root
+            else:
+                return root
+
+        if re.match('^id/no_id', viewId) or re.match('^id/.+/.+', viewId):
+            if root.getUniqueId() == viewId:
+                if viewFilter:
+                    if viewFilter(root):
+                        return root;
+                else:
+                    return root
+
+
+        for ch in root.children:
+            foundView = self.findViewById(viewId, ch, viewFilter)
+            if foundView:
+                if viewFilter:
+                    if viewFilter(foundView):
+                        return foundView
+                else:
+                    return foundView
+
+    def findViewByIdOrRaise(self, viewId, root="ROOT", viewFilter=None):
+        '''
+        Finds the View or raise a ViewNotFoundException.
+
+        @type viewId: str
+        @param viewId: the ID of the view to find
+        @type root: str
+        @type root: View
+        @param root: the root node of the tree where the View will be searched
+        @type: viewFilter: function
+        @param viewFilter: a function that will be invoked providing the candidate View as a parameter
+                           and depending on the return value (C{True} or C{False}) the View will be
+                           selected and returned as the result of C{findViewById()} or ignored.
+                           This can be C{None} and no extra filtering is applied.
+        @return: the View found
+        @raise ViewNotFoundException: raise the exception if View not found
+        '''
+
+        view = self.findViewById(viewId, root, viewFilter)
+        if view:
+            return view
+        else:
+            raise ViewNotFoundException("ID", viewId, root)
+
+    def findViewByTag(self, tag, root="ROOT"):
+        '''
+        Finds the View with the specified tag
+        '''
+
+        return self.findViewWithAttribute('getTag()', tag, root)
+
+    def findViewByTagOrRaise(self, tag, root="ROOT"):
+        '''
+        Finds the View with the specified tag or raise a ViewNotFoundException
+        '''
+
+        view = self.findViewWithAttribute('getTag()', tag, root)
+        if view:
+            return view
+        else:
+            raise ViewNotFoundException("tag", tag, root)
+
+    def __findViewsWithAttributeInTree(self, attr, val, root):
+        # Note the plural in this method name
+        matchingViews = []
+        if not self.root:
+            print >>sys.stderr, "ERROR: no root, did you forget to call dump()?"
+            return matchingViews
+
+        if type(root) == types.StringType and root == "ROOT":
+            root = self.root
+
+        if DEBUG: print >>sys.stderr, "__findViewWithAttributeInTree: type val=", type(val)
+        if DEBUG: print >>sys.stderr, "__findViewWithAttributeInTree: checking if root=%s has attr=%s == %s" % (root.__smallStr__(), attr, val)
+
+        if root and attr in root.map and root.map[attr] == val:
+            if DEBUG: print >>sys.stderr, "__findViewWithAttributeInTree:  FOUND: %s" % root.__smallStr__()
+            matchingViews.append(root)
+        else:
+            for ch in root.children:
+                matchingViews += self.__findViewsWithAttributeInTree(attr, val, ch)
+
+        return matchingViews
+
+    def __findViewWithAttributeInTree(self, attr, val, root):
+        if DEBUG:
+            print >> sys.stderr, "    __findViewWithAttributeInTree: type(val)=", type(val)
+            if type(val) != types.UnicodeType and type(val) != re._pattern_type:
+                u = unicode(val, encoding='utf-8', errors='ignore')
+            else:
+                u = val
+            print >> sys.stderr, u'''__findViewWithAttributeInTree({0}'''.format(attr),
+            try:
+                print >> sys.stderr, u''', {0}'''.format(u),
+            except:
+                pass
+            print >> sys.stderr, u'>>>>>>>>>>>>>>>>>>', type(root)
+            if type(root) == types.StringType:
+                print >> sys.stderr, u'>>>>>>>>>>>>>>>>>>', root
+                print >> sys.stderr, u''', {0})'''.format(root)
+            else:
+                print >> sys.stderr, u''', {0})'''.format(root.__smallStr__())
+
+        if not self.root:
+            print >>sys.stderr, "ERROR: no root, did you forget to call dump()?"
+            return None
+
+        if type(root) == types.StringType and root == "ROOT":
+            root = self.root
+
+        if DEBUG: print >>sys.stderr, "__findViewWithAttributeInTree: type val=", type(val)
+        if DEBUG:
+            #print >> sys.stderr, u'''__findViewWithAttributeInTree: checking if root={0}: '''.format(root),
+            print >> sys.stderr, u'''has  {0} == '''.format(attr),
+            if type(val) == types.UnicodeType:
+                u = val
+            elif type(val) != re._pattern_type:
+                u = unicode(val, encoding='utf-8', errors='replace')
+            try:
+                print >> sys.stderr, u'''{0}'''.format(u)
+            except:
+                pass
+
+        if isinstance(val, RegexType):
+            return self.__findViewWithAttributeInTreeThatMatches(attr, val, root)
+        else:
+            try:
+                if DEBUG:
+                    print >> sys.stderr, u'''__findViewWithAttributeInTree: comparing {0}: '''.format(attr),
+                    print >> sys.stderr, u'''{0} == '''.format(root.map[attr]),
+                    print >> sys.stderr, u'''{0}'''.format(val)
+            except:
+                pass
+            if root and attr in root.map and root.map[attr] == val:
+                if DEBUG: print >>sys.stderr, "__findViewWithAttributeInTree:  FOUND: %s" % root.__smallStr__()
+                return root
+            else:
+                for ch in root.children:
+                    v = self.__findViewWithAttributeInTree(attr, val, ch)
+                    if v:
+                        return v
+
+        return None
+
+    def __findViewWithAttributeInTreeOrRaise(self, attr, val, root):
+        view = self.__findViewWithAttributeInTree(attr, val, root)
+        if view:
+            return view
+        else:
+            raise ViewNotFoundException(attr, val, root)
+
+    def __findViewWithAttributeInTreeThatMatches(self, attr, regex, root, rlist=[]):
+        if not self.root:
+            print >>sys.stderr, "ERROR: no root, did you forget to call dump()?"
+            return None
+
+        if type(root) == types.StringType and root == "ROOT":
+            root = self.root
+
+        if DEBUG: print >>sys.stderr, "__findViewWithAttributeInTreeThatMatches: checking if root=%s attr=%s matches %s" % (root.__smallStr__(), attr, regex)
+
+        if root and attr in root.map and regex.match(root.map[attr]):
+            if DEBUG: print >>sys.stderr, "__findViewWithAttributeInTreeThatMatches:  FOUND: %s" % root.__smallStr__()
+            return root
+            #print >>sys.stderr, "appending root=%s to rlist=%s" % (root.__smallStr__(), rlist)
+            #return rlist.append(root)
+        else:
+            for ch in root.children:
+                v = self.__findViewWithAttributeInTreeThatMatches(attr, regex, ch, rlist)
+                if v:
+                    return v
+                    #print >>sys.stderr, "appending v=%s to rlist=%s" % (v.__smallStr__(), rlist)
+                    #return rlist.append(v)
+
+        return None
+        #return rlist
+
+    def findViewWithAttribute(self, attr, val, root="ROOT"):
+        '''
+        Finds the View with the specified attribute and value
+        '''
+        if DEBUG:
+            try:
+                print >> sys.stderr, u'findViewWithAttribute({0}, {1}, {2})'.format(attr, unicode(val, encoding='utf-8', errors='replace'), root)
+            except:
+                pass
+            print >> sys.stderr, "    findViewWithAttribute: type(val)=", type(val)
+
+
+        return self.__findViewWithAttributeInTree(attr, val, root)
+
+    def findViewsWithAttribute(self, attr, val, root="ROOT"):
+        '''
+        Finds the Views with the specified attribute and value.
+        This allows you to see all items that match your criteria in the view hierarchy
+
+        Usage:
+          buttons = v.findViewsWithAttribute("class", "android.widget.Button")
+
+        '''
+
+        return self.__findViewsWithAttributeInTree(attr, val, root)
+
+    def findViewWithAttributeOrRaise(self, attr, val, root="ROOT"):
+        '''
+        Finds the View or raise a ViewNotFoundException.
+
+        @return: the View found
+        @raise ViewNotFoundException: raise the exception if View not found
+        '''
+
+        view = self.findViewWithAttribute(attr, val, root)
+        if view:
+            return view
+        else:
+            raise ViewNotFoundException(attr, val, root)
+
+    def findViewWithAttributeThatMatches(self, attr, regex, root="ROOT"):
+        '''
+        Finds the list of Views with the specified attribute matching
+        regex
+        '''
+
+        return self.__findViewWithAttributeInTreeThatMatches(attr, regex, root)
+
+    def findViewWithText(self, text, root="ROOT"):
+        if DEBUG:
+            try:
+                print >>sys.stderr, '''findViewWithText({0}, {1})'''.format(text, root)
+                print >> sys.stderr, "    findViewWithText: type(text)=", type(text)
+            except:
+                pass
+
+        if isinstance(text, RegexType):
+            return self.findViewWithAttributeThatMatches(self.textProperty, text, root)
+            #l = self.findViewWithAttributeThatMatches(TEXT_PROPERTY, text)
+            #ll = len(l)
+            #if ll == 0:
+            #    return None
+            #elif ll == 1:
+            #    return l[0]
+            #else:
+            #    print >>sys.stderr, "WARNING: findViewWithAttributeThatMatches invoked by findViewWithText returns %d items." % ll
+            #    return l
+        else:
+            return self.findViewWithAttribute(self.textProperty, text, root)
+
+    def findViewWithTextOrRaise(self, text, root="ROOT"):
+        '''
+        Finds the View or raise a ViewNotFoundException.
+
+        @return: the View found
+        @raise ViewNotFoundException: raise the exception if View not found
+        '''
+
+        if DEBUG:
+            print >>sys.stderr, "findViewWithTextOrRaise(%s, %s)" % (text, root)
+        view = self.findViewWithText(text, root)
+        if view:
+            return view
+        else:
+            raise ViewNotFoundException("text", text, root)
+
+    def findViewWithContentDescription(self, contentdescription, root="ROOT"):
+        '''
+        Finds the View with the specified content description
+        '''
+
+        return self.__findViewWithAttributeInTree('content-desc', contentdescription, root)
+
+    def findViewWithContentDescriptionOrRaise(self, contentdescription, root="ROOT"):
+        '''
+        Finds the View with the specified content description
+        '''
+
+        return self.__findViewWithAttributeInTreeOrRaise('content-desc', contentdescription, root)
+
+    def findViewsContainingPoint(self, (x, y), _filter=None):
+        '''
+        Finds the list of Views that contain the point (x, y).
+        '''
+
+        if not _filter:
+            _filter = lambda v: True
+
+        return [v for v in self.views if (v.containsPoint((x,y)) and _filter(v))]
+
+    def findObject(self, **kwargs):
+        if self.uiAutomatorHelper:
+            if DEBUG_UI_AUTOMATOR_HELPER:
+                print >> sys.stderr, "Finding object with %s through UiAutomatorHelper" % (kwargs)
+            return self.uiAutomatorHelper.findObject(**kwargs)
+        else:
+            warnings.warn("findObject only implemented using UiAutomatorHelper. Use ViewClient.findView...() instead.")
+            return None
+
+    def touch(self, x=-1, y=-1, selector=None):
+        if self.uiAutomatorHelper:
+            if selector:
+                if DEBUG_UI_AUTOMATOR_HELPER:
+                    print >> sys.stderr, "Touching View by selector=%s through UiAutomatorHelper" % (selector)
+                self.uiAutomatorHelper.findObject(selector=selector).click()
+            else:
+                if DEBUG_UI_AUTOMATOR_HELPER:
+                    print >> sys.stderr, "Touching (%d, %d) through UiAutomatorHelper" % (x, y)
+                self.uiAutomatorHelper.click(x=int(x), y=int(y))
+        else:
+            self.device.touch(x, y)
+
+    def longTouch(self, x=-1, y=-1, selector=None):
+        if self.uiAutomatorHelper:
+            if selector:
+                if DEBUG_UI_AUTOMATOR_HELPER:
+                    print >> sys.stderr, "ViewClient: Long-touching View by selector=%s through UiAutomatorHelper" % (selector)
+                self.uiAutomatorHelper.findObject(selector=selector).longClick()
+            else:
+                if DEBUG_UI_AUTOMATOR_HELPER:
+                    print >> sys.stderr, "ViewClient: Long-touching (%d, %d) through UiAutomatorHelper" % (x, y)
+                self.uiAutomatorHelper.swipe(startX=int(x), startY=int(y), endX=int(x), endY=int(y), steps=400)
+        else:
+            self.device.longTouch(x, y)
+
+    def swipe(self, x0=-1, y0=-1, x1=-1, y1=-1, steps=400, segments=[], segmentSteps=5):
+        if self.uiAutomatorHelper:
+            if DEBUG_UI_AUTOMATOR_HELPER:
+                print >> sys.stderr, "Swipe through UiAutomatorHelper", (x0, y0, x1, y1, steps, segments, segmentSteps)
+            self.uiAutomatorHelper.swipe(startX=x0, startY=y0, endX=x1, endY=y1, steps=steps, segments=segments, segmentSteps=segmentSteps)
+        else:
+            warnings.warn("swipe only implemented using UiAutomatorHelper. Use AdbClient.drag() instead.")
+
+    def pressBack(self):
+        if self.uiAutomatorHelper:
+            self.uiAutomatorHelper.pressBack()
+        else:
+            warnings.warn("pressBak only implemented using UiAutomatorHelper.  Use AdbClient.type() instead")
+
+    def pressHome(self):
+        if self.uiAutomatorHelper:
+            self.uiAutomatorHelper.pressHome()
+        else:
+            warnings.warn("pressHome only implemented using UiAutomatorHelper.  Use AdbClient.type() instead")
+
+    def pressRecentApps(self):
+        if self.uiAutomatorHelper:
+            self.uiAutomatorHelper.pressRecentApps()
+        else:
+            warnings.warn("pressRecentApps only implemented using UiAutomatorHelper.  Use AdbClient.type() instead")
+
+    def pressKeyCode(self, keycode, metaState=0):
+        '''By default no meta state'''
+        if self.uiAutomatorHelper:
+            if DEBUG_UI_AUTOMATOR_HELPER:
+                print >> sys.stderr, "pressKeyCode(%d, %d)" % (keycode, metaState)
+            self.uiAutomatorHelper.pressKeyCode(keycode, metaState)
+        else:
+            warnings.warn("pressKeyCode only implemented using UiAutomatorHelper.  Use AdbClient.type() instead")
+
+    def setText(self, v, text):
+        if DEBUG:
+            print >> sys.stderr, "setText(%s, '%s')" % (v.__tinyStr__(), text)
+        if self.uiAutomatorHelper:
+            if DEBUG_UI_AUTOMATOR_HELPER:
+                print >> sys.stderr, "Setting text through UiAutomatorHelper for View with ID=%s" % v.getId()
+            if v.getId():
+                oid = self.uiAutomatorHelper.findObject(selector='res@%s' % v.getId())
+                if DEBUG_UI_AUTOMATOR_HELPER:
+                    print >> sys.stderr, "oid=", oid, "text=", text
+                self.uiAutomatorHelper.setText(oid, text)
+            else:
+                # The View has no ID so we cannot use the ID to create a selector to find it using findObject()
+                # Let's fall back to this method.
+                v.setText(text)
+        else:
+            # This is deleting the existing text, which should be asked in the dialog, but I would have to implement
+            # the dialog myself
+            v.setText(text)
+            # This is not deleting the text, so appending if there's something
+            # v.type(text)
+
+    def getViewIds(self):
+        '''
+        @deprecated: Use L{getViewsById} instead.
+
+        Returns the Views map.
+        '''
+
+        return self.viewsById
+
+    def getViewsById(self):
+        '''
+        Returns the Views map. The keys are C{uniqueIds} and the values are C{View}s.
+        '''
+
+        return self.viewsById
+
+    def __getFocusedWindowPosition(self):
+        return self.__getFocusedWindowId()
+
+    def getSdkVersion(self):
+        '''
+        Gets the SDK version.
+        '''
+
+        return self.build[VERSION_SDK_PROPERTY]
+
+    def isKeyboardShown(self):
+        '''
+        Whether the keyboard is displayed.
+        '''
+
+        return self.device.isKeyboardShown()
+
+    def writeImageToFile(self, filename, _format="PNG", deviceart=None, dropshadow=True, screenglare=True):
+        '''
+        Write the View image to the specified filename in the specified format.
+
+        @type filename: str
+        @param filename: Absolute path and optional filename receiving the image. If this points to
+                         a directory, then the filename is determined by the serialno of the device and
+                         format extension.
+        @type _format: str
+        @param _format: Image format (default format is PNG)
+        '''
+
+        filename = self.device.substituteDeviceTemplate(filename)
+        if not os.path.isabs(filename):
+            raise ValueError("writeImageToFile expects an absolute path (filename='%s')" % filename)
+        if os.path.isdir(filename):
+            filename = os.path.join(filename, self.serialno + '.' + _format.lower())
+        if DEBUG:
+            print >> sys.stderr, "writeImageToFile: saving image to '%s' in %s format (reconnect=%s)" % (filename, _format, self.device.reconnect)
+        if self.uiAutomatorHelper:
+            if DEBUG_UI_AUTOMATOR_HELPER:
+                print >> sys.stderr, "Taking screenshot using UiAutomatorHelper"
+            received = self.uiAutomatorHelper.takeScreenshot()
+            stream = StringIO.StringIO(received)
+            try:
+                from PIL import Image
+                image = Image.open(stream)
+            except ImportError as ex:
+                self.pilNotInstalledWarning()
+                sys.exit(1)
+            except IOError, ex:
+                print >> sys.stderr, ex
+                print repr(stream)
+                sys.exit(1)
+        else:
+            image = self.device.takeSnapshot(reconnect=self.device.reconnect)
+        if deviceart:
+            if 'STUDIO_DIR' in os.environ:
+                PLUGIN_DIR = 'plugins/android/lib/device-art-resources'
+                osName = platform.system()
+                if osName == 'Darwin':
+                    deviceArtDir = os.environ['STUDIO_DIR'] + '/Contents/' + PLUGIN_DIR
+                else:
+                    deviceArtDir = os.environ['STUDIO_DIR'] + '/' + PLUGIN_DIR
+                # FIXME: should parse XML
+                deviceArtXml = deviceArtDir + '/device-art.xml'
+                if not os.path.exists(deviceArtXml):
+                    warnings.warn("Cannot find device art definition file")
+                # <device id="nexus_5" name="Nexus 5">
+                #       <orientation name="port" size="1370,2405" screenPos="144,195" screenSize="1080,1920" shadow="port_shadow.png" back="port_back.png" lights="port_fore.png"/>
+                #       <orientation name="land" size="2497,1235" screenPos="261,65" screenSize="1920,1080" shadow="land_shadow.png" back="land_back.png" lights="land_fore.png"/>
+                # </device>
+                orientation = self.display['orientation']
+                if orientation == 0 or orientation == 2:
+                    orientationName = 'port'
+                elif orientation == 1 or orientation == 3:
+                    orientationName = 'land'
+                else:
+                    warnings.warn("Unknown orientation=" + orientation)
+                    orientationName = 'port'
+                separator = '_'
+                if deviceart == 'auto':
+                    hardware = self.device.getProperty('ro.hardware')
+                    if hardware == 'hammerhead':
+                        deviceart = 'nexus_5'
+                    elif hardware == 'mako':
+                        deviceart = 'nexus_4'
+                    elif hardware == 'grouper':
+                        deviceart = 'nexus_7' # 2012
+                    elif hardware == 'flo':
+                        deviceart = 'nexus_7_2013'
+                    elif hardware in ['mt5861', 'mt5890']:
+                        deviceart = 'tv_1080p'
+                    elif hardware == 'universal5410':
+                        deviceart = 'samsung_s4'
+
+                SUPPORTED_DEVICES = ['nexus_5', 'nexus_4', 'nexus_7', 'nexus_7_2013', 'tv_1080p', 'samsung_s4']
+                if deviceart not in SUPPORTED_DEVICES:
+                    warnings.warn("Only %s is supported now, more devices coming soon" % SUPPORTED_DEVICES)
+                if deviceart == 'auto':
+                    # it wasn't detected yet, let's assume generic phone
+                    deviceart = 'phone'
+
+                screenSize = None
+                if deviceart == 'nexus_5':
+                    if orientationName == 'port':
+                        screenPos = (144, 195)
+                    else:
+                        screenPos = (261, 65)
+                elif deviceart == 'nexus_4':
+                    if orientationName == 'port':
+                        screenPos = (94, 187)
+                    else:
+                        screenPos = (257, 45)
+                elif deviceart == 'nexus_7': # 2012
+                    if orientationName == 'port':
+                        screenPos = (142, 190)
+                    else:
+                        screenPos = (260, 105)
+                elif deviceart == 'nexus_7_2013':
+                    if orientationName == 'port':
+                        screenPos = (130, 201)
+                        screenSize = (800, 1280)
+                    else:
+                        screenPos = (282, 80)
+                        screenSize = (1280, 800)
+                elif deviceart == 'tv_1080p':
+                    screenPos = (85, 59)
+                    orientationName = ''
+                    separator = ''
+                elif deviceart == 'samsung_s4':
+                    if orientationName == 'port':
+                        screenPos = (76, 220)
+                        screenSize = (1078, 1902) # FIXME: (1080, 1920) is the original size
+                    else:
+                        screenPos = (0, 0)
+                elif deviceart == 'phone':
+                    if orientationName == 'port':
+                        screenPos = (113, 93)
+                        screenSize = (343, 46) # 46?, this is in device-art.xml
+                    else:
+                        screenPos = (141, 36)
+                        screenSize = (324, 255)
+
+                deviceArtModelDir = deviceArtDir + '/' + deviceart
+                if not os.path.isdir(deviceArtModelDir):
+                    warnings.warn("Cannot find device art for " + deviceart + ' at ' + deviceArtModelDir)
+                try:
+                    from PIL import Image
+                    if dropshadow:
+                        dropShadowImage = Image.open(deviceArtModelDir + '/%s%sshadow.png' % (orientationName, separator))
+                    deviceBack = Image.open(deviceArtModelDir + '/%s%sback.png' % (orientationName, separator))
+                    if dropshadow:
+                        dropShadowImage.paste(deviceBack, (0, 0), deviceBack)
+                        deviceBack = dropShadowImage
+                    if screenSize:
+                        image = image.resize(screenSize, Image.ANTIALIAS)
+                    deviceBack.paste(image, screenPos)
+                    if screenglare:
+                        screenGlareImage = Image.open(deviceArtModelDir + '/%s%sfore.png' % (orientationName, separator))
+                        deviceBack.paste(screenGlareImage, (0, 0), screenGlareImage)
+                    image = deviceBack
+                except ImportError as ex:
+                    self.pilNotInstalledWarning()
+            else:
+                warnings.warn("ViewClient.writeImageToFile: Cannot add device art because STUDIO_DIR environment variable was not set")
+        image.save(filename, _format)
+
+    def pilNotInstalledWarning(self):
+        warnings.warn('''PIL or Pillow is needed for image manipulation
+
+On Ubuntu install
+
+   $ sudo apt-get install python-imaging python-imaging-tk
+
+On OSX install
+
+   $ brew install homebrew/python/pillow
+''')
+
+    def installPackage(self, apk):
+        return subprocess.check_call([self.adb, "install", "-r", apk], shell=False)
+
+    @staticmethod
+    def writeViewImageToFileInDir(view):
+        '''
+        Write the View image to the directory specified in C{ViewClient.imageDirectory}.
+
+        @type view: View
+        @param view: The view
+        '''
+
+        if not ViewClient.imageDirectory:
+            raise RuntimeError('You must set ViewClient.imageDiretory in order to use this method')
+        view.writeImageToFile(ViewClient.imageDirectory)
+
+    @staticmethod
+    def __pickleable(tree):
+        '''
+        Makes the tree pickleable.
+        '''
+
+        def removeDeviceReference(view):
+            '''
+            Removes the reference to a L{MonkeyDevice}.
+            '''
+
+            view.device = None
+
+        ###########################################################################################
+        # FIXME: Unfortunately deepcopy does not work with MonkeyDevice objects, which is
+        # sadly the reason why we cannot pickle the tree and we need to remove the MonkeyDevice
+        # references.
+        # We wanted to copy the tree to preserve the original and make piclkleable the copy.
+        #treeCopy = copy.deepcopy(tree)
+        treeCopy = tree
+        # IMPORTANT:
+        # This assumes that the first element in the list is the tree root
+        ViewClient.__traverse(treeCopy[0], transform=removeDeviceReference)
+        ###########################################################################################
+        return treeCopy
+
+    def distanceTo(self, tree):
+        '''
+        Calculates the distance between the current state and the tree passed as argument.
+
+        @type tree: list of Views
+        @param tree: Tree of Views
+        @return: the distance
+        '''
+        return ViewClient.distance(ViewClient.__pickleable(self.views), tree)
+
+    @staticmethod
+    def distance(tree1, tree2):
+        '''
+        Calculates the distance between the two trees.
+
+        @type tree1: list of Views
+        @param tree1: Tree of Views
+        @type tree2: list of Views
+        @param tree2: Tree of Views
+        @return: the distance
+        '''
+        ################################################################
+        #FIXME: this should copy the entire tree and then transform it #
+        ################################################################
+        pickleableTree1 = ViewClient.__pickleable(tree1)
+        pickleableTree2 = ViewClient.__pickleable(tree2)
+        s1 = pickle.dumps(pickleableTree1)
+        s2 = pickle.dumps(pickleableTree2)
+
+        if DEBUG_DISTANCE:
+            print >>sys.stderr, "distance: calculating distance between", s1[:20], "and", s2[:20]
+
+        l1 = len(s1)
+        l2 = len(s2)
+        t = float(max(l1, l2))
+
+        if l1 == l2:
+            if DEBUG_DISTANCE:
+                print >>sys.stderr, "distance: trees have same length, using Hamming distance"
+            return ViewClient.__hammingDistance(s1, s2)/t
+        else:
+            if DEBUG_DISTANCE:
+                print >>sys.stderr, "distance: trees have different length, using Levenshtein distance"
+            return ViewClient.__levenshteinDistance(s1, s2)/t
+
+
+    @staticmethod
+    def __hammingDistance(s1, s2):
+        '''
+        Finds the Hamming distance between two strings.
+
+        @param s1: string
+        @param s2: string
+        @return: the distance
+        @raise ValueError: if the lenght of the strings differ
+        '''
+
+        l1 = len(s1)
+        l2 = len(s2)
+
+        if l1 != l2:
+            raise ValueError("Hamming distance requires strings of same size.")
+
+        return sum(ch1 != ch2 for ch1, ch2 in zip(s1, s2))
+
+    def hammingDistance(self, tree):
+        '''
+        Finds the Hamming distance between this tree and the one passed as argument.
+        '''
+
+        s1 = ' '.join(map(View.__str__, self.views))
+        s2 = ' '.join(map(View.__str__, tree))
+
+        return ViewClient.__hammingDistance(s1, s2)
+
+    @staticmethod
+    def __levenshteinDistance(s, t):
+        '''
+        Find the Levenshtein distance between two Strings.
+
+        Python version of Levenshtein distance method implemented in Java at
+        U{http://www.java2s.com/Code/Java/Data-Type/FindtheLevenshteindistancebetweentwoStrings.htm}.
+
+        This is the number of changes needed to change one String into
+        another, where each change is a single character modification (deletion,
+        insertion or substitution).
+
+        The previous implementation of the Levenshtein distance algorithm
+        was from U{http://www.merriampark.com/ld.htm}
+
+        Chas Emerick has written an implementation in Java, which avoids an OutOfMemoryError
+        which can occur when my Java implementation is used with very large strings.
+        This implementation of the Levenshtein distance algorithm
+        is from U{http://www.merriampark.com/ldjava.htm}::
+
+            StringUtils.getLevenshteinDistance(null, *)             = IllegalArgumentException
+            StringUtils.getLevenshteinDistance(*, null)             = IllegalArgumentException
+            StringUtils.getLevenshteinDistance("","")               = 0
+            StringUtils.getLevenshteinDistance("","a")              = 1
+            StringUtils.getLevenshteinDistance("aaapppp", "")       = 7
+            StringUtils.getLevenshteinDistance("frog", "fog")       = 1
+            StringUtils.getLevenshteinDistance("fly", "ant")        = 3
+            StringUtils.getLevenshteinDistance("elephant", "hippo") = 7
+            StringUtils.getLevenshteinDistance("hippo", "elephant") = 7
+            StringUtils.getLevenshteinDistance("hippo", "zzzzzzzz") = 8
+            StringUtils.getLevenshteinDistance("hello", "hallo")    = 1
+
+        @param s:  the first String, must not be null
+        @param t:  the second String, must not be null
+        @return: result distance
+        @raise ValueError: if either String input C{null}
+        '''
+        if s is None or t is None:
+            raise ValueError("Strings must not be null")
+
+        n = len(s)
+        m = len(t)
+
+        if n == 0:
+            return m
+        elif m == 0:
+            return n
+
+        if n > m:
+            tmp = s
+            s = t
+            t = tmp
+            n = m;
+            m = len(t)
+
+        p = [None]*(n+1)
+        d = [None]*(n+1)
+
+        for i in range(0, n+1):
+            p[i] = i
+
+        for j in range(1, m+1):
+            if DEBUG_DISTANCE:
+                if j % 100 == 0:
+                    print >>sys.stderr, "DEBUG:", int(j/(m+1.0)*100),"%\r",
+            t_j = t[j-1]
+            d[0] = j
+
+            for i in range(1, n+1):
+                cost = 0 if s[i-1] == t_j else 1
+                #  minimum of cell to the left+1, to the top+1, diagonally left and up +cost
+                d[i] = min(min(d[i-1]+1, p[i]+1), p[i-1]+cost)
+
+            _d = p
+            p = d
+            d = _d
+
+        if DEBUG_DISTANCE:
+            print >> sys.stderr, "\n"
+        return p[n]
+
+    def levenshteinDistance(self, tree):
+        '''
+        Finds the Levenshtein distance between this tree and the one passed as argument.
+        '''
+
+        s1 = ' '.join(map(View.__microStr__, self.views))
+        s2 = ' '.join(map(View.__microStr__, tree))
+
+        return ViewClient.__levenshteinDistance(s1, s2)
+
+    @staticmethod
+    def excerpt(_str, execute=False):
+        code = Excerpt2Code().Parse(_str)
+        if execute:
+            exec code
+        else:
+            return code
+
+class ConnectedDevice:
+    def __init__(self, device, vc, serialno):
+        self.device = device
+        self.vc = vc
+        self.serialno = serialno
+
+class CulebraOptions:
+    '''
+    Culebra options helper class
+    '''
+
+    HELP = 'help'
+    VERBOSE = 'verbose'
+    VERSION = 'version'
+    IGNORE_SECURE_DEVICE = 'ignore-secure-device'
+    IGNORE_VERSION_CHECK = 'ignore-version-check'
+    FORCE_VIEW_SERVER_USE = 'force-view-server-use' # Same a ViewClientOptions.FORCE_VIEW_SERVER_USE but with dashes
+    DO_NOT_START_VIEW_SERVER = 'do-not-start-view-server'
+    DO_NOT_IGNORE_UIAUTOMATOR_KILLED = 'do-not-ignore-uiautomator-killed'
+    FIND_VIEWS_BY_ID = 'find-views-by-id'
+    FIND_VIEWS_WITH_TEXT = 'find-views-with-text'
+    FIND_VIEWS_WITH_CONTENT_DESCRIPTION = 'find-views-with-content-description'
+    USE_REGEXPS = 'use-regexps'
+    VERBOSE_COMMENTS = 'verbose-comments'
+    UNIT_TEST_CLASS = 'unit-test-class'
+    UNIT_TEST_METHOD = 'unit-test-method'
+    USE_JAR = 'use-jar'
+    USE_DICTIONARY = 'use-dictionary'
+    DICTIONARY_KEYS_FROM = 'dictionary-keys-from'
+    AUTO_REGEXPS = 'auto-regexps'
+    START_ACTIVITY = 'start-activity'
+    OUTPUT = 'output'
+    INTERACTIVE = 'interactive'
+    WINDOW = 'window'
+    APPEND_TO_SYS_PATH = 'append-to-sys-path'
+    PREPEND_TO_SYS_PATH = 'prepend-to-sys-path'
+    SAVE_SCREENSHOT = 'save-screenshot'
+    SAVE_VIEW_SCREENSHOTS = 'save-view-screenshots'
+    GUI = 'gui'
+    SCALE = 'scale'
+    DO_NOT_VERIFY_SCREEN_DUMP = 'do-not-verify-screen-dump'
+    ORIENTATION_LOCKED = 'orientation-locked'
+    SERIALNO = 'serialno'
+    MULTI_DEVICE = 'multi-device'
+    LOG_ACTIONS = 'log-actions'
+    DEVICE_ART = 'device-art'
+    DROP_SHADOW = 'drop-shadow'
+    SCREEN_GLARE = 'glare'
+    NULL_BACK_END = 'null-back-end'
+    USE_UIAUTOMATOR_HELPER = 'use-uiautomator-helper'
+    CONCERTINA = 'concertina'
+    INSTALL_APK = 'install-apk'
+
+    SHORT_OPTS = 'HVvIEFSkw:i:t:d:rCUM:j:D:K:R:a:o:pf:W:GuP:Os:mLA:ZB0hc1:'
+    LONG_OPTS = [HELP, VERBOSE, VERSION, IGNORE_SECURE_DEVICE, IGNORE_VERSION_CHECK, FORCE_VIEW_SERVER_USE,
+              DO_NOT_START_VIEW_SERVER,
+              DO_NOT_IGNORE_UIAUTOMATOR_KILLED,
+              WINDOW + '=',
+              FIND_VIEWS_BY_ID + '=', FIND_VIEWS_WITH_TEXT + '=', FIND_VIEWS_WITH_CONTENT_DESCRIPTION + '=',
+              USE_REGEXPS, VERBOSE_COMMENTS, UNIT_TEST_CLASS, UNIT_TEST_METHOD + '=',
+              USE_JAR + '=', USE_DICTIONARY + '=', DICTIONARY_KEYS_FROM + '=', AUTO_REGEXPS + '=',
+              START_ACTIVITY + '=',
+              OUTPUT + '=', PREPEND_TO_SYS_PATH,
+              SAVE_SCREENSHOT + '=', SAVE_VIEW_SCREENSHOTS + '=',
+              GUI,
+              DO_NOT_VERIFY_SCREEN_DUMP,
+              SCALE + '=',
+              ORIENTATION_LOCKED,
+              SERIALNO + '=',
+              MULTI_DEVICE,
+              LOG_ACTIONS,
+              DEVICE_ART + '=', DROP_SHADOW, SCREEN_GLARE,
+              NULL_BACK_END,
+              USE_UIAUTOMATOR_HELPER,
+              CONCERTINA,
+              INSTALL_APK + '=',
+              ]
+    LONG_OPTS_ARG = {WINDOW: 'WINDOW',
+              FIND_VIEWS_BY_ID: 'BOOL', FIND_VIEWS_WITH_TEXT: 'BOOL', FIND_VIEWS_WITH_CONTENT_DESCRIPTION: 'BOOL',
+              USE_JAR: 'BOOL', USE_DICTIONARY: 'BOOL', DICTIONARY_KEYS_FROM: 'VALUE', AUTO_REGEXPS: 'LIST',
+              START_ACTIVITY: 'COMPONENT',
+              OUTPUT: 'FILENAME',
+              SAVE_SCREENSHOT: 'FILENAME', SAVE_VIEW_SCREENSHOTS: 'DIR',
+              UNIT_TEST_METHOD: 'NAME',
+              SCALE: 'FLOAT',
+              SERIALNO: 'LIST',
+              DEVICE_ART: 'MODEL',
+              INSTALL_APK: 'FILENAME'}
+    OPTS_HELP = {
+            'H': 'prints this help',
+            'V': 'verbose comments',
+            'v': 'prints version number and exists',
+            'k': 'don\'t ignore UiAutomator killed',
+            'w': 'use WINDOW content (default: -1, all windows)',
+            'i': 'whether to use findViewById() in script',
+            't': 'whether to use findViewWithText() in script',
+            'd': 'whether to use findViewWithContentDescription',
+            'r': 'use regexps in matches',
+            'U': 'generates unit test class and script',
+            'M': 'generates unit test method. Can be used with or without -U',
+            'j': 'use jar and appropriate shebang to run script (deprecated)',
+            'D': 'use a dictionary to store the Views found',
+            'K': 'dictionary keys from: id, text, content-description',
+            'R': 'auto regexps (i.e. clock), implies -r. help list options',
+            'a': 'starts Activity before dump',
+            'o': 'output filename',
+            'p': 'prepend environment variables values to sys.path',
+            'f': 'save screenshot to file',
+            'W': 'save View screenshots to files in directory',
+            'E': 'ignores ADB version check',
+            'G': 'presents the GUI (EXPERIMENTAL)',
+            'P': 'scale percentage (i.e. 0.5)',
+            'u': 'do not verify screen state after dump',
+            'O': 'orientation locked in generated test',
+            's': 'device serial number (can be more than 1)',
+            'm': 'enables multi-device test generation',
+            'L': 'log actions using logcat',
+            'A': 'device art model to frame screenshot (auto: autodetected)',
+            'Z': 'drop shadow for device art screenshot',
+            'B': 'screen glare over screenshot',
+            '0': 'use a null back-end (no View tree obtained)',
+            'h': 'use UiAutomatorHelper',
+            'c': 'enable concertina mode (EXPERIMENTAL)',
+            '1': 'install APK as precondition',
+            }
+
+class CulebraTestCase(unittest.TestCase):
+    '''
+    The base class for all CulebraTests.
+
+    Class variables
+    ---------------
+    There are some class variables that can be used to change the behavior of the tests.
+
+    B{serialno}: The serial number of the device. This can also be a list of devices for I{mutli-devices}
+    tests or the keyword C{all} to run the tests on all available devices or C{default} to run the tests
+    only on the default (first) device.
+
+    When a I{multi-device} test is running the available devices are available in a list named
+    L{self.devices} which has the corresponding L{ConnectedDevices} entries.
+
+    Also, in the case of I{multi-devices} tests and to be backward compatible with I{single-device} tests
+    the default device, the first one in the devices list, is assigned to L{self.device}, L{self.vc} and
+    L{self.serialno} too.
+
+    B{verbose}: The verbosity of the tests. This can be changed from the test command line using the
+    command line option C{-v} or C{--verbose}.
+    '''
+
+    kwargs1 = None
+    kwargs2 = None
+    devices = None
+    ''' The list of connected devices '''
+    globalDevices = []
+    ''' The list of connected devices (class instance) '''
+    defaultDevice = None
+    ''' The default L{ConnectedDevice}. Set to the first one found for multi-device cases '''
+    serialno = None
+    ''' The default connected device C{serialno} '''
+    device = None
+    ''' The default connected device '''
+    vc = None
+    ''' The default connected device C{ViewClient} '''
+    verbose = False
+    options = {}
+
+    @classmethod
+    def setUpClass(cls):
+        cls.kwargs1 = {'ignoreversioncheck': False, 'verbose': False, 'ignoresecuredevice': False}
+        cls.kwargs2 = {'startviewserver': True, 'forceviewserveruse': False, 'autodump': False, 'ignoreuiautomatorkilled': True}
+
+    @classmethod
+    def tearDownClass(cls):
+        if cls.kwargs2['useuiautomatorhelper']:
+            for d in cls.globalDevices:
+                d.vc.uiAutomatorHelper.quit()
+
+    def __init__(self, methodName='runTest'):
+        self.Log = CulebraTestCase.__Log(self)
+        unittest.TestCase.__init__(self, methodName=methodName)
+
+    def setUp(self):
+        __devices = None
+        if self.serialno:
+            # serialno can be 1 serialno, multiple serialnos, 'all' or 'default'
+            if self.serialno.lower() == 'all':
+                __devices = [d.serialno for d in adbclient.AdbClient().getDevices()]
+            elif self.serialno.lower() == 'default':
+                __devices = [adbclient.AdbClient().getDevices()[0].serialno]
+            else:
+                __devices = self.serialno.split()
+            if len(__devices) > 1:
+                self.devices = __devices
+
+        # FIXME: both cases should be unified
+        if self.devices:
+            __devices = self.devices
+            self.devices = []
+            for serialno in __devices:
+                device, serialno = ViewClient.connectToDeviceOrExit(serialno=serialno, **self.kwargs1)
+                if self.options[CulebraOptions.START_ACTIVITY]:
+                    device.startActivity(component=self.options[CulebraOptions.START_ACTIVITY])
+                vc = ViewClient(device, serialno, **self.kwargs2)
+                connectedDevice = ConnectedDevice(serialno=serialno, device=device, vc=vc)
+                self.devices.append(connectedDevice)
+                CulebraTestCase.globalDevices.append(connectedDevice)
+            # Select the first devices as default
+            self.defaultDevice = self.devices[0]
+            self.device = self.defaultDevice.device
+            self.serialno = self.defaultDevice.serialno
+            self.vc = self.defaultDevice.vc
+        else:
+            self.devices = []
+            if __devices:
+                # A list containing only one device was specified
+                self.serialno = __devices[0]
+            self.device, self.serialno = ViewClient.connectToDeviceOrExit(serialno=self.serialno, **self.kwargs1)
+            if self.options[CulebraOptions.START_ACTIVITY]:
+                self.device.startActivity(component=self.options[CulebraOptions.START_ACTIVITY])
+            self.vc = ViewClient(self.device, self.serialno, **self.kwargs2)
+            # Set the default device, to be consistent with multi-devices case
+            connectedDevice = ConnectedDevice(serialno=self.serialno, device=self.device, vc=self.vc)
+            self.devices.append(connectedDevice)
+            CulebraTestCase.globalDevices.append(connectedDevice)
+
+    def tearDown(self):
+        pass
+
+    def preconditions(self):
+        if self.options[CulebraOptions.ORIENTATION_LOCKED] is not None:
+            # If orientation locked was set to a valid orientation value then use it to compare
+            # against current orientation (when the test is run)
+            return (self.device.display['orientation'] == self.options[CulebraOptions.ORIENTATION_LOCKED])
+        return True
+
+    def isTestRunningOnMultipleDevices(self):
+        return (len(self.devices) > 1)
+
+    @staticmethod
+    def __passAll(arg):
+        return True
+
+    def all(self, arg, _filter=None):
+        # CulebraTestCase.__passAll cannot be specified as the default argument value
+        if _filter is None:
+            _filter = CulebraTestCase.__passAll
+        if DEBUG_MULTI:
+            print >> sys.stderr, "all(%s, %s)" % (arg, _filter)
+            l = (getattr(d, arg) for d in self.devices)
+            for i in l:
+                print >> sys.stderr, "    i=", i
+        return filter(_filter, (getattr(d, arg) for d in self.devices))
+
+    def allVcs(self, _filter=None):
+        return self.all('vc', _filter)
+
+    def allDevices(self, _filter=None):
+        return self.all('device', _filter)
+
+    def allSerialnos(self, _filter=None):
+        return self.all('serialno', _filter)
+
+    def log(self, message, priority='D'):
+        '''
+        Logs a message with the specified priority.
+        '''
+
+        self.device.log('CULEBRA', message, priority, CulebraTestCase.verbose)
+
+    class __Log():
+        '''
+        Log class to simulate C{android.util.Log}
+        '''
+
+        def __init__(self, culebraTestCase):
+            self.culebraTestCase = culebraTestCase
+
+        def __getattr__(self, attr):
+            '''
+            Returns the corresponding log method or @C{AttributeError}.
+            '''
+
+            if attr in ['v', 'd', 'i', 'w', 'e']:
+                return lambda message: self.culebraTestCase.log(message, priority=attr.upper())
+            raise AttributeError(self.__class__.__name__ + ' has no attribute "%s"' % attr)
+
+    @staticmethod
+    def main():
+        # If you want to specify tests classes and methods in the command line you will be forced
+        # to include -s or --serialno and the serial number of the device (could be a regexp)
+        # as ViewClient would have no way of determine what it is.
+        # This could be also a list of devices (delimited by whitespaces) and in such case all of
+        # them will be used.
+        # The special argument 'all' means all the connected devices.
+        ser = ['-s', '--serialno']
+        old = '%(failfast)'
+        new = '  %s s The serial number[s] to connect to or \'all\'\n%s' % (', '.join(ser), old)
+        unittest.TestProgram.USAGE = unittest.TestProgram.USAGE.replace(old, new)
+        argsToRemove = []
+        i = 0
+        while i < len(sys.argv):
+            a = sys.argv[i]
+            if a in ['-v', '--verbose']:
+                # make CulebraTestCase.verbose the same as unittest verbose
+                CulebraTestCase.verbose = True
+            elif a in ser:
+                # remove arguments not handled by unittest
+                if len(sys.argv) > (i+1):
+                    argsToRemove.append(sys.argv[i])
+                    CulebraTestCase.serialno = sys.argv[i+1]
+                    argsToRemove.append(CulebraTestCase.serialno)
+                    i += 1
+                else:
+                    raise RuntimeError('serial number missing')
+            i += 1
+        for a in argsToRemove:
+            sys.argv.remove(a)
+        unittest.main()
+
+if __name__ == "__main__":
+    try:
+        vc = ViewClient(None)
+    except:
+        print "%s: Don't expect this to do anything" % __file__
diff --git a/AndroidViewClient/src/com/dtmilano/android/viewclient/ViewClient.java b/AndroidViewClient/src/com/dtmilano/android/viewclient/ViewClient.java
new file mode 100755
index 0000000..38e3ffc
--- /dev/null
+++ b/AndroidViewClient/src/com/dtmilano/android/viewclient/ViewClient.java
@@ -0,0 +1,325 @@
+
+package com.dtmilano.android.viewclient;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.zip.ZipException;
+
+public class ViewClient {
+
+    private static final boolean DEBUG = false;
+
+    private static final String PROGNAME = "java -jar androidviewclient.jar";
+
+    private static final String MONKEYRUNNER = "monkeyrunner";
+
+    private static final int DELAY = 500;
+
+    /**
+     * The <em>tools</em> directory in the jar.
+     */
+    private static final String TOOLS = "tools";
+
+    private enum Command {
+        DUMP, CULEBRA
+    };
+
+    private volatile boolean mProcessFinished = false;
+
+    /**
+     * The destination file as command is extracted from jar.
+     */
+    private File mDest = null;
+
+    private boolean mIsDestCreated = false;
+
+    private boolean mKeep = false;
+
+    /**
+     * Command arguments.
+     */
+    private String[] mArgs = null;
+
+    private JarFile mJar;
+
+    /**
+     * @author diego
+     */
+    private abstract class StreamReaderThread extends Thread {
+        private InputStream mIs;
+        private OutputStream mOs;
+
+        /**
+         * @param is
+         * @param os
+         */
+        public StreamReaderThread(InputStream is, OutputStream os) {
+            this.mIs = is;
+            this.mOs = os;
+        }
+
+        /*
+         * (non-Javadoc)
+         * @see java.lang.Thread#run()
+         */
+        @Override
+        public void run() {
+            do {
+                try {
+                    while (mIs.available() > 0) {
+                        mOs.write(mIs.read());
+                    }
+                } catch (IOException e) {
+                    e.printStackTrace();
+                } finally {
+                    try {
+                        Thread.sleep(DELAY);
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                    }
+                }
+            } while (!mProcessFinished);
+        }
+    }
+
+    /**
+     * @author diego
+     */
+    private class OutputStreamReaderThread extends StreamReaderThread {
+
+        /**
+         * @param is
+         * @param os
+         */
+        public OutputStreamReaderThread(InputStream is) {
+            super(is, System.out);
+        }
+
+    }
+
+    /**
+     * @author diego
+     */
+    private class ErrorStreamReaderThread extends StreamReaderThread {
+
+        /**
+         * @param is
+         * @param os
+         */
+        public ErrorStreamReaderThread(InputStream is) {
+            super(is, System.err);
+        }
+
+    }
+
+    /**
+     * <em>ViewClient</em>
+     * 
+     * @throws IOException
+     */
+    public ViewClient(Command cmd, String[] args) throws IOException {
+        if (args != null && args.length > 0) {
+            mArgs = args;
+        }
+        final File file = new File(URLDecoder.decode(ViewClient.class.getProtectionDomain()
+                .getCodeSource()
+                .getLocation().getPath(), "UTF-8"));
+        if (DEBUG) {
+            System.err.println("jar=" + file.getCanonicalPath() + "    exists? " + file.exists());
+        }
+
+        try {
+            mJar = new JarFile(file);
+        } catch (ZipException e) {
+            error("Tools should be started using the jar file.", e);
+            usage();
+        }
+
+        final String entry = TOOLS + "/" + cmd.name().toLowerCase();
+        final JarEntry jarEntry = mJar.getJarEntry(entry);
+        if (jarEntry != null) {
+            final InputStream is = mJar.getInputStream(jarEntry);
+            // We cannot use /tmp or similar because sometimes it's mounted
+            // noexec
+            mDest = new File(System.getProperty("user.home") + File.separator
+                    + cmd.name().toLowerCase());
+            final FileOutputStream fos = new java.io.FileOutputStream(mDest);
+            while (is.available() > 0) {
+                fos.write(is.read());
+            }
+            fos.close();
+            is.close();
+            mDest.setExecutable(true);
+            mIsDestCreated = true;
+            if (!mKeep) {
+                mDest.deleteOnExit();
+            }
+        }
+        else {
+            fatal("Cannot extract " + entry + " from jar");
+        }
+
+    }
+
+    /**
+     * Executes the command in a separate process.
+     * 
+     * @return the exit value of the process
+     * @throws IOException
+     * @throws InterruptedException
+     */
+    public int execute() throws IOException, InterruptedException {
+        if (!mIsDestCreated) {
+            throw new IllegalStateException("Destination was not extracted successfully");
+        }
+        final Runtime runtime = Runtime.getRuntime();
+        final ArrayList<String> cmdList = new ArrayList<String>();
+        final String monkeyrunner = locateMonkeyRunner();
+        if (monkeyrunner != null) {
+            cmdList.add(monkeyrunner);
+            cmdList.add("-plugin");
+            cmdList.add(mJar.getName());
+        }
+        else {
+            if (isWindows()) {
+                fatal(String.format(
+                        "%s was not found and %s does not support shebang in scripts. Aborting.",
+                        MONKEYRUNNER, System.getProperty("os.name")));
+            }
+        }
+        cmdList.add(mDest.getAbsolutePath());
+        if (mArgs != null) {
+            for (String arg : mArgs) {
+                cmdList.add(arg);
+            }
+        }
+        if (DEBUG) {
+            System.err.println("executing: " + cmdList);
+        }
+        final Process process = runtime.exec(cmdList.toArray(new String[] {}));
+        if (process != null) {
+            mProcessFinished = false;
+            new OutputStreamReaderThread(process.getInputStream()).start();
+            new ErrorStreamReaderThread(process.getErrorStream()).start();
+            process.waitFor();
+            try {
+                Thread.sleep(DELAY + 500);
+            } catch (InterruptedException e) {
+                // do nothing
+            }
+            mProcessFinished = true;
+            if (DEBUG) {
+                System.err.println("process=" + process + "    " + process.exitValue());
+            }
+            return process.exitValue();
+        }
+
+        throw new RuntimeException("Couldn't create process");
+    }
+
+    /**
+     * @return
+     */
+    private static boolean isWindows() {
+        final String os = System.getProperty("os.name");
+        return os.toUpperCase().contains("WINDOWS");
+    }
+
+    /**
+     * Locates <code>monkeyrunner</code> executable in path.
+     * 
+     * @return the absolute path of <code>monkeyrunner</code> or
+     *         <code>null</code> if not found
+     */
+    private static String locateMonkeyRunner() {
+        final StringTokenizer tokenizer = new StringTokenizer(System.getenv("PATH"),
+                File.pathSeparator);
+        while (tokenizer.hasMoreTokens()) {
+            final String dir = tokenizer.nextToken();
+            File monkeyrunner = new File(dir + File.separator + MONKEYRUNNER + (isWindows() ? ".bat" : ""));
+            if (DEBUG) {
+                System.err.println("searching for " + monkeyrunner + "    exist? " + monkeyrunner.exists());
+            }
+            if (monkeyrunner.exists()) {
+                return monkeyrunner.getAbsolutePath();
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Prints usage and exits.
+     */
+    private static void usage() {
+        System.err.println(String.format("usage: %s COMMAND [OPTION]... [ARGS]...", PROGNAME));
+        System.err.println("");
+        System.err.println("Commands:");
+        for (Command cmd : Command.values()) {
+            System.err.println("  " + cmd.name().toLowerCase());
+        }
+        System.exit(1);
+    }
+
+    /**
+     * Obtains the extra arguments in the command line (following command, which
+     * is assumed to be in args[0]).
+     * 
+     * @param args the arguments
+     * @return The string array obtained from the arguments
+     */
+    private static String[] obtainExtraArgs(String[] args) {
+        if (args.length > 1) {
+            final String[] extras = new String[args.length - 1];
+            for (int i = 1; i < args.length; i++) {
+                extras[i - 1] = args[i];
+            }
+            return extras;
+        }
+        return null;
+    }
+
+    private static void error(String msg) {
+        System.err.print("ERROR: ");
+        System.err.println(msg);
+    }
+
+    private void error(String msg, Exception e) {
+        error(msg);
+        e.printStackTrace(System.err);
+    }
+
+    private static void fatal(String msg) {
+        error(msg);
+        System.exit(1);
+    }
+
+    public static void main(String[] args) throws IOException, InterruptedException {
+        if (args.length < 1) {
+            usage();
+        }
+
+        final String cmdStr = args[0];
+        final String[] extras = obtainExtraArgs(args);
+
+        if (DEBUG) {
+            System.err.println("main: cmd=" + cmdStr + "    extras=" + extras);
+        }
+
+        try {
+            System.exit(new ViewClient(Command.valueOf(cmdStr.toUpperCase()), extras).execute());
+        } catch (IllegalArgumentException e) {
+            error("Unknown command: '" + cmdStr + "'");
+            usage();
+        }
+
+    }
+}
diff --git a/AndroidViewClient/src/com/dtmilano/android/window.py b/AndroidViewClient/src/com/dtmilano/android/window.py
new file mode 100755
index 0000000..4f976ad
--- /dev/null
+++ b/AndroidViewClient/src/com/dtmilano/android/window.py
@@ -0,0 +1,73 @@
+# -*- coding: utf-8 -*-
+'''
+Copyright (C) 2012-2015  Diego Torres Milano
+Created on Jan 5, 2015
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+@author: Diego Torres Milano
+'''
+
+import sys
+
+DEBUG = False
+
+class Window(object):
+    '''
+    Window class
+    '''
+
+    def __init__(self, num, winId, activity, wvx, wvy, wvw, wvh, px, py, visibility, focused=False):
+        '''
+        Constructor
+
+        @type num: int
+        @param num: Ordering number in Window Manager
+        @type winId: str
+        @param winId: the window ID
+        @type activity: str
+        @param activity: the activity (or sometimes other component) owning the window
+        @type wvx: int
+        @param wvx: window's virtual X
+        @type wvy: int
+        @param wvy: window's virtual Y
+        @type wvw: int
+        @param wvw: window's virtual width
+        @type wvh: int
+        @param wvh: window's virtual height
+        @type px: int
+        @param px: parent's X
+        @type py: int
+        @param py: parent's Y
+        @type visibility: int
+        @param visibility: visibility of the window
+        '''
+
+        if DEBUG: print >> sys.stderr, "Window(%d, %s, %s, %d, %d, %d, %d, %d, %d, %d)" % \
+                (num, winId, activity, wvx, wvy, wvw, wvh, px, py, visibility)
+        self.num = num
+        self.winId = winId
+        self.activity = activity
+        self.wvx = wvx
+        self.wvy = wvy
+        self.wvw = wvw
+        self.wvh = wvh
+        self.px = px
+        self.py = py
+        self.visibility = visibility
+        self.focused = focused
+
+    def __str__(self):
+        return "Window(%d, wid=%s, a=%s, x=%d, y=%d, w=%d, h=%d, px=%d, py=%d, v=%d, f=%s)" % \
+                (self.num, self.winId, self.activity, self.wvx, self.wvy, self.wvw, self.wvh, self.px, self.py, self.visibility, self.focused)
+
diff --git a/AndroidViewClient/src/share/__init__.py b/AndroidViewClient/src/share/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/AndroidViewClient/src/share/__init__.py
diff --git a/AndroidViewClient/src/share/pixmaps/__init__.py b/AndroidViewClient/src/share/pixmaps/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/AndroidViewClient/src/share/pixmaps/__init__.py
diff --git a/AndroidViewClient/src/share/pixmaps/culebra.png b/AndroidViewClient/src/share/pixmaps/culebra.png
new file mode 100755
index 0000000..da1c42c
--- /dev/null
+++ b/AndroidViewClient/src/share/pixmaps/culebra.png
Binary files differ
diff --git a/AndroidViewClient/src/share/pixmaps/plugins/__init__.py b/AndroidViewClient/src/share/pixmaps/plugins/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/AndroidViewClient/src/share/pixmaps/plugins/__init__.py
diff --git a/AndroidViewClient/src/share/pixmaps/plugins/android/__init__.py b/AndroidViewClient/src/share/pixmaps/plugins/android/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/AndroidViewClient/src/share/pixmaps/plugins/android/__init__.py
diff --git a/AndroidViewClient/src/share/pixmaps/plugins/android/lib/__init__.py b/AndroidViewClient/src/share/pixmaps/plugins/android/lib/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/AndroidViewClient/src/share/pixmaps/plugins/android/lib/__init__.py
diff --git a/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/__init__.py b/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/__init__.py
diff --git a/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/samsung_s4/LICENSE b/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/samsung_s4/LICENSE
new file mode 100755
index 0000000..c2bbd04
--- /dev/null
+++ b/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/samsung_s4/LICENSE
@@ -0,0 +1 @@
+Samsung S4 vector drawing obtained from http://en.wikipedia.org/wiki/Samsung_Galaxy_S4#/media/File:Samsung_Galaxy_S4.svg under CC BY-SA 3.0
diff --git a/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/samsung_s4/__init__.py b/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/samsung_s4/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/samsung_s4/__init__.py
diff --git a/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/samsung_s4/port_back.png b/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/samsung_s4/port_back.png
new file mode 100755
index 0000000..e2d7775
--- /dev/null
+++ b/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/samsung_s4/port_back.png
Binary files differ
diff --git a/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/samsung_s4/port_fore.png b/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/samsung_s4/port_fore.png
new file mode 100755
index 0000000..a5f22e9
--- /dev/null
+++ b/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/samsung_s4/port_fore.png
Binary files differ
diff --git a/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/samsung_s4/port_shadow.png b/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/samsung_s4/port_shadow.png
new file mode 100755
index 0000000..c7c2f38
--- /dev/null
+++ b/AndroidViewClient/src/share/pixmaps/plugins/android/lib/device-art-resources/samsung_s4/port_shadow.png
Binary files differ
diff --git a/AndroidViewClient/tests/__init__.py b/AndroidViewClient/tests/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/AndroidViewClient/tests/__init__.py
diff --git a/AndroidViewClient/tests/allTests.py b/AndroidViewClient/tests/allTests.py
new file mode 100755
index 0000000..3f5a44a
--- /dev/null
+++ b/AndroidViewClient/tests/allTests.py
@@ -0,0 +1,31 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Feb 5, 2012
+
+@author: diego
+'''
+import unittest
+import sys
+import os
+
+try:
+    sys.path.insert(0, os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.adb.adbclienttests import AdbClientTests
+from com.dtmilano.android.viewclienttests import ViewTests, ViewClientTests
+
+if __name__ == "__main__":
+    #sys.argv = ['', 'ViewTest.testName']
+    #sys,argv = ['allTests', 'AdbClientTests', 'ViewTests', 'ViewClientTests']
+#     adbClientTestsSuite = unittest.TestLoader().loadTestsFromTestCase(AdbClientTests)
+#     viewTestsSuite = unittest.TestLoader().loadTestsFromTestCase(ViewTests)
+#     viewClientTestsSuite = unittest.TestLoader().loadTestsFromTestCase(ViewClientTests)
+#     suite = unittest.TestSuite()
+#     suite.addTest(adbClientTestsSuite)
+#     suite.addTest(viewTestsSuite)
+#     suite.addTest(viewClientTestsSuite)
+#     unittest.TextTestRunner(verbosity=2).run(suite)
+    pass
diff --git a/AndroidViewClient/tests/com/__init__.py b/AndroidViewClient/tests/com/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/AndroidViewClient/tests/com/__init__.py
diff --git a/AndroidViewClient/tests/com/dtmilano/__init__.py b/AndroidViewClient/tests/com/dtmilano/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/AndroidViewClient/tests/com/dtmilano/__init__.py
diff --git a/AndroidViewClient/tests/com/dtmilano/android/.gitignore b/AndroidViewClient/tests/com/dtmilano/android/.gitignore
new file mode 100755
index 0000000..6efbe15
--- /dev/null
+++ b/AndroidViewClient/tests/com/dtmilano/android/.gitignore
@@ -0,0 +1 @@
+/dont-commit-*
diff --git a/AndroidViewClient/tests/com/dtmilano/android/__init__.py b/AndroidViewClient/tests/com/dtmilano/android/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/AndroidViewClient/tests/com/dtmilano/android/__init__.py
diff --git a/AndroidViewClient/tests/com/dtmilano/android/adb/__init__.py b/AndroidViewClient/tests/com/dtmilano/android/adb/__init__.py
new file mode 100755
index 0000000..18cd8bb
--- /dev/null
+++ b/AndroidViewClient/tests/com/dtmilano/android/adb/__init__.py
@@ -0,0 +1 @@
+#__init__.py
\ No newline at end of file
diff --git a/AndroidViewClient/tests/com/dtmilano/android/adb/adbclienttests.py b/AndroidViewClient/tests/com/dtmilano/android/adb/adbclienttests.py
new file mode 100755
index 0000000..8ba14c9
--- /dev/null
+++ b/AndroidViewClient/tests/com/dtmilano/android/adb/adbclienttests.py
@@ -0,0 +1,241 @@
+'''
+Created on Aug 6, 2013
+
+@author: diego
+'''
+import sys
+import time
+import re
+import unittest
+import os
+import subprocess
+
+try:
+    sys.path.insert(0, os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.adb.adbclient import AdbClient
+from com.dtmilano.android.common import obtainAdbPath
+
+VERBOSE = False
+
+TEST_TEMPERATURE_CONVERTER_APP = False
+TEMPERATURE_CONVERTER_PKG = 'com.example.i2at.tc'
+TEMPERATURE_CONVERTER_ACTIVITY = 'TemperatureConverterActivity'
+CALCULATOR_KEYWORD = 'calculator'
+CALCULATOR_ACTIVITY = 'Calculator'
+
+#ANDROIANDROID_SERIAL = 'emulator-5554'
+
+class AdbClientTest(unittest.TestCase):
+
+    androidSerial = None
+    ''' The Android device serial number used by default'''
+
+    @classmethod
+    def setUpClass(cls):
+        cls.adb = obtainAdbPath()
+        # we use 'fakeserialno' and settransport=False so AdbClient does not try to find the
+        # serialno in setTransport()
+        try:
+            adbClient = AdbClient('fakeserialno', settransport=False)
+        except RuntimeError, ex:
+            if re.search('Connection refused', str(ex)):
+                raise RuntimeError("adb is not running")
+            raise(ex)
+        devices = adbClient.getDevices()
+        if len(devices) == 0:
+            raise RuntimeError("This tests require at least one device connected. None was found.")
+        for device in devices:
+            if device.status == 'device':
+                cls.androidSerial = device.serialno
+                if VERBOSE:
+                    print "AdbClientTest: using device %s" % cls.androidSerial
+                return
+        raise RuntimeError("No on-line devices found")
+
+    def setUp(self):
+        subprocess.check_call([self.adb, '-s', self.androidSerial, 'forward', '--remove-all'])
+        self.adbClient = AdbClient(self.androidSerial)
+        self.assertIsNotNone(self.adbClient, "adbClient is None")
+
+    def tearDown(self):
+        self.adbClient.close()
+        subprocess.check_call([self.adb, '-s', self.androidSerial, 'forward', '--remove-all'])
+
+    def testSerialno_none(self):
+        try:
+            adbClient = AdbClient(None)
+            self.assertTrue(adbClient.checkConnected())
+            # because serialno is None, transport cannot be set, so next statement
+            # will raise an exception
+            adbClient.getSdkVersion()
+            self.fail("No exception was generated")
+        except RuntimeError, ex:
+            self.assertIsNotNone(re.search("ERROR: Transport is not set", str(ex)), "Couldn't find error message: %s" % ex)
+
+    def testSerialno_nonExistent(self):
+        try:
+            AdbClient('doesnotexist')
+        except RuntimeError, ex:
+            self.assertIsNotNone(re.search("ERROR: couldn't find device that matches 'doesnotexist'", str(ex)), "Couldn't find error message: %s" % ex)
+
+    def testSerialno_empty(self):
+        try:
+            AdbClient('')
+            self.fail("No exception was generated")
+        except ValueError:
+            pass
+
+    def testGetDevices(self):
+        # we use 'fakeserialno' and settransport=False so AdbClient does not try to find the
+        # serialno in setTransport()
+        adbclient = AdbClient('fakeserialno', settransport=False)
+        self.assertTrue(len(adbclient.getDevices()) >= 1)
+
+    def testGetDevices_androidSerial(self):
+        devs = self.adbClient.getDevices()
+        self.assertTrue(self.androidSerial in [d.serialno for d in devs])
+
+    def testGetDevices_regex(self):
+        adbclient = AdbClient('.*', settransport=False)
+        self.assertTrue(len(adbclient.getDevices()) >= 1)
+
+    #@unittest.skipIf(not re.search('emulator-5554', AdbClientTest.androidSerial), "Supported only when emulator is connected")
+    def testAdbClient_serialnoNoRegex(self):
+        if re.search('emulator-5554', AdbClientTest.androidSerial):
+            adbClient = AdbClient('emulator-5554')
+            self.assertIsNotNone(adbClient)
+            self.assertEqual('emulator-5554', adbClient.serialno)
+
+    #@unittest.skipIf(not re.search('emulator', AdbClientTest.androidSerial), "Supported only when emulator is connected")
+    def testAdbClient_serialnoRegex(self):
+        if re.search('emulator', AdbClientTest.androidSerial):
+            adbClient = AdbClient('emulator-.*')
+            self.assertIsNotNone(adbClient)
+            self.assertTrue(re.match('emulator-.*', adbClient.serialno))
+
+    def testAdbClient_serialnoRegexIP(self):
+        IPRE = re.compile('(\d+\.){3}\d+')
+        if IPRE.search(AdbClientTest.androidSerial):
+            adbClient = AdbClient('\d+.*')
+            self.assertIsNotNone(adbClient)
+            self.assertTrue(IPRE.match(adbClient.serialno))
+
+    def testCheckVersion(self):
+        self.adbClient.checkVersion()
+
+    def testShell(self):
+        date = self.adbClient.shell('date +"%Y/%m/%d"')
+        # this raises a ValueError if the format is not correct
+        time.strptime(date, '%Y/%m/%d\r\n')
+
+    def testShell_noOutput(self):
+        empty = self.adbClient.shell('sleep 3')
+        self.assertIs('', empty, "Expected empty output but found '%s'" % empty)
+
+    def testGetProp_ro_serialno(self):
+        serialno = self.adbClient.getProperty('ro.serialno')
+        self.assertIsNotNone(serialno)
+        if re.search('emulator-.*', self.androidSerial):
+            self.assertEqual(serialno, '')
+        elif re.search('VirtualBox', self.adbClient.getProperty('ro.product.model')):
+            self.assertEqual(serialno, '')
+        else:
+            self.assertEqual(serialno, self.androidSerial)
+
+    def testGetProp_ro_kernel_qemu(self):
+        qemu = self.adbClient.getProperty('ro.kernel.qemu')
+        self.assertIsNotNone(qemu)
+        if re.search('emulator-.*', self.androidSerial):
+            self.assertEqual(qemu, '1')
+        else:
+            self.assertEqual(qemu, '')
+
+    def testPress(self):
+        self.adbClient.press('KEYCODE_DPAD_UP')
+
+    def testTouch(self):
+        self.adbClient.touch(480, 1250)
+
+    def testType(self):
+        self.adbClient.type('Android is cool')
+
+    def testType_digits(self):
+        self.adbClient.type('1234')
+
+    def testType_digits_asInt(self):
+        self.adbClient.type(1234)
+
+
+    def __checkPackageInstalled(self):
+        packages = self.adbClient.shell('pm list packages').splitlines()
+        self.assertTrue(packages, "Could not detect any packages installed")
+        if TEST_TEMPERATURE_CONVERTER_APP:
+            self.assertIn('package:' + TEMPERATURE_CONVERTER_PKG, packages, TEMPERATURE_CONVERTER_PKG + " is not installed")
+            return (TEMPERATURE_CONVERTER_PKG, TEMPERATURE_CONVERTER_ACTIVITY)
+        else:
+            for line in packages:
+                if CALCULATOR_KEYWORD in line:
+                    pkg = line[line.index(':')+1:]
+                    self.assertTrue(pkg, "No calculator package to use for testing")
+                    return (pkg, CALCULATOR_ACTIVITY)
+            return False
+
+    def testStartActivity_component(self):
+        pkg = self.__checkPackageInstalled()
+        if pkg:
+            self.adbClient.startActivity(pkg[0] + '/.' + pkg[1])
+
+    def testGetWindows(self):
+        self.assertIsNotNone(self.adbClient.getWindows())
+        
+    def testGetFocusedWindow(self):
+        pkg = self.__checkPackageInstalled()
+        if pkg:
+            self.adbClient.startActivity(pkg[0] + '/.' + pkg[1])
+            time.sleep(3)
+            w = self.adbClient.getFocusedWindow()
+            self.assertIsNotNone(w)
+            self.assertEqual(pkg[0] + '/' + pkg[0] + '.' + pkg[1], w.activity)
+        
+    def testGetFocusedWindowName(self):
+        pkg = self.__checkPackageInstalled()
+        if pkg:
+            self.adbClient.startActivity(pkg[0] + '/.' + pkg[1])
+            time.sleep(3)
+            n = self.adbClient.getFocusedWindowName()
+            self.assertIsNotNone(n)
+            self.assertEqual(pkg[0] + '/' + pkg[0] + '.' + pkg[1], n)
+        
+    def testStartActivity_uri(self):
+        self.adbClient.startActivity(uri='http://www.google.com')
+
+    #@unittest.skip("sequence")
+    def testCommandsSequence(self):
+        self.adbClient.setReconnect(True)
+        if VERBOSE:
+            print "Sending touch(480, 800)"
+        self.adbClient.touch(480, 800)
+        self.assertTrue(self.adbClient.checkConnected())
+        if VERBOSE:
+            print "Typing 'command 1'"
+        self.adbClient.type("command 1")
+        self.assertTrue(self.adbClient.checkConnected())
+        if VERBOSE:
+            print "Typing 'command 2'"
+        self.adbClient.type("command 2")
+        self.assertTrue(self.adbClient.checkConnected())
+        if VERBOSE:
+            print "Pressing ENTER"
+        self.adbClient.press('KEYCODE_ENTER')
+        self.assertTrue(self.adbClient.checkConnected())
+
+    #def testWake(self):
+    #    self.adbClient.wake()
+
+if __name__ == "__main__":
+    #print >> sys.stderr, "sys.path=", sys.path
+    #sys.argv = ['', 'AdbClientTest']
+    unittest.main()
\ No newline at end of file
diff --git a/AndroidViewClient/tests/com/dtmilano/android/mocks.py b/AndroidViewClient/tests/com/dtmilano/android/mocks.py
new file mode 100755
index 0000000..2657357
--- /dev/null
+++ b/AndroidViewClient/tests/com/dtmilano/android/mocks.py
@@ -0,0 +1,847 @@
+# -*- coding: utf-8 -*-
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Feb 6, 2012
+
+@author: diego
+'''
+
+import re
+
+DEBUG = False
+
+TRUE_PARCEL = "Result: Parcel(00000000 00000001   '........')\r\n"
+FALSE_PARCEL = "Result: Parcel(00000000 00000000   '........')\r\n"
+
+DUMP = """\
+com.android.internal.policy.impl.PhoneWindow$DecorView@412a9d08 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=23,FOCUS_AFTER_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=3,480 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=3,800 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2122315464 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,NO_ID layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=3,800 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830336 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,800 layout:getLayoutDirection()=7,INHERIT layout_horizontalWeight=3,0.0 layout_flags_FLAG_LAYOUT_IN_SCREEN=5,0x100 layout_flags_FLAG_LAYOUT_INSET_DECOR=7,0x10000 layout_flags_FLAG_SPLIT_TOUCH=8,0x800000 layout_flags_FLAG_HARDWARE_ACCELERATED=9,0x1000000 layout_flags=8,25231616 layout_type=21,TYPE_BASE_APPLICATION layout_verticalWeight=3,0.0 layout_x=1,0 layout_y=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+ android.widget.LinearLayout@412aaaf8 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,1 measurement:mTotalLength=3,800 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=3,480 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=2,38 measurement:mMeasuredHeight=3,800 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703184 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,NO_ID layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=3,800 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830334 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,800 layout:getLayoutDirection()=7,INHERIT layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+  com.android.internal.widget.ActionBarContainer@412ab6e0 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=3,480 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,72 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703312 text:mResolvedTextDirection=12,FIRST_STRONG mID=23,id/action_bar_container layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=2,38 layout:mBottom=3,110 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830464 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,72 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+   com.android.internal.widget.ActionBarView@412abdf0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=3,480 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,72 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703184 text:mResolvedTextDirection=12,FIRST_STRONG mID=13,id/action_bar layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=2,72 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830336 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,72 layout:getLayoutDirection()=7,INHERIT layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+    android.widget.LinearLayout@412b7498 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=3,140 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=3,140 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=2,24 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,72 layout:mLeft=2,61 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704080 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,NO_ID layout:mRight=3,201 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=2,72 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=2,24 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744813920 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,72 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,140 focus:hasFocus()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=5,false focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     android.widget.ImageView@412b8158 layout:getBaseline()=2,-1 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=1,0 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130701280 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,id/up layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830456 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=2,19 layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=4,GONE layout:getWidth()=1,0 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.LinearLayout@412b84b8 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,1 measurement:mTotalLength=2,37 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=3,116 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,37 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703184 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,NO_ID layout:mRight=3,116 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=2,17 layout:mBottom=2,54 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830336 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,37 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=2,19 layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,116 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@412b89a8 text:mText=8,TrashCan getEllipsize()=3,END text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMeasuredWidth=3,116 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,37 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 text:mResolvedTextDirection=12,FIRST_STRONG mID=19,id/action_bar_title layout:mRight=3,116 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=2,37 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830464 layout:getBaseline()=2,29 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,37 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,116 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+      android.widget.TextView@412b97a0 text:mText=0, getEllipsize()=3,END text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=1,0 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128605152 text:mResolvedTextDirection=12,FIRST_STRONG mID=22,id/action_bar_subtitle layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830456 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,8 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=2,-4 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=4,GONE layout:getWidth()=1,0 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    com.android.internal.widget.ActionBarView$HomeView@412b40e8 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=2,48 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,72 layout:mLeft=2,13 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704080 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,NO_ID layout:mRight=2,61 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=2,72 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744813920 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,72 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,48 focus:hasFocus()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=5,false focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     android.widget.ImageView@412b5758 layout:getBaseline()=2,-1 measurement:mMeasuredWidth=2,24 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,24 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130691040 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,id/up layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830456 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:getLayoutDirection()=7,INHERIT layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=3,-11 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=4,GONE layout:getWidth()=1,0 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.ImageView@412b5ad8 layout:getBaseline()=2,-1 measurement:mMeasuredWidth=2,36 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,48 layout:mLeft=1,6 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703312 text:mResolvedTextDirection=12,FIRST_STRONG mID=7,id/home layout:mRight=2,42 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=2,12 layout:mBottom=2,60 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830464 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 layout:getLayoutDirection()=7,INHERIT layout:layout_bottomMargin=2,12 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=2,12 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=2,12 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,36 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    com.android.internal.view.menu.ActionMenuView@412c27c8 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388627 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=5,false measurement:mOrientation=1,0 measurement:mTotalLength=1,0 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=1,0 layout:mLeft=3,480 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128606160 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,NO_ID layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=2,36 layout:mBottom=2,36 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830464 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:getLayoutDirection()=7,INHERIT layout:layout_height=12,MATCH_PARENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=1,0 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+   com.android.internal.widget.ActionBarContextView@412b9f28 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=1,0 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2120215264 text:mResolvedTextDirection=12,FIRST_STRONG mID=21,id/action_context_bar layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830328 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:getLayoutDirection()=7,INHERIT layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=4,GONE layout:getWidth()=1,0 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+  android.widget.FrameLayout@412ba620 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=2,55 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=3,480 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=3,690 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703184 text:mResolvedTextDirection=12,FIRST_STRONG mID=10,id/content layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=3,110 layout:mBottom=3,800 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830336 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,690 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,1.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=1,0 layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+   android.widget.LinearLayout@412bb588 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,1 measurement:mTotalLength=3,690 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=3,480 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=3,690 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703184 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,NO_ID layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=3,690 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830336 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,690 layout:getLayoutDirection()=7,INHERIT layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+    android.widget.Button@412bba70 text:mText=1,1 getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMeasuredWidth=3,480 measurement:mMinHeight=2,72 measurement:mMinWidth=2,96 padding:mPaddingBottom=2,12 padding:mPaddingLeft=2,18 padding:mPaddingRight=2,18 padding:mPaddingTop=2,12 measurement:mMeasuredHeight=2,72 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 text:mResolvedTextDirection=12,FIRST_STRONG mID=10,id/button1 layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=2,72 padding:mUserPaddingBottom=2,12 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=2,18 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=2,18 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744814079 layout:getBaseline()=2,46 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,72 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    android.widget.Button@412bc610 text:mText=1,2 getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMeasuredWidth=3,480 measurement:mMinHeight=2,72 measurement:mMinWidth=2,96 padding:mPaddingBottom=2,12 padding:mPaddingLeft=2,18 padding:mPaddingRight=2,18 padding:mPaddingTop=2,12 measurement:mMeasuredHeight=2,72 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 text:mResolvedTextDirection=12,FIRST_STRONG mID=10,id/button2 layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=2,72 layout:mBottom=3,144 padding:mUserPaddingBottom=2,12 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=2,18 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=2,18 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744814079 layout:getBaseline()=2,46 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,72 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    android.widget.Button@412bd078 text:mText=1,3 getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMeasuredWidth=3,480 measurement:mMinHeight=2,72 measurement:mMinWidth=2,96 padding:mPaddingBottom=2,12 padding:mPaddingLeft=2,18 padding:mPaddingRight=2,18 padding:mPaddingTop=2,12 measurement:mMeasuredHeight=2,72 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 text:mResolvedTextDirection=12,FIRST_STRONG mID=10,id/button3 layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=3,144 layout:mBottom=3,216 padding:mUserPaddingBottom=2,12 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=2,18 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=2,18 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744814079 layout:getBaseline()=2,46 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,72 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    android.widget.Button@412bdae0 text:mText=1,4 getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMeasuredWidth=3,480 measurement:mMinHeight=2,72 measurement:mMinWidth=2,96 padding:mPaddingBottom=2,12 padding:mPaddingLeft=2,18 padding:mPaddingRight=2,18 padding:mPaddingTop=2,12 measurement:mMeasuredHeight=2,72 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 text:mResolvedTextDirection=12,FIRST_STRONG mID=10,id/button4 layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=3,216 layout:mBottom=3,288 padding:mUserPaddingBottom=2,12 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=2,18 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=2,18 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744814079 layout:getBaseline()=2,46 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,72 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    android.widget.Button@412be548 text:mText=1,5 getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMeasuredWidth=3,480 measurement:mMinHeight=2,72 measurement:mMinWidth=2,96 padding:mPaddingBottom=2,12 padding:mPaddingLeft=2,18 padding:mPaddingRight=2,18 padding:mPaddingTop=2,12 measurement:mMeasuredHeight=2,72 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 text:mResolvedTextDirection=12,FIRST_STRONG mID=10,id/button5 layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=3,288 layout:mBottom=3,360 padding:mUserPaddingBottom=2,12 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=2,18 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=2,18 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744814079 layout:getBaseline()=2,46 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,72 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    android.widget.TextView@412beff8 text:mText=11,Medium Text getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMeasuredWidth=3,480 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=3,330 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 text:mResolvedTextDirection=12,FIRST_STRONG mID=7,id/info layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=3,360 layout:mBottom=3,690 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830464 layout:getBaseline()=2,29 getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,330 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+  com.android.internal.widget.ActionBarContainer@412baa00 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=1,0 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130701280 text:mResolvedTextDirection=12,FIRST_STRONG mID=19,id/split_action_bar layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830456 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=4,GONE layout:getWidth()=1,0 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+DONE.
+DONE
+"""
+
+DUMP_SAMPLE_UI = """\
+com.android.internal.policy.impl.PhoneWindow$DecorView@b4784e48 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=23,FOCUS_AFTER_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=4,1280 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=3,752 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2122315464 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,NO_ID layout:mRight=4,1280 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=3,752 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830336 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,752 layout:getLayoutDirection()=7,INHERIT layout_horizontalWeight=3,0.0 layout_flags_FLAG_LAYOUT_IN_SCREEN=5,0x100 layout_flags_FLAG_LAYOUT_INSET_DECOR=7,0x10000 layout_flags_FLAG_SPLIT_TOUCH=8,0x800000 layout_flags_FLAG_HARDWARE_ACCELERATED=9,0x1000000 layout_flags=8,25231616 layout_type=21,TYPE_BASE_APPLICATION layout_verticalWeight=3,0.0 layout_x=1,0 layout_y=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=4,1280 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+ android.widget.LinearLayout@b47b13f0 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,1 measurement:mTotalLength=3,752 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=4,1280 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=3,752 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703184 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,NO_ID layout:mRight=4,1280 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=3,752 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830334 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,752 layout:getLayoutDirection()=7,INHERIT layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=4,1280 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+  com.android.internal.widget.ActionBarContainer@b47a46a8 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=4,1280 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,56 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703312 text:mResolvedTextDirection=12,FIRST_STRONG mID=23,id/action_bar_container layout:mRight=4,1280 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=2,56 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830464 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,56 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=4,1280 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+   com.android.internal.widget.ActionBarView@b4776570 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=4,1280 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,56 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703184 text:mResolvedTextDirection=12,FIRST_STRONG mID=13,id/action_bar layout:mRight=4,1280 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=2,56 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830336 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,56 layout:getLayoutDirection()=7,INHERIT layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=4,1280 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+    android.widget.LinearLayout@b477e350 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=2,98 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=2,98 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=2,16 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,56 layout:mLeft=2,65 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704080 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,NO_ID layout:mRight=3,163 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=2,56 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=2,16 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744813920 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,56 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,98 focus:hasFocus()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=5,false focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     android.widget.ImageView@b47b9b08 layout:getBaseline()=2,-1 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=1,0 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130701280 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,id/up layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830456 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=2,19 layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=4,GONE layout:getWidth()=1,0 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.LinearLayout@b47f82f0 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,1 measurement:mTotalLength=2,25 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=2,82 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,25 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703184 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,NO_ID layout:mRight=2,82 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=2,15 layout:mBottom=2,40 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830336 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,25 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=2,19 layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,82 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@b4722880 text:mText=9,Sample UI getEllipsize()=3,END text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMeasuredWidth=2,82 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,25 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 text:mResolvedTextDirection=12,FIRST_STRONG mID=19,id/action_bar_title layout:mRight=2,82 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=2,25 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830464 layout:getBaseline()=2,20 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,25 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,82 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+      android.widget.TextView@b4785130 text:mText=0, getEllipsize()=3,END text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=1,0 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128605152 text:mResolvedTextDirection=12,FIRST_STRONG mID=22,id/action_bar_subtitle layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830456 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,9 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=2,-2 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=4,GONE layout:getWidth()=1,0 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    com.android.internal.widget.ActionBarView$HomeView@b4777390 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=2,56 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,56 layout:mLeft=1,9 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704080 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,NO_ID layout:mRight=2,65 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=2,56 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744813920 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,56 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,56 focus:hasFocus()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=5,false focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     android.widget.ImageView@b47a0930 layout:getBaseline()=2,-1 measurement:mMeasuredWidth=2,16 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,16 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130691040 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,id/up layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830456 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:getLayoutDirection()=7,INHERIT layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=2,-7 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=4,GONE layout:getWidth()=1,0 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.ImageView@b47b7e60 layout:getBaseline()=2,-1 measurement:mMeasuredWidth=2,48 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,48 layout:mLeft=1,4 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703312 text:mResolvedTextDirection=12,FIRST_STRONG mID=7,id/home layout:mRight=2,52 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,4 layout:mBottom=2,52 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830464 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 layout:getLayoutDirection()=7,INHERIT layout:layout_bottomMargin=1,4 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,8 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,4 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,48 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    com.android.internal.view.menu.ActionMenuView@b4727510 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388627 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=5,false measurement:mOrientation=1,0 measurement:mTotalLength=2,64 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=2,64 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,56 layout:mLeft=4,1216 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703312 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,NO_ID layout:mRight=4,1280 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=2,56 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830464 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,56 layout:getLayoutDirection()=7,INHERIT layout:layout_height=12,MATCH_PARENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,64 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     com.android.internal.view.menu.ActionMenuPresenter$OverflowMenuButton@b47cca60 layout:getBaseline()=2,-1 measurement:mMeasuredWidth=2,64 measurement:mMinHeight=2,56 measurement:mMinWidth=2,64 padding:mPaddingBottom=1,0 padding:mPaddingLeft=2,12 padding:mPaddingRight=2,12 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,56 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,NO_ID layout:mRight=2,64 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=2,56 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=2,12 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=2,12 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744683007 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,56 layout:getLayoutDirection()=7,INHERIT layout:layout_cellsUsed=1,0 layout:layout_expandable=5,false layout:layout_extraPixels=1,0 layout:layout_isOverflowButton=4,true layout:layout_preventEdgeOffset=5,false layout:layout_gravity=15,CENTER_VERTICAL layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,64 focus:hasFocus()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=4,true drawing:willNotDraw()=5,false
+   com.android.internal.widget.ActionBarContextView@b47bb880 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=1,0 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2120215264 text:mResolvedTextDirection=12,FIRST_STRONG mID=21,id/action_context_bar layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830328 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:getLayoutDirection()=7,INHERIT layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=4,GONE layout:getWidth()=1,0 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+  android.widget.FrameLayout@b47847a0 drawing:mForeground=52,android.graphics.drawable.NinePatchDrawable@b47b29c0 padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=2,55 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=4,1280 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=3,696 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703312 text:mResolvedTextDirection=12,FIRST_STRONG mID=10,id/content layout:mRight=4,1280 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=2,56 layout:mBottom=3,752 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830464 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,696 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,1.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=1,0 layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=4,1280 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+   android.widget.RelativeLayout@b47cc868 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=4,1280 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=3,696 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703184 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,NO_ID layout:mRight=4,1280 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=3,696 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830336 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,696 layout:getLayoutDirection()=7,INHERIT layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=4,1280 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+    android.widget.LinearLayout@b4727ca8 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,1 measurement:mTotalLength=3,419 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=4,1240 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=3,419 layout:mLeft=2,40 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2122314448 text:mResolvedTextDirection=12,FIRST_STRONG mID=17,id/content_layout layout:mRight=4,1280 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=2,80 layout:mBottom=3,499 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830336 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,419 layout:getLayoutDirection()=7,INHERIT layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=11,false/NO_ID layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=11,false/NO_ID layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=2,40 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=2,80 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=4,1240 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     android.widget.ToggleButton@b4728a80 isChecked()=5,false text:mText=12,Button 1 OFF getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMeasuredWidth=4,1140 measurement:mMinHeight=2,48 measurement:mMinWidth=2,64 padding:mPaddingBottom=1,4 padding:mPaddingLeft=2,12 padding:mPaddingRight=2,12 padding:mPaddingTop=1,4 measurement:mMeasuredHeight=2,48 layout:mLeft=2,50 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,NO_ID layout:mRight=4,1190 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=2,50 layout:mBottom=2,98 padding:mUserPaddingBottom=1,4 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=2,12 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=2,12 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744814079 layout:getBaseline()=2,29 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=2,10 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=2,50 layout:layout_rightMargin=2,50 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=2,50 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=7,button1 getVisibility()=7,VISIBLE layout:getWidth()=4,1140 focus:hasFocus()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.TextView@b472d690 text:mText=37,(50.0,50.0) (90,186) (90,186) (40,80) getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMeasuredWidth=4,1240 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,25 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 text:mResolvedTextDirection=12,FIRST_STRONG mID=12,id/textView1 layout:mRight=4,1240 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=3,108 layout:mBottom=3,133 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830464 layout:getBaseline()=2,20 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,25 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=6,CENTER layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=4,1240 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.ToggleButton@b477da08 isChecked()=5,false text:mText=12,Button 2 OFF getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMeasuredWidth=4,1140 measurement:mMinHeight=2,48 measurement:mMinWidth=2,64 padding:mPaddingBottom=1,4 padding:mPaddingLeft=2,12 padding:mPaddingRight=2,12 padding:mPaddingTop=1,4 measurement:mMeasuredHeight=2,48 layout:mLeft=2,50 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 text:mResolvedTextDirection=12,FIRST_STRONG mID=5,NO_ID layout:mRight=4,1190 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=3,183 layout:mBottom=3,231 padding:mUserPaddingBottom=1,4 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=2,12 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=2,12 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744814079 layout:getBaseline()=2,29 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=2,10 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=2,50 layout:layout_rightMargin=2,50 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=2,50 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=7,button2 getVisibility()=7,VISIBLE layout:getWidth()=4,1140 focus:hasFocus()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.TextView@b477e678 text:mText=38,(50.0,183.0) (90,319) (90,319) (40,80) getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMeasuredWidth=4,1240 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,25 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 text:mResolvedTextDirection=12,FIRST_STRONG mID=12,id/textView2 layout:mRight=4,1240 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=3,241 layout:mBottom=3,266 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830464 layout:getBaseline()=2,20 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,25 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=6,CENTER layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=4,1240 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.ToggleButton@b4781818 isChecked()=5,false text:mText=14,Button with ID getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMeasuredWidth=4,1140 measurement:mMinHeight=2,48 measurement:mMinWidth=2,64 padding:mPaddingBottom=1,4 padding:mPaddingLeft=2,12 padding:mPaddingRight=2,12 padding:mPaddingTop=1,4 measurement:mMeasuredHeight=2,48 layout:mLeft=2,50 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 text:mResolvedTextDirection=12,FIRST_STRONG mID=17,id/button_with_id layout:mRight=4,1190 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=3,316 layout:mBottom=3,364 padding:mUserPaddingBottom=1,4 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=2,12 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=2,12 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744814079 layout:getBaseline()=2,29 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=2,10 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=2,50 layout:layout_rightMargin=2,50 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=2,50 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=4,1140 focus:hasFocus()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.TextView@b477c2f8 text:mText=38,(50.0,316.0) (90,452) (90,452) (40,80) getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMeasuredWidth=4,1240 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,25 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 text:mResolvedTextDirection=12,FIRST_STRONG mID=12,id/textView3 layout:mRight=4,1240 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=3,374 layout:mBottom=3,399 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830464 layout:getBaseline()=2,20 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,25 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=6,CENTER layout:layout_weight=3,0.0 layout:layout_bottomMargin=2,20 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=4,1240 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    android.widget.ZoomControls@b477ec78 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=3,158 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 drawing:mDrawLayers=4,true focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMeasuredWidth=3,158 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,48 layout:mLeft=4,1122 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703184 text:mResolvedTextDirection=12,FIRST_STRONG mID=7,id/zoom layout:mRight=4,1280 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=2,48 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1744830336 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 layout:getLayoutDirection()=7,INHERIT layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=11,false/NO_ID layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=11,false/NO_ID layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=4,true layout:layout_mRules_alignParentRight=4,true layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,158 focus:hasFocus()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     android.widget.ZoomButton@b4784998 layout:getBaseline()=2,-1 measurement:mMeasuredWidth=2,79 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=2,11 padding:mPaddingLeft=1,4 padding:mPaddingRight=1,0 padding:mPaddingTop=1,7 measurement:mMeasuredHeight=2,48 layout:mLeft=1,0 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 text:mResolvedTextDirection=12,FIRST_STRONG mID=10,id/zoomOut layout:mRight=2,79 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=2,48 padding:mUserPaddingBottom=2,11 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,4 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1742716927 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,79 focus:hasFocus()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.ZoomButton@b4727eb0 layout:getBaseline()=2,-1 measurement:mMeasuredWidth=2,79 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=2,47 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,4 padding:mPaddingTop=1,0 measurement:mMeasuredHeight=2,48 layout:mLeft=2,79 drawing:mLayerType=4,NONE mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 text:mResolvedTextDirection=12,FIRST_STRONG mID=9,id/zoomIn layout:mRight=3,158 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 text:mTextDirection=7,INHERIT layout:mTop=1,0 layout:mBottom=2,48 padding:mUserPaddingBottom=2,47 padding:mUserPaddingEnd=2,-1 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRelative=5,false padding:mUserPaddingRight=1,4 padding:mUserPaddingStart=2,-1 mViewFlags=11,-1742716927 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 layout:getLayoutDirection()=7,INHERIT layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT layout:getResolvedLayoutDirection()=22,RESOLVED_DIRECTION_LTR getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,79 focus:hasFocus()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+DONE.
+DONE
+"""
+
+DUMP_API_10 = """\
+com.android.internal.policy.impl.PhoneWindow$DecorView@4066e808 drawing:mForeground=4,null drawing:mForegroundInPadding=4,true padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 focus:getDescendantFocusability()=23,FOCUS_AFTER_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,480 measurement:mMeasuredHeight=3,800 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,25169208 mID=5,NO_ID layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=3,800 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,800 layout_flags_FLAG_LAYOUT_IN_SCREEN=5,0x100 layout_flags=5,65792 layout_type=21,TYPE_BASE_APPLICATION layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=4,true isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+ android.widget.LinearLayout@40667158 measurement:mBaselineChildTop=1,0 measurement:mGravity=2,51 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,1 measurement:mTotalLength=3,800 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=2,38 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,480 measurement:mMeasuredHeight=3,800 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780464 mID=5,NO_ID layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=3,800 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653314 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,800 layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=4,true isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+  android.widget.FrameLayout@40676d60 drawing:mForeground=4,null drawing:mForegroundInPadding=4,true padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,2 padding:mPaddingLeft=1,6 padding:mPaddingRight=1,6 padding:mPaddingTop=1,1 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,480 measurement:mMeasuredHeight=2,38 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,25169200 mID=5,NO_ID layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,38 layout:mBottom=2,76 padding:mUserPaddingBottom=1,2 padding:mUserPaddingRight=1,6 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,38 layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=2,38 layout:layout_width=12,MATCH_PARENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+   android.widget.TextView@4063f6d8 mText=8,Settings getEllipsize()=3,END text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,468 measurement:mMeasuredHeight=2,35 layout:mLeft=1,6 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16779312 mID=8,id/title layout:mRight=3,474 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,1 layout:mBottom=2,36 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402657280 layout:getBaseline()=2,25 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,35 layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,468 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+  android.widget.FrameLayout@40677f28 drawing:mForeground=52,android.graphics.drawable.NinePatchDrawable@406cffd0 drawing:mForegroundInPadding=4,true padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=2,55 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,480 measurement:mMeasuredHeight=3,724 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16911408 mID=10,id/content layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,76 layout:mBottom=3,800 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653184 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,724 layout:layout_gravity=4,NONE layout:layout_weight=3,1.0 layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=1,0 layout:layout_width=12,MATCH_PARENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=4,true isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+   android.widget.ListView@40666588 list:recycleOnMeasure()=4,true getSelectedView()=4,null isFastScrollEnabled()=5,false isScrollingCacheEnabled()=4,true isSmoothScrollbarEnabled()=4,true isStackFromBottom()=5,false isTextFilterEnabled()=5,false scrolling:mFirstPosition=1,0 list:mNextSelectedPosition=2,-1 list:mSelectedPosition=2,-1 list:mItemCount=2,18 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=5,false isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,480 measurement:mMeasuredHeight=3,724 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,18483250 mID=7,id/list layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=3,724 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402940417 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,724 layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=4,true isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=4,true focus:isFocused()=4,true isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    android.widget.LinearLayout@406c54c0 measurement:mBaselineChildTop=1,0 measurement:mGravity=2,19 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=3,480 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=2,15 padding:mPaddingTop=1,0 measurement:mMinHeight=2,96 measurement:mMeasuredWidth=3,480 measurement:mMeasuredHeight=2,96 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780464 mID=15,id/widget_frame layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=2,96 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=2,15 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,96 list:layout_forceAdd=5,false list:layout_recycledHeaderFooter=5,false list:layout_viewType=21,ITEM_VIEW_TYPE_IGNORE layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     android.widget.ImageView@406ff510 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=2,48 measurement:mMeasuredHeight=2,48 layout:mLeft=1,9 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780336 mID=7,id/icon layout:mRight=2,57 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,24 layout:mBottom=2,72 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653184 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 layout:layout_gravity=6,CENTER layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,9 layout:layout_rightMargin=1,9 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,48 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.RelativeLayout@40704660 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,387 measurement:mMeasuredHeight=2,44 layout:mLeft=2,69 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780464 mID=5,NO_ID layout:mRight=3,456 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,26 layout:mBottom=2,70 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,44 layout:layout_gravity=4,NONE layout:layout_weight=3,1.0 layout:layout_bottomMargin=1,9 layout:layout_leftMargin=1,3 layout:layout_rightMargin=1,9 layout:layout_topMargin=1,9 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,387 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@406af6c8 mText=19,Wireless & networks getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,303 measurement:mMeasuredHeight=2,44 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16779312 mID=8,id/title layout:mRight=3,303 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=2,44 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402657280 layout:getBaseline()=2,35 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,44 layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=11,false/NO_ID layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=11,false/NO_ID layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,303 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+      android.widget.TextView@406c33b8 mText=0, getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMeasuredHeight=1,0 layout:mLeft=1,0 mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=8,16781312 mID=10,id/summary layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653192 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=8,id/title layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=8,id/title layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=4,GONE layout:getWidth()=1,0 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    android.widget.LinearLayout@406a44f8 measurement:mBaselineChildTop=1,0 measurement:mGravity=2,19 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=3,480 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=2,15 padding:mPaddingTop=1,0 measurement:mMinHeight=2,96 measurement:mMeasuredWidth=3,480 measurement:mMeasuredHeight=2,96 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780464 mID=15,id/widget_frame layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,97 layout:mBottom=3,193 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=2,15 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,96 list:layout_forceAdd=5,false list:layout_recycledHeaderFooter=5,false list:layout_viewType=21,ITEM_VIEW_TYPE_IGNORE layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     android.widget.ImageView@406ae108 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=2,48 measurement:mMeasuredHeight=2,48 layout:mLeft=1,9 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780336 mID=7,id/icon layout:mRight=2,57 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,24 layout:mBottom=2,72 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653184 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 layout:layout_gravity=6,CENTER layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,9 layout:layout_rightMargin=1,9 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,48 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.RelativeLayout@4063a5d8 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,387 measurement:mMeasuredHeight=2,44 layout:mLeft=2,69 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780464 mID=5,NO_ID layout:mRight=3,456 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,26 layout:mBottom=2,70 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,44 layout:layout_gravity=4,NONE layout:layout_weight=3,1.0 layout:layout_bottomMargin=1,9 layout:layout_leftMargin=1,3 layout:layout_rightMargin=1,9 layout:layout_topMargin=1,9 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,387 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@406e1d48 mText=13,Call settings getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,180 measurement:mMeasuredHeight=2,44 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16779312 mID=8,id/title layout:mRight=3,180 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=2,44 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402657280 layout:getBaseline()=2,35 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,44 layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=11,false/NO_ID layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=11,false/NO_ID layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,180 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+      android.widget.TextView@406f0d20 mText=0, getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMeasuredHeight=1,0 layout:mLeft=1,0 mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=8,16781312 mID=10,id/summary layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653192 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=8,id/title layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=8,id/title layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=4,GONE layout:getWidth()=1,0 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    android.widget.LinearLayout@406c0f98 measurement:mBaselineChildTop=1,0 measurement:mGravity=2,19 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=3,480 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=2,15 padding:mPaddingTop=1,0 measurement:mMinHeight=2,96 measurement:mMeasuredWidth=3,480 measurement:mMeasuredHeight=2,96 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780464 mID=15,id/widget_frame layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=3,194 layout:mBottom=3,290 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=2,15 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,96 list:layout_forceAdd=5,false list:layout_recycledHeaderFooter=5,false list:layout_viewType=21,ITEM_VIEW_TYPE_IGNORE layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     android.widget.ImageView@406eba90 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=2,48 measurement:mMeasuredHeight=2,48 layout:mLeft=1,9 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780336 mID=7,id/icon layout:mRight=2,57 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,24 layout:mBottom=2,72 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653184 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 layout:layout_gravity=6,CENTER layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,9 layout:layout_rightMargin=1,9 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,48 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.RelativeLayout@40670c00 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,387 measurement:mMeasuredHeight=2,44 layout:mLeft=2,69 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780464 mID=5,NO_ID layout:mRight=3,456 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,26 layout:mBottom=2,70 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,44 layout:layout_gravity=4,NONE layout:layout_weight=3,1.0 layout:layout_bottomMargin=1,9 layout:layout_leftMargin=1,3 layout:layout_rightMargin=1,9 layout:layout_topMargin=1,9 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,387 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@40702d28 mText=20,CyanogenMod settings getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,337 measurement:mMeasuredHeight=2,44 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16779312 mID=8,id/title layout:mRight=3,337 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=2,44 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402657280 layout:getBaseline()=2,35 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,44 layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=11,false/NO_ID layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=11,false/NO_ID layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,337 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+      android.widget.TextView@40720668 mText=0, getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMeasuredHeight=1,0 layout:mLeft=1,0 mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=8,16781312 mID=10,id/summary layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653192 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=8,id/title layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=8,id/title layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=4,GONE layout:getWidth()=1,0 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    android.widget.LinearLayout@406f0368 measurement:mBaselineChildTop=1,0 measurement:mGravity=2,19 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=3,480 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=2,15 padding:mPaddingTop=1,0 measurement:mMinHeight=2,96 measurement:mMeasuredWidth=3,480 measurement:mMeasuredHeight=2,96 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780464 mID=15,id/widget_frame layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=3,291 layout:mBottom=3,387 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=2,15 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,96 list:layout_forceAdd=5,false list:layout_recycledHeaderFooter=5,false list:layout_viewType=21,ITEM_VIEW_TYPE_IGNORE layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     android.widget.ImageView@406f0b10 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=2,48 measurement:mMeasuredHeight=2,48 layout:mLeft=1,9 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780336 mID=7,id/icon layout:mRight=2,57 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,24 layout:mBottom=2,72 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653184 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 layout:layout_gravity=6,CENTER layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,9 layout:layout_rightMargin=1,9 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,48 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.RelativeLayout@406f1780 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,387 measurement:mMeasuredHeight=2,44 layout:mLeft=2,69 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780464 mID=5,NO_ID layout:mRight=3,456 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,26 layout:mBottom=2,70 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,44 layout:layout_gravity=4,NONE layout:layout_weight=3,1.0 layout:layout_bottomMargin=1,9 layout:layout_leftMargin=1,3 layout:layout_rightMargin=1,9 layout:layout_topMargin=1,9 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,387 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@40710e30 mText=11,ADWLauncher getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,209 measurement:mMeasuredHeight=2,44 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16779312 mID=8,id/title layout:mRight=3,209 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=2,44 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402657280 layout:getBaseline()=2,35 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,44 layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=11,false/NO_ID layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=11,false/NO_ID layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,209 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+      android.widget.TextView@406b24c0 mText=0, getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMeasuredHeight=1,0 layout:mLeft=1,0 mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=8,16781312 mID=10,id/summary layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653192 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=8,id/title layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=8,id/title layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=4,GONE layout:getWidth()=1,0 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    android.widget.LinearLayout@40700580 measurement:mBaselineChildTop=1,0 measurement:mGravity=2,19 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=3,480 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=2,15 padding:mPaddingTop=1,0 measurement:mMinHeight=2,96 measurement:mMeasuredWidth=3,480 measurement:mMeasuredHeight=2,96 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780464 mID=15,id/widget_frame layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=3,388 layout:mBottom=3,484 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=2,15 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,96 list:layout_forceAdd=5,false list:layout_recycledHeaderFooter=5,false list:layout_viewType=21,ITEM_VIEW_TYPE_IGNORE layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     android.widget.ImageView@40702b18 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=2,48 measurement:mMeasuredHeight=2,48 layout:mLeft=1,9 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780336 mID=7,id/icon layout:mRight=2,57 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,24 layout:mBottom=2,72 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653184 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 layout:layout_gravity=6,CENTER layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,9 layout:layout_rightMargin=1,9 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,48 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.RelativeLayout@4070c698 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,387 measurement:mMeasuredHeight=2,44 layout:mLeft=2,69 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780464 mID=5,NO_ID layout:mRight=3,456 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,26 layout:mBottom=2,70 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,44 layout:layout_gravity=4,NONE layout:layout_weight=3,1.0 layout:layout_bottomMargin=1,9 layout:layout_leftMargin=1,3 layout:layout_rightMargin=1,9 layout:layout_topMargin=1,9 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,387 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@406d83e8 mText=5,Sound getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=2,92 measurement:mMeasuredHeight=2,44 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16779312 mID=8,id/title layout:mRight=2,92 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=2,44 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402657280 layout:getBaseline()=2,35 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,44 layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=11,false/NO_ID layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=11,false/NO_ID layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,92 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+      android.widget.TextView@40672ce8 mText=0, getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMeasuredHeight=1,0 layout:mLeft=1,0 mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=8,16781312 mID=10,id/summary layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653192 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=8,id/title layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=8,id/title layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=4,GONE layout:getWidth()=1,0 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    android.widget.LinearLayout@406dc988 measurement:mBaselineChildTop=1,0 measurement:mGravity=2,19 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=3,480 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=2,15 padding:mPaddingTop=1,0 measurement:mMinHeight=2,96 measurement:mMeasuredWidth=3,480 measurement:mMeasuredHeight=2,96 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780464 mID=15,id/widget_frame layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=3,485 layout:mBottom=3,581 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=2,15 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,96 list:layout_forceAdd=5,false list:layout_recycledHeaderFooter=5,false list:layout_viewType=21,ITEM_VIEW_TYPE_IGNORE layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     android.widget.ImageView@406e1998 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=2,48 measurement:mMeasuredHeight=2,48 layout:mLeft=1,9 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780336 mID=7,id/icon layout:mRight=2,57 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,24 layout:mBottom=2,72 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653184 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 layout:layout_gravity=6,CENTER layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,9 layout:layout_rightMargin=1,9 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,48 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.RelativeLayout@4066cce8 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,387 measurement:mMeasuredHeight=2,44 layout:mLeft=2,69 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780464 mID=5,NO_ID layout:mRight=3,456 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,26 layout:mBottom=2,70 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,44 layout:layout_gravity=4,NONE layout:layout_weight=3,1.0 layout:layout_bottomMargin=1,9 layout:layout_leftMargin=1,3 layout:layout_rightMargin=1,9 layout:layout_topMargin=1,9 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,387 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@406715b8 mText=8,Profiles getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,113 measurement:mMeasuredHeight=2,44 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16779312 mID=8,id/title layout:mRight=3,113 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=2,44 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402657280 layout:getBaseline()=2,35 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,44 layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=11,false/NO_ID layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=11,false/NO_ID layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,113 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+      android.widget.TextView@40673968 mText=0, getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMeasuredHeight=1,0 layout:mLeft=1,0 mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=8,16781312 mID=10,id/summary layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653192 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=8,id/title layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=8,id/title layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=4,GONE layout:getWidth()=1,0 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    android.widget.LinearLayout@4069f7b0 measurement:mBaselineChildTop=1,0 measurement:mGravity=2,19 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=3,480 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=2,15 padding:mPaddingTop=1,0 measurement:mMinHeight=2,96 measurement:mMeasuredWidth=3,480 measurement:mMeasuredHeight=2,96 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780464 mID=15,id/widget_frame layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=3,582 layout:mBottom=3,678 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=2,15 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,96 list:layout_forceAdd=5,false list:layout_recycledHeaderFooter=5,false list:layout_viewType=21,ITEM_VIEW_TYPE_IGNORE layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     android.widget.ImageView@406a3120 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=2,48 measurement:mMeasuredHeight=2,48 layout:mLeft=1,9 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780336 mID=7,id/icon layout:mRight=2,57 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,24 layout:mBottom=2,72 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653184 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 layout:layout_gravity=6,CENTER layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,9 layout:layout_rightMargin=1,9 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,48 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.RelativeLayout@40680448 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,387 measurement:mMeasuredHeight=2,44 layout:mLeft=2,69 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780464 mID=5,NO_ID layout:mRight=3,456 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,26 layout:mBottom=2,70 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,44 layout:layout_gravity=4,NONE layout:layout_weight=3,1.0 layout:layout_bottomMargin=1,9 layout:layout_leftMargin=1,3 layout:layout_rightMargin=1,9 layout:layout_topMargin=1,9 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,387 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@4067a4f8 mText=7,Display getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,109 measurement:mMeasuredHeight=2,44 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16779312 mID=8,id/title layout:mRight=3,109 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=2,44 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402657280 layout:getBaseline()=2,35 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,44 layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=11,false/NO_ID layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=11,false/NO_ID layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,109 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+      android.widget.TextView@406a5598 mText=0, getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMeasuredHeight=1,0 layout:mLeft=1,0 mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=8,16781312 mID=10,id/summary layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653192 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=8,id/title layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=8,id/title layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=4,GONE layout:getWidth()=1,0 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    android.widget.LinearLayout@4063ae20 measurement:mBaselineChildTop=1,0 measurement:mGravity=2,19 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=3,480 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=2,15 padding:mPaddingTop=1,0 measurement:mMinHeight=2,96 measurement:mMeasuredWidth=3,480 measurement:mMeasuredHeight=2,96 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780464 mID=15,id/widget_frame layout:mRight=3,480 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=3,679 layout:mBottom=3,775 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=2,15 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,96 list:layout_forceAdd=5,false list:layout_recycledHeaderFooter=5,false list:layout_viewType=21,ITEM_VIEW_TYPE_IGNORE layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,480 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     android.widget.ImageView@406f1990 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=2,48 measurement:mMeasuredHeight=2,48 layout:mLeft=1,9 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780336 mID=7,id/icon layout:mRight=2,57 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,24 layout:mBottom=2,72 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653184 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 layout:layout_gravity=6,CENTER layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,9 layout:layout_rightMargin=1,9 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=2,48 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.RelativeLayout@40701910 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,387 measurement:mMeasuredHeight=2,44 layout:mLeft=2,69 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16780464 mID=5,NO_ID layout:mRight=3,456 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=2,26 layout:mBottom=2,70 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653312 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,44 layout:layout_gravity=4,NONE layout:layout_weight=3,1.0 layout:layout_bottomMargin=1,9 layout:layout_leftMargin=1,3 layout:layout_rightMargin=1,9 layout:layout_topMargin=1,9 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,387 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@406fdc48 mText=19,Location & security getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=3,283 measurement:mMeasuredHeight=2,44 layout:mLeft=1,0 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16779312 mID=8,id/title layout:mRight=3,283 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=2,44 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402657280 layout:getBaseline()=2,35 getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,44 layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=11,false/NO_ID layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=11,false/NO_ID layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=7,VISIBLE layout:getWidth()=3,283 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+      android.widget.TextView@40720b90 mText=0, getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 measurement:mMinHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMeasuredHeight=1,0 layout:mLeft=1,0 mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=8,16781312 mID=10,id/summary layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 layout:mTop=1,0 layout:mBottom=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingRight=1,0 mViewFlags=9,402653192 layout:getBaseline()=2,-1 getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=8,id/title layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=8,id/title layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT getTag()=4,null getVisibility()=4,GONE layout:getWidth()=1,0 focus:hasFocus()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+DONE.
+DONE
+"""
+
+VIEW_MAP = {'padding:mUserPaddingRight': '12', 'drawing:getSolidColor()': '0', 'getFilterTouchesWhenObscured()': 'false', 'drawing:isOpaque()': 'false', 'mPrivateFlags_DRAWING_CACHE_INVALID': '0x0', 'focus:isFocusable()': 'true', 'mSystemUiVisibility': '0', 'isSoundEffectsEnabled()': 'true', 'layout:layout_width': 'MATCH_PARENT', 'layout:getWidth()': '1140', 'drawing:isDrawingCacheEnabled()': 'false', 'mPrivateFlags_DRAWN': '0x20', 'text:getSelectionEnd()': '-1', 'getTag()': 'null', 'getEllipsize()': 'null', 'focus:hasFocus()': 'false', 'layout:getResolvedLayoutDirection()': 'RESOLVED_DIRECTION_LTR', 'measurement:mMinWidth': '64', 'padding:mUserPaddingEnd': '-1', 'isFocusableInTouchMode()': 'false', 'text:mTextDirection': 'INHERIT', 'isHovered()': 'false', 'layout:layout_leftMargin': '50', 'layout:layout_endMargin': '-2147483648', 'padding:mPaddingBottom': '4', 'measurement:mMeasuredHeight': '48', 'layout:getLayoutDirection()': 'INHERIT', 'layout:mBottom': '364', 'mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE': '0x0', 'layout:layout_startMargin': '-2147483648', 'class': 'android.widget.ToggleButton', 'text:mText': 'Button with ID', 'padding:mPaddingRight': '12', 'mPrivateFlags': '-2130704336', 'layout:layout_bottomMargin': '10', 'layout:layout_height': 'WRAP_CONTENT', 'uniqueId': 'id/button_with_id', 'focus:isFocused()': 'false', 'measurement:mMeasuredWidth': '1140', 'padding:mUserPaddingRelative': 'false', 'text:getSelectionStart()': '-1', 'mViewFlags': '-1744814079', 'isClickable()': 'true', 'getScrollBarStyle()': 'INSIDE_OVERLAY', 'layout:layout_rightMargin': '50', 'padding:mUserPaddingLeft': '12', 'oid': 'b4781818', 'layout:getBaseline()': '29', 'isEnabled()': 'true', 'isChecked()': 'false', 'drawing:mLayerType': 'NONE', 'drawing:willNotDraw()': 'false', 'layout:mRight': '1190', 'drawing:willNotCacheDrawing()': 'false', 'layout:mTop': '316', 'isHapticFeedbackEnabled()': 'true', 'getVisibility()': 'VISIBLE', 'scrolling:mScrollX': '0', 'text:mResolvedTextDirection': 'FIRST_STRONG', 'isInTouchMode()': 'true', 'padding:mPaddingTop': '4', 'layout:layout_weight': '0.0', 'measurement:mMinHeight': '48', 'mID': 'id/button_with_id', 'layout:layout_topMargin': '50', 'padding:mUserPaddingStart': '-1', 'padding:mPaddingLeft': '12', 'isSelected()': 'false', 'isActivated()': 'false', 'padding:mUserPaddingBottom': '4', 'layout:layout_gravity': 'NONE', 'layout:mLeft': '50', 'layout:isLayoutRtl()': 'false', 'layout:getHeight()': '48', 'scrolling:mScrollY': '0'}
+
+VIEW_MAP_API_8 = {'padding:mUserPaddingRight': '12', 'drawing:getSolidColor()': '0', 'getFilterTouchesWhenObscured()': 'false', 'drawing:isOpaque()': 'false', 'mPrivateFlags_DRAWING_CACHE_INVALID': '0x0', 'focus:isFocusable()': 'true', 'mSystemUiVisibility': '0', 'isSoundEffectsEnabled()': 'true', 'layout:layout_width': 'MATCH_PARENT', 'layout:getWidth()': '1140', 'drawing:isDrawingCacheEnabled()': 'false', 'mPrivateFlags_DRAWN': '0x20', 'text:getSelectionEnd()': '-1', 'getTag()': 'null', 'getEllipsize()': 'null', 'focus:hasFocus()': 'false', 'layout:getResolvedLayoutDirection()': 'RESOLVED_DIRECTION_LTR', 'measurement:mMinWidth': '64', 'padding:mUserPaddingEnd': '-1', 'isFocusableInTouchMode()': 'false', 'text:mTextDirection': 'INHERIT', 'isHovered()': 'false', 'layout:layout_leftMargin': '50', 'layout:layout_endMargin': '-2147483648', 'padding:mPaddingBottom': '4', 'measurement:mMeasuredHeight': '48', 'layout:getLayoutDirection()': 'INHERIT', 'layout:mBottom': '364', 'mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE': '0x0', 'layout:layout_startMargin': '-2147483648', 'class': 'android.widget.ToggleButton', 'text:mText': 'Button with ID', 'padding:mPaddingRight': '12', 'mPrivateFlags': '-2130704336', 'layout:layout_bottomMargin': '10', 'layout:layout_height': 'WRAP_CONTENT', 'uniqueId': 'id/button_with_id', 'focus:isFocused()': 'false', 'measurement:mMeasuredWidth': '1140', 'padding:mUserPaddingRelative': 'false', 'text:getSelectionStart()': '-1', 'mViewFlags': '-1744814079', 'isClickable()': 'true', 'getScrollBarStyle()': 'INSIDE_OVERLAY', 'layout:layout_rightMargin': '50', 'padding:mUserPaddingLeft': '12', 'oid': 'b4781818', 'layout:getBaseline()': '29', 'isEnabled()': 'true', 'isChecked()': 'false', 'drawing:mLayerType': 'NONE', 'drawing:willNotDraw()': 'false', 'layout:mRight': '1190', 'drawing:willNotCacheDrawing()': 'false', 'mTop': '316', 'isHapticFeedbackEnabled()': 'true', 'getVisibility()': 'VISIBLE', 'scrolling:mScrollX': '0', 'text:mResolvedTextDirection': 'FIRST_STRONG', 'isInTouchMode()': 'true', 'padding:mPaddingTop': '4', 'layout:layout_weight': '0.0', 'measurement:mMinHeight': '48', 'mID': 'id/button_with_id', 'layout:layout_topMargin': '50', 'padding:mUserPaddingStart': '-1', 'padding:mPaddingLeft': '12', 'isSelected()': 'false', 'isActivated()': 'false', 'padding:mUserPaddingBottom': '4', 'layout:layout_gravity': 'NONE', 'mLeft': '50', 'layout:isLayoutRtl()': 'false', 'layout:getHeight()': '48', 'scrolling:mScrollY': '0'}
+
+VIEW_MAP_API_17 = {u'clickable': u'true', u'bounds': ((323, 725), (475, 881)), u'enabled': u'true', 'uniqueId': 'id/no_id/33', u'text': u'6', u'selected': u'false', u'scrollable': u'false', u'focused': u'false', u'long-clickable': u'false', u'class': u'android.widget.Button', u'focusable': u'true', u'content-desc': u'', u'package': u'com.android.calculator2', u'checked': u'false', u'password': u'false', u'checkable': u'false', u'index': u'2'}
+
+DUMPSYS_WINDOW_PARTIAL = '''
+
+WINDOW MANAGER LAST ANR (dumpsys window lastanr)
+  <no ANR has occurred since boot>
+
+WINDOW MANAGER POLICY STATE (dumpsys window policy)
+    mSafeMode=false mSystemReady=true mSystemBooted=true
+    mLidState=-1 mLidOpenRotation=-1 mHdmiPlugged=false
+    mLastSystemUiFlags=0x400 mResettingSystemUiFlags=0x0 mForceClearedSystemUiFlags=0x0
+    mUiMode=1 mDockMode=0 mCarDockRotation=-1 mDeskDockRotation=-1
+    mUserRotationMode=0 mUserRotation=0 mAllowAllRotations=0
+    mCurrentAppOrientation=5
+    mCarDockEnablesAccelerometer=true mDeskDockEnablesAccelerometer=true
+    mLidKeyboardAccessibility=0 mLidNavigationAccessibility=0 mLidControlsSleep=false
+    mLongPressOnPowerBehavior=-1 mHasSoftInput=true
+    mScreenOnEarly=true mScreenOnFully=true mOrientationSensorEnabled=true
+    mOverscanScreen=(0,0) 768x1280
+    mRestrictedOverscanScreen=(0,0) 768x1184
+    mUnrestrictedScreen=(0,0) 768x1280
+    mRestrictedScreen=(0,0) 768x1184
+    mStableFullscreen=(0,0)-(768,1184)
+    mStable=(0,50)-(768,1184)
+    mSystem=(0,50)-(768,1184)
+
+'''
+
+DUMPSYS_WINDOW_WINDOWS = """
+mock data
+mock data
+"""
+
+DUMPSYS_WINDOW_WINDOWS_SAMPLE_UI = """WINDOW MANAGER WINDOWS (dumpsys window windows)
+  Window #7 Window{b4d250b0 RecentsPanel paused=false}:
+    mSession=Session{b4d254d0 uid 1000} mClient=android.os.BinderProxy@b4c60590
+    mAttrs=WM.LayoutParams{(0,0)(fillxfill) gr=#53 sim=#31 ty=2014 fl=#820100 fmt=-3 wanim=0x7f0c0008}
+    Requested w=480 h=800 mLayoutSeq=20
+    mBaseLayer=151000 mSubLayer=0 mAnimLayer=151000+0=151000 mLastLayer=0
+    mToken=WindowToken{b4c000b0 token=null}
+    mRootToken=WindowToken{b4c000b0 token=null}
+    mViewVisibility=0x8 mLastHidden=false mHaveFrame=true mObscured=false
+    mSeq=0 mSystemUiVisibility=0x0
+    mGivenContentInsets=[0,0][0,0] mGivenVisibleInsets=[0,0][0,0]
+    mConfiguration=null
+    mShownFrame=[0.0,0.0][0.0,0.0]
+    mFrame=[0,0][480,800] last=[0,0][0,0]
+    mContainingFrame=[0,0][480,800] mParentFrame=[0,0][480,800] mDisplayFrame=[0,0][480,800]
+    mContentFrame=[0,0][480,800] mVisibleFrame=[0,0][480,800]
+    mContentInsets=[0,0][0,0] last=[0,0][0,0] mVisibleInsets=[0,0][0,0] last=[0,0][0,0]
+    mDrawPending=false mCommitDrawPending=false mReadyToShow=false mHasDrawn=false
+  Window #6 Window{b4d27678 StatusBar paused=false}:
+    mSession=Session{b4d254d0 uid 1000} mClient=android.os.BinderProxy@b4d27488
+    mAttrs=WM.LayoutParams{(0,0)(fillx38) gr=#37 sim=#20 ty=2000 fl=#800048 fmt=4 wanim=0x7f0c0009}
+    Requested w=480 h=38 mLayoutSeq=102
+    mBaseLayer=141000 mSubLayer=0 mAnimLayer=141000+0=141000 mLastLayer=141000
+    mSurface=Surface(name=StatusBar, identity=6)
+    Surface: shown=true layer=141000 alpha=1.0 rect=(0.0,0.0) 480.0 x 38.0
+    mToken=WindowToken{b4c000b0 token=null}
+    mRootToken=WindowToken{b4c000b0 token=null}
+    mViewVisibility=0x0 mLastHidden=false mHaveFrame=true mObscured=false
+    mSeq=0 mSystemUiVisibility=0x0
+    mGivenContentInsets=[0,0][0,0] mGivenVisibleInsets=[0,0][0,0]
+    mConfiguration={1.0 310mcc260mnc en_US layoutdir=0 sw320dp w320dp h508dp nrml long port finger qwerty/v/v tball/v s.5}
+    mShownFrame=[0.0,0.0][480.0,38.0]
+    mFrame=[0,0][480,38] last=[0,0][480,38]
+    mContainingFrame=[0,0][480,800] mParentFrame=[0,0][480,800] mDisplayFrame=[0,0][480,800]
+    mContentFrame=[0,0][480,38] mVisibleFrame=[0,0][480,38]
+    mContentInsets=[0,0][0,0] last=[0,0][0,0] mVisibleInsets=[0,0][0,0] last=[0,0][0,0]
+    mDrawPending=false mCommitDrawPending=false mReadyToShow=false mHasDrawn=true
+  Window #5 Window{b4d1bc30 StatusBarExpanded paused=false}:
+    mSession=Session{b4d254d0 uid 1000} mClient=android.os.BinderProxy@b4dca320
+    mAttrs=WM.LayoutParams{(0,-800)(480x762) gr=#37 sim=#10 ty=2017 fl=#811328 pfl=0x8 fmt=-3 wanim=0x1030000}
+    Requested w=480 h=762 mLayoutSeq=102
+    mBaseLayer=131000 mSubLayer=0 mAnimLayer=131005+0=131005 mLastLayer=131005
+    mSurface=Surface(name=StatusBarExpanded, identity=13)
+    Surface: shown=true layer=131005 alpha=1.0 rect=(0.0,-800.0) 480.0 x 762.0
+    mToken=WindowToken{b4c000b0 token=null}
+    mRootToken=WindowToken{b4c000b0 token=null}
+    mViewVisibility=0x0 mLastHidden=false mHaveFrame=true mObscured=false
+    mSeq=0 mSystemUiVisibility=0x0
+    mGivenContentInsets=[0,0][0,0] mGivenVisibleInsets=[0,0][0,0]
+    mConfiguration={1.0 310mcc260mnc en_US layoutdir=0 sw320dp w320dp h508dp nrml long port finger qwerty/v/v tball/v s.5}
+    mShownFrame=[0.0,-800.0][480.0,-38.0]
+    mFrame=[0,-800][480,-38] last=[0,-800][480,-38]
+    mContainingFrame=[0,0][480,800] mParentFrame=[0,0][480,800] mDisplayFrame=[-10000,-10000][10000,10000]
+    mContentFrame=[0,-800][480,-38] mVisibleFrame=[0,-800][480,-38]
+    mContentInsets=[0,0][0,0] last=[0,0][0,0] mVisibleInsets=[0,0][0,0] last=[0,0][0,0]
+    mDrawPending=false mCommitDrawPending=false mReadyToShow=false mHasDrawn=true
+  Window #4 Window{b4d62e40 TrackingView paused=false}:
+    mSession=Session{b4d254d0 uid 1000} mClient=android.os.BinderProxy@b4d62ca8
+    mAttrs=WM.LayoutParams{(0,-800)(fillxfill) gr=#37 sim=#20 ty=2017 fl=#20300 fmt=-3}
+    Requested w=480 h=800 mLayoutSeq=17
+    mBaseLayer=131000 mSubLayer=0 mAnimLayer=131000+0=131000 mLastLayer=0
+    mToken=WindowToken{b4c000b0 token=null}
+    mRootToken=WindowToken{b4c000b0 token=null}
+    mViewVisibility=0x8 mLastHidden=false mHaveFrame=true mObscured=false
+    mSeq=0 mSystemUiVisibility=0x0
+    mGivenContentInsets=[0,0][0,0] mGivenVisibleInsets=[0,0][0,0]
+    mConfiguration=null
+    mShownFrame=[0.0,0.0][0.0,0.0]
+    mFrame=[0,-800][480,0] last=[0,0][0,0]
+    mContainingFrame=[0,0][480,800] mParentFrame=[0,0][480,800] mDisplayFrame=[-10000,-10000][10000,10000]
+    mContentFrame=[0,-800][480,0] mVisibleFrame=[0,-800][480,0]
+    mContentInsets=[0,0][0,0] last=[0,0][0,0] mVisibleInsets=[0,0][0,0] last=[0,0][0,0]
+    mDrawPending=false mCommitDrawPending=false mReadyToShow=false mHasDrawn=false
+  Window #3 Window{b4c01158 Keyguard paused=false}:
+    mSession=Session{b4be1be8 uid 1000} mClient=android.view.ViewRootImpl$W@b4c12f70
+    mAttrs=WM.LayoutParams{(0,0)(fillxfill) sim=#10 ty=2004 fl=#10120800 pfl=0x8 fmt=-3 wanim=0x10301da or=5}
+    Requested w=480 h=762 mLayoutSeq=32
+    mBaseLayer=111000 mSubLayer=0 mAnimLayer=111000+0=111000 mLastLayer=111000
+    mToken=WindowToken{b4c000b0 token=null}
+    mRootToken=WindowToken{b4c000b0 token=null}
+    mViewVisibility=0x8 mLastHidden=true mHaveFrame=true mObscured=false
+    mSeq=0 mSystemUiVisibility=0x0
+    mGivenContentInsets=[0,0][0,0] mGivenVisibleInsets=[0,0][0,0]
+    mConfiguration={1.0 310mcc260mnc en_US layoutdir=0 sw320dp w320dp h508dp nrml long port finger qwerty/v/v tball/v s.5}
+    mShownFrame=[0.0,38.0][480.0,800.0]
+    mFrame=[0,38][480,800] last=[0,38][480,800]
+    mContainingFrame=[0,38][480,800] mParentFrame=[0,38][480,800] mDisplayFrame=[0,38][480,800]
+    mContentFrame=[0,38][480,800] mVisibleFrame=[0,38][480,800]
+    mContentInsets=[0,0][0,0] last=[0,0][0,0] mVisibleInsets=[0,0][0,0] last=[0,0][0,0]
+    mShownAlpha=1.0 mAlpha=1.0 mLastAlpha=0.0
+    mDrawPending=false mCommitDrawPending=false mReadyToShow=false mHasDrawn=true
+  Window #2 Window{b4d2a948 com.dtmilano.android.sampleui/com.dtmilano.android.sampleui.MainActivity paused=false}:
+    mSession=Session{b4d3cdf0 uid 10046} mClient=android.os.BinderProxy@b4c09bf0
+    mAttrs=WM.LayoutParams{(0,0)(fillxfill) sim=#120 ty=1 fl=#1810100 pfl=0x8 wanim=0x1030292}
+    Requested w=480 h=800 mLayoutSeq=102
+    mBaseLayer=21000 mSubLayer=0 mAnimLayer=21010+0=21010 mLastLayer=21010
+    mSurface=Surface(name=com.dtmilano.android.sampleui/com.dtmilano.android.sampleui.MainActivity, identity=28)
+    Surface: shown=true layer=21010 alpha=1.0 rect=(0.0,0.0) 480.0 x 800.0
+    mToken=AppWindowToken{b4d8bf80 token=Token{b4d3ab58 ActivityRecord{b4d3aa20 com.dtmilano.android.sampleui/.MainActivity}}}
+    mRootToken=AppWindowToken{b4d8bf80 token=Token{b4d3ab58 ActivityRecord{b4d3aa20 com.dtmilano.android.sampleui/.MainActivity}}}
+    mAppToken=AppWindowToken{b4d8bf80 token=Token{b4d3ab58 ActivityRecord{b4d3aa20 com.dtmilano.android.sampleui/.MainActivity}}}
+    mViewVisibility=0x0 mLastHidden=false mHaveFrame=true mObscured=false
+    mSeq=0 mSystemUiVisibility=0x0
+    mGivenContentInsets=[0,0][0,0] mGivenVisibleInsets=[0,0][0,0]
+    mConfiguration={1.0 310mcc260mnc en_US layoutdir=0 sw320dp w320dp h508dp nrml long port finger qwerty/v/v tball/v s.5}
+    mShownFrame=[0.0,0.0][480.0,800.0]
+    mFrame=[0,0][480,800] last=[0,0][480,800]
+    mContainingFrame=[0,0][480,800] mParentFrame=[0,0][480,800] mDisplayFrame=[0,0][480,800]
+    mContentFrame=[0,38][480,800] mVisibleFrame=[0,38][480,800]
+    mContentInsets=[0,38][0,0] last=[0,38][0,0] mVisibleInsets=[0,38][0,0] last=[0,38][0,0]
+    mDrawPending=false mCommitDrawPending=false mReadyToShow=false mHasDrawn=true
+  Window #1 Window{b4d78098 com.android.launcher/com.android.launcher2.Launcher paused=false}:
+    mSession=Session{b4d35180 uid 10012} mClient=android.os.BinderProxy@b4d3b188
+    mAttrs=WM.LayoutParams{(0,0)(fillxfill) sim=#20 ty=1 fl=#1910100 pfl=0x8 fmt=-2 wanim=0x1030292}
+    Requested w=480 h=800 mLayoutSeq=37
+    mBaseLayer=21000 mSubLayer=0 mAnimLayer=21005+0=21005 mLastLayer=21005
+    mToken=AppWindowToken{b4d14528 token=Token{b4d12ab8 ActivityRecord{b4d12688 com.android.launcher/com.android.launcher2.Launcher}}}
+    mRootToken=AppWindowToken{b4d14528 token=Token{b4d12ab8 ActivityRecord{b4d12688 com.android.launcher/com.android.launcher2.Launcher}}}
+    mAppToken=AppWindowToken{b4d14528 token=Token{b4d12ab8 ActivityRecord{b4d12688 com.android.launcher/com.android.launcher2.Launcher}}}
+    mViewVisibility=0x8 mLastHidden=true mHaveFrame=true mObscured=true
+    mSeq=0 mSystemUiVisibility=0x0
+    mGivenContentInsets=[0,0][0,0] mGivenVisibleInsets=[0,0][0,0]
+    mConfiguration={1.0 310mcc260mnc en_US layoutdir=0 sw320dp w320dp h508dp nrml long port finger qwerty/v/v tball/v s.5}
+    mShownFrame=[0.0,0.0][480.0,800.0]
+    mFrame=[0,0][480,800] last=[0,0][480,800]
+    mContainingFrame=[0,0][480,800] mParentFrame=[0,0][480,800] mDisplayFrame=[0,0][480,800]
+    mContentFrame=[0,38][480,800] mVisibleFrame=[0,38][480,800]
+    mContentInsets=[0,38][0,0] last=[0,38][0,0] mVisibleInsets=[0,38][0,0] last=[0,38][0,0]
+    mShownAlpha=1.0 mAlpha=1.0 mLastAlpha=0.0
+    mDrawPending=false mCommitDrawPending=false mReadyToShow=false mHasDrawn=true
+    mWallpaperX=0.5 mWallpaperY=0.5
+    mWallpaperXStep=0.25 mWallpaperYStep=1.0
+  Window #0 Window{b4d2e648 com.android.systemui.ImageWallpaper paused=false}:
+    mSession=Session{b4d254d0 uid 1000} mClient=android.os.BinderProxy@b4d82d48
+    mAttrs=WM.LayoutParams{(0,0)(960x800) gr=#33 ty=2013 fl=#318 fmt=2 wanim=0x10301e4}
+    Requested w=960 h=800 mLayoutSeq=43
+    mIsImWindow=false mIsWallpaper=true mIsFloatingLayer=true mWallpaperVisible=false
+    mBaseLayer=21000 mSubLayer=0 mAnimLayer=21000+0=21000 mLastLayer=21000
+    mSurface=Surface(name=com.android.systemui.ImageWallpaper, identity=8)
+    Surface: shown=false layer=21000 alpha=1.0 rect=(-240.0,0.0) 960.0 x 800.0
+    mToken=WindowToken{b4c64f60 token=android.os.Binder@b4bead18}
+    mRootToken=WindowToken{b4c64f60 token=android.os.Binder@b4bead18}
+    mViewVisibility=0x0 mLastHidden=true mHaveFrame=true mObscured=true
+    mSeq=0 mSystemUiVisibility=0x0
+    Offsets x=-240 y=0
+    mGivenContentInsets=[0,0][0,0] mGivenVisibleInsets=[0,0][0,0]
+    mConfiguration={1.0 310mcc260mnc en_US layoutdir=0 sw320dp w320dp h508dp nrml long port finger qwerty/v/v tball/v s.5}
+    mShownFrame=[-240.0,0.0][720.0,800.0]
+    mFrame=[0,0][960,800] last=[0,0][960,800]
+    mContainingFrame=[0,0][480,800] mParentFrame=[0,0][480,800] mDisplayFrame=[-10000,-10000][10000,10000]
+    mContentFrame=[0,0][960,800] mVisibleFrame=[0,0][960,800]
+    mContentInsets=[0,0][0,0] last=[0,0][0,0] mVisibleInsets=[0,0][0,0] last=[0,0][0,0]
+    mDrawPending=false mCommitDrawPending=false mReadyToShow=false mHasDrawn=true
+    mWallpaperX=0.5 mWallpaperY=0.5
+    mWallpaperXStep=0.25 mWallpaperYStep=1.0
+
+  Display: init=480x800 base=480x800 cur=480x800 app=480x800 raw=480x800
+  mCurConfiguration={1.0 310mcc260mnc en_US layoutdir=0 sw320dp w320dp h508dp nrml long port finger qwerty/v/v tball/v s.5}
+  mCurrentFocus=Window{b4d2a948 com.dtmilano.android.sampleui/com.dtmilano.android.sampleui.MainActivity paused=false}
+  mFocusedApp=AppWindowToken{b4d8bf80 token=Token{b4d3ab58 ActivityRecord{b4d3aa20 com.dtmilano.android.sampleui/.MainActivity}}}
+  mInTouchMode=true mLayoutSeq=102
+  mWallpaperTarget=null
+  mLastWallpaperX=0.5 mLastWallpaperY=0.5
+  mWindowAnimationBackgroundSurface:
+    mDimSurface=Surface(name=DimSurface, identity=20)
+    mDimShown=false mLayer=21009 mDimColor=0xff000000
+    mLastDimWidth=480 mLastDimWidth=480
+  mSystemBooted=true mDisplayEnabled=true
+  mLayoutNeeded=false mBlurShown=false
+  mDimAnimator:
+    mDimSurface=Surface(name=DimAnimator, identity=17) 480 x 800
+    mDimShown=true current=0.0 target=0.0 delta=-0.002727273 lastAnimTime=0
+  mDisplayFrozen=false mWindowsFreezingScreen=false mAppsFreezingScreen=0 mWaitingForConfig=false
+  mRotation=0 mAltOrientation=false
+  mLastWindowForcedOrientation-1 mForcedAppOrientation=-1
+  mDeferredRotationPauseCount=0
+  mAnimationPending=false mWindowAnimationScale=1.0 mTransitionWindowAnimationScale=1.0
+  mNextAppTransition=0xffffffff mAppTransitionReady=false
+  mAppTransitionRunning=false mAppTransitionTimeout=false
+  mStartingIconInTransition=false, mSkipAppTransitionAnimation=false
+"""
+
+UIAUTOMATOR_DUMP = """<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
+<hierarchy rotation="0">
+    <node index="0" text="" class="android.widget.FrameLayout"
+        package="com.android.launcher" content-desc="" checkable="false"
+        checked="false" clickable="false" enabled="true" focusable="false"
+        focused="false" scrollable="false" long-clickable="false" password="false"
+        selected="false" bounds="[0,0][480,800]">
+        <node index="0" text="" class="android.widget.LinearLayout"
+            package="com.android.launcher" content-desc="" checkable="false"
+            checked="false" clickable="false" enabled="true" focusable="false"
+            focused="false" scrollable="false" long-clickable="false" password="false"
+            selected="false" bounds="[0,0][480,800]">
+            <node index="0" text="" class="android.widget.FrameLayout"
+                package="com.android.launcher" content-desc="" checkable="false"
+                checked="false" clickable="false" enabled="true" focusable="false"
+                focused="false" scrollable="false" long-clickable="false" password="false"
+                selected="false" bounds="[0,38][480,800]">
+                <node index="0" text="" class="android.widget.FrameLayout"
+                    package="com.android.launcher" content-desc="" checkable="false"
+                    checked="false" clickable="false" enabled="true" focusable="false"
+                    focused="false" scrollable="false" long-clickable="false" password="false"
+                    selected="false" bounds="[0,38][480,800]">
+                    <node index="0" text="" class="android.widget.TabHost"
+                        package="com.android.launcher" content-desc="" checkable="false"
+                        checked="false" clickable="false" enabled="true" focusable="true"
+                        focused="true" scrollable="false" long-clickable="false" password="false"
+                        selected="false" bounds="[0,38][480,800]">
+                        <node index="0" text="" class="android.widget.LinearLayout"
+                            package="com.android.launcher" content-desc="" checkable="false"
+                            checked="false" clickable="false" enabled="true" focusable="false"
+                            focused="false" scrollable="false" long-clickable="false"
+                            password="false" selected="false" bounds="[0,38][480,800]">
+                            <node index="0" text="" class="android.widget.FrameLayout"
+                                package="com.android.launcher" content-desc="" checkable="false"
+                                checked="false" clickable="false" enabled="true" focusable="false"
+                                focused="false" scrollable="false" long-clickable="false"
+                                password="false" selected="false" bounds="[1,38][479,116]">
+                                <node index="0" text="" class="android.widget.TabWidget"
+                                    package="com.android.launcher" content-desc="" checkable="false"
+                                    checked="false" clickable="false" enabled="true" focusable="true"
+                                    focused="false" scrollable="false" long-clickable="false"
+                                    password="false" selected="false" bounds="[1,38][479,116]">
+                                    <node index="0" text="Apps" class="android.widget.TextView"
+                                        package="com.android.launcher" content-desc="Apps" checkable="false"
+                                        checked="false" clickable="true" enabled="true" focusable="true"
+                                        focused="false" scrollable="false" long-clickable="false"
+                                        password="false" selected="true" bounds="[1,38][105,116]" />
+                                </node>
+                            </node>
+                        </node>
+                    </node>
+                </node>
+            </node>
+        </node>
+    </node>
+</hierarchy>
+"""
+
+UIAUTOMATOR_DUMP_API17_CHINESE = '''<?xml version=\'1.0\' encoding=\'UTF-8\' standalone=\'yes\' ?>
+<hierarchy rotation="0">
+    <node index="0" text="" class="android.widget.FrameLayout"
+        package="android" content-desc="" checkable="false" checked="false"
+        clickable="false" enabled="true" focusable="false" focused="false"
+        scrollable="false" long-clickable="false" password="false" selected="false"
+        bounds="[0,0][800,1216]">
+        <node index="0" text="" class="android.widget.FrameLayout"
+            package="android" content-desc="" checkable="false" checked="false"
+            clickable="false" enabled="true" focusable="false" focused="false"
+            scrollable="false" long-clickable="false" password="false" selected="false"
+            bounds="[0,33][800,1216]">
+            <node index="0" text="" class="android.view.View" package="android"
+                content-desc="" checkable="false" checked="false" clickable="false"
+                enabled="true" focusable="false" focused="false" scrollable="false"
+                long-clickable="false" password="false" selected="false" bounds="[0,33][800,1216]">
+                <node index="0" text="" class="android.view.View" package="android"
+                    content-desc="" checkable="false" checked="false" clickable="false"
+                    enabled="true" focusable="false" focused="false" scrollable="true"
+                    long-clickable="false" password="false" selected="false" bounds="[0,0][800,1216]">
+                    <node index="0" text="" class="android.widget.FrameLayout"
+                        package="android"
+                        content-desc="\xe7\xa9\xba\xe7\x99\xbd\xe5\xb0\x8f\xe9\x83\xa8\xe4\xbb\xb6\xe3\x80\x82"
+                        checkable="false" checked="false" clickable="false" enabled="true"
+                        focusable="false" focused="false" scrollable="false"
+                        long-clickable="true" password="false" selected="false" bounds="[0,66][100,625]" />
+                    <node index="1" text="" class="android.widget.FrameLayout"
+                        package="android"
+                        content-desc="\xe7\x8a\xb6\xe6\x80\x81\xe5\xb0\x8f\xe9\x83\xa8\xe4\xbb\xb6\xe3\x80\x82"
+                        checkable="false" checked="false" clickable="false" enabled="true"
+                        focusable="false" focused="false" scrollable="false"
+                        long-clickable="true" password="false" selected="false"
+                        bounds="[113,66][686,625]">
+                        <node index="0" text="" class="android.widget.GridLayout"
+                            package="android" content-desc="\xe7\x8a\xb6\xe6\x80\x81"
+                            checkable="false" checked="false" clickable="false" enabled="true"
+                            focusable="false" focused="false" scrollable="false"
+                            long-clickable="false" password="false" selected="false"
+                            bounds="[123,76][676,615]">
+                            <node index="0" text="" class="android.widget.LinearLayout"
+                                package="android" content-desc="" checkable="false" checked="false"
+                                clickable="false" enabled="true" focusable="true" focused="false"
+                                scrollable="false" long-clickable="false" password="false"
+                                selected="false" bounds="[123,76][676,351]">
+                                <node index="0" text="" class="android.widget.RelativeLayout"
+                                    package="android" content-desc="" checkable="false" checked="false"
+                                    clickable="false" enabled="true" focusable="false" focused="false"
+                                    scrollable="false" long-clickable="false" password="false"
+                                    selected="false" bounds="[267,76][609,324]">
+                                    <node index="0" text="6:40" class="android.widget.TextView"
+                                        package="android" content-desc="" checkable="false" checked="false"
+                                        clickable="false" enabled="true" focusable="false" focused="false"
+                                        scrollable="false" long-clickable="false" password="false"
+                                        selected="false" bounds="[267,76][609,324]" />
+                                </node>
+                                <node index="1" text="" class="android.widget.LinearLayout"
+                                    package="android" content-desc="" checkable="false" checked="false"
+                                    clickable="false" enabled="true" focusable="false" focused="false"
+                                    scrollable="false" long-clickable="false" password="false"
+                                    selected="false" bounds="[401,304][676,351]">
+                                    <node index="0"
+                                        text="语言"
+                                        class="android.widget.TextView" package="android"
+                                        content-desc="" checkable="false" checked="false" clickable="false"
+                                        enabled="true" focusable="false" focused="false" scrollable="false"
+                                        long-clickable="false" password="false" selected="true"
+                                        bounds="[401,304][609,351]" />
+                                </node>
+                            </node>
+                        </node>
+                    </node>
+                </node>
+                <node index="1" text="" class="android.widget.FrameLayout"
+                    package="android" content-desc="" checkable="false" checked="false"
+                    clickable="false" enabled="true" focusable="false" focused="false"
+                    scrollable="false" long-clickable="false" password="false"
+                    selected="false" bounds="[120,654][679,1187]">
+                    <node index="0" text="" class="android.widget.ViewFlipper"
+                        package="android" content-desc="" checkable="false" checked="false"
+                        clickable="false" enabled="true" focusable="false" focused="false"
+                        scrollable="false" long-clickable="false" password="false"
+                        selected="false" bounds="[120,654][679,1187]">
+                        <node index="0" text="" class="android.widget.LinearLayout"
+                            package="android"
+                            content-desc="\xe6\xbb\x91\xe5\x8a\xa8\xe8\xa7\xa3\xe9\x94\x81\xe3\x80\x82"
+                            checkable="false" checked="false" clickable="false" enabled="true"
+                            focusable="false" focused="false" scrollable="false"
+                            long-clickable="false" password="false" selected="false"
+                            bounds="[136,670][663,1171]">
+                            <node index="0" text="" class="android.widget.FrameLayout"
+                                package="android" content-desc="" checkable="false" checked="false"
+                                clickable="false" enabled="true" focusable="false" focused="false"
+                                scrollable="false" long-clickable="false" password="false"
+                                selected="false" bounds="[136,670][663,1171]">
+                                <node index="0" text="" class="android.view.View" package="android"
+                                    content-desc="\xe6\xbb\x91\xe5\x8a\xa8\xe5\x8c\xba\xe5\x9f\x9f\xe3\x80\x82"
+                                    checkable="false" checked="false" clickable="false" enabled="true"
+                                    focusable="false" focused="false" scrollable="false"
+                                    long-clickable="false" password="false" selected="false"
+                                    bounds="[136,670][663,1171]" />
+                                <node index="1"
+                                    text="\xe6\xad\xa3\xe5\x9c\xa8\xe5\x85\x85\xe7\x94\xb5\xef\xbc\x8c50%"
+                                    class="android.widget.TextView" package="android" content-desc=""
+                                    checkable="false" checked="false" clickable="true" enabled="true"
+                                    focusable="false" focused="false" scrollable="false"
+                                    long-clickable="false" password="false" selected="true"
+                                    bounds="[136,670][663,699]" />
+                                <node index="2" text="" class="android.widget.LinearLayout"
+                                    package="android" content-desc="" checkable="false" checked="false"
+                                    clickable="true" enabled="true" focusable="false" focused="false"
+                                    scrollable="false" long-clickable="false" password="false"
+                                    selected="false" bounds="[136,1107][663,1171]">
+                                    <node index="1" text="ANDROID" class="android.widget.TextView"
+                                        package="android" content-desc="" checkable="false" checked="false"
+                                        clickable="false" enabled="true" focusable="false" focused="false"
+                                        scrollable="false" long-clickable="false" password="false"
+                                        selected="true" bounds="[355,1124][444,1153]" />
+                                </node>
+                                <node index="3" text="" class="android.view.View" package="android"
+                                    content-desc="" checkable="false" checked="false" clickable="false"
+                                    enabled="true" focusable="false" focused="false" scrollable="false"
+                                    long-clickable="false" password="false" selected="false"
+                                    bounds="[157,670][642,1171]" />
+                            </node>
+                        </node>
+                    </node>
+                </node>
+            </node>
+        </node>
+    </node>
+</hierarchy>
+'''
+
+WINDOWS = {1:'Window1', 2: 'com.example.window', 0xb523d938: 'com.android.launcher', 0xb52f7c88:'StatusBar'}
+
+LIST = '''\
+b522d3f8 com.android.systemui.ImageWallpaper
+b523d938 com.android.launcher/com.android.launcher2.Launcher
+b5339540 com.android.contacts/com.android.contacts.activities.PeopleActivity
+b5252410 com.android.contacts/com.android.contacts.activities.ContactEditorActivity
+b51ea228 InputMethod
+b51da498 Keyguard
+b52f7c88 StatusBar
+b533b2c0 NavigationBar
+b521d218 SearchPanel
+DONE.
+'''
+
+DUMP_STATUSBAR = '''\
+com.android.systemui.statusbar.phone.StatusBarWindowView@b506ea18 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=6,278611 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=23,FOCUS_AFTER_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=2,33 measurement:mMeasuredWidth=3,800 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16813232 layout:mRight=3,800 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,33 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653315 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,33 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout_horizontalWeight=3,0.0 layout_flags_FLAG_NOT_FOCUSABLE=3,0x8 layout_flags_FLAG_TOUCHABLE_WHEN_WAKING=4,0x40 layout_flags_FLAG_SPLIT_TOUCH=8,0x800000 layout_flags_FLAG_HARDWARE_ACCELERATED=9,0x1000000 layout_flags=8,25165896 layout_type=15,TYPE_STATUS_BAR layout_verticalWeight=3,0.0 layout_x=1,0 layout_y=1,0 layout:layout_height=2,33 layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=3,LTR text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,800 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+ com.android.systemui.statusbar.phone.PhoneStatusBarView@b50702b8 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2375763 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=23,FOCUS_AFTER_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_state_mUseColor=9,-16777216 layout:mLeft=1,0 measurement:mMeasuredHeight=2,33 measurement:mMeasuredWidth=3,800 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=13,id/status_bar mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,25201968 layout:mRight=3,800 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,33 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653315 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,33 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,33 layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,800 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+  android.widget.ImageView@b50709a0 layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,3 padding:mPaddingLeft=1,8 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=26,id/notification_lights_out mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130701280 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,3 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,8 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402784264 drawing:getAlpha()=3,0.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=2,32 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=4,true drawing:willNotDraw()=5,false
+  android.widget.LinearLayout@b50878b8 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=3,800 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags_PADDING_NOT_NULL=4,0x20 mGroupFlags=7,2244723 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=2,33 measurement:mMeasuredWidth=3,800 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,8 padding:mPaddingRight=1,8 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=22,id/status_bar_contents mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16813232 layout:mRight=3,800 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,33 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,8 padding:mUserPaddingRight=1,8 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,33 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,800 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+   android.widget.LinearLayout@b5087c00 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=3,672 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,8 measurement:mMeasuredHeight=2,33 measurement:mMeasuredWidth=3,684 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=25,id/notification_icon_area mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16813232 layout:mRight=3,692 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,33 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,33 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,1.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=1,0 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,684 drawing:getX()=3,8.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+    com.android.systemui.statusbar.StatusBarIconView@b5088758 mSlot=4,null layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=11,id/moreIcon mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130701280 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653192 drawing:getAlpha()=4,0.65 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=2,32 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=4,0.75 drawing:getScaleY()=4,0.75 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    com.android.systemui.statusbar.phone.IconMerger@b508b758 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388627 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=2,32 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=2,33 measurement:mMeasuredWidth=3,672 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=20,id/notificationIcons mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130670416 layout:mRight=3,672 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,33 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,33 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,672 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     com.android.systemui.statusbar.StatusBarIconView@b6257070 mSlot=17,android/0x1040453 layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=2,33 measurement:mMeasuredWidth=2,32 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=5,35888 layout:mRight=2,32 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,33 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653184 drawing:getAlpha()=4,0.65 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,33 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,33 layout:layout_width=2,32 drawing:getPivotX()=4,16.0 drawing:getPivotY()=4,16.5 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=4,0.75 drawing:getScaleY()=4,0.75 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=2,32 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+   android.widget.LinearLayout@b508bab0 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=3,100 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=3,692 measurement:mMeasuredHeight=2,33 measurement:mMeasuredWidth=3,100 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=19,id/system_icon_area mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16813232 layout:mRight=3,792 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,33 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,33 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,100 drawing:getX()=5,692.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+    android.widget.LinearLayout@b508be00 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388627 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=1,0 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=2,33 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=14,id/statusIcons mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128606032 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,33 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,33 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     com.android.systemui.statusbar.StatusBarIconView@b50f1dc0 mSlot=12,sync_failing layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2147478496 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402784264 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,32 layout:layout_width=2,32 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=4,true drawing:willNotDraw()=5,false
+     com.android.systemui.statusbar.StatusBarIconView@b5078b18 mSlot=11,sync_active layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2147478496 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402784264 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,32 layout:layout_width=2,32 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=4,true drawing:willNotDraw()=5,false
+     com.android.systemui.statusbar.StatusBarIconView@b529cba0 mSlot=9,bluetooth layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2147478496 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402784264 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,32 layout:layout_width=2,32 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=4,true drawing:willNotDraw()=5,false
+     com.android.systemui.statusbar.StatusBarIconView@b5297d68 mSlot=3,tty layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2147478496 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402784264 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,32 layout:layout_width=2,32 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=4,true drawing:willNotDraw()=5,false
+     com.android.systemui.statusbar.StatusBarIconView@b5115bd8 mSlot=6,volume layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2147478496 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402784264 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,32 layout:layout_width=2,32 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=4,true drawing:willNotDraw()=5,false
+     com.android.systemui.statusbar.StatusBarIconView@b529a1d8 mSlot=8,cdma_eri layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2147478496 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402784264 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,32 layout:layout_width=2,32 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=4,true drawing:willNotDraw()=5,false
+     com.android.systemui.statusbar.StatusBarIconView@b529e3f8 mSlot=11,alarm_clock layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2147478496 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402784264 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,32 layout:layout_width=2,32 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=4,true drawing:willNotDraw()=5,false
+    android.widget.LinearLayout@b508c150 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity=2,17 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=2,51 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags_PADDING_NOT_NULL=4,0x20 mGroupFlags=7,2244723 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=2,33 measurement:mMeasuredWidth=2,51 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,3 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=25,id/signal_battery_cluster mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16813232 layout:mRight=2,51 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,33 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,3 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,33 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=2,51 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     com.android.systemui.statusbar.SignalClusterView@b508cec0 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=2,27 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,3 measurement:mMeasuredHeight=2,24 measurement:mMeasuredWidth=2,27 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=17,id/signal_cluster mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16813232 layout:mRight=2,30 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,28 layout:mTop=1,4 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,24 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=2,27 drawing:getX()=3,3.0 drawing:getY()=3,4.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.FrameLayout@b508d3e8 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=13,id/wifi_combo mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130701152 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653320 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=2,-7 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+       android.widget.ImageView@b508d7b8 layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=14,id/wifi_signal mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=11,-2130701312 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402784256 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=4,true drawing:willNotDraw()=5,false
+       android.widget.ImageView@b508daa0 layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=13,id/wifi_inout mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=11,-2130701312 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653184 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+      android.view.View@b508eb00 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=9,id/spacer mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130701280 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653192 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=1,8 layout:layout_width=1,8 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+      android.widget.FrameLayout@b508ed28 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=2,24 measurement:mMeasuredWidth=2,27 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16813232 layout:mRight=2,27 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,24 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,24 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=2,27 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+       android.view.View@b508f0b0 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,8 measurement:mMeasuredWidth=1,8 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130703312 layout:mRight=1,8 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,8 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653188 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,8 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=1,8 layout:layout_width=1,8 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=9,INVISIBLE layout:getWidth()=1,8 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+       android.widget.FrameLayout@b508f2d0 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=2,24 measurement:mMeasuredWidth=2,27 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=15,id/mobile_combo mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16813232 layout:mRight=2,27 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,24 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=20,3G Phone three bars. getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,24 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=2,27 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+        android.widget.ImageView@b508f650 layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=2,24 measurement:mMeasuredWidth=2,26 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=16,id/mobile_signal mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16813104 layout:mRight=2,26 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,24 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653184 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,24 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=2,26 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+        android.widget.ImageView@b508f938 layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=2,24 measurement:mMeasuredWidth=2,27 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=14,id/mobile_type mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16813104 layout:mRight=2,27 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,24 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653184 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,24 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=2,27 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+        android.widget.ImageView@b508fc20 layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=2,27 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=15,id/mobile_inout mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128606160 layout:mRight=2,27 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,24 layout:mTop=2,24 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653184 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=4,27.0 drawing:getY()=4,24.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+      android.widget.ImageView@b508ff08 layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=11,id/airplane mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130701280 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653192 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.ImageView@b50901f8 layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=2,30 measurement:mMeasuredHeight=2,24 measurement:mMeasuredWidth=2,21 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,5 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=10,id/battery mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16813104 layout:mRight=2,51 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,28 layout:mTop=1,4 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,5 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653184 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=19,Battery 50 percent. getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,24 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=2,21 drawing:getX()=4,30.0 drawing:getY()=3,4.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    com.android.systemui.statusbar.policy.Clock@b50908f0 text:mText=4,6:32 getEllipsize()=3,END text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,21.0 bg_=4,null layout:mLeft=2,51 measurement:mMeasuredHeight=2,33 measurement:mMeasuredWidth=2,49 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,8 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=8,id/clock mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16812080 layout:mRight=3,100 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,33 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,8 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653184 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,25 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,33 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=2,49 drawing:getX()=4,51.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+  android.widget.LinearLayout@b5091968 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=3,800 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags_PADDING_NOT_NULL=4,0x20 mGroupFlags=7,2244659 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=5,false drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=2,33 measurement:mMeasuredWidth=3,800 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,8 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=9,id/ticker mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16813232 layout:mRight=3,800 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,33 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,8 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,33 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,800 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+   android.widget.ImageSwitcher@b5091f38 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=4,true drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,8 measurement:mMeasuredHeight=2,32 measurement:mMeasuredWidth=2,32 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=13,id/tickerIcon mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16813232 layout:mRight=2,40 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,32 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,32 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,5 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,32 layout:layout_width=2,32 drawing:getPivotX()=4,16.0 drawing:getPivotY()=4,16.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=4,0.75 drawing:getScaleY()=4,0.75 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=2,32 drawing:getX()=3,8.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+    com.android.systemui.statusbar.AnimatedImageView@b50923b8 layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=2,32 measurement:mMeasuredWidth=2,32 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16813104 layout:mRight=2,32 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,32 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402784256 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,32 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,32 layout:layout_width=2,32 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=2,32 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=4,true drawing:willNotDraw()=5,false
+    com.android.systemui.statusbar.AnimatedImageView@b50926a8 layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=2,32 measurement:mMeasuredWidth=2,32 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130691040 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402784264 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,32 layout:layout_width=2,32 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=4,true drawing:willNotDraw()=5,false
+   com.android.systemui.statusbar.phone.TickerView@b5092df8 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=4,true drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags_PADDING_NOT_NULL=4,0x20 mGroupFlags=7,2244723 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=2,45 measurement:mMeasuredHeight=2,30 measurement:mMeasuredWidth=3,755 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=2,13 padding:mPaddingTop=1,3 drawing:mLayerType=4,NONE mID=13,id/tickerText mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16813232 layout:mRight=3,800 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,30 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=2,13 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,21 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,30 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,1.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=1,0 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,755 drawing:getX()=4,45.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+    android.widget.TextView@b5093350 text:mText=0, getEllipsize()=3,END text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,19.0 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=2,27 measurement:mMeasuredWidth=3,742 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16812080 layout:mRight=3,742 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,30 layout:mTop=1,3 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653184 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,21 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,27 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,742 drawing:getX()=3,0.0 drawing:getY()=3,3.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    android.widget.TextView@b50937e8 text:mText=0, getEllipsize()=3,END text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,19.0 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=2,27 measurement:mMeasuredWidth=3,742 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128594912 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653192 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,21 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+ com.android.systemui.statusbar.phone.PanelHolder@b5093fb8 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2245715 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=4,true drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=3,800 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=15,id/panel_holder mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128606032 layout:mRight=3,800 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,33 layout:mTop=2,33 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=2,33 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,800 drawing:getX()=3,0.0 drawing:getY()=4,33.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+  com.android.systemui.statusbar.phone.NotificationPanelView@b5094cd8 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags_PADDING_NOT_NULL=4,0x20 mGroupFlags=7,2244723 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false layout:mLeft=2,21 measurement:mMeasuredHeight=11,-2147483648 measurement:mMeasuredWidth=10,1073741822 measurement:mMinHeight=3,486 measurement:mMinWidth=1,0 padding:mPaddingBottom=2,21 padding:mPaddingLeft=2,21 padding:mPaddingRight=2,21 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=21,id/notification_panel mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128593616 layout:mRight=3,657 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=2,21 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=2,21 padding:mUserPaddingRight=2,21 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653320 drawing:getAlpha()=3,0.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=19,Notification shade. getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=2,21 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=3,636 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=3,636 drawing:getX()=4,21.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+   android.view.View@b5099878 layout:mLeft=2,21 measurement:mMeasuredHeight=2,48 measurement:mMeasuredWidth=3,277 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,5 drawing:mLayerType=4,NONE mID=9,id/handle mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130696144 layout:mRight=3,615 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,48 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653188 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,48 layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=9,INVISIBLE layout:getWidth()=3,594 drawing:getX()=4,21.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+   android.widget.Space@b50a3c10 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130701280 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653192 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=2,48 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,32 layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+   android.widget.LinearLayout@b50a3e78 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,1 measurement:mTotalLength=2,64 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=2,21 measurement:mMeasuredHeight=2,64 measurement:mMeasuredWidth=3,277 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128593776 layout:mRight=3,615 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=2,43 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,594 drawing:getX()=4,21.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+    android.widget.LinearLayout@b50a4430 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388627 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=5,false measurement:mOrientation=1,0 measurement:mTotalLength=3,277 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_state_mUseColor=9,-16777216 layout:mLeft=1,0 measurement:mMeasuredHeight=2,64 measurement:mMeasuredWidth=3,277 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=9,id/header mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2120205040 layout:mRight=3,594 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,64 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,64 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,64 layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,594 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     android.widget.RelativeLayout@b50a4998 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags_PADDING_NOT_NULL=4,0x20 mGroupFlags=7,2244723 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false layout:mLeft=1,0 measurement:mMeasuredHeight=2,64 measurement:mMeasuredWidth=3,204 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=2,11 padding:mPaddingRight=2,11 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=11,id/datetime mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128594672 layout:mRight=3,204 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,64 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=2,11 padding:mUserPaddingRight=2,11 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,64 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,204 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      com.android.systemui.statusbar.policy.Clock@b50aa640 text:mText=4,6:32 getEllipsize()=3,END text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,43.0 bg_=4,null layout:mLeft=2,11 measurement:mMeasuredHeight=2,58 measurement:mMeasuredWidth=2,81 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=8,id/clock mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128593904 layout:mRight=2,92 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,61 layout:mTop=1,3 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653184 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,58 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=11,false/NO_ID layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=11,false/NO_ID layout:layout_mRules_alignBaseline=11,false/NO_ID layout:layout_mRules_alignLeft=11,false/NO_ID layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=4,true layout:layout_mRules_startOf=11,false/NO_ID layout:layout_mRules_endOf=11,false/NO_ID layout:layout_mRules_alignStart=11,false/NO_ID layout:layout_mRules_alignEnd=11,false/NO_ID layout:layout_mRules_alignParentStart=11,false/NO_ID layout:layout_mRules_alignParentEnd=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=2,11 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=2,81 drawing:getX()=4,11.0 drawing:getY()=3,3.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+      com.android.systemui.statusbar.policy.DateView@b50ab028 text:mText=11,Sat, May 11 getEllipsize()=3,END text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,16.0 bg_=4,null layout:mLeft=3,103 measurement:mMeasuredHeight=2,22 measurement:mMeasuredWidth=2,90 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=7,id/date mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128598000 layout:mRight=3,193 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,54 layout:mTop=2,32 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653184 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,17 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,22 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_mRules_leftOf=11,false/NO_ID layout:layout_mRules_rightOf=8,id/clock layout:layout_mRules_above=11,false/NO_ID layout:layout_mRules_below=11,false/NO_ID layout:layout_mRules_alignBaseline=8,id/clock layout:layout_mRules_alignLeft=11,false/NO_ID layout:layout_mRules_alignTop=11,false/NO_ID layout:layout_mRules_alignRight=11,false/NO_ID layout:layout_mRules_alignBottom=11,false/NO_ID layout:layout_mRules_alignParentLeft=11,false/NO_ID layout:layout_mRules_alignParentTop=11,false/NO_ID layout:layout_mRules_alignParentRight=11,false/NO_ID layout:layout_mRules_alignParentBottom=11,false/NO_ID layout:layout_mRules_center=11,false/NO_ID layout:layout_mRules_centerHorizontal=11,false/NO_ID layout:layout_mRules_centerVertical=11,false/NO_ID layout:layout_mRules_startOf=11,false/NO_ID layout:layout_mRules_endOf=11,false/NO_ID layout:layout_mRules_alignStart=11,false/NO_ID layout:layout_mRules_alignEnd=11,false/NO_ID layout:layout_mRules_alignParentStart=11,false/NO_ID layout:layout_mRules_alignParentEnd=11,false/NO_ID layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=2,90 drawing:getX()=5,103.0 drawing:getY()=4,32.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.Space@b50ab960 bg_=4,null layout:mLeft=3,204 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130695120 layout:mRight=3,521 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,32 layout:mTop=2,32 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653188 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,1.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=1,0 layout:layout_width=1,0 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=9,INVISIBLE layout:getWidth()=3,317 drawing:getX()=5,204.0 drawing:getY()=4,32.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.TextView@b50abbc8 text:mText=0, getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,15.0 bg_=4,null layout:mLeft=3,521 measurement:mMeasuredHeight=2,27 measurement:mMeasuredWidth=1,6 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,3 padding:mPaddingLeft=1,3 padding:mPaddingRight=1,3 padding:mPaddingTop=1,3 drawing:mLayerType=4,NONE mID=20,id/header_debug_info mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130695120 layout:mRight=3,527 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,45 layout:mTop=2,18 padding:mUserPaddingBottom=1,3 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,3 padding:mUserPaddingRight=1,3 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653188 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,19 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,27 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=15,CENTER_VERTICAL layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=9,INVISIBLE layout:getWidth()=1,6 drawing:getX()=5,521.0 drawing:getY()=4,18.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     android.widget.ImageView@b50ac150 layout:getBaseline()=2,-1 layout:mLeft=3,527 measurement:mMeasuredHeight=2,67 measurement:mMeasuredWidth=2,67 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=19,id/clear_all_button mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130704336 layout:mRight=3,594 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,66 layout:mTop=2,-1 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402800676 drawing:getAlpha()=3,0.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=24,Clear all notifications. getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,67 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,67 layout:layout_width=2,67 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=9,INVISIBLE layout:getWidth()=2,67 drawing:getX()=5,527.0 drawing:getY()=4,-1.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=5,false focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=4,true drawing:willNotDraw()=5,false
+     android.widget.FrameLayout@b5034b58 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=25,id/settings_button_holder mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130701152 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653320 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=2,16 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,67 layout:layout_width=2,67 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.ImageView@b5023fd8 layout:getBaseline()=2,-1 layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=18,id/settings_button mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=11,-2130702336 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402800640 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=15,Quick settings. getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,67 layout:layout_width=2,67 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=4,true drawing:willNotDraw()=5,false
+      android.widget.ImageView@b506fb28 layout:getBaseline()=2,-1 layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=22,id/notification_button mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130702304 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402784264 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=14,Notifications. getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,67 layout:layout_width=2,67 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=4,true drawing:willNotDraw()=5,false
+    android.widget.TextView@b50993f8 text:mText=0, getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,16.0 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,5 padding:mPaddingLeft=1,5 padding:mPaddingRight=1,5 padding:mPaddingTop=1,5 drawing:mLayerType=4,NONE mID=23,id/emergency_calls_only mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130701280 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,5 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,5 padding:mUserPaddingRight=1,5 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402669576 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    android.widget.FrameLayout@b50351b0 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=3,277 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128593776 layout:mRight=3,594 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,64 layout:mTop=2,64 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,594 drawing:getX()=3,0.0 drawing:getY()=4,64.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     android.view.ViewStub@b5008050 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=21,id/flip_settings_stub mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2147478368 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=1,0 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=1,0 mViewFlags=3,136 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=3,LTR text:getRawTextAlignment()=7,INHERIT text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=5,false isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=5,false drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     android.widget.ScrollView@b5006bf0 layout:mFillViewport=5,false drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2375763 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=23,FOCUS_AFTER_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=3,277 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=9,id/scroll mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2127021040 layout:mRight=3,594 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=7,9043968 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653185 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,594 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+      com.android.systemui.statusbar.policy.NotificationRowLayout@b5005d98 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,1 measurement:mTotalLength=1,0 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=3,277 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=14,id/latestItems mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128593776 layout:mRight=3,594 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,93 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,93 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,594 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+       android.widget.FrameLayout@b6252e48 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=11,-2130701184 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402686080 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,93 layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=7,android text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=4,true isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+        android.view.View@b6253288 layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=11,id/top_glow mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128604128 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653188 drawing:getAlpha()=3,0.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=1,4 layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=9,INVISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+        android.widget.Button@b61f8758 text:mText=0, getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,24.0 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=2,64 measurement:mMinWidth=2,85 padding:mPaddingBottom=1,0 padding:mPaddingLeft=2,11 padding:mPaddingRight=2,11 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=7,id/veto mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130702304 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=2,11 padding:mUserPaddingRight=2,11 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402669577 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=19,Clear notification. getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=2,no accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=4,-106 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=2,64 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+        com.android.systemui.statusbar.LatestItemView@b61f8ca8 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2506835 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=23,FOCUS_BLOCK_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=10,id/content mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=11,-2130701184 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402669697 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,4 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,4 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+         com.android.internal.widget.SizeAdaptiveLayout@b61f9138 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=11,id/adaptive mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=11,-2130701184 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+          android.view.View@b61f9480 bg_state_mUseColor=9,-16777216 layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2120215520 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653192 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_maxHeight=2,-1 layout:layout_minHeight=2,-1 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+          android.widget.FrameLayout@b61e3008 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=34,id/status_bar_latest_event_content mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2120216288 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653320 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_maxHeight=2,85 layout:layout_minHeight=2,85 layout:layout_height=2,85 layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+           android.widget.ImageView@b61e3748 layout:getBaseline()=2,-1 bg_state_mUseColor=9,859026917 layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=7,id/icon mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=11,-2130701312 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402784256 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,85 layout:layout_width=2,85 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=4,true drawing:willNotDraw()=5,false
+           android.widget.LinearLayout@b61e3c48 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,1 measurement:mTotalLength=1,0 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags_PADDING_NOT_NULL=4,0x20 mGroupFlags=7,2244723 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=2,85 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,3 padding:mPaddingLeft=1,0 padding:mPaddingRight=2,11 padding:mPaddingTop=1,3 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=11,-2130701184 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,3 padding:mUserPaddingEnd=2,11 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=2,11 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=2,85 layout:layout_rightMargin=1,0 layout:layout_startMargin=2,85 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+            android.widget.LinearLayout@b61e3fe0 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=1,0 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags_PADDING_NOT_NULL=4,0x20 mGroupFlags=7,2244723 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,8 drawing:mLayerType=4,NONE mID=8,id/line1 mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=11,-2130701184 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=2,11 layout:layout_rightMargin=1,0 layout:layout_startMargin=2,11 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+             android.widget.TextView@b61e4490 text:mText=19,Choose input method getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,24.0 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=8,id/title mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128604160 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402657280 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,1.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+             android.view.ViewStub@b61e57d8 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=7,id/time mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2147478368 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=1,0 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=1,0 mViewFlags=3,136 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=6,CENTER layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=3,LTR text:getRawTextAlignment()=7,INHERIT text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=5,false isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=5,false drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+             android.view.ViewStub@b61e5a18 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=14,id/chronometer mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2147478368 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=1,0 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=1,0 mViewFlags=3,136 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=6,CENTER layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=3,LTR text:getRawTextAlignment()=7,INHERIT text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=5,false isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=5,false drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+            android.widget.TextView@b61e5c58 text:mText=0, getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,16.0 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=8,id/text2 mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130701280 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402657288 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=2,-2 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=2,11 layout:layout_rightMargin=1,0 layout:layout_startMargin=2,11 layout:layout_topMargin=2,-2 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+            android.widget.ProgressBar@b61e63e8 progress:getMax()=3,100 progress:getProgress()=1,0 progress:getSecondaryProgress()=1,0 progress:isIndeterminate()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=2,21 measurement:mMinWidth=2,64 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=11,id/progress mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130702304 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653192 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=2,11 layout:layout_rightMargin=1,0 layout:layout_startMargin=2,11 layout:layout_topMargin=1,0 layout:layout_height=2,16 layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+            android.widget.LinearLayout@b624d1b8 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388627 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,0 measurement:mTotalLength=1,0 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=8,id/line3 mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=11,-2130701184 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=4,NONE layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=2,11 layout:layout_rightMargin=1,0 layout:layout_startMargin=2,11 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+             android.widget.TextView@b624d558 text:mText=38,English (US) - Android keyboard (AOSP) getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,19.0 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=7,id/text mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128604160 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402657280 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=6,CENTER layout:layout_weight=3,1.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=1,0 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+             android.widget.TextView@b624dbd0 text:mText=0, getEllipsize()=3,END text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,16.0 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=2,11 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=7,id/info mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=11,-2130701312 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=2,11 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=2,11 mViewFlags=9,402653184 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=6,CENTER layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+             android.widget.ImageView@b624e080 layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=13,id/right_icon mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130701280 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653192 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=6,CENTER layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=2,11 layout:layout_rightMargin=1,0 layout:layout_startMargin=2,11 layout:layout_topMargin=1,0 layout:layout_height=2,21 layout:layout_width=2,21 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+        android.view.View@b61fa1b8 layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=14,id/bottom_glow mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128604128 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653188 drawing:getAlpha()=3,0.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=1,4 layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=9,INVISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+        android.widget.TextView@b61fa530 text:mText=0, getEllipsize()=4,null text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,12.0 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,3 padding:mPaddingLeft=1,3 padding:mPaddingRight=1,3 padding:mPaddingTop=1,3 drawing:mLayerType=4,NONE mID=13,id/debug_info mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130701280 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,3 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,3 padding:mUserPaddingRight=1,3 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653188 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=9,INVISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+  com.android.systemui.statusbar.phone.SettingsPanelView@b506aff8 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags_PADDING_NOT_NULL=4,0x20 mGroupFlags=7,2244723 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false layout:mLeft=3,143 measurement:mMeasuredHeight=11,-2147483648 measurement:mMeasuredWidth=10,1073741822 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=2,21 padding:mPaddingLeft=2,21 padding:mPaddingRight=2,21 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=17,id/settings_panel mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128593616 layout:mRight=3,779 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=2,21 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=2,21 padding:mUserPaddingRight=2,21 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653352 drawing:getAlpha()=3,0.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=15,Quick settings. getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=2,21 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=3,636 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=3,636 drawing:getX()=5,143.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=5,false focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+   com.android.systemui.statusbar.phone.QuickSettingsScrollView@b5007d38 layout:mFillViewport=5,false drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2375763 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=23,FOCUS_AFTER_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=2,21 measurement:mMeasuredHeight=3,505 measurement:mMeasuredWidth=2,43 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2127021040 layout:mRight=3,615 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653697 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=2,43 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,594 drawing:getX()=4,21.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=4,true isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+    com.android.systemui.statusbar.phone.QuickSettingsContainerView@b50075c8 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=3,505 measurement:mMeasuredWidth=2,43 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=27,id/quick_settings_container mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128593776 layout:mRight=3,594 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=7,1572864 layout:mBottom=3,505 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,505 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,594 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+     com.android.systemui.statusbar.phone.QuickSettingsTileView@b5119340 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false layout:mLeft=1,0 measurement:mMeasuredHeight=3,165 measurement:mMeasuredWidth=2,11 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2120210160 layout:mRight=3,195 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=3,165 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402669696 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=11,User Owner. getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,165 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=3,165 layout:layout_width=2,11 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,195 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.FrameLayout@b512b5c8 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=3,165 measurement:mMeasuredWidth=2,11 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128597872 layout:mRight=3,195 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=3,165 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,165 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,195 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+       android.widget.ImageView@b512ba10 layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=3,165 measurement:mMeasuredWidth=2,11 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=17,id/user_imageview mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128598000 layout:mRight=3,195 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=3,165 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653184 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,165 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,MATCH_PARENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,195 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+       android.widget.TextView@b509c250 text:mText=5,Owner getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,16.0 bg_state_mUseColor=10,-872415232 layout:mLeft=1,0 measurement:mMeasuredHeight=2,25 measurement:mMeasuredWidth=2,11 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,3 padding:mPaddingLeft=1,8 padding:mPaddingRight=1,8 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=16,id/user_textview mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128599024 layout:mRight=3,195 scrolling:mScrollX=6,524199 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=3,165 layout:mTop=3,140 padding:mUserPaddingBottom=1,3 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,8 padding:mUserPaddingRight=1,8 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402657280 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,17 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,25 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,195 drawing:getX()=3,0.0 drawing:getY()=5,140.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     com.android.systemui.statusbar.phone.QuickSettingsTileView@b50ae1f0 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false layout:mLeft=3,200 measurement:mMeasuredHeight=3,165 measurement:mMeasuredWidth=2,11 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2120206064 layout:mRight=3,395 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=3,165 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402669696 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,165 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=3,165 layout:layout_width=2,11 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,195 drawing:getX()=5,200.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@b509a950 text:mText=10,Brightness getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,16.0 bg_=4,null layout:mLeft=2,41 measurement:mMeasuredHeight=2,84 measurement:mMeasuredWidth=2,11 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,3 padding:mPaddingLeft=1,8 padding:mPaddingRight=1,8 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=22,id/brightness_textview mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128594928 layout:mRight=3,154 scrolling:mScrollX=6,524240 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=3,124 layout:mTop=2,40 padding:mUserPaddingBottom=1,3 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,8 padding:mUserPaddingRight=1,8 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402657280 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,84 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,113 drawing:getX()=4,41.0 drawing:getY()=4,40.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     com.android.systemui.statusbar.phone.QuickSettingsTileView@b509c5e8 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false layout:mLeft=3,400 measurement:mMeasuredHeight=3,165 measurement:mMeasuredWidth=2,11 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2120206064 layout:mRight=3,595 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=3,165 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402669696 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,165 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=3,165 layout:layout_width=2,11 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,195 drawing:getX()=5,400.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@b5091158 text:mText=8,Settings getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,16.0 bg_=4,null layout:mLeft=2,51 measurement:mMeasuredHeight=2,84 measurement:mMeasuredWidth=2,11 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,3 padding:mPaddingLeft=1,8 padding:mPaddingRight=1,8 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=20,id/settings_tileview mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128594928 layout:mRight=3,143 scrolling:mScrollX=6,524250 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=3,124 layout:mTop=2,40 padding:mUserPaddingBottom=1,3 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,8 padding:mUserPaddingRight=1,8 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402657280 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,84 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=2,92 drawing:getX()=4,51.0 drawing:getY()=4,40.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     com.android.systemui.statusbar.phone.QuickSettingsTileView@b50bcfa8 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false layout:mLeft=1,0 measurement:mMeasuredHeight=3,165 measurement:mMeasuredWidth=2,11 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2120210160 layout:mRight=3,195 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=3,335 layout:mTop=3,170 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402669696 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=11,Wifi off..  getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,165 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=3,165 layout:layout_width=2,11 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,195 drawing:getX()=3,0.0 drawing:getY()=5,170.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@b50cb510 text:mText=9,Wi-Fi Off getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,16.0 bg_=4,null layout:mLeft=2,53 measurement:mMeasuredHeight=2,84 measurement:mMeasuredWidth=2,11 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,3 padding:mPaddingLeft=1,8 padding:mPaddingRight=1,8 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=16,id/wifi_textview mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128599024 layout:mRight=3,142 scrolling:mScrollX=6,524252 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=3,124 layout:mTop=2,40 padding:mUserPaddingBottom=1,3 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,8 padding:mUserPaddingRight=1,8 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402657280 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,76 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,84 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=2,89 drawing:getX()=4,53.0 drawing:getY()=4,40.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     com.android.systemui.statusbar.phone.QuickSettingsTileView@b50a1250 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false layout:mLeft=3,200 measurement:mMeasuredHeight=3,165 measurement:mMeasuredWidth=2,11 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2120206064 layout:mRight=3,395 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=3,335 layout:mTop=3,170 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402669696 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,165 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=3,165 layout:layout_width=2,11 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,195 drawing:getX()=5,200.0 drawing:getY()=5,170.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@b50cb7b0 text:mText=11,Auto Rotate getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,16.0 bg_=4,null layout:mLeft=2,37 measurement:mMeasuredHeight=2,84 measurement:mMeasuredWidth=2,11 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,3 padding:mPaddingLeft=1,8 padding:mPaddingRight=1,8 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=25,id/rotation_lock_textview mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128594928 layout:mRight=3,157 scrolling:mScrollX=6,524236 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=3,124 layout:mTop=2,40 padding:mUserPaddingBottom=1,3 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,8 padding:mUserPaddingRight=1,8 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402657280 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,84 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,120 drawing:getX()=4,37.0 drawing:getY()=4,40.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     com.android.systemui.statusbar.phone.QuickSettingsTileView@b50a06b8 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false layout:mLeft=3,400 measurement:mMeasuredHeight=3,165 measurement:mMeasuredWidth=8,16777227 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2120206064 layout:mRight=3,595 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=3,335 layout:mTop=3,170 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402669696 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=22,Battery Charging, 50%. getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,165 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=3,165 layout:layout_width=2,11 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,195 drawing:getX()=5,400.0 drawing:getY()=5,170.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.LinearLayout@b509f5f0 measurement:mBaselineChildTop=1,0 measurement:mGravity_NONE=3,0x0 measurement:mGravity_TOP=4,0x30 measurement:mGravity_LEFT=3,0x3 measurement:mGravity_START=8,0x800003 measurement:mGravity_CENTER_VERTICAL=4,0x10 measurement:mGravity_CENTER_HORIZONTAL=3,0x1 measurement:mGravity_CENTER=4,0x11 measurement:mGravity_RELATIVE=8,0x800000 measurement:mGravity=7,8388659 layout:mBaselineAlignedChildIndex=2,-1 layout:mBaselineAligned=4,true measurement:mOrientation=1,1 measurement:mTotalLength=2,81 layout:mUseLargestChild=5,false layout:mWeightSum=4,-1.0 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false bg_=4,null layout:mLeft=2,31 measurement:mMeasuredHeight=2,81 measurement:mMeasuredWidth=8,16777227 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128593776 layout:mRight=3,163 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=3,123 layout:mTop=2,42 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653312 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,81 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,132 drawing:getX()=4,31.0 drawing:getY()=4,42.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+       android.widget.ImageView@b509ed78 layout:getBaseline()=2,-1 bg_=4,null layout:mLeft=2,44 measurement:mMeasuredHeight=2,56 measurement:mMeasuredWidth=8,16777227 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=2,13 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=16,id/battery_image mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128598000 layout:mRight=2,87 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,56 layout:mTop=1,0 padding:mUserPaddingBottom=2,13 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653184 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,56 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=6,CENTER layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=2,43 drawing:getX()=4,44.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+       android.widget.TextView@b50d3720 text:mText=13,Charging, 50% getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,16.0 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=2,25 measurement:mMeasuredWidth=2,11 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,3 padding:mPaddingLeft=1,8 padding:mPaddingRight=1,8 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=19,id/battery_textview mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128594928 layout:mRight=3,132 scrolling:mScrollX=6,524230 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,81 layout:mTop=2,56 padding:mUserPaddingBottom=1,3 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,8 padding:mUserPaddingRight=1,8 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402657280 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,25 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_gravity=6,CENTER layout:layout_weight=3,0.0 layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,132 drawing:getX()=3,0.0 drawing:getY()=4,56.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     com.android.systemui.statusbar.phone.QuickSettingsTileView@b509f938 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false layout:mLeft=1,0 measurement:mMeasuredHeight=3,165 measurement:mMeasuredWidth=2,11 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2120210160 layout:mRight=3,195 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=3,505 layout:mTop=3,340 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402669696 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=19,Airplane Mode Off.. getFilterTouchesWhenObscured()=5,false layout:getHeight()=3,165 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=3,165 layout:layout_width=2,11 drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,195 drawing:getX()=3,0.0 drawing:getY()=5,340.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@b50d39c0 text:mText=13,Airplane mode getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,16.0 bg_=4,null layout:mLeft=2,28 measurement:mMeasuredHeight=2,84 measurement:mMeasuredWidth=2,11 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,3 padding:mPaddingLeft=1,8 padding:mPaddingRight=1,8 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=25,id/airplane_mode_textview mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2128599024 layout:mRight=3,167 scrolling:mScrollX=6,524227 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=3,124 layout:mTop=2,40 padding:mUserPaddingBottom=1,3 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,8 padding:mUserPaddingRight=1,8 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402657280 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,76 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,84 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=3,139 drawing:getX()=4,28.0 drawing:getY()=4,40.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     com.android.systemui.statusbar.phone.QuickSettingsTileView@b509ffb0 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2120216288 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402669704 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=15,Alarm set for . getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=3,165 layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@b50e5da8 text:mText=0, getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,16.0 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,3 padding:mPaddingLeft=1,8 padding:mPaddingRight=1,8 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=17,id/alarm_textview mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=11,-2130702336 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,3 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,8 padding:mUserPaddingRight=1,8 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402657280 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     com.android.systemui.statusbar.phone.QuickSettingsTileView@b50a09a8 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2120216288 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402669704 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=3,165 layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@b50e6048 text:mText=0, getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,16.0 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,3 padding:mPaddingLeft=1,8 padding:mPaddingRight=1,8 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=20,id/location_textview mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=11,-2130702336 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,3 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,8 padding:mUserPaddingRight=1,8 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402657280 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     com.android.systemui.statusbar.phone.QuickSettingsTileView@b509fc70 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2120216288 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402669704 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=3,165 layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@b50f7730 text:mText=16,Wireless Display getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,16.0 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,3 padding:mPaddingLeft=1,8 padding:mPaddingRight=1,8 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=24,id/wifi_display_textview mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=11,-2130702336 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,3 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,8 padding:mUserPaddingRight=1,8 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402657280 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+     com.android.systemui.statusbar.phone.QuickSettingsTileView@b50a0328 drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 padding:mForegroundPaddingLeft=1,0 padding:mForegroundPaddingRight=1,0 padding:mForegroundPaddingTop=1,0 drawing:mForegroundInPadding=4,true measurement:mMeasureAllChildren=5,false drawing:mForegroundGravity=3,119 events:mLastTouchDownX=3,0.0 events:mLastTouchDownTime=1,0 events:mLastTouchDownY=3,0.0 events:mLastTouchDownIndex=2,-1 mGroupFlags_CLIP_CHILDREN=3,0x1 mGroupFlags_CLIP_TO_PADDING=3,0x2 mGroupFlags=7,2244691 layout:mChildCountWithTransientState=1,0 focus:getDescendantFocusability()=24,FOCUS_BEFORE_DESCENDANTS drawing:getPersistentDrawingCache()=9,SCROLLING drawing:isAlwaysDrawnWithCacheEnabled()=4,true isAnimationCacheEnabled()=4,true drawing:isChildrenDrawingOrderEnabled()=5,false drawing:isChildrenDrawnWithCacheEnabled()=5,false layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags_DIRTY=8,0x200000 mPrivateFlags=11,-2120216288 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402669704 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=3,165 layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=4,GONE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=4,true drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=4,true isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=4,true
+      android.widget.TextView@b50f79d0 text:mText=15,Take bug report getEllipsize()=7,MARQUEE text:getSelectionEnd()=2,-1 text:getSelectionStart()=2,-1 text:getTextSize()=4,16.0 bg_=4,null layout:mLeft=1,0 measurement:mMeasuredHeight=1,0 measurement:mMeasuredWidth=1,0 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,3 padding:mPaddingLeft=1,8 padding:mPaddingRight=1,8 padding:mPaddingTop=1,0 drawing:mLayerType=4,NONE mID=5,NO_ID mPrivateFlags_FORCE_LAYOUT=6,0x1000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_NOT_DRAWN=3,0x0 mPrivateFlags=11,-2130702336 layout:mRight=1,0 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=1,0 layout:mTop=1,0 padding:mUserPaddingBottom=1,3 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,8 padding:mUserPaddingRight=1,8 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402657280 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=1,0 accessibility:getImportantForAccessibility()=3,yes accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=12,WRAP_CONTENT layout:layout_width=12,WRAP_CONTENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=7,VISIBLE layout:getWidth()=1,0 drawing:getX()=3,0.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+   android.view.View@b506f8f0 layout:mLeft=2,21 measurement:mMeasuredHeight=2,48 measurement:mMeasuredWidth=2,43 measurement:mMinHeight=1,0 measurement:mMinWidth=1,0 padding:mPaddingBottom=1,0 padding:mPaddingLeft=1,0 padding:mPaddingRight=1,0 padding:mPaddingTop=1,5 drawing:mLayerType=4,NONE mID=9,id/handle mPrivateFlags_LAYOUT_REQUIRED=6,0x2000 mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0 mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=11,-2130696144 layout:mRight=3,615 scrolling:mScrollX=1,0 scrolling:mScrollY=1,0 mSystemUiVisibility_SYSTEM_UI_FLAG_VISIBLE=3,0x0 mSystemUiVisibility=1,0 layout:mBottom=2,48 layout:mTop=1,0 padding:mUserPaddingBottom=1,0 padding:mUserPaddingEnd=11,-2147483648 padding:mUserPaddingLeft=1,0 padding:mUserPaddingRight=1,0 padding:mUserPaddingStart=11,-2147483648 mViewFlags=9,402653188 drawing:getAlpha()=3,1.0 layout:getBaseline()=2,-1 accessibility:getContentDescription()=4,null getFilterTouchesWhenObscured()=5,false layout:getHeight()=2,48 accessibility:getImportantForAccessibility()=4,auto accessibility:getLabelFor()=2,-1 layout:getLayoutDirection()=22,RESOLVED_DIRECTION_LTR layout:layout_bottomMargin=1,0 layout:layout_endMargin=11,-2147483648 layout:layout_leftMargin=1,0 layout:layout_rightMargin=1,0 layout:layout_startMargin=11,-2147483648 layout:layout_topMargin=1,0 layout:layout_height=2,48 layout:layout_width=12,MATCH_PARENT drawing:getPivotX()=3,0.0 drawing:getPivotY()=3,0.0 layout:getRawLayoutDirection()=7,INHERIT text:getRawTextAlignment()=7,GRAVITY text:getRawTextDirection()=7,INHERIT drawing:getRotation()=3,0.0 drawing:getRotationX()=3,0.0 drawing:getRotationY()=3,0.0 drawing:getScaleX()=3,1.0 drawing:getScaleY()=3,1.0 getScrollBarStyle()=14,INSIDE_OVERLAY drawing:getSolidColor()=1,0 getTag()=4,null text:getTextAlignment()=7,GRAVITY drawing:getTranslationX()=3,0.0 drawing:getTranslationY()=3,0.0 getVisibility()=9,INVISIBLE layout:getWidth()=3,594 drawing:getX()=4,21.0 drawing:getY()=3,0.0 focus:hasFocus()=5,false layout:hasTransientState()=5,false isActivated()=5,false isClickable()=5,false drawing:isDrawingCacheEnabled()=5,false isEnabled()=4,true focus:isFocusable()=5,false isFocusableInTouchMode()=5,false focus:isFocused()=5,false isHapticFeedbackEnabled()=4,true isHovered()=5,false isInTouchMode()=4,true layout:isLayoutRtl()=5,false drawing:isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true drawing:willNotCacheDrawing()=5,false drawing:willNotDraw()=5,false
+DONE.
+DONE
+'''
+
+RUNNING = 1
+STOPPED = 0
+
+class MockDevice(object):
+    '''
+    Mocks an Android device
+    '''
+
+
+    def __init__(self, serialno="MOCK12345678", version=15, startviewserver=False, uiautomatorkilled=False, language='en'):
+        '''
+        Constructor
+        '''
+
+        self.serialno = serialno
+        self.version = version
+        self.service = STOPPED
+        self.viewServer = "WHAT?"
+        if startviewserver:
+            if DEBUG:
+                print >> sys.stderr, "\n**** Starting ViewServer... ****", self
+            self.viewServer = MockViewServer()
+        else:
+            self.viewServer = None
+        self.uiAutomatorKilled = uiautomatorkilled
+        self.language = language
+        self.uiAutomatorDump = {}
+        self.uiAutomatorDump['en'] = UIAUTOMATOR_DUMP
+        # FIXME: MockDevice could not be API17
+        self.uiAutomatorDump['zh'] = UIAUTOMATOR_DUMP_API17_CHINESE
+
+#     def __del__(self):
+#         self.shutdownMockViewServer()
+
+    def shell(self, cmd):
+        if cmd == 'service call window 3':
+            return FALSE_PARCEL
+        elif re.compile('service call window 1 i32 \d+').match(cmd):
+            self.service = RUNNING
+            return TRUE_PARCEL
+        elif re.compile('service call window 2').match(cmd):
+            self.service = STOPPED
+            return TRUE_PARCEL
+        elif cmd == 'dumpsys window':
+            return DUMPSYS_WINDOW_PARTIAL
+        elif cmd == 'dumpsys window windows':
+            return DUMPSYS_WINDOW_WINDOWS
+
+        m = re.match('uiautomator dump +(\S+)', cmd)
+        if m:
+            if self.version >= 16:
+                # it was simulating a dump to sdcard before
+                #return 'dumped %s' % m.group(1)
+                if not self.uiAutomatorKilled:
+                    return self.uiAutomatorDump[self.language]
+                else:
+                    return self.uiAutomatorDump[self.language] + "Killed\r\n"
+            else:
+                return "uiautomator: command not found"
+
+        m = re.match('cat (\S+) .*', cmd)
+        if m:
+            return self.uiAutomatorDump[self.language]
+
+    def getProperty(self, property):
+        if property == 'ro.serialno':
+            return self.serialno
+        elif property == 'build.version.sdk' or property == 'ro.build.version.sdk':
+            return self.version
+        elif property == 'display.width':
+            return 768
+        elif property == 'display.height':
+            return 1184
+        return None
+
+    def shutdownMockViewServer(self):
+        if DEBUG:
+            print >> sys.stderr, "MockDevice.shutdownMockViewServer()", self,
+            try:
+                print >> sys.stderr, "viewServer=", self.viewServer
+            except:
+                print >> sys.stderr, "NO VIEWSERVER !!!!", dir(self)
+        if self.viewServer:
+            if DEBUG:
+                print >> sys.stderr, "    shutdownMockViewServer: shutting down ViewServer"
+            self.viewServer.shutdown()
+            #del(self.viewServer)
+
+import sys
+import time
+import select
+#from select import cpython_compatible_select as select
+import threading
+import socket
+import SocketServer
+
+
+class MockViewServer():
+    HOST, PORT = "localhost", 4939
+
+    class MockViewServerHandler(SocketServer.BaseRequestHandler):
+        def handle(self):
+            if DEBUG:
+                print >>sys.stderr, "MockViewServerHandler: handling request (self=%s)" % self
+            # self.request is the TCP socket connected to the client
+            self.data = self.request.recv(1024).strip()
+            if DEBUG:
+                print >>sys.stderr, "MockViewServerHandler: data='%s'" % self.data
+            if self.data == 'SHUTDOWN':
+                self.running = False
+                return
+            elif self.data.lower() == 'dump -1':
+                self.request.sendall(DUMP)
+            elif self.data.lower() == 'list':
+                self.request.sendall(LIST)
+            elif self.data.lower() == 'dump b52f7c88':
+                self.request.sendall(DUMP_STATUSBAR)
+            else:
+                raise Exception("MockViewServerHandler: unknown command '%s'" % self.data)
+            #print "{} wrote:".format(self.client_address[0])
+
+    class ServerThread(threading.Thread):
+        def __init__(self, server):
+            super(MockViewServer.ServerThread, self).__init__()
+            self.server = server
+            self.running = True
+            self.pollInterval = 1
+
+        def run(self):
+            if DEBUG:
+                print >> sys.stderr, "ServerThread: serving running=", self.running
+            # In 2.5 serve_forever() never exits and there's no way of stopping the server
+            #self.server.serve_forever(self.pollInterval)
+            while self.running:
+                if DEBUG:
+                    print >> sys.stderr, "ServerThread: polling (self=%s)" % self
+                r, w, e = select.select([self.server], [], [], self.pollInterval)
+                if r:
+                    if self.server:
+                        try:
+                            self.server.handle_request()
+                        except:
+                            print >> sys.stderr, "ServerThread: the socket may have been closed"
+
+
+    def __init__(self, host=HOST, port=PORT):
+        # Create the server, binding to localhost on port
+        if DEBUG:
+            print >>sys.stderr, "MockViewServer: starting server on host=%s port=%s" % (host, port)
+        self.server = SocketServer.TCPServer((host, port), MockViewServer.MockViewServerHandler)
+        self.server.socket.setblocking(0)
+        self.host = host
+        self.port = port
+        # In 2.5 serve_forever() never exits and there's no way of stopping the server
+        #self.server.serve_forever(1)
+        #print >> sys.stderr, "MockViewServer: NEVER REACHED on Linux"
+        # Activate the server; this will keep running until you shutdown
+        self.serverThread = MockViewServer.ServerThread(self.server)
+        self.serverThread.start()
+
+    def shutdown(self):
+        if DEBUG:
+            print >> sys.stderr, "**** MockViewServer.shutdown() ****"
+        try:
+            self.server.socket.shutdown(socket.SHUT_RDWR)
+            #if DEBUG:
+            #    print >> sys.stderr, "    shutdown: shutting down the server, serve_forever() should exit"
+            #self.server.shutdown()
+            if DEBUG:
+                print >> sys.stderr, "    shutdown: DONE"
+        except Exception, ex:
+            print >> sys.stderr, "ERROR", ex
+            pass
+        self.serverThread.running = False
+        #self.server.socket.shutdown(socket.SHUT_RDWR)
+        self.server.socket.close()
+#        del(self.server.socket)
+        #del(self.server)
+        time.sleep(120)
+        time.sleep(5)
+
diff --git a/AndroidViewClient/tests/com/dtmilano/android/uiautomator/__init__.py b/AndroidViewClient/tests/com/dtmilano/android/uiautomator/__init__.py
new file mode 100755
index 0000000..d9b1a4e
--- /dev/null
+++ b/AndroidViewClient/tests/com/dtmilano/android/uiautomator/__init__.py
@@ -0,0 +1 @@
+__author__ = 'diego'
diff --git a/AndroidViewClient/tests/com/dtmilano/android/uiautomator/uiautomatorhelpertests.py b/AndroidViewClient/tests/com/dtmilano/android/uiautomator/uiautomatorhelpertests.py
new file mode 100755
index 0000000..207ef3f
--- /dev/null
+++ b/AndroidViewClient/tests/com/dtmilano/android/uiautomator/uiautomatorhelpertests.py
@@ -0,0 +1,81 @@
+#! /usr/bin/env python
+from PIL import Image
+import random
+import sys
+import os
+import time
+import cStringIO
+
+try:
+    sys.path.insert(0, os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+
+from com.dtmilano.android.viewclient import ViewClient
+from com.dtmilano.android.uiautomator.uiautomatorhelper import UiAutomatorHelper
+
+__author__ = 'diego'
+
+import unittest
+
+
+DEBUG = False
+
+class UiAutomatorHelperTests(unittest.TestCase):
+    def setUp(self):
+        if DEBUG:
+            print >> sys.stderr, "@@@ UiAutomatorHelperTests.setUp"
+        (self.device, self.serialno) = ViewClient.connectToDeviceOrExit(serialno='.*')
+        self.assertIsNotNone(self.device)
+        self.uiAutomatorHelper = UiAutomatorHelper(self.device)
+
+    def tearDown(self):
+        if DEBUG:
+            print >> sys.stderr, "@@@ UiAutomatorHelperTests.tearDown"
+        self.uiAutomatorHelper.quit()
+
+    def testDumpWindowHierarchy(self):
+        dump = self.uiAutomatorHelper.dumpWindowHierarchy()
+        self.assertIsNotNone(dump)
+
+    def testDumpWindowHierarchy_repeat(self):
+        for _ in range(10):
+            dump = self.uiAutomatorHelper.dumpWindowHierarchy()
+            self.assertIsNotNone(dump)
+
+    def testPressKeyCode(self):
+        response = self.uiAutomatorHelper.pressKeyCode(4)
+        '''4 is KEYCODE_BACK'''
+        if DEBUG:
+            print >> sys.stderr, "response=", response
+
+    def testTakeScreenshot(self):
+        buf = self.uiAutomatorHelper.takeScreenshot()
+        self.assertIsNotNone(buf)
+        self.assertTrue(len(buf) > 0)
+        image = Image.open(cStringIO.StringIO(buf))
+        self.assertIsNotNone(image)
+        self.assertEqual(image.format, 'PNG')
+
+    def testClick_random(self):
+        x = random.randint(0, 1000)
+        y = random.randint(0, 1000)
+        response = self.uiAutomatorHelper.click(x=x, y=y)
+        if DEBUG:
+            print >> sys.stderr, "response=", response
+
+    def testSwipe_random(self):
+        x0 = random.randint(0, 1000)
+        y0 = random.randint(0, 1000)
+        x1 = random.randint(0, 1000)
+        y1 = random.randint(0, 1000)
+        steps = random.randint(10, 100)
+        response = self.uiAutomatorHelper.swipe(startX=x0, startY=y0, endX=x1, endY=y1, steps=steps)
+        if DEBUG:
+            print >> sys.stderr, "response=", response
+
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/AndroidViewClient/tests/com/dtmilano/android/viewclient-with-real-devices-connected.py b/AndroidViewClient/tests/com/dtmilano/android/viewclient-with-real-devices-connected.py
new file mode 100755
index 0000000..eef6d6f
--- /dev/null
+++ b/AndroidViewClient/tests/com/dtmilano/android/viewclient-with-real-devices-connected.py
@@ -0,0 +1,98 @@
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Feb 5, 2012
+
+@author: diego
+'''
+
+import sys
+import os
+import unittest
+
+# PyDev sets PYTHONPATH, use it
+for p in os.environ['PYTHONPATH'].split(':'):
+    if not p in sys.path:
+        sys.path.append(p)
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import View, TextView, EditText, ViewClient
+
+
+
+class ViewClientTest(unittest.TestCase):
+
+    serialno1 = 'emulator-5554'
+    device1 = None
+    serialno2 = 'emulator-5556'
+    device2 = None
+
+    @classmethod
+    def setUpClass(cls):
+        '''
+        Set ups the class.
+
+        The preconditions to run this test is to have at least 2 emulators running:
+           - emulator-5554
+           - emulator-5556
+        '''
+        sys.argv = ['testViewClient_localPort_remotePort', serialno1]
+        cls.device1, cls.serialno1 = ViewClient.connectToDeviceOrExit(timeout=30)
+
+        sys.argv = ['testViewClient_localPort_remotePort', serialno2]
+        cls.device2, cls.serialno2 = ViewClient.connectToDeviceOrExit(timeout=30)
+
+    def setUp(self):
+        pass
+
+    def tearDown(self):
+        pass
+
+    @classmethod
+    def tearDownClass(cls):
+        pass
+
+    def testConnectToDeviceOrExit_none(self):
+        sys.argv = [ 'VIEWCLIENT']
+        device, serialno = ViewClient.connectToDeviceOrExit()
+        self.assertNotEquals(None, device)
+        self.assertNotEquals(None, serialno)
+
+    def testConnectToDeviceOrExit_emulator_5556(self):
+        sys.argv = [ 'VIEWCLIENT', 'emulator-5556']
+        device, serialno = ViewClient.connectToDeviceOrExit()
+        self.assertNotEquals(None, device)
+        self.assertNotEquals(None, serialno)
+
+#    @unittest.skip("until multiple devices could be connected")
+#    def testViewClient_localPort_remotePort(self):
+#        serialno = 'emulator-5554'
+#        sys.argv = ['testViewClient_localPort_remotePort', serialno]
+#        device, serialno = ViewClient.connectToDeviceOrExit(timeout=30)
+#        localPort = 9005
+#        remotePort = 9006
+#        vc = ViewClient(device=device, serialno=serialno, localport=localPort, remoteport=remotePort, autodump=True)
+#        self.assertTrue(vc.getRoot() != None)
+
+    def testViewClient_oneDevice_TwoViewClients(self):
+        localPort1 = 9005
+        remotePort1 = 9006
+        print "Conencting to", remotePort1
+        vc1 = ViewClient(device=ViewClientTest.device1, serialno=ViewClientTest.serialno1,
+                         localport=localPort1, remoteport=remotePort1, autodump=True)
+        self.assertTrue(vc1.getRoot() != None)
+        vc1.traverse()
+
+        localPort2 = 9007
+        remotePort2 = 9008
+        print "Conencting to", remotePort2
+        vc2 = ViewClient(device=ViewClientTest.device2, serialno=ViewClientTest.serialno2,
+                         localport=localPort2, remoteport=remotePort2, autodump=True)
+        self.assertTrue(vc2.getRoot() != None)
+        vc2.traverse()
+
+if __name__ == "__main__":
+    #import sys;sys.argv = ['', 'Test.testName']
+    unittest.main()
diff --git a/AndroidViewClient/tests/com/dtmilano/android/viewclientconnected.py b/AndroidViewClient/tests/com/dtmilano/android/viewclientconnected.py
new file mode 100755
index 0000000..fbd2025
--- /dev/null
+++ b/AndroidViewClient/tests/com/dtmilano/android/viewclientconnected.py
@@ -0,0 +1,129 @@
+'''
+Created on 2012-10-25
+
+@author: diego
+'''
+
+import sys
+import os
+import unittest
+
+
+# PyDev sets PYTHONPATH, use it
+try:
+    for p in os.environ['PYTHONPATH'].split(':'):
+        if not p in sys.path:
+            sys.path.append(p)
+except:
+    pass
+
+try:
+    sys.path.insert(0, os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import *
+from mocks import MockDevice
+
+VERBOSE = True
+
+# NOTE:
+# Because there's no way of disconnect a MonkeyDevice and there's no
+# either the alternative of connecting twice from the same script
+# this is the only alternative
+SERIALNO = '1.*' # 'emulator-5554'
+#sys.argv = ['ViewClientConnectedTest', SERIALNO]
+#device, serialno = ViewClient.connectToDeviceOrExit(verbose=VERBOSE, serialno=SERIALNO)
+
+class ViewClientConnectedTest(unittest.TestCase):
+
+    def setUp(self):
+        device, serialno = ViewClient.connectToDeviceOrExit(serialno=SERIALNO)
+        self.device = device
+        self.serialno = serialno
+
+
+    def tearDown(self):
+        # WARNING:
+        # There's no way of disconnect the device
+        pass
+
+    @unittest.skip("icannot connect adb to mock device")
+    def testInit_adbNone(self):
+        device = MockDevice()
+        vc = ViewClient(device, serialno=device.serialno, adb=None, autodump=False)
+        self.assertNotEqual(None, vc)
+
+    def testAutodumpVsDump(self):
+        vc = ViewClient(self.device, self.serialno, forceviewserveruse=True)
+        ids = vc.getViewIds()
+        views = vc.dump()
+        self.assertEquals(len(ids), len(views))
+
+    def testNewViewClientInstancesDontDuplicateTreeConnected(self):
+        vc = {}
+        n = {}
+        m = {}
+        d = {}
+
+        for i in range(10):
+            vc[i] = ViewClient(self.device, self.serialno, forceviewserveruse=True)
+            n[i] = len(vc[i].getViewIds())
+            m[i] = len(vc[i].dump())
+            d[i] = len(vc[i].getViewIds())
+            if VERBOSE:
+                print "Pass %d: Found %d views and %d after dump with %d view Ids" % \
+                    (i, n[i], m[i], d[i])
+
+        for i in range(1, 10):
+            self.assertEquals(n[0], n[i])
+            self.assertEquals(n[0], m[i])
+            self.assertEquals(n[0], d[i])
+            
+    def testViewClientBackendsConsistency(self):
+        kwargs1 = {'verbose': True, 'ignoresecuredevice': False, 'ignoreversioncheck': False}
+        
+        kwargs2 = {'forceviewserveruse': False, 'startviewserver': True, 'autodump': False, 'ignoreuiautomatorkilled': True}
+        device1, serialno1 = ViewClient.connectToDeviceOrExit(serialno=SERIALNO, **kwargs1)
+        vc1 = ViewClient(device1, serialno1, **kwargs2)
+        self.assertTrue(vc1.useUiAutomator)
+
+        kwargs2['forceviewserveruse'] = True
+        device2, serialno2 = ViewClient.connectToDeviceOrExit(serialno=SERIALNO, **kwargs1)
+        vc2 = ViewClient(device1, serialno1, **kwargs2)
+        self.assertFalse(vc2.useUiAutomator)
+
+        # UiAutomator
+        dump1 = vc1.dump(-1)
+        # ViewServer
+        dump2 = vc2.dump(-1)
+
+        # Can't do this, v2 usually has much more views than v1
+        #self.assertEqual(len(dump1), len(dump2), "Different number of views (%d != %d)" % (len(dump1), len(dump2)))
+        
+        found = False
+        for v2 in dump2:
+            for v1 in dump1:
+                # At least, let's verify that all unique Ids from dump2 (smaller) are in dump1 (bigger)
+                if v2.getUniqueId() == v1.getUniqueId():
+                    found = True
+                    break
+        self.assertTrue(found) 
+
+        missing = ''
+        # The smallest
+        for v2 in dump2:
+            coords = v2.getCoords()
+            found = False
+            for v1 in dump1:
+                msg = "Comparing %s{%s} and %s{%s}" % (v1.getClass(), v1.getId(), v2.getClass(), v2.getId())
+                if coords == v1.getCoords():
+                    found = True
+                    break
+            if not found:
+                missing += "Couldn't find view with coords=%s in dump1\n" % (str(v2.getCoords()))
+        self.assertEqual('', missing, missing)
+        
+if __name__ == "__main__":
+    #import sys;sys.argv = ['', 'Test.testName']
+    unittest.main()
diff --git a/AndroidViewClient/tests/com/dtmilano/android/viewclienttests.py b/AndroidViewClient/tests/com/dtmilano/android/viewclienttests.py
new file mode 100755
index 0000000..633bba9
--- /dev/null
+++ b/AndroidViewClient/tests/com/dtmilano/android/viewclienttests.py
@@ -0,0 +1,1098 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+'''
+Copyright (C) 2012  Diego Torres Milano
+Created on Feb 5, 2012
+
+@author: diego
+'''
+
+import sys
+import os
+import time
+import StringIO
+import unittest
+import exceptions
+import platform
+
+# PyDev sets PYTHONPATH, use it
+try:
+    for p in os.environ['PYTHONPATH'].split(':'):
+        if not p in sys.path:
+            sys.path.append(p)
+except:
+    pass
+
+try:
+    sys.path.insert(0, os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import *
+from mocks import MockDevice, MockViewServer
+from mocks import DUMP, DUMP_SAMPLE_UI, VIEW_MAP, VIEW_MAP_API_8, VIEW_MAP_API_17, RUNNING, STOPPED, WINDOWS
+
+os_name = platform.system()
+if os_name.startswith('Linux'):
+    TRUE = '/bin/true'
+else:
+    TRUE = '/usr/bin/true'
+
+class ViewTest(unittest.TestCase):
+
+    def setUp(self):
+        self.view = View(VIEW_MAP, None, -1)
+
+    def tearDown(self):
+        try:
+            del os.environ['ANDROID_SERIAL']
+        except:
+            pass
+
+    def testViewFactory_View(self):
+        attrs = {'class': 'android.widget.AnyView', 'text:mText': 'Button with ID'}
+        view = View.factory(attrs, None, -1)
+        self.assertTrue(isinstance(view, View))
+
+    def testViewFactory_TextView(self):
+        attrs = {'class': 'android.widget.TextView', 'text:mText': 'Button with ID'}
+        view = View.factory(attrs, None, -1)
+        self.assertTrue(isinstance(view, TextView))
+
+    def testViewFactory_TextView(self):
+        attrs = {'class': 'android.widget.EditText', 'text:mText': 'Button with ID'}
+        view = View.factory(attrs, None, -1)
+        self.assertTrue(isinstance(view, EditText))
+
+    def testView_notSpecifiedSdkVersion(self):
+        device = MockDevice()
+        view = View(VIEW_MAP, device, -1)
+        self.assertEqual(device.version, view.build[VERSION_SDK_PROPERTY])
+
+    def testView_specifiedSdkVersion_8(self):
+        view = View(VIEW_MAP_API_8, MockDevice(), 8)
+        self.assertEqual(8, view.build[VERSION_SDK_PROPERTY])
+
+    def testView_specifiedSdkVersion_10(self):
+        view = View(VIEW_MAP, MockDevice(), 10)
+        self.assertEqual(10, view.build[VERSION_SDK_PROPERTY])
+
+    def testView_specifiedSdkVersion_16(self):
+        view = View(VIEW_MAP, MockDevice(), 16)
+        self.assertEqual(16, view.build[VERSION_SDK_PROPERTY])
+
+    def testInnerMethod(self):
+        v = View({'isChecked()':'true'}, None)
+        self.assertTrue(v.isChecked())
+        v.map['isChecked()'] = 'false'
+        self.assertFalse(v.isChecked(), "Expected False but is %s {%s}" % (v.isChecked(), v.map['isChecked()']))
+        self.assertFalse(v.isChecked())
+        v.map['other'] = 1
+        self.assertEqual(1, v.other())
+        v.map['evenMore'] = "ABC"
+        self.assertEqual("ABC", v.evenMore())
+        v.map['more'] = "abc"
+        v.map['more'] = v.evenMore()
+        self.assertEqual("ABC", v.more())
+        v.map['isMore()'] = 'true'
+        self.assertTrue(v.isMore())
+
+    def testGetClass(self):
+        self.assertEqual('android.widget.ToggleButton', self.view.getClass())
+
+    def testGetId(self):
+        self.assertEqual('id/button_with_id', self.view.getId())
+
+    def testTextPropertyForDifferentSdkVersions(self):
+        VP = { -1:TEXT_PROPERTY, 8:TEXT_PROPERTY_API_10, 10:TEXT_PROPERTY_API_10, 15:TEXT_PROPERTY, 16:TEXT_PROPERTY_UI_AUTOMATOR, 17:TEXT_PROPERTY_UI_AUTOMATOR}
+        for version, textProperty in VP.items():
+            view = View(None, None, version)
+            self.assertEqual(textProperty, view.textProperty, msg='version %d: expected: %s actual: %s' % (version, textProperty, view.textProperty))
+
+    def testTextPropertyForDifferentSdkVersions_device(self):
+        VP = { -1:TEXT_PROPERTY, 8:TEXT_PROPERTY_API_10, 10:TEXT_PROPERTY_API_10, 15:TEXT_PROPERTY, 16:TEXT_PROPERTY_UI_AUTOMATOR, 17:TEXT_PROPERTY_UI_AUTOMATOR}
+        for version, textProperty in VP.items():
+            device = MockDevice(version=version)
+            view = View(None, device, -1)
+            self.assertEqual(textProperty, view.textProperty, msg='version %d' % version)
+
+    def testLeftPropertyForDifferentSdkVersions(self):
+        VP = { -1:LEFT_PROPERTY, 8:LEFT_PROPERTY_API_8, 10:LEFT_PROPERTY, 15:LEFT_PROPERTY, 16:LEFT_PROPERTY, 17:LEFT_PROPERTY}
+        for version, leftProperty in VP.items():
+            view = View(None, None, version)
+            self.assertEqual(leftProperty, view.leftProperty, msg='version %d' % version)
+
+    def testLeftPropertyForDifferentSdkVersions_device(self):
+        VP = { -1:LEFT_PROPERTY, 8:LEFT_PROPERTY_API_8, 10:LEFT_PROPERTY, 15:LEFT_PROPERTY, 16:LEFT_PROPERTY, 17:LEFT_PROPERTY}
+        for version, leftProperty in VP.items():
+            device = MockDevice(version=version)
+            view = View(None, device, -1)
+            self.assertEqual(leftProperty, view.leftProperty, msg='version %d' % version)
+
+    def testTopPropertyForDifferentSdkVersions(self):
+        VP = { -1:TOP_PROPERTY, 8:TOP_PROPERTY_API_8, 10:TOP_PROPERTY, 15:TOP_PROPERTY, 16:TOP_PROPERTY, 17:TOP_PROPERTY}
+        for version, topProperty in VP.items():
+            view = View(None, None, version)
+            self.assertEqual(topProperty, view.topProperty, msg='version %d' % version)
+
+    def testTopPropertyForDifferentSdkVersions_device(self):
+        VP = { -1:TOP_PROPERTY, 8:TOP_PROPERTY_API_8, 10:TOP_PROPERTY, 15:TOP_PROPERTY, 16:TOP_PROPERTY, 17:TOP_PROPERTY}
+        for version, topProperty in VP.items():
+            device = MockDevice(version=version)
+            view = View(None, device, -1)
+            self.assertEqual(topProperty, view.topProperty, msg='version %d' % version)
+
+    def testWidthPropertyForDifferentSdkVersions(self):
+        VP = { -1:WIDTH_PROPERTY, 8:WIDTH_PROPERTY_API_8, 10:WIDTH_PROPERTY, 15:WIDTH_PROPERTY, 16:WIDTH_PROPERTY, 17:WIDTH_PROPERTY}
+        for version, widthProperty in VP.items():
+            view = View(None, None, version)
+            self.assertEqual(widthProperty, view.widthProperty, msg='version %d' % version)
+
+    def testWidthPropertyForDifferentSdkVersions_device(self):
+        VP = { -1:WIDTH_PROPERTY, 8:WIDTH_PROPERTY_API_8, 10:WIDTH_PROPERTY, 15:WIDTH_PROPERTY, 16:WIDTH_PROPERTY, 17:WIDTH_PROPERTY}
+        for version, widthProperty in VP.items():
+            device = MockDevice(version=version)
+            view = View(None, device, -1)
+            self.assertEqual(widthProperty, view.widthProperty, msg='version %d' % version)
+
+    def testHeightPropertyForDifferentSdkVersions(self):
+        VP = { -1:HEIGHT_PROPERTY, 8:HEIGHT_PROPERTY_API_8, 10:HEIGHT_PROPERTY, 15:HEIGHT_PROPERTY, 16:HEIGHT_PROPERTY, 17:HEIGHT_PROPERTY}
+        for version, heightProperty in VP.items():
+            view = View(None, None, version)
+            self.assertEqual(heightProperty, view.heightProperty, msg='version %d' % version)
+
+    def testHeightPropertyForDifferentSdkVersions_device(self):
+        VP = { -1:HEIGHT_PROPERTY, 8:HEIGHT_PROPERTY_API_8, 10:HEIGHT_PROPERTY, 15:HEIGHT_PROPERTY, 16:HEIGHT_PROPERTY, 17:HEIGHT_PROPERTY}
+        for version, heightProperty in VP.items():
+            device = MockDevice(version=version)
+            view = View(None, device, -1)
+            self.assertEqual(heightProperty, view.heightProperty, msg='version %d' % version)
+
+    def testGetText(self):
+        self.assertTrue(self.view.map.has_key('text:mText'))
+        self.assertEqual('Button with ID', self.view.getText())
+        self.assertEqual('Button with ID', self.view['text:mText'])
+
+    def testGetX_specifiedSdkVersion_8(self):
+        view = View(VIEW_MAP_API_8, MockDevice(), 8)
+        self.assertEqual(8, view.build[VERSION_SDK_PROPERTY])
+        self.assertEqual(50, view.getX())
+
+    def testGetX_specifiedSdkVersion_10(self):
+        view = View(VIEW_MAP, MockDevice(), 10)
+        self.assertEqual(10, view.build[VERSION_SDK_PROPERTY])
+        self.assertEqual(50, view.getX())
+
+    def testGetY_specifiedSdkVersion_8(self):
+        view = View(VIEW_MAP_API_8, MockDevice(), 8)
+        self.assertEqual(8, view.build[VERSION_SDK_PROPERTY])
+        self.assertEqual(316, view.getY())
+
+    def testGetY_specifiedSdkVersion_10(self):
+        view = View(VIEW_MAP, MockDevice(), 10)
+        self.assertEqual(10, view.build[VERSION_SDK_PROPERTY])
+        self.assertEqual(316, view.getY())
+
+    def testGetWidth(self):
+        self.assertEqual(1140, self.view.getWidth())
+
+    def testGetHeight(self):
+        self.assertEqual(48, self.view.getHeight())
+
+    def testGetUniqueId(self):
+        self.assertEqual('id/button_with_id', self.view.getUniqueId())
+
+    def testGetUniqueIdEqualsToIdWhenIdIsSpecified(self):
+        self.assertEqual(self.view.getId(), self.view.getUniqueId())
+
+    def testName_Layout_mLeft(self):
+        v = View({'layout:mLeft':200}, None)
+        self.assertEqual(200, v.layout_mLeft())
+
+    def testNameWithColon_this_is_a_fake_name(self):
+        v = View({'this:is_a_fake_name':1}, None)
+        self.assertEqual(1, v.this_is_a_fake_name())
+
+    def testNameWith2Colons_this_is_another_fake_name(self):
+        v = View({'this:is:another_fake_name':1}, None)
+        self.assertEqual(1, v.this_is_another_fake_name())
+
+    def testViewWithoutId(self):
+        v = View({'mID':'id/NO_ID', 'text:mText':'Some text'}, None)
+        self.assertEqual('id/NO_ID', v.getId())
+
+    def testInexistentMethodName(self):
+        v = View({'foo':1}, None)
+        try:
+            v.bar()
+            raise Exception("AttributeError not raised")
+        except AttributeError:
+            pass
+
+    def testViewTreeRoot(self):
+        root = View({'root':1}, None)
+        self.assertTrue(root.parent == None)
+
+    def testViewTree(self):
+        root = View({'root':1}, None)
+        children = ["A", "B", "C"]
+        for s in children:
+            root.add(View({s:1}, None))
+
+        self.assertEquals(len(children), len(root.children))
+
+    def testViewTreeParent(self):
+        root = View({'root':1}, None)
+        children = ["A", "B", "C"]
+        for s in children:
+            root.add(View({s:1}, None))
+
+        for ch in root.children:
+            self.assertTrue(ch.parent == root)
+
+    def testContainsPoint_api15(self):
+        v = View(VIEW_MAP, MockDevice(), 15)
+        (X, Y, W, H) = v.getPositionAndSize()
+        self.assertEqual(X, v.getX())
+        self.assertEqual(Y, v.getY())
+        self.assertEqual(W, v.getWidth())
+        self.assertEqual(H, v.getHeight())
+        self.assertTrue(v.containsPoint((v.getCenter())))
+
+    def testContainsPoint_api17(self):
+        v = View(VIEW_MAP_API_17, MockDevice(), 17)
+        (X, Y, W, H) = v.getPositionAndSize()
+        self.assertEqual(X, v.getX())
+        self.assertEqual(Y, v.getY())
+        self.assertEqual(W, v.getWidth())
+        self.assertEqual(H, v.getHeight())
+        self.assertTrue(v.containsPoint((v.getCenter())))
+
+    def testIsClickable_api15(self):
+        v = View(VIEW_MAP, MockDevice(), 15)
+        self.assertTrue(v.isClickable())
+
+    def testIsClickable_api17(self):
+        v = View(VIEW_MAP_API_17, MockDevice(), 17)
+        self.assertTrue(v.isClickable())
+
+class ViewClientTest(unittest.TestCase):
+
+    def setUp(self):
+        pass
+
+    def tearDown(self):
+        pass
+
+    def testInit_adb(self):
+        device = MockDevice()
+        vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEqual(None, vc)
+
+    def testInit_adbNone(self):
+        # FIXME: there's a problem here when the mock device is created,
+        # it's intended to be API=15, mock ViewServer is started and then
+        # adb tries (unsuccessfuly) to forward the ports (expected because
+        # adb does not know anything about mock devices).
+        # Then
+        #    error: device not found
+        # appears in the console
+        device = MockDevice()
+        try:
+            vc = ViewClient(device, device.serialno, adb=None, autodump=False)
+            self.assertIsNotNone(vc)
+        except subprocess.CalledProcessError:
+            # This is needed because the ports cannot be forwarded if there is no device connected
+            pass
+
+    def testExceptionDeviceNotConnected(self):
+        try:
+            vc = ViewClient(None, None)
+        except Exception, e:
+            self.assertEqual('Device is not connected', e.message)
+
+    def testConnectToDeviceOrExit_environ(self):
+        sys.argv = ['']
+        os.environ['ANDROID_SERIAL'] = 'ABC123'
+        try:
+            ViewClient.connectToDeviceOrExit(timeout=1, verbose=True)
+        except RuntimeError, e:
+            msg = str(e)
+            if re.search('Is adb running on your computer?', msg):
+                # This test required adb running
+                self.fail(msg)
+            elif re.search("There are no connected devices", msg):
+                # special case, when there are no devices connected then the
+                # serialno specified doesn't matter
+                pass
+            elif not re.search("couldn't find device that matches 'ABC123'", msg):
+                self.fail(msg)
+        except exceptions.SystemExit, e:
+            self.assertEquals(3, e.code)
+        except Exception, e: #FIXME: java.lang.NullPointerException:
+            self.fail('Serialno was not taken from environment: ' + msg)
+
+    def testConnectToDeviceOrExit_serialno(self):
+        sys.argv = ['']
+        try:
+            ViewClient.connectToDeviceOrExit(timeout=1, verbose=True, serialno='ABC123')
+        except RuntimeError, e:
+            msg = str(e)
+            if re.search('Is adb running on your computer?', msg):
+                # This test required adb running
+                self.fail(msg)
+            elif re.search("There are no connected devices", msg):
+                # special case, when there are no devices connected then the
+                # serialno specified doesn't matter
+                pass
+            elif not re.search("couldn't find device that matches 'ABC123'", msg):
+                self.fail(msg)
+        except exceptions.SystemExit, e:
+            self.assertEquals(3, e.code)
+        except Exception, e: #FIXME: java.lang.NullPointerException:
+            self.fail('Serialno was not taken from argument: ' + str(e))
+
+    def testConstructor(self):
+        device = MockDevice()
+        vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEquals(None, vc)
+
+    def testMapSerialNo_noPortSpecified(self):
+        vc = ViewClient(MockDevice(), serialno='192.168.1.100', adb=TRUE, autodump=False)
+        self.assertEqual('192.168.1.100:5555', vc.serialno)
+
+    def testMapSerialNo_portSpecified(self):
+        vc = ViewClient(MockDevice(), serialno='192.168.1.100:5555', adb=TRUE, autodump=False)
+        self.assertEqual('192.168.1.100:5555', vc.serialno)
+
+    def testMapSerialNo_emulator(self):
+        vc = ViewClient(MockDevice(), serialno='emulator-5556', adb=TRUE, autodump=False)
+        self.assertEqual('emulator-5556', vc.serialno)
+
+    def testMapSerialNo_regex(self):
+        # This is an edge case. A regex should not be used as the serialno in ViewClient as it's
+        # behavior is not well defined.
+        # MonkeyRunner.waitForConnection() accepts a regexp as serialno but adb -s doesn't
+        try:
+            ViewClient(MockDevice(),  serialno='.*', adb=TRUE, autodump=False)
+            self.fail()
+        except ValueError:
+            pass
+
+    def testMapSerialNo_None(self):
+        device = MockDevice()
+        try:
+            ViewClient(device, None, adb=TRUE, autodump=False)
+            self.fail()
+        except ValueError:
+            pass
+
+    def testGetProperty_displayWidth(self):
+        device = MockDevice()
+        self.assertEqual(768, device.getProperty('display.width'))
+
+    def testGetProperty_displayHeight(self):
+        device = MockDevice()
+        self.assertEqual(1184, device.getProperty('display.height'))
+
+    def __mockTree(self, dump=DUMP, version=15, language='en'):
+        device = MockDevice(version=version, language=language)
+        vc = ViewClient(device, serialno=device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEquals(None, vc)
+        if version <= 15:
+            # We don't want to invoke the ViewServer or MockViewServer for this
+            vc.setViews(dump)
+        else:
+            vc.dump()
+        return vc
+
+    def __mockWindows(self, windows=WINDOWS):
+        device = MockDevice()
+        vc = ViewClient(device, serialno=device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEquals(None, vc)
+        vc.windows = windows
+        return vc
+
+    def testRoot(self):
+        vc = self.__mockTree()
+        root = vc.root
+        self.assertTrue(root != None)
+        self.assertTrue(root.parent == None)
+        self.assertTrue(root.getClass() == 'com.android.internal.policy.impl.PhoneWindow$DecorView')
+
+    def testParseTree(self):
+        vc = self.__mockTree()
+        # eat all the output
+        vc.traverse(vc.root, transform=self.__eatIt)
+        # We know there are 23 views in ViewServer mock tree
+        self.assertEqual(23, len(vc.getViewIds()))
+
+    def testParsetree_api17(self):
+        vc = self.__mockTree(version=17)
+        # eat all the output
+        vc.traverse(vc.root, transform=self.__eatIt)
+        # We know there are 9 views in UiAutomator mock tree
+        self.assertEqual(9, len(vc.getViewIds()))
+
+    def testParsetree_api17_zh(self):
+        vc = self.__mockTree(version=17, language='zh')
+        # eat all the output
+        vc.traverse(vc.root, transform=self.__eatIt)
+        # We know there are 21 views in UiAutomator mock tree
+        self.assertEqual(21, len(vc.getViewIds()))
+
+    def __testViewByIds_apiIndependent(self, vc):
+        viewsbyId = vc.getViewsById()
+        self.assertNotEquals(None, viewsbyId)
+        for k, v in viewsbyId.items():
+            self.assertTrue(isinstance(k, str) or isinstance(k, unicode))
+            self.assertTrue(isinstance(v, View), "v=" + unicode(v) + " is not a View")
+            self.assertTrue(re.match("id/.*", v.getUniqueId()) != None)
+            self.assertEquals(k, v.getUniqueId())
+
+    def testGetViewsById(self):
+        vc = self.__mockTree()
+        self.__testViewByIds_apiIndependent(vc)
+
+    def testGetViewsById_api17(self):
+        vc = self.__mockTree(version=17)
+        self.__testViewByIds_apiIndependent(vc)
+
+    def testGetViewsById_api17_zh(self):
+        vc = self.__mockTree(version=17, language='zh')
+        self.__testViewByIds_apiIndependent(vc)
+
+    def testNewViewClientInstancesDontDuplicateTree(self):
+        vc = {}
+        n = {}
+        for i in range(10):
+            vc[i] = self.__mockTree()
+            n[i] = len(vc[i].getViewIds())
+
+        for i in range(1, 10):
+            self.assertEquals(n[0], n[i])
+
+    def testTraverseShowClassIdAndText(self):
+        device = MockDevice()
+        root = View({'text:mText':'0', 'class': 'android.widget.View', 'mID': 0}, device)
+        root.add(View({'text:mText':'1', 'class': 'android.widget.View', 'mID': 1}, device))
+        root.add(View({'text:mText':'2', 'class': 'android.widget.View', 'mID': 2}, device))
+        v3 = View({'text:mText':'3', 'class': 'android.widget.View', 'mID':3}, device)
+        root.add(v3)
+        v35 = View({'text:mText':'5', 'getTag()':'v35', 'class': 'android.widget.View', 'mID': 35}, device)
+        v3.add(v35)
+        vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEquals(None, vc)
+        treeStr = StringIO.StringIO()
+        vc.traverse(root=root, transform=ViewClient.TRAVERSE_CIT, stream=treeStr)
+        self.assertNotEquals(None, treeStr.getvalue())
+        lines = treeStr.getvalue().splitlines()
+        self.assertEqual(5, len(lines), "lines=%s" % lines)
+        self.assertEqual('android.widget.View 0 0', lines[0])
+        citRE = re.compile(' +android.widget.View \d+ \d+')
+        for l in lines[1:]:
+            self.assertTrue(citRE.match(l), 'l=%s' % l)
+
+
+    def testTraverseShowClassIdTextAndCenter(self):
+        device = MockDevice()
+        root = View({'mID':'0', 'text:mText':'0', 'layout:mLeft':0, 'layout:mTop':0}, device)
+        root.add(View({'mID':'1', 'text:mText':'1', 'layout:mLeft':1, 'layout:mTop':1}, device))
+        root.add(View({'mID':'2', 'text:mText':'2', 'layout:mLeft':2, 'layout:mTop':2}, device))
+        v3 = View({'mID':'3', 'text:mText':'3', 'layout:mLeft':3, 'layout:mTop':3}, device)
+        root.add(v3)
+        v35 = View({'mID':'5', 'text:mText':'5', 'getTag()':'v35', 'layout:mLeft':5, 'layout:mTop':5}, device)
+        v3.add(v35)
+        vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEquals(None, vc)
+        treeStr = StringIO.StringIO()
+        vc.traverse(root=root, transform=ViewClient.TRAVERSE_CITC, stream=treeStr)
+        self.assertNotEquals(None, treeStr.getvalue())
+        lines = treeStr.getvalue().splitlines()
+        self.assertEqual(5, len(lines))
+        self.assertEqual('None 0 0 (0, 0)', lines[0])
+        citRE = re.compile(' +None \d+ \d+ \(\d+, \d+\)')
+        for l in lines[1:]:
+            self.assertTrue(citRE.match(l))
+
+    def __getClassAndId(self, view):
+        try:
+            return "%s %s %s %s" % (view.getClass(), view.getId(), view.getUniqueId(), view.getCoords())
+        except Exception, e:
+            return "Exception in view=%s: %s" % (view.__smallStr__(), e)
+
+    def __eatIt(self, view):
+        return ""
+
+    def testViewWithNoIdReceivesUniqueId(self):
+        vc = self.__mockTree()
+
+        # We know there are 6 views without id in the mock tree
+        for i in range(1, 6):
+            self.assertNotEquals(None, vc.findViewById("id/no_id/%d" % i))
+
+    def testTextWithSpaces(self):
+        vc = self.__mockTree()
+        self.assertNotEqual(None, vc.findViewWithText('Medium Text'))
+
+    def testTextWithVeryLargeContent(self):
+        TEXT = """\
+MOCK@412a9d08 mID=7,id/test drawing:mForeground=4,null padding:mForegroundPaddingBottom=1,0 text:mText=319,[!   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   p] mViewFlags=11,-1744830336\
+"""
+        vc = self.__mockTree(TEXT)
+        test = vc.findViewById('id/test')
+        text = test.getText()
+        self.assertEqual(319, len(text))
+        self.assertEqual('[', text[0])
+        self.assertEqual(']', text[318])
+        self.assertEqual('-1744830336', test['mViewFlags'])
+
+    def testActionBarSubtitleCoordinates(self):
+        vc = self.__mockTree(dump=DUMP_SAMPLE_UI)
+        toggleButton = vc.findViewById('id/button_with_id')
+        self.assertNotEqual(None, toggleButton)
+        textView3 = vc.findViewById('id/textView3')
+        self.assertNotEqual(None, textView3)
+        x = toggleButton.getX()
+        y = toggleButton.getY()
+        w = toggleButton.getWidth()
+        h = toggleButton.getHeight()
+        xy = toggleButton.getXY()
+        coords = toggleButton.getCoords()
+        self.assertNotEqual(None, textView3.getText())
+        self.assertNotEqual("", textView3.getText().strip())
+        lv = textView3.getText().strip().split()
+        _list = [ eval(str(v)) for v in lv ]
+        tx = _list[1][0]
+        ty = _list[1][1]
+        tsx = _list[1][0]
+        tsy = _list[1][1]
+        self.assertEqual(tx, x)
+        self.assertEqual(ty, y)
+        self.assertEqual((tsx, tsy), xy)
+        self.assertEqual(((tsx, tsy), (xy[0] + w, xy[1] + h)), coords)
+
+    def testServiceStoppedAfterDestructor(self):
+        device = MockDevice()
+        self.assertTrue(device.service == STOPPED)
+        if True:
+            vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+            self.assertTrue(device.service == RUNNING)
+            vc.__del__()
+        # Perhpas there are other ViewClients using the same server, we cannot expect it stops
+        #self.assertTrue(device.service == STOPPED)
+
+    def testList(self):
+        vc = self.__mockWindows()
+        self.assertNotEqual(None, vc.windows)
+
+    def testFindViewByIdOrRaise(self):
+        vc = self.__mockTree(dump=DUMP_SAMPLE_UI)
+        vc.findViewByIdOrRaise('id/up')
+
+    def testFindViewByIdOrRaise_api17(self):
+        vc = self.__mockTree(version=17)
+        vc.traverse(stream=self.openDevNull())
+        vc.findViewByIdOrRaise('id/no_id/9')
+
+    def testFindViewByIdOrRaise_api17_zh(self):
+        vc = self.__mockTree(version=17, language='zh')
+        vc.traverse(stream=self.openDevNull())
+        vc.findViewByIdOrRaise('id/no_id/21')
+
+    def testFindViewByIdOrRaise_nonExistentView(self):
+        vc = self.__mockTree(dump=DUMP_SAMPLE_UI)
+        try:
+            vc.findViewByIdOrRaise('id/nonexistent')
+            self.fail()
+        except ViewNotFoundException:
+            pass
+
+    def testFindViewByIdOrRaise_nonExistentView_api17(self):
+        vc = self.__mockTree(version=17)
+        try:
+            vc.findViewByIdOrRaise('id/nonexistent')
+            self.fail()
+        except ViewNotFoundException:
+            pass
+
+    def testFindViewByIdOrRaise_nonExistentView_api17_zh(self):
+        vc = self.__mockTree(version=17, language='zh')
+        try:
+            vc.findViewByIdOrRaise('id/nonexistent')
+            self.fail()
+        except ViewNotFoundException:
+            pass
+
+    def testFindViewById_root(self):
+        device = None
+        root = View({'mID':'0'}, device)
+        root.add(View({'mID':'1'}, device))
+        root.add(View({'mID':'2'}, device))
+        v3 = View({'mID':'3'}, device)
+        root.add(v3)
+        v35 = View({'mID':'5', 'getTag()':'v35'}, device)
+        v3.add(v35)
+        v4 = View({'mID':'4'}, device)
+        root.add(v4)
+        v45 = View({'mID':'5', 'getTag()':'v45'}, device)
+        v4.add(v45)
+        device = MockDevice()
+        vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEquals(None, vc)
+        vc.root = root
+        v5 = vc.findViewById('5')
+        self.assertNotEqual(v5, None)
+        self.assertEqual('v35', v5.getTag())
+        v5 = vc.findViewById('5', root=v4)
+        self.assertNotEqual(v5, None)
+        self.assertEqual('v45', v5.getTag())
+        v5 = vc.findViewById('5', root=v3)
+        self.assertNotEqual(v5, None)
+        self.assertEqual('v35', v5.getTag())
+
+    def testFindViewById_viewFilter(self):
+        vc = self.__mockTree(dump=DUMP_SAMPLE_UI)
+        def vf(view):
+            return view.getClass() == 'android.widget.ImageView'
+        view = vc.findViewById('id/up', viewFilter=vf)
+        self.assertNotEqual(view, None)
+
+    def testFindViewById_viewFilterUnmatched(self):
+        vc = self.__mockTree(dump=DUMP_SAMPLE_UI)
+        def vf(view):
+            return view.getClass() == 'android.widget.TextView'
+        view = vc.findViewById('id/up', viewFilter=vf)
+        self.assertEqual(view, None)
+
+    def testFindViewByIdOrRaise_root(self):
+        device = None
+        root = View({'mID':'0'}, device)
+        root.add(View({'mID':'1'}, device))
+        root.add(View({'mID':'2'}, device))
+        v3 = View({'mID':'3'}, device)
+        root.add(v3)
+        v35 = View({'mID':'5', 'getTag()':'v35'}, device)
+        v3.add(v35)
+        v4 = View({'mID':'4'}, device)
+        root.add(v4)
+        v45 = View({'mID':'5', 'getTag()':'v45'}, device)
+        v4.add(v45)
+        device = MockDevice()
+        vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEquals(None, vc)
+        vc.root = root
+        v5 = vc.findViewByIdOrRaise('5')
+        self.assertEqual('v35', v5.getTag())
+        v5 = vc.findViewByIdOrRaise('5', root=v4)
+        self.assertEqual('v45', v5.getTag())
+        v5 = vc.findViewByIdOrRaise('5', root=v3)
+        self.assertEqual('v35', v5.getTag())
+
+    def testFindViewByIdOrRaise_viewFilter(self):
+        vc = self.__mockTree(dump=DUMP_SAMPLE_UI)
+        def vf(view):
+            return view.getClass() == 'android.widget.ImageView'
+        view = vc.findViewByIdOrRaise('id/up', viewFilter=vf)
+
+    def testFindViewByIdOrRaise_viewFilterUnmatched(self):
+        vc = self.__mockTree(dump=DUMP_SAMPLE_UI)
+        def vf(view):
+            return view.getClass() == 'android.widget.TextView'
+        try:
+            view = vc.findViewByIdOrRaise('id/up', viewFilter=vf)
+        except ViewNotFoundException:
+            pass
+
+    def testFindViewWithText_root(self):
+        device = None
+        root = View({'text:mText':'0'}, device)
+        root.add(View({'text:mText':'1'}, device))
+        root.add(View({'text:mText':'2'}, device))
+        v3 = View({'text:mText':'3'}, device)
+        root.add(v3)
+        v35 = View({'text:mText':'5', 'getTag()':'v35'}, device)
+        v3.add(v35)
+        v4 = View({'text:mText':'4'}, device)
+        root.add(v4)
+        v45 = View({'text:mText':'5', 'getTag()':'v45'}, device)
+        v4.add(v45)
+        device = MockDevice()
+        vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEquals(None, vc)
+        vc.root = root
+        v5 = vc.findViewWithText('5')
+        self.assertNotEqual(v5, None)
+        self.assertEqual('v35', v5.getTag())
+        v5 = vc.findViewWithText('5', root=v4)
+        self.assertNotEqual(v5, None)
+        self.assertEqual('v45', v5.getTag())
+        v5 = vc.findViewWithText('5', root=v3)
+        self.assertNotEqual(v5, None)
+        self.assertEqual('v35', v5.getTag())
+
+    def testFindViewWithText_regexRoot(self):
+        device = None
+        root = View({'text:mText':'0'}, device)
+        root.add(View({'text:mText':'1'}, device))
+        root.add(View({'text:mText':'2'}, device))
+        v3 = View({'text:mText':'3'}, device)
+        root.add(v3)
+        v35 = View({'text:mText':'5', 'getTag()':'v35'}, device)
+        v3.add(v35)
+        v4 = View({'text:mText':'4'}, device)
+        root.add(v4)
+        v45 = View({'text:mText':'5', 'getTag()':'v45'}, device)
+        v4.add(v45)
+        device = MockDevice()
+        vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEquals(None, vc)
+        vc.root = root
+        v5 = vc.findViewWithText(re.compile('[5]'))
+        self.assertNotEqual(v5, None)
+        self.assertEqual('v35', v5.getTag())
+        v5 = vc.findViewWithText(re.compile('[5]'), root=v4)
+        self.assertNotEqual(v5, None)
+        self.assertEqual('v45', v5.getTag())
+        v5 = vc.findViewWithText(re.compile('[5]'), root=v3)
+        self.assertNotEqual(v5, None)
+        self.assertEqual('v35', v5.getTag())
+
+    def testFindViewWithTextOrRaise_root(self):
+        device = None
+        root = View({'text:mText':'0'}, device)
+        root.add(View({'text:mText':'1'}, device))
+        root.add(View({'text:mText':'2'}, device))
+        v3 = View({'text:mText':'3'}, device)
+        root.add(v3)
+        v35 = View({'text:mText':'5', 'getTag()':'v35'}, device)
+        v3.add(v35)
+        v4 = View({'text:mText':'4'}, device)
+        root.add(v4)
+        v45 = View({'text:mText':'5', 'getTag()':'v45'}, device)
+        v4.add(v45)
+        device = MockDevice()
+        vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEquals(None, vc)
+        vc.root = root
+        v5 = vc.findViewWithTextOrRaise('5')
+        self.assertEqual('v35', v5.getTag())
+        v5 = vc.findViewWithTextOrRaise('5', root=v4)
+        self.assertEqual('v45', v5.getTag())
+        v5 = vc.findViewWithTextOrRaise('5', root=v3)
+        self.assertEqual('v35', v5.getTag())
+
+    def testFindViewWithTextOrRaise_root_disappearingView(self):
+        device = None
+        root = View({'text:mText':'0'}, device)
+        root.add(View({'text:mText':'1'}, device))
+        root.add(View({'text:mText':'2'}, device))
+        v3 = View({'text:mText':'3'}, device)
+        root.add(v3)
+        v35 = View({'text:mText':'5', 'getTag()':'v35'}, device)
+        v3.add(v35)
+        v4 = View({'text:mText':'4'}, device)
+        root.add(v4)
+        v45 = View({'text:mText':'5', 'getTag()':'v45'}, device)
+        v4.add(v45)
+        device = MockDevice()
+        vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEquals(None, vc)
+        vc.root = root
+        v5 = vc.findViewWithTextOrRaise('5')
+        self.assertEqual('v35', v5.getTag())
+        v5 = vc.findViewWithTextOrRaise('5', root=v4)
+        self.assertEqual('v45', v5.getTag())
+        v5 = vc.findViewWithTextOrRaise('5', root=v3)
+        self.assertEqual('v35', v5.getTag())
+        # Then remove v4 and its children
+        root.children.remove(v4)
+        #vc.dump()
+        v4 = vc.findViewWithText('4')
+        self.assertEqual(v4, None, "v4 has not disappeared")
+
+    def testFindViewWithTextOrRaise_rootNonExistent(self):
+        device = None
+        root = View({'text:mText':'0'}, device)
+        root.add(View({'text:mText':'1'}, device))
+        root.add(View({'text:mText':'2'}, device))
+        v3 = View({'text:mText':'3'}, device)
+        root.add(v3)
+        v35 = View({'text:mText':'5', 'getTag()':'v35'}, device)
+        v3.add(v35)
+        v4 = View({'text:mText':'4'}, device)
+        root.add(v4)
+        v45 = View({'text:mText':'5', 'getTag()':'v45'}, device)
+        v4.add(v45)
+        device = MockDevice()
+        vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEquals(None, vc)
+        vc.root = root
+        try:
+            vc.findViewWithTextOrRaise('Non Existent', root=v4)
+            self.fail()
+        except ViewNotFoundException:
+            pass
+
+    def testFindViewWithTextOrRaise_api17(self):
+        vc = self.__mockTree(version=17)
+        vc.findViewWithTextOrRaise("Apps")
+
+    def openDevNull(self):
+        return open('/dev/null', 'a+')
+
+    def testFindViewWithTextOrRaise_api17_zh(self):
+        vc = self.__mockTree(version=17, language='zh')
+        vc.traverse(transform=ViewClient.TRAVERSE_CIT, stream=self.openDevNull())
+        vc.findViewWithTextOrRaise(u'语言')
+
+    def testFindViewWithTextOrRaise_nonExistent_api17(self):
+        vc = self.__mockTree(version=17)
+        try:
+            vc.findViewWithTextOrRaise('nonexistent text')
+            self.fail()
+        except ViewNotFoundException:
+            pass
+
+    def testFindViewWithTextOrRaise_nonExistent_api17_zh(self):
+        vc = self.__mockTree(version=17, language='zh')
+        try:
+            vc.findViewWithTextOrRaise(u'不存在的文本')
+            self.fail()
+        except ViewNotFoundException:
+            pass
+
+    def testFindViewWithContentDescription_root(self):
+        device = None
+        root = View({'text:mText':'0', 'content-desc':'CD0'}, device)
+        root.add(View({'text:mText':'1', 'content-desc':'CD1'}, device))
+        root.add(View({'text:mText':'2', 'content-desc':'CD2'}, device))
+        v3 = View({'text:mText':'3', 'content-desc':'CD3'}, device)
+        root.add(v3)
+        v35 = View({'text:mText':'35', 'content-desc':'CD35'}, device)
+        v3.add(v35)
+        v4 = View({'text:mText':'4', 'conent-desc':'CD4'}, device)
+        root.add(v4)
+        v45 = View({'text:mText':'45', 'content-desc':'CD45'}, device)
+        v4.add(v45)
+        device = MockDevice()
+        vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEquals(None, vc)
+        vc.root = root
+        v45 = vc.findViewWithContentDescription('CD45')
+        self.assertNotEqual(v45, None)
+        self.assertEqual('45', v45.getText())
+        v45 = vc.findViewWithContentDescription('CD45', root=v4)
+        self.assertNotEqual(v45, None)
+        self.assertEqual('45', v45.getText())
+        v35 = vc.findViewWithContentDescription('CD35', root=v3)
+        self.assertNotEqual(v35, None)
+        self.assertEqual('35', v35.getText())
+
+    def testFindViewWithContentDescription_regexRoot(self):
+        device = None
+        root = View({'text:mText':'0', 'content-desc':'CD0'}, device)
+        root.add(View({'text:mText':'1', 'content-desc':'CD1'}, device))
+        root.add(View({'text:mText':'2', 'content-desc':'CD2'}, device))
+        v3 = View({'text:mText':'3', 'content-desc':'CD3'}, device)
+        root.add(v3)
+        v35 = View({'text:mText':'35', 'content-desc':'CD35'}, device)
+        v3.add(v35)
+        v4 = View({'text:mText':'4', 'conent-desc':'CD4'}, device)
+        root.add(v4)
+        v45 = View({'text:mText':'45', 'content-desc':'CD45'}, device)
+        v4.add(v45)
+        device = MockDevice()
+        vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEquals(None, vc)
+        vc.root = root
+        v45 = vc.findViewWithContentDescription(re.compile('CD4\d'))
+        self.assertNotEqual(v45, None)
+        self.assertEqual('45', v45.getText())
+        v45 = vc.findViewWithContentDescription(re.compile('CD4\d'), root=v4)
+        self.assertNotEqual(v45, None)
+        self.assertEqual('45', v45.getText())
+        v35 = vc.findViewWithContentDescription(re.compile('CD3\d'), root=v3)
+        self.assertNotEqual(v35, None)
+        self.assertEqual('35', v35.getText())
+
+    def testFindViewWithContentDescriptionOrRaise_root(self):
+        device = None
+        root = View({'text:mText':'0', 'content-desc':'CD0'}, device)
+        root.add(View({'text:mText':'1', 'content-desc':'CD1'}, device))
+        root.add(View({'text:mText':'2', 'content-desc':'CD2'}, device))
+        v3 = View({'text:mText':'3', 'content-desc':'CD3'}, device)
+        root.add(v3)
+        v35 = View({'text:mText':'35', 'content-desc':'CD35'}, device)
+        v3.add(v35)
+        v4 = View({'text:mText':'4', 'conent-desc':'CD4'}, device)
+        root.add(v4)
+        v45 = View({'text:mText':'45', 'content-desc':'CD45'}, device)
+        v4.add(v45)
+        device = MockDevice()
+        vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEquals(None, vc)
+        vc.root = root
+        v45 = vc.findViewWithContentDescriptionOrRaise('CD45')
+        self.assertEqual('45', v45.getText())
+        v45 = vc.findViewWithContentDescriptionOrRaise('CD45', root=v4)
+        self.assertEqual('45', v45.getText())
+        v35 = vc.findViewWithContentDescriptionOrRaise('CD35', root=v3)
+        self.assertEqual('35', v35.getText())
+
+    def testFindViewWithContentDescriptionOrRaise_rootNonExistent(self):
+        device = None
+        root = View({'text:mText':'0', 'content-desc':'CD0'}, device)
+        root.add(View({'text:mText':'1', 'content-desc':'CD1'}, device))
+        root.add(View({'text:mText':'2', 'content-desc':'CD2'}, device))
+        v3 = View({'text:mText':'3', 'content-desc':'CD3'}, device)
+        root.add(v3)
+        v35 = View({'text:mText':'35', 'content-desc':'CD35'}, device)
+        v3.add(v35)
+        v4 = View({'text:mText':'4', 'conent-desc':'CD4'}, device)
+        root.add(v4)
+        v45 = View({'text:mText':'45', 'content-desc':'CD45'}, device)
+        v4.add(v45)
+        device = MockDevice()
+        vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEquals(None, vc)
+        vc.root = root
+        try:
+            vc.findViewWithContentDescriptionOrRaise('Non Existent', root=v4)
+            self.fail()
+        except ViewNotFoundException:
+            pass
+
+    def testFindViewWithContentDescriptionOrRaiseExceptionMessage_regexpRoot(self):
+        device = None
+        root = View({'text:mText':'0', 'content-desc':'CD0'}, device)
+        root.add(View({'text:mText':'1', 'content-desc':'CD1'}, device))
+        root.add(View({'text:mText':'2', 'content-desc':'CD2'}, device))
+        v3 = View({'text:mText':'3', 'content-desc':'CD3'}, device)
+        root.add(v3)
+        v35 = View({'text:mText':'35', 'content-desc':'CD35'}, device)
+        v3.add(v35)
+        v4 = View({'text:mText':'4', 'conent-desc':'CD4'}, device)
+        root.add(v4)
+        v45 = View({'text:mText':'45', 'content-desc':'CD45'}, device)
+        v4.add(v45)
+        device = MockDevice()
+        vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+        self.assertNotEquals(None, vc)
+        vc.root = root
+        try:
+            vc.findViewWithContentDescriptionOrRaise(re.compile('Non Existent'), root=v4)
+            self.fail()
+        except ViewNotFoundException, e:
+            self.assertNotEquals(None, re.search("that matches 'Non Existent'", e.message))
+
+    def testUiAutomatorDump(self):
+        device = MockDevice(version=16)
+        vc = ViewClient(device, device.serialno, adb=TRUE, autodump=True)
+
+    def testUiAutomatorKilled(self):
+        device = MockDevice(version=16, uiautomatorkilled=True)
+        try:
+            vc = ViewClient(device, device.serialno, adb=TRUE, autodump=True, ignoreuiautomatorkilled=True)
+        except Exception, e:
+            self.assertIsNotNone(re.search('''ERROR: UiAutomator output contains no valid information. UiAutomator was killed, no reason given.''', str(e)))
+
+    def testUiViewServerDump(self):
+        device = None
+        try:
+            device = MockDevice(version=15, startviewserver=True)
+            vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+            vc.dump()
+            vc.findViewByIdOrRaise('id/home')
+        finally:
+            if device:
+                device.shutdownMockViewServer()
+
+    def testUiViewServerDump_windowStr(self):
+        device = None
+        try:
+            device = MockDevice(version=15, startviewserver=True)
+            vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+            vc.dump(window='StatusBar')
+            vc.findViewByIdOrRaise('id/status_bar')
+        finally:
+            if device:
+                device.shutdownMockViewServer()
+
+    def testUiViewServerDump_windowInt(self):
+        device = None
+        try:
+            device = MockDevice(version=15, startviewserver=True)
+            vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+            vc.dump(window=0xb52f7c88)
+            vc.findViewByIdOrRaise('id/status_bar')
+        finally:
+            if device:
+                device.shutdownMockViewServer()
+
+    def testUiViewServerDump_windowIntStr(self):
+        device = None
+        try:
+            device = MockDevice(version=15, startviewserver=True)
+            vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+            vc.dump(window='0xb52f7c88')
+            vc.findViewByIdOrRaise('id/status_bar')
+        finally:
+            if device:
+                device.shutdownMockViewServer()
+
+    def testUiViewServerDump_windowIntM1(self):
+        device = None
+        try:
+            device = MockDevice(version=15, startviewserver=True)
+            vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
+            vc.dump(window=-1)
+            vc.findViewByIdOrRaise('id/home')
+        finally:
+            if device:
+                device.shutdownMockViewServer()
+
+    def testFindViewsContainingPoint_api15(self):
+        device = None
+        try:
+            device = MockDevice(version=15, startviewserver=True)
+            vc = ViewClient(device, device.serialno, adb=TRUE)
+            list = vc.findViewsContainingPoint((200, 200))
+            self.assertNotEquals(None, list)
+            self.assertNotEquals(0, len(list))
+        finally:
+            if device:
+                device.shutdownMockViewServer()
+
+    def testFindViewsContainingPoint_api17(self):
+        device = MockDevice(version=17)
+        vc = ViewClient(device, device.serialno, adb=TRUE)
+        list = vc.findViewsContainingPoint((55, 75))
+        self.assertNotEquals(None, list)
+        self.assertNotEquals(0, len(list))
+
+    def testFindViewsContainingPoint_filterApi15(self):
+        device = None
+        try:
+            device = MockDevice(version=15, startviewserver=True)
+            vc = ViewClient(device, device.serialno, adb=TRUE)
+            list = vc.findViewsContainingPoint((200, 200), _filter=View.isClickable)
+            self.assertNotEquals(None, list)
+            self.assertNotEquals(0, len(list))
+        finally:
+            if device:
+                device.shutdownMockViewServer()
+
+    def testFindViewsContainingPoint_filterApi17(self):
+        device = MockDevice(version=17)
+        vc = ViewClient(device, device.serialno, adb=TRUE)
+        list = vc.findViewsContainingPoint((55, 75), _filter=View.isClickable)
+        self.assertNotEquals(None, list)
+        self.assertNotEquals(0, len(list))
+
+if __name__ == "__main__":
+    print >> sys.stderr, "ViewClient.__main__:"
+    print >> sys.stderr, "argv=", sys.argv
+    #import sys;sys.argv = ['', 'Test.testName']
+    #sys.argv.append('ViewClientTest.testFindViewsContainingPoint_filterApi17')
+    unittest.main()
diff --git a/AndroidViewClient/tools/culebra b/AndroidViewClient/tools/culebra
new file mode 100755
index 0000000..7aedb00
--- /dev/null
+++ b/AndroidViewClient/tools/culebra
@@ -0,0 +1,1332 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+'''
+Copyright (C) 2013-2016  Diego Torres Milano
+Created on Mar 28, 2013
+
+Culebra helps you create AndroidViewClient scripts generating a working template that can be
+modified to suit more specific needs.
+                      __    __    __    __
+                     /  \  /  \  /  \  /  \ 
+____________________/  __\/  __\/  __\/  __\_____________________________
+___________________/  /__/  /__/  /__/  /________________________________
+                   | / \   / \   / \   / \   \___
+                   |/   \_/   \_/   \_/   \    o \ 
+                                           \_____/--<
+
+@author: Diego Torres Milano
+@author: Jennifer E. Swofford (ascii art snake)
+
+
+''' 
+
+__version__ = '11.5.9'
+
+import re
+import sys
+import os
+import getopt
+import warnings
+import subprocess
+import codecs
+import calendar
+from datetime import date
+
+try:
+    sys.path.insert(0, os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient, ViewClientOptions, View, CulebraOptions
+from com.dtmilano.android.culebron import Culebron, Operation, Unit
+
+DEBUG = False
+USAGE = 'usage: %s [OPTION]... [serialno]'
+TAG = 'CULEBRA'
+
+class Descriptor:
+    CONTENT_DESCRIPTION = 'content-description'
+    TEXT = 'text'
+    ID = 'id'
+
+    @staticmethod
+    def findBestDescriptor(view):
+        '''
+        Finds the best possible descriptor for the View
+        '''
+        
+        cd = view.getContentDescription()
+        if cd and options[CulebraOptions.FIND_VIEWS_WITH_CONTENT_DESCRIPTION]:
+            return Descriptor.CONTENT_DESCRIPTION
+        else:
+            t = view.getText()
+            if t and options[CulebraOptions.FIND_VIEWS_WITH_TEXT]:
+                return Descriptor.TEXT
+        return Descriptor.ID
+    
+
+def fillAutoRegexpsRes():
+    are = {}
+    are['clock'] = re.compile('[012]?\d:[0-5]\d')
+    d = "("
+    for i in range(7):
+        d += calendar.day_abbr[i]
+        if i != 6:
+            d += '|'
+    d += '), ('
+    for i in range(1, 13):
+        d += calendar.month_name[i]
+        if i != 12:
+            d += '|'
+    d += ') [0123]\d'
+    are['date'] = re.compile(d, re.IGNORECASE)
+    are['battery'] = re.compile('Charging, \d\d%')
+    return are
+
+CulebraOptions.AUTO_REGEXPS_RES = fillAutoRegexpsRes()
+SB_NO_JAR = 'no-jar'
+SB_JAR = 'jar'
+SB_JAR_LINUX = 'jar-linux'
+SHEBANG = {
+    SB_NO_JAR: '#! /usr/bin/env python',
+    SB_JAR: '#! /usr/bin/env shebang monkeyrunner -plugin $ANDROID_VIEW_CLIENT_HOME/bin/androidviewclient-$ANDROID_VIEW_CLIENT_VERSION.jar @!',
+    SB_JAR_LINUX: '#! /usr/local/bin/shebang monkeyrunner -plugin $AVC_HOME/bin/androidviewclient-$AVC_VERSION.jar @!'
+    }
+
+indent = ''
+prefix = ''
+
+def shortAndLongOptions():
+    '''
+    @return: the list of corresponding (short-option, long-option) tuples
+    '''
+
+    short_opts = CulebraOptions.SHORT_OPTS.replace(':', '')
+    if len(short_opts) != len(CulebraOptions.LONG_OPTS):
+        s = ""
+        for i in range(max(len(short_opts), len(CulebraOptions.LONG_OPTS))):
+            l = ''
+            try:
+                l = short_opts[i]
+            except IndexError:
+                pass
+            L = ''
+            try:
+                L = CulebraOptions.LONG_OPTS[i]
+            except IndexError:
+                pass
+            s += "%3s - %s\n" % (l, L)
+        raise Exception('There is a mismatch between short and long options: short=%d, long=%d\n%s' %
+                        (len(short_opts), len(CulebraOptions.LONG_OPTS), s))
+    t = tuple(short_opts) + tuple(CulebraOptions.LONG_OPTS)
+    l2 = len(t) / 2
+    sl = []
+    for i in range(l2):
+        sl.append((t[i], t[i + l2]))
+    return sl
+
+def usage(exitVal=1):
+    print >> sys.stderr, USAGE % progname
+    print >> sys.stderr, "Try '%s --help' for more information." % progname
+    sys.exit(exitVal)
+
+def help():
+    print >> sys.stderr, USAGE % progname
+    print >> sys.stderr
+    print >> sys.stderr, "Options:"
+    for so, lo in shortAndLongOptions():
+        o = '  -%c, --%s' % (so, lo)
+        if lo[-1] == '=':
+            o += CulebraOptions.LONG_OPTS_ARG[lo[:-1]]
+        try:
+            o = '%-34s %-45s' % (o, CulebraOptions.OPTS_HELP[so])
+        except:
+            pass
+        print >> sys.stderr, o
+    sys.exit(0)
+
+def version():
+    print progname, __version__
+    sys.exit(0)
+
+def autoRegexpsHelp():
+    print >> sys.stderr, "Available %s options:" % CulebraOptions.AUTO_REGEXPS
+    print >> sys.stderr, "\thelp: prints this help"
+    print >> sys.stderr, "\tall: includes all the available regexps"
+    for r in CulebraOptions.AUTO_REGEXPS_RES:
+        print >> sys.stderr, "\t%s: %s" % (r, CulebraOptions.AUTO_REGEXPS_RES[r].pattern)
+    print >> sys.stderr
+    sys.exit(0)
+
+def error(msg, fatal=False):
+    print >> sys.stderr, "%s: ERROR: %s" % (progname, msg)
+    if fatal:
+        sys.exit(1)
+
+def notNull(val, default):
+    if val:
+        return val
+    return default
+
+def printVerboseComments(view):
+    '''
+    Prints the verbose comments for view.
+    '''
+
+    print '\n%s# class=%s' % (indent, view.getClass()),
+    try:
+        text = view.getText()
+        if text:
+            u = 'u' if isinstance(text, unicode) else ''
+            if '\n' in text:
+                text = re.sub(r'\n(.)', r'\n#\1', text)
+            print " text=%c'%s'" % (u, text),
+    except:
+        pass
+    try:
+        contentDescription = view.getContentDescription()
+        if contentDescription:
+            print u" cd='%s'" % contentDescription,
+    except:
+        pass
+    try:
+        tag = view.getTag()
+        if tag and tag != 'null':
+            print ' tag=%s' % tag,
+    except:
+        pass
+    print
+
+def variableNameFromIdOrKey(view):
+    '''
+    Returns a suitable variable name from the id.
+
+    @type view: L{View}
+    @param id: the View from where the I{uniqueId} is obtained
+
+    @return: the variable name from the id
+    '''
+
+    var = view.variableNameFromId()
+    if options[CulebraOptions.USE_DICTIONARY]:
+        return '%sviews[\'%s\']' % (prefix, notNull(dictionaryKeyFrom(options[CulebraOptions.DICTIONARY_KEYS_FROM], view), var))
+    else:
+        return var
+
+def dictionaryKeyFrom(key, view):
+    if key == 'id':
+        return view.getUniqueId()
+    elif key == 'text':
+        return view.getText()
+    elif key == 'content-description':
+        return view.getContentDescription()
+    else:
+        raise Exception('Not a valid dictionary key: %s' % key)
+
+def escapeRegexpSpecialChars(text):
+    return re.escape(text)
+
+def printFindViewWithText(view, useregexp, op=Operation.ASSIGN, arg=None):
+    '''
+    Prints the corresponding statement.
+
+    @type view: L{View}
+    @param view: the View
+    '''
+
+    text = view.getText()
+    isUnicode = isinstance(text, unicode)
+    if isUnicode and sys.stdout.encoding is None:
+        warnings.warn('''\
+You are trying to print unicode characters to an unencoded stdout, it will probably fail.
+You have to set PYTHONIOENCODING environment variable. For example:
+       export PYTHONIOENCODING=utf-8
+        ''')
+
+    u = 'u' if isUnicode else ''
+    if text:
+        var = variableNameFromIdOrKey(view)
+        if text.find(u"\n") > 0 or text.find(u"'") > 0:
+            # 2 quotes + 1 quote = 3 quotes
+            text = "''%s''" % text
+        if useregexp:
+            # if there are special chars already in the text escape them
+            text = escapeRegexpSpecialChars(text)
+            if options[CulebraOptions.AUTO_REGEXPS]:
+                for r in options[CulebraOptions.AUTO_REGEXPS]:
+                    autoRegexp = CulebraOptions.AUTO_REGEXPS_RES[r]
+                    if autoRegexp.match(text):
+                        text = autoRegexp.pattern
+                        break
+            text = "re.compile(%s'%s')" % (u, text)
+        else:
+            text = "%s'%s'" % (u, text)
+            
+        if op == Operation.ASSIGN:
+            if options[CulebraOptions.MULTI_DEVICE]:
+                warnings.warn('Multi-device not implemented yet for this case')
+            else:
+                logAction(u'finding view with text=%s' % text)
+                print u'%s%s = %svc.findViewWithTextOrRaise(%s)' % (indent, var, prefix, text)
+        elif op == Operation.LONG_TOUCH_VIEW:
+            root = ', root=%svc.findViewByIdOrRaise(\'%s\')' % (prefix, arg.getUniqueId()) if arg else ''
+            if options[CulebraOptions.MULTI_DEVICE]:
+                logAction(u'long touch view with text=%s on ${serialno}' % text)
+                print u'%s[_vc.findViewWithTextOrRaise(%s%s).longTouch() for _vc in %sallVcs()]' % (indent, text, root, prefix)
+            else:
+                logAction(u'long touch view with text=%s' % text)
+                print u'%s%svc.findViewWithTextOrRaise(%s%s).longTouch()' % (indent, prefix, text, root)
+        elif op == Operation.TOUCH_VIEW:
+            root = ', root=%svc.findViewByIdOrRaise(\'%s\')' % (prefix, arg.getUniqueId()) if arg else ''
+            if options[CulebraOptions.MULTI_DEVICE]:
+                logAction(u'touching view with text=%s on ${serialno}' % text)
+                print u'%s[_vc.findViewWithTextOrRaise(%s%s).touch() for _vc in %sallVcs()]' % (indent, text, root, prefix)
+            else:
+                logAction(u'touching view with text=%s' % text)
+                print u'%s%svc.findViewWithTextOrRaise(%s%s).touch()' % (indent, prefix, text, root)
+        elif op == Operation.TYPE:
+            if options[CulebraOptions.MULTI_DEVICE]:
+                warnings.warn('Multi-device not implemented yet for this case')
+            else:
+                print '%s%svc.findViewWithTextOrRaise("%s").type(u"%s")' % (indent, prefix, text, arg)
+        elif op == Operation.SET_TEXT:
+            if options[CulebraOptions.MULTI_DEVICE]:
+                warnings.warn('Multi-device not implemented yet for this case')
+            else:
+                print '%s%svc.findViewWithTextOrRaise(%s).setText(u"%s")' % (indent, prefix, text, arg)
+        elif op in [Operation.FLING_BACKWARD, Operation.FLING_FORWARD, Operation.FLING_TO_BEGINNING, Operation.FLING_TO_END]:
+            if options[CulebraOptions.MULTI_DEVICE]:
+                warnings.warn('Multi-device not implemented yet for this case')
+            else:
+                commandName = Operation.toCommandName(op)
+                logAction(u'flinging view with text=%s %s' % (text, commandName))
+                print u'%s%svc.findViewWithTextOrRaise(%s).uiScrollable.%s()' % (indent, prefix, text, commandName)
+        elif op == Operation.TEST:
+            if options[CulebraOptions.MULTI_DEVICE]:
+                warnings.warn('Multi-device not implemented yet for this case')
+            else:
+                print '%s%sassertIsNotNone(%svc.findViewWithText(%s))' % (indent, prefix, prefix, text)
+    elif kwargs1[CulebraOptions.VERBOSE]:
+        warnings.warn('View with id=%s has no text' % view.getUniqueId())
+
+def printFindViewWithContentDescription(view, useregexp, op=Operation.ASSIGN, arg=None):
+    '''
+    Prints the corresponding statement.
+
+    @type view: L{View}
+    @param view: the View
+    '''
+
+    contentDescription = view.getContentDescription()
+    if contentDescription:
+        var = variableNameFromIdOrKey(view)
+        if useregexp:
+            if options[CulebraOptions.AUTO_REGEXPS]:
+                for r in options[CulebraOptions.AUTO_REGEXPS]:
+                    autoRegexp = CulebraOptions.AUTO_REGEXPS_RES[r]
+                    if autoRegexp.match(contentDescription):
+                        contentDescription = autoRegexp.pattern
+                        break
+            contentDescription = "re.compile(u'''%s''')" % contentDescription
+        else:
+            contentDescription = "u'''%s'''" % contentDescription
+        
+        if op == Operation.ASSIGN:
+            if options[CulebraOptions.MULTI_DEVICE]:
+                warnings.warn('Multi-device not implemented yet for this case')
+            else:
+                logAction(u'finding view with content-description=%s' % contentDescription)
+                print '%s%s = %svc.findViewWithContentDescriptionOrRaise(%s)' % (indent, var, prefix, contentDescription)
+        elif op == Operation.LONG_TOUCH_VIEW:
+            if options[CulebraOptions.MULTI_DEVICE]:
+                logAction(u'long touch view with content-description=%s on ${serialno}' % contentDescription)
+                # print u'%s[_vc.findViewWithTextOrRaise(%s).touch() for _vc in %sallVcs()]' % (indent, text, root)
+                print u'%s[_vc.findViewWithContentDescriptionOrRaise(%s).longTouch() for _vc in %sallVcs()]' % (indent, contentDescription, prefix)
+            else:
+                logAction(u'long touch view with content-description=%s' % contentDescription)
+                print u'%s%svc.findViewWithContentDescriptionOrRaise(%s).longTouch()' % (indent, prefix, contentDescription)
+        elif op == Operation.TOUCH_VIEW:
+            if options[CulebraOptions.MULTI_DEVICE]:
+                logAction(u'touching view with content-description=%s on ${serialno}' % contentDescription)
+                # print u'%s[_vc.findViewWithTextOrRaise(%s).touch() for _vc in %sallVcs()]' % (indent, text, root)
+                print u'%s[_vc.findViewWithContentDescriptionOrRaise(%s).touch() for _vc in %sallVcs()]' % (indent, contentDescription, prefix)
+            else:
+                logAction(u'touching view with content-description=%s' % contentDescription)
+                print u'%s%svc.findViewWithContentDescriptionOrRaise(%s).touch()' % (indent, prefix, contentDescription)
+        elif op == Operation.TYPE:
+            if options[CulebraOptions.MULTI_DEVICE]:
+                warnings.warn('Multi-device not implemented yet for this case')
+            else:
+                print '%s%svc.findViewWithContentDescriptionOrRaise(%s).type(u"%s")' % (indent, prefix, contentDescription, arg)
+        elif op == Operation.SET_TEXT:
+            if options[CulebraOptions.MULTI_DEVICE]:
+                warnings.warn('Multi-device not implemented yet for this case')
+            else:
+                print '%s%svc.findViewWithContentDescriptionOrRaise(%s).setText(u"%s")' % (indent, prefix, contentDescription, arg)
+        elif op == Operation.TEST:
+            if options[CulebraOptions.MULTI_DEVICE]:
+                warnings.warn('Multi-device not implemented yet for this case')
+            else:
+                print '%s%sassertEquals(%svc.findViewWithContentDescriptionOrRaise(%s).getText(), u\'\'\'%s\'\'\')' % (indent, prefix, prefix, contentDescription, arg)
+        elif op in [Operation.FLING_BACKWARD, Operation.FLING_FORWARD, Operation.FLING_TO_BEGINNING, Operation.FLING_TO_END]:
+            if options[CulebraOptions.MULTI_DEVICE]:
+                warnings.warn('Multi-device not implemented yet for this case')
+            else:
+                commandName = Operation.toCommandName(op)
+                logAction(u'flinging view with content-description=%s %s' % (contentDescription, commandName))
+                print u'%s%svc.findViewWithContentDescriptionOrRaise(%s).uiScrollable.%s()' % (indent, prefix, contentDescription, commandName)
+        else:
+            error("Invalid operation in %s: %s" % (sys._getframe().f_code.co_name), op)
+            
+    elif kwargs1[CulebraOptions.VERBOSE]:
+        warnings.warn('View with id=%s has no content-description' % view.getUniqueId())
+
+def printFindViewById(view, op=Operation.ASSIGN, arg=None):
+    '''
+    Prints the corresponding statement.
+
+    @type view: L{View}
+    @param view: the View
+    '''
+
+    var = variableNameFromIdOrKey(view)
+    _id = view.getId() if view.getId() else view.getUniqueId()
+    if op == Operation.ASSIGN:
+        if options[CulebraOptions.MULTI_DEVICE]:
+            logAction('finding view with id=%s on ${serialno}' % _id)
+            print '%s%s = [_vc.findViewByIdOrRaise("%s") for _vc in %sallVcs()]' % (indent, var, _id, prefix)
+        else:
+            logAction('finding view with id=%s' % _id)
+            print '%s%s = %svc.findViewByIdOrRaise("%s")' % (indent, var, prefix, _id)
+    elif op == Operation.LONG_TOUCH_VIEW:
+        if options[CulebraOptions.MULTI_DEVICE]:
+            logAction(u'long touch view with id=%s on ${serialno}' % _id)
+            print '%s[_vc.findViewByIdOrRaise("%s").longTouch() for _vc in %sallVcs()]' % (indent, _id, prefix)
+        else:
+            logAction(u'long touch view with id=%s' % _id)
+            print '%s%svc.findViewByIdOrRaise("%s").longTouch()' % (indent, prefix, _id)
+    elif op == Operation.TOUCH_VIEW:
+        if options[CulebraOptions.MULTI_DEVICE]:
+            logAction(u'touching view with id=%s on ${serialno}' % _id)
+            print '%s[_vc.findViewByIdOrRaise("%s").touch() for _vc in %sallVcs()]' % (indent, _id, prefix)
+        else:
+            logAction(u'touching view with id=%s' % _id)
+            print '%s%svc.findViewByIdOrRaise("%s").touch()' % (indent, prefix, _id)
+    elif op == Operation.TYPE:
+        if options[CulebraOptions.MULTI_DEVICE]:
+            warnings.warn('Multi-device not implemented yet for this case')
+        else:
+            logAction('typing "%s" on view with id=%s' % (arg, _id))
+            print '%s%svc.findViewByIdOrRaise("%s").type(u"%s")' % (indent, prefix, _id, arg)
+    elif op == Operation.SET_TEXT:
+        if options[CulebraOptions.MULTI_DEVICE]:
+            warnings.warn('Multi-device not implemented yet for this case')
+        else:
+            logAction('setting text "%s" on view with id=%s' % (arg, _id))
+            print '%s%svc.findViewByIdOrRaise("%s").setText(u"%s")' % (indent, prefix, _id, arg)
+    elif op == Operation.TEST:
+        if options[CulebraOptions.MULTI_DEVICE]:
+            warnings.warn('Multi-device not implemented yet for this case')
+        else:
+            print '%s%sassertEquals(%svc.findViewByIdOrRaise("%s").getText(), u\'\'\'%s\'\'\')' % (indent, prefix, prefix, _id, arg)
+    elif op in [Operation.FLING_BACKWARD, Operation.FLING_FORWARD, Operation.FLING_TO_BEGINNING, Operation.FLING_TO_END]:
+        if options[CulebraOptions.MULTI_DEVICE]:
+            warnings.warn('Multi-device not implemented yet for this case')
+        else:
+            commandName = Operation.toCommandName(op)
+            logAction(u'flinging view with id=%s %s' % (_id, commandName))
+            print u'%s%svc.findViewWithIdOrRaise(u"%s").uiScrollable.%s()' % (indent, prefix, _id, commandName)
+    else:
+        error("Invalid operation in %s: %s" % (sys._getframe().f_code.co_name, op))
+
+
+def printTraverse(dump=None):
+    '''
+    Prints the result of traversing the tree.
+    A previously obtained dump can be passed as a parameter and in such case that
+    tree is used.
+    
+    @param dump: Dump of Views previously obtained via L{ViewClient.dump()}
+    @type dump: list
+    '''
+    
+    print 
+    if dump:
+        for view in dump:
+            transform(view)
+    else:
+        vc.traverse(transform=transform)
+    print
+
+def printDump(window, dump=None):
+    '''
+    Prints a dump.
+    
+    @param window: The window id to use to print the dump
+    @type window: int or str
+    @param dump: Dump of Views previously obtained via L{ViewClient.dump()}
+    @type dump: list
+    '''
+    
+    if options[CulebraOptions.MULTI_DEVICE]:
+        logAction('dumping content of window=%s on ${serialno}' % window)
+        print '%s[_vc.dump(window=%s) for _vc in %sallVcs()]' % (indent, window, prefix)
+    else:
+        logAction('dumping content of window=%s' % window)
+        print '%s%svc.dump(window=%s)' % (indent, prefix, window)
+    
+    if not options[CulebraOptions.DO_NOT_VERIFY_SCREEN_DUMP]:
+        printTraverse(dump)
+    
+def printSleep(secs):
+    '''
+    Prints a sleep.
+    
+    This method relies on shortcut variables being set (i.e. _s)
+    '''
+    
+    if options[CulebraOptions.MULTI_DEVICE]:
+        print '%s[_vc.sleep(%s) for _vc in %sallVcs()]' % (indent, secs if secs != Operation.DEFAULT else '_s', prefix)
+    else:
+        print '%s%svc.sleep(%s)' % (indent, prefix, secs if secs != Operation.DEFAULT else '_s')
+
+def printWake():
+    '''
+    Prints a wake.
+
+    :return:
+    '''
+
+    if options[CulebraOptions.MULTI_DEVICE]:
+        print '%s[_vc.device.wake() for _vc in %sallVcs()]' % (indent, prefix)
+    else:
+        print '%s%svc.device.wake()' % (indent, prefix)
+
+def printPress(keycode):
+    '''
+    Prints a key press
+    '''
+    
+    if options[CulebraOptions.MULTI_DEVICE]:
+        logAction(u'pressing key=%s on ${serialno}' % keycode)
+        print '%s[_d.press(\'%s\') for _d in %sallDevices()]' % (indent, keycode, prefix)
+    else:
+        logAction(u'pressing key=%s' % keycode)
+        print '%s%sdevice.press(\'%s\')' % (indent, prefix, keycode)
+    
+def printDrag(start, end, duration, steps, unit, orientation):
+    '''
+    Prints a drag
+    '''
+    
+    if unit == Unit.PX:
+        if options[CulebraOptions.MULTI_DEVICE]:
+            warnings.warn('Multi-device not implemented yet for this case')
+        else:
+            print '%s%sdevice.drag(%s, %s, %d, %d, %d)' % (indent, prefix, start, end, duration, steps, orientation) 
+    elif unit == Unit.DIP:
+        if options[CulebraOptions.MULTI_DEVICE]:
+            warnings.warn('Multi-device not implemented yet for this case')
+        else:
+            print '%s%sdevice.dragDip(%s, %s, %d, %d, %d)' % (indent, prefix, start, end, duration, steps, orientation) 
+    else:
+        raise RuntimeError('Invalid unit: %s' % unit)
+    
+def printTouch(x, y, unit, orientation):
+    '''
+    Prints a touch
+    '''
+    
+    if unit == Unit.PX:
+        if options[CulebraOptions.MULTI_DEVICE]:
+            warnings.warn('Multi-device not implemented yet for this case')
+        else:
+            logAction(u'touching point by PX @ (%s, %s) orientation=%s' % (x, y, orientation))
+            print '%s%sdevice.touch(%s, %s, %s)' % (indent, prefix, x, y, orientation)
+    elif unit == Unit.DIP:
+        if options[CulebraOptions.MULTI_DEVICE]:
+            warnings.warn('Multi-device not implemented yet for this case')
+        else:
+            logAction(u'touching point by DIP @ (%s, %s) orientation=%s' % (x, y, orientation))
+            print '%s%sdevice.touchDip(%s, %s, %s)' % (indent, prefix, x, y, orientation)
+    else:
+        raise RuntimeError('Invalid unit: %s' % unit)
+    
+def printLongTouch(x, y, duration, unit, orientation):
+    '''
+    Prints a long touch
+    '''
+    
+    if unit == Unit.PX:
+        if options[CulebraOptions.MULTI_DEVICE]:
+            warnings.warn('Multi-device not implemented yet for this case')
+        else:
+            logAction(u'long touching point by PX @ (%s, %s) duration=%s orientation=%s' % (x, y, duration, orientation))
+            print '%s%sdevice.longTouch(%s, %s, %s, %s)' % (indent, prefix, x, y, duration, orientation)
+    elif unit == Unit.DIP:
+        if options[CulebraOptions.MULTI_DEVICE]:
+            warnings.warn('Multi-device not implemented yet for this case')
+        else:
+            logAction(u'long touching point by DIP @ (%s, %s) duration=%s orientation=%s' % (x, y, duration, orientation))
+            print '%s%sdevice.longTouch(%s, %s, %s, %s)' % (indent, prefix, x, y, duration, orientation)
+    else:
+        raise RuntimeError('Invalid unit: %s' % unit)
+    
+def printSaveViewScreenshot(view, filename, _format):
+    '''
+    Prints the writeImageToFile for the specified L{View}.
+    
+    @type view: L{View}
+    @param view: the View
+    @type filename: str
+    @param filename: the filename to store the image
+    @type _format: str
+    @param _format: The image format (i.e. PNG)
+    '''
+
+    if options[CulebraOptions.MULTI_DEVICE]:
+        warnings.warn('Multi-device not implemented yet for this case')
+    else:
+        # FIXME: if -u was passed in the command line then we are not saving the variables and thus
+        # next line will generate an error in the script as the variable is 'undefined'
+        print '%s%s.writeImageToFile(\'%s\', \'%s\')' % (indent, view.variableNameFromId(), filename, _format)
+    
+def printFlingBackward(view):
+    if options[CulebraOptions.MULTI_DEVICE]:
+        warnings.warn('Multi-device not implemented yet for this case')
+    else:
+        # FIXME: if -u was passed in the command line then we are not saving the variables and thus
+        # next line will generate an error in the script as the variable is 'undefined'
+        logAction('flinging backward view with id=%s' % view.getId())
+        print '%s%s.uiScrollable.flingBackward()' % (indent, view.variableNameFromId())
+    
+def printFlingForward(view):
+    if options[CulebraOptions.MULTI_DEVICE]:
+        warnings.warn('Multi-device not implemented yet for this case')
+    else:
+        # FIXME: if -u was passed in the command line then we are not saving the variables and thus
+        # next line will generate an error in the script as the variable is 'undefined'
+        logAction('flinging forward view with id=%s' % view.getId())
+        print '%s%s.uiScrollable.flingForward()' % (indent, view.variableNameFromId())
+    
+def printFlingToBeginning(view):
+    if options[CulebraOptions.MULTI_DEVICE]:
+        warnings.warn('Multi-device not implemented yet for this case')
+    else:
+        # FIXME: if -u was passed in the command line then we are not saving the variables and thus
+        # next line will generate an error in the script as the variable is 'undefined'
+        logAction('flinging to beginning view with id=%s' % view.getId())
+        print '%s%s.uiScrollable.flingToBeginning()' % (indent, view.variableNameFromId())
+    
+def printFlingToEnd(view):
+    if options[CulebraOptions.MULTI_DEVICE]:
+        warnings.warn('Multi-device not implemented yet for this case')
+    else:
+        # FIXME: if -u was passed in the command line then we are not saving the variables and thus
+        # next line will generate an error in the script as the variable is 'undefined'
+        logAction('flinging to end view with id=%s' % view.getId())
+        print '%s%s.uiScrollable.flingToEnd()' % (indent, view.variableNameFromId())
+    
+def printOpenNotification():
+    if options[CulebraOptions.MULTI_DEVICE]:
+        warnings.warn('Multi-device not implemented yet for this case')
+    else:
+        logAction('opening Notification')
+        print '%s%svc.uiDevice.openNotification()' % (indent, prefix)
+    
+def printOpenQuickSettings():
+    if options[CulebraOptions.MULTI_DEVICE]:
+        warnings.warn('Multi-device not implemented yet for this case')
+    else:
+        logAction('opening Quick Settings')
+        print '%s%svc.uiDevice.openQuickSettings()' % (indent, prefix)
+    
+def printChangeLanguage(code):
+    if options[CulebraOptions.MULTI_DEVICE]:
+        warnings.warn('Multi-device not implemented yet for this case')
+    else:
+        logAction('Changing language to %s' % code)
+        print '%s%svc.uiDevice.changeLanguage("%s")' % (indent, prefix, code)
+
+def printTakeSnapshot(filename, _format, deviceart, dropshadow, screenglare):
+    '''
+    Prints the corresponding writeImageToFile() to take a snapshot
+    '''
+    
+    if options[CulebraOptions.MULTI_DEVICE]:
+        warnings.warn('Multi-device not implemented yet for this case')
+    else:
+        logAction(u'taking snapshot @ %s format=%s %s %s %s' % (filename, _format, deviceart, dropshadow, screenglare))
+        print '%s%svc.writeImageToFile(\'%s\', \'%s\', \'%s\', %s, %s)' % (indent, prefix, filename, _format, deviceart, dropshadow, screenglare)
+        
+    
+def traverseAndPrint(view):
+    '''
+    Traverses the View tree and prints the corresponding statement.
+
+    @type view: L{View}
+    @param view: the View
+    '''
+
+    if DEBUG:
+        print >> sys.stderr, "traverseAndPrint(view=%s)" % view.getId()
+    if options[CulebraOptions.VERBOSE_COMMENTS]:
+        printVerboseComments(view)
+    if options[CulebraOptions.FIND_VIEWS_BY_ID]:
+        printFindViewById(view)
+    if options[CulebraOptions.FIND_VIEWS_WITH_TEXT]:
+        printFindViewWithText(view, options[CulebraOptions.USE_REGEXPS])
+    if options[CulebraOptions.FIND_VIEWS_WITH_CONTENT_DESCRIPTION]:
+        printFindViewWithContentDescription(view, options[CulebraOptions.USE_REGEXPS])
+    if options[CulebraOptions.SAVE_VIEW_SCREENSHOTS]:
+        _format = 'PNG'
+        filename = options[CulebraOptions.SAVE_VIEW_SCREENSHOTS] + os.sep + view.variableNameFromId() + '.' + _format.lower()
+        printSaveViewScreenshot(view, filename, _format)
+
+
+def printStartActivity(component):
+    '''
+    Prints the corresponding startActivity().
+
+    :param component: the component
+    '''
+
+    if options[CulebraOptions.MULTI_DEVICE]:
+        warnings.warn('Multi-device not implemented yet for this case')
+    else:
+        logAction(u'starting activity=%s' % (component))
+        print '%s%sdevice.startActivity(\'%s\')' % (indent, prefix, component)
+    printSleep(3)
+
+
+def printTouchViewUiAutomatorHelper(view, selector):
+    '''
+    Prints the corresponding touch
+    '''
+    if options[CulebraOptions.MULTI_DEVICE]:
+        warnings.warn('Multi-device not implemented yet for this case')
+    else:
+        logAction(u'touching View by selector=%s' % (selector))
+        print '%s%svc.touch(selector=\'%s\')' % (indent, prefix, selector)
+
+
+def printLongTouchViewUiAutomatorHelper(view, selector):
+    '''
+    Prints the corresponding long touch
+    '''
+    if options[CulebraOptions.MULTI_DEVICE]:
+        warnings.warn('Multi-device not implemented yet for this case')
+    else:
+        logAction(u'long-touching View by selector=%s' % (selector))
+        print '%s%svc.longTouch(selector=\'%s\')' % (indent, prefix, selector)
+
+
+def printSwipeUiAutomatorHelper(startX, startY, endX, endY, steps, unit, orientation):
+    '''
+    Prints a swipe
+    '''
+
+    if unit == Unit.PX:
+        if options[CulebraOptions.MULTI_DEVICE]:
+            warnings.warn('Multi-device not implemented yet for this case')
+        else:
+            print '%s%svc.swipe(startX=%d, startY=%d, endX=%d, endY=%d, steps=%d)' % (indent, prefix, startX, startY, endX, endY, steps)
+    elif unit == Unit.DIP:
+        if options[CulebraOptions.MULTI_DEVICE]:
+            warnings.warn('Multi-device not implemented yet for this case')
+        else:
+            print '%s%svc.swipe(startX=%d, startY=%d, endX=%d, endY=%d, steps=%d)' % (indent, prefix, startX, startY, endX, endY, steps)
+    else:
+        raise RuntimeError('Invalid unit: %s' % unit)
+
+
+def printPressBackUiAutomatorHelper():
+    '''
+    Prints the corresponding press
+    '''
+    if options[CulebraOptions.MULTI_DEVICE]:
+        warnings.warn('Multi-device not implemented yet for this case')
+    else:
+        logAction(u'pressing BACK')
+        print '%s%svc.pressBack()' % (indent, prefix)
+
+def printPressHomeUiAutomatorHelper():
+    '''
+    Prints the corresponding press
+    '''
+    if options[CulebraOptions.MULTI_DEVICE]:
+        warnings.warn('Multi-device not implemented yet for this case')
+    else:
+        logAction(u'pressing HOME')
+        print '%s%svc.pressHome()' % (indent, prefix)
+
+def printPressRecentAppsUiAutomatorHelper():
+    '''
+    Prints the corresponding press
+    '''
+    if options[CulebraOptions.MULTI_DEVICE]:
+        warnings.warn('Multi-device not implemented yet for this case')
+    else:
+        logAction(u'pressing RECENT APPS')
+        print '%s%svc.pressRecentApps()' % (indent, prefix)
+
+
+def printOperation(view, op, *args):
+    if len(args) == 0:
+        # We use tuple values in the rest of this method, so if an empty tuple was passed
+        # replace it by one containing None
+        args = ( None, None )
+    elif len(args) < 2:
+        # We use tuple values in the rest of this method, so if an empty tuple was passed
+        # replace it by one containing None
+        args = ( args[0], None )
+    if DEBUG:
+        print >> sys.stderr, "printOperation(",
+        print >> sys.stderr, view.__str__(),
+        print >> sys.stderr, ",", op, ",",
+        for a in args:
+            if isinstance(a, unicode):
+                print >> sys.stderr, a.encode(encoding='ascii', errors='replace'), ", ", 
+            else:
+                print >> sys.stderr, a,
+        print >> sys.stderr, ")"
+    if op == Operation.SLEEP:
+        printSleep(secs=args[0])
+        return
+    elif op == Operation.PRESS:
+        printPress(keycode=args[0])
+        return
+    elif op == Operation.PRESS_BACK:
+        printPress('BACK')
+        return
+    elif op == Operation.PRESS_BACK_UI_AUTOMATOR_HELPER:
+        printPressBackUiAutomatorHelper()
+        return
+    elif op == Operation.PRESS_HOME:
+        printPress('HOME')
+        return
+    elif op == Operation.PRESS_HOME_UI_AUTOMATOR_HELPER:
+        printPressHomeUiAutomatorHelper()
+        return
+    elif op == Operation.PRESS_RECENT_APPS:
+        printPress('RECENT_APPS')
+        return
+    elif op == Operation.PRESS_RECENT_APPS_UI_AUTOMATOR_HELPER:
+        printPressRecentAppsUiAutomatorHelper()
+        return
+    elif op == Operation.DUMP:
+        printDump(window=args[0], dump=args[1])
+        return
+    elif op == Operation.DRAG:
+        printDrag(start=args[0], end=args[1], duration=args[2], steps=args[3], unit=args[4], orientation=args[5])
+        return
+    elif op == Operation.TOUCH_POINT:
+        printTouch(x=args[0], y=args[1], unit=args[2], orientation=args[3])
+        return
+    elif op == Operation.TOUCH_VIEW_UI_AUTOMATOR_HELPER:
+        printTouchViewUiAutomatorHelper(view=view, selector=args[0])
+        return
+    elif op == Operation.LONG_TOUCH_POINT:
+        printLongTouch(x=args[0], y=args[1], duration=args[2], unit=args[3], orientation=args[4])
+        return
+    elif op == Operation.LONG_TOUCH_VIEW_UI_AUTOMATOR_HELPER:
+        printLongTouchViewUiAutomatorHelper(view=view, selector=args[0])
+        return
+    elif op == Operation.TRAVERSE:
+        printTraverse()
+        return
+    elif op == Operation.SNAPSHOT:
+        printTakeSnapshot(filename=args[0], _format=args[1], deviceart=args[2], dropshadow=args[3], screenglare=args[4])
+        return
+    elif op == Operation.SWIPE_UI_AUTOMATOR_HELPER:
+        printSwipeUiAutomatorHelper(startX=args[0], startY=args[1], endX=args[2], endY=args[3], steps=args[4], unit=args[5], orientation=args[6])
+        return
+    elif op == Operation.VIEW_SNAPSHOT:
+        printSaveViewScreenshot(view, filename=args[0], _format=args[1])
+        return
+# FIXME: I moved this to printFindViewWithContentDescription(..,op.,,) to solve the problem of variable not defined when
+# the script is invoked with -u
+#    elif op == Operation.FLING_BACKWARD:
+#        printFlingBackward(view)
+#        return
+#    elif op == Operation.FLING_FORWARD:
+#        printFlingForward(view)
+#        return
+#    elif op == Operation.FLING_TO_BEGINNING:
+#        printFlingToBeginning(view)
+#        return
+#    elif op == Operation.FLING_TO_END:
+#        printFlingToEnd(view)
+#        return
+    elif op == Operation.OPEN_NOTIFICATION:
+        printOpenNotification()
+        return
+    elif op == Operation.OPEN_QUICK_SETTINGS:
+        printOpenQuickSettings()
+        return
+    elif op == Operation.CHANGE_LANGUAGE:
+        printChangeLanguage(code=args[0])
+        return
+    elif op == Operation.START_ACTIVITY:
+        printStartActivity(component=args[0])
+        return
+    elif op == Operation.WAKE:
+        printWake()
+        return
+    
+    if view is None:
+        warnings.warn('view is None. Perhaps you forgot to add some "op" in the previous if.')
+        
+    bd = Descriptor.findBestDescriptor(view)
+    if bd == Descriptor.CONTENT_DESCRIPTION:
+        printFindViewWithContentDescription(view, options[CulebraOptions.USE_REGEXPS], op, args[0])
+    elif bd == Descriptor.TEXT:
+        printFindViewWithText(view, options[CulebraOptions.USE_REGEXPS], op, args[0])
+    else:
+        printFindViewById(view, op, args[0])
+        
+def str2bool(v):
+    if len(v) < 1 or len(v) > 5:
+        # len('false')=5
+        warnings.warn("str2bool: strange value for conversion '%s' will be considered 'false'" % v)
+    return v.lower() in ("yes", "true", "t", "1", "on")
+
+def value2dictionaryKey(v):
+    v = v.lower()
+    k = ['id', 'text', 'content-description']
+    sk = ['i', 't', 'd']
+    if v in k:
+        return v
+    if v in sk:
+        return k[sk.index(v)]
+    error("Invalid dictionary key: %s" % v)
+    usage()
+
+def getShebangJar():
+    if options[CulebraOptions.USE_JAR]:
+        import java
+        osName = java.lang.System.getProperty('os.name')
+        if osName == 'Linux':
+            return SHEBANG[SB_JAR_LINUX]
+        else:
+            return SHEBANG[SB_JAR]
+    else:
+        return SHEBANG[SB_NO_JAR]
+
+def getWindowOption():
+    return options[CulebraOptions.WINDOW] if isinstance(options[CulebraOptions.WINDOW], str) and options[CulebraOptions.WINDOW][0] in '-0123456789' else "'%s'" % options[CulebraOptions.WINDOW]
+
+def printScriptHeader():
+    print '''%s
+# -*- coding: utf-8 -*-
+\'\'\'
+Copyright (C) 2013-2016  Diego Torres Milano
+Created on %s by Culebra v%s
+                      __    __    __    __
+                     /  \  /  \  /  \  /  \ 
+____________________/  __\/  __\/  __\/  __\_____________________________
+___________________/  /__/  /__/  /__/  /________________________________
+                   | / \   / \   / \   / \   \___
+                   |/   \_/   \_/   \_/   \    o \ 
+                                           \_____/--<
+@author: Diego Torres Milano
+@author: Jennifer E. Swofford (ascii art snake)
+\'\'\'
+
+
+import re
+import sys
+import os
+''' % (getShebangJar(), date.today(), __version__)
+
+def printUnittestImport():
+    print '''
+import unittest
+'''
+
+def printAppendToSysPath():
+    print '''
+try:
+    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+'''
+
+def printPrependToSysPath():
+    print '''
+try:
+    sys.path.insert(0, os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+'''
+
+def printLogAction(action, priority='D'):
+    # FIXME: This works only for CulebraTestCases
+    # This relies on shortcut variables already set (i.e. _v)
+    if options[CulebraOptions.MULTI_DEVICE]:
+        print u'%s[_d.Log.%s(TAG, "%s", _v) for _d in %sallDevices()]' % (indent, priority.lower(), action, prefix)
+    else:
+        print '%s%sdevice.Log.%s(TAG, "%s",  _v)' % (indent, prefix, priority.lower(), action)
+    
+def logAction(action):
+    if options[CulebraOptions.LOG_ACTIONS]:
+        printLogAction(action)
+    
+def runCulebron():
+    Culebron.checkSupportedSdkVersion(device.getSdkVersion())
+    Culebron.checkDependencies()
+    culebron = Culebron(vc, device, serialno, printOperation, options[CulebraOptions.SCALE], options[CulebraOptions.CONCERTINA])
+    if options[CulebraOptions.DEVICE_ART]:
+        culebron.deviceArt = options[CulebraOptions.DEVICE_ART]
+        culebron.dropShadow = options[CulebraOptions.DROP_SHADOW]
+        culebron.screenGlare = options[CulebraOptions.SCREEN_GLARE]
+    culebron.takeScreenshotAndShowItOnWindow()
+    culebron.mainloop()
+    
+def printShortcutVariables():
+    if options[CulebraOptions.UNIT_TEST_CLASS] or options[CulebraOptions.UNIT_TEST_METHOD]:
+        print '''\
+        _s = CulebraTests.sleep
+        _v = CulebraTests.verbose
+'''
+    else:
+        print '''\
+_s = 5
+_v = '--verbose' in sys.argv
+'''
+    
+################
+# __main__
+################
+progname = os.path.basename(sys.argv[0])
+try:
+    optlist, args = getopt.getopt(sys.argv[1:], CulebraOptions.SHORT_OPTS, CulebraOptions.LONG_OPTS)
+    sys.argv[1:] = args
+except getopt.GetoptError, e:
+    error(str(e))
+    usage()
+
+kwargs1 = {CulebraOptions.VERBOSE: False, 'ignoresecuredevice': False, 'ignoreversioncheck': False}
+serialno = None
+kwargs2 = {ViewClientOptions.FORCE_VIEW_SERVER_USE: False, ViewClientOptions.START_VIEW_SERVER: True,
+           ViewClientOptions.AUTO_DUMP: False, ViewClientOptions.IGNORE_UIAUTOMATOR_KILLED: True,
+           ViewClientOptions.COMPRESSED_DUMP: True,
+           ViewClientOptions.USE_UIAUTOMATOR_HELPER: False,
+           }
+options = {CulebraOptions.FIND_VIEWS_BY_ID: True, CulebraOptions.FIND_VIEWS_WITH_TEXT: True,
+           CulebraOptions.FIND_VIEWS_WITH_CONTENT_DESCRIPTION: True,
+           CulebraOptions.USE_REGEXPS: False, CulebraOptions.VERBOSE_COMMENTS: False,
+           CulebraOptions.UNIT_TEST_CLASS: False, CulebraOptions.UNIT_TEST_METHOD: None, CulebraOptions.USE_JAR: False,
+           CulebraOptions.USE_DICTIONARY: False, CulebraOptions.DICTIONARY_KEYS_FROM: 'id',
+           CulebraOptions.AUTO_REGEXPS: None, CulebraOptions.START_ACTIVITY: None, CulebraOptions.OUTPUT: None,
+           CulebraOptions.INTERACTIVE: False,
+           CulebraOptions.WINDOW: -1, CulebraOptions.PREPEND_TO_SYS_PATH: False,
+           CulebraOptions.SAVE_SCREENSHOT: None, CulebraOptions.SAVE_VIEW_SCREENSHOTS: None,
+           CulebraOptions.GUI: False,
+           CulebraOptions.DO_NOT_VERIFY_SCREEN_DUMP: False,
+           CulebraOptions.SCALE: 1,
+           CulebraOptions.ORIENTATION_LOCKED: None,
+           CulebraOptions.MULTI_DEVICE: False,
+           CulebraOptions.LOG_ACTIONS: False,
+           CulebraOptions.DEVICE_ART: None,
+           CulebraOptions.DROP_SHADOW: False,
+           CulebraOptions.SCREEN_GLARE: False,
+           CulebraOptions.NULL_BACK_END: False,
+           CulebraOptions.CONCERTINA: False,
+           CulebraOptions.INSTALL_APK: None,
+           }
+transform = traverseAndPrint
+for o, a in optlist:
+    o = o.strip('-')
+    if o in ['H', CulebraOptions.HELP]:
+        help()
+    elif o in ['V', CulebraOptions.VERBOSE]:
+        kwargs1[CulebraOptions.VERBOSE] = True
+    elif o in ['v', CulebraOptions.VERSION]:
+        version()
+    elif o in ['I', CulebraOptions.IGNORE_SECURE_DEVICE]:
+        kwargs1['ignoresecuredevice'] = True
+    elif o in ['E', CulebraOptions.IGNORE_VERSION_CHECK]:
+        kwargs1['ignoreversioncheck'] = True
+    elif o in ['F', CulebraOptions.FORCE_VIEW_SERVER_USE]:
+        kwargs2[ViewClientOptions.FORCE_VIEW_SERVER_USE] = True
+    elif o in ['S', CulebraOptions.DO_NOT_START_VIEW_SERVER]:
+        kwargs2[ViewClientOptions.START_VIEW_SERVER] = False
+    elif o in ['k', CulebraOptions.DO_NOT_IGNORE_UIAUTOMATOR_KILLED]:
+        kwargs2[ViewClientOptions.IGNORE_UIAUTOMATOR_KILLED] = False
+    elif o in ['w', CulebraOptions.WINDOW]:
+         options[CulebraOptions.WINDOW] = a
+    elif o in ['i', CulebraOptions.FIND_VIEWS_BY_ID]:
+        options[CulebraOptions.FIND_VIEWS_BY_ID] = str2bool(a)
+    elif o in ['t', CulebraOptions.FIND_VIEWS_WITH_TEXT]:
+        options[CulebraOptions.FIND_VIEWS_WITH_TEXT] = str2bool(a)
+    elif o in ['d', CulebraOptions.FIND_VIEWS_WITH_CONTENT_DESCRIPTION]:
+        options[CulebraOptions.FIND_VIEWS_WITH_CONTENT_DESCRIPTION] = str2bool(a)
+    elif o in ['r', CulebraOptions.USE_REGEXPS]:
+        options[CulebraOptions.USE_REGEXPS] = True
+    elif o in ['C', CulebraOptions.VERBOSE_COMMENTS]:
+        options[CulebraOptions.VERBOSE_COMMENTS] = True
+    elif o in ['U', CulebraOptions.UNIT_TEST_CLASS]:
+        options[CulebraOptions.UNIT_TEST_CLASS] = True
+    elif o in ['M', CulebraOptions.UNIT_TEST_METHOD]:
+        if not a.startswith('test'):
+            warnings.warn('Method name should start with "test"')
+        options[CulebraOptions.UNIT_TEST_METHOD] = a
+    elif o in ['j', CulebraOptions.USE_JAR]:
+        options[CulebraOptions.USE_JAR] = str2bool(a)
+    elif o in ['D', CulebraOptions.USE_DICTIONARY]:
+        options[CulebraOptions.USE_DICTIONARY] = str2bool(a)
+    elif o in ['K', CulebraOptions.DICTIONARY_KEYS_FROM]:
+        options[CulebraOptions.DICTIONARY_KEYS_FROM] = value2dictionaryKey(a)
+    elif o in ['R', CulebraOptions.AUTO_REGEXPS]:
+        options[CulebraOptions.AUTO_REGEXPS] = a.split(',')
+        for r in options[CulebraOptions.AUTO_REGEXPS]:
+            if r == 'help':
+                autoRegexpsHelp()
+            if r == 'all':
+                options[CulebraOptions.AUTO_REGEXPS] = CulebraOptions.AUTO_REGEXPS_RES.keys()
+                break
+            if r not in CulebraOptions.AUTO_REGEXPS_RES:
+                error("invalid auto regexp: %s\n" % (r))
+                usage()
+        # CulebraOptions.AUTO_REGEPXS implies CulebraOptions.USE_REGEXPS
+        options[CulebraOptions.USE_REGEXPS] = True
+    elif o in ['a', CulebraOptions.START_ACTIVITY]:
+        options[CulebraOptions.START_ACTIVITY] = a
+    elif o in ['o', CulebraOptions.OUTPUT]:
+        options[CulebraOptions.OUTPUT] = a
+    elif o in ['p', CulebraOptions.PREPEND_TO_SYS_PATH]:
+        options[CulebraOptions.PREPEND_TO_SYS_PATH] = True
+    elif o in ['f', CulebraOptions.SAVE_SCREENSHOT]:
+        options[CulebraOptions.SAVE_SCREENSHOT] = a
+    elif o in ['W', CulebraOptions.SAVE_VIEW_SCREENSHOTS]:
+        options[CulebraOptions.SAVE_VIEW_SCREENSHOTS] = a
+    elif o in ['G', CulebraOptions.GUI]:
+        options[CulebraOptions.GUI] = True
+    elif o in ['u', CulebraOptions.DO_NOT_VERIFY_SCREEN_DUMP]:
+        options[CulebraOptions.DO_NOT_VERIFY_SCREEN_DUMP] = True
+    elif o in ['P', CulebraOptions.SCALE]:
+        options[CulebraOptions.SCALE] = float(a)
+    elif o in ['O', CulebraOptions.ORIENTATION_LOCKED]:
+        options[CulebraOptions.ORIENTATION_LOCKED] = 'PENDING'
+    elif o in ['s', CulebraOptions.SERIALNO]:
+        __devices = a.split()
+        if len(__devices) > 1:
+            warnings.warn('List of devices not supported yet. Using first device instead.')
+        serialno = __devices[0]
+    elif o in ['m', CulebraOptions.MULTI_DEVICE]:
+        options[CulebraOptions.MULTI_DEVICE] = True
+    elif o in ['L', CulebraOptions.LOG_ACTIONS]:
+        options[CulebraOptions.LOG_ACTIONS] = True
+    elif o in ['A', CulebraOptions.DEVICE_ART]:
+        options[CulebraOptions.DEVICE_ART] = a
+    elif o in ['Z', CulebraOptions.DROP_SHADOW]:
+        options[CulebraOptions.DROP_SHADOW] = True
+    elif o in ['B', CulebraOptions.SCREEN_GLARE]:
+        options[CulebraOptions.SCREEN_GLARE] = True
+    elif o in ['0', CulebraOptions.NULL_BACK_END]:
+        options[CulebraOptions.NULL_BACK_END] = True
+    elif o in ['h', CulebraOptions.USE_UIAUTOMATOR_HELPER]:
+        kwargs2[ViewClientOptions.USE_UIAUTOMATOR_HELPER] = True
+    elif o in ['c', CulebraOptions.CONCERTINA]:
+        options[CulebraOptions.CONCERTINA] = True
+    elif o in ['1', CulebraOptions.INSTALL_APK]:
+        options[CulebraOptions.INSTALL_APK] = a
+
+if not (options[CulebraOptions.FIND_VIEWS_BY_ID] or options[CulebraOptions.FIND_VIEWS_WITH_TEXT] or options[CulebraOptions.FIND_VIEWS_WITH_CONTENT_DESCRIPTION]):
+    if not options[CulebraOptions.VERBOSE_COMMENTS]:
+        warnings.warn('All printing options disabled. Output will be empty.')
+    else:
+        warnings.warn('Only verbose comments will be printed')
+
+if kwargs2[ViewClientOptions.FORCE_VIEW_SERVER_USE] and options[CulebraOptions.NULL_BACK_END]:
+    warnings.warn(ViewClientOptions.FORCE_VIEW_SERVER_USE + " and " + CulebraOptions.NULL_BACK_END + " cannot be specified at the same time.")
+
+if options[CulebraOptions.MULTI_DEVICE] and not options[CulebraOptions.UNIT_TEST_CLASS]:
+    error("--" + CulebraOptions.MULTI_DEVICE + " only supported for unit tests (please specify --" + CulebraOptions.UNIT_TEST_CLASS + ")", fatal=True)
+
+device, serialno = ViewClient.connectToDeviceOrExit(serialno=serialno, **kwargs1)
+if options[CulebraOptions.ORIENTATION_LOCKED] == 'PENDING':
+    options[CulebraOptions.ORIENTATION_LOCKED] = device.display['orientation']
+if options[CulebraOptions.START_ACTIVITY]:
+    device.startActivity(component=options[CulebraOptions.START_ACTIVITY])
+if not options[CulebraOptions.NULL_BACK_END]:
+    vc = ViewClient(device, serialno, **kwargs2)
+else:
+    vc = None
+if options[CulebraOptions.OUTPUT]:
+    sys.stdout = codecs.open(options[CulebraOptions.OUTPUT], mode='w', encoding='utf-8', errors='replace')
+    import stat
+    st = os.stat(options[CulebraOptions.OUTPUT])
+    os.chmod(options[CulebraOptions.OUTPUT], st.st_mode | stat.S_IEXEC)
+
+if options[CulebraOptions.UNIT_TEST_CLASS] or (not options[CulebraOptions.UNIT_TEST_METHOD]):
+    printScriptHeader()
+
+if options[CulebraOptions.UNIT_TEST_CLASS]:
+    printUnittestImport()
+
+if options[CulebraOptions.PREPEND_TO_SYS_PATH]:
+    printPrependToSysPath()
+
+if options[CulebraOptions.UNIT_TEST_CLASS] or (not options[CulebraOptions.UNIT_TEST_METHOD]):
+    print '''\
+from com.dtmilano.android.viewclient import ViewClient%s
+
+TAG = '%s'
+''' % (', CulebraTestCase' if options[CulebraOptions.UNIT_TEST_CLASS] else '', TAG)
+
+if options[CulebraOptions.UNIT_TEST_CLASS]:
+    print '''
+class CulebraTests(CulebraTestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        cls.kwargs1 = %s
+        cls.kwargs2 = %s
+        cls.options = %s
+        cls.sleep = 5
+
+''' % (kwargs1, kwargs2, options),
+
+    print '''\
+    def setUp(self):
+        super(CulebraTests, self).setUp()
+'''
+
+    print '''\
+    def tearDown(self):
+        super(CulebraTests, self).tearDown()
+'''
+
+    print '''\
+    def preconditions(self):
+        if not super(CulebraTests, self).preconditions():
+            return False
+''',
+
+    if options[CulebraOptions.INSTALL_APK]:
+        print '''\
+        if self.vc.installPackage(\"%s\") != 0:
+            return False
+''' % (options[CulebraOptions.INSTALL_APK]),
+
+    print '''\
+        return True
+
+    def %s(self):
+        if not self.preconditions():
+            self.fail('Preconditions failed')
+''' % (options[CulebraOptions.UNIT_TEST_METHOD] if options[CulebraOptions.UNIT_TEST_METHOD] else 'testSomething')
+
+    printShortcutVariables()
+    
+    if options[CulebraOptions.SAVE_SCREENSHOT]:
+        print '''\
+        self.vc.writeImageToFile('%s')
+        ''' % options[CulebraOptions.SAVE_SCREENSHOT]
+    
+    if options[CulebraOptions.USE_DICTIONARY]:
+        print '''\
+        self.views = dict()'''
+
+    if not options[CulebraOptions.GUI]:
+        vc.dump(window=options[CulebraOptions.WINDOW])
+    indent = ' ' * 8
+    prefix = 'self.'
+    
+#     if not options[CulebraOptions.DO_NOT_VERIFY_SCREEN_DUMP]:
+#         print '''\
+#         self.vc.dump(%s)
+#         ''' % getWindowOption()
+#         vc.traverse(transform=transform)
+#         print
+
+    if options[CulebraOptions.GUI]:
+        runCulebron()
+    elif not options[CulebraOptions.DO_NOT_VERIFY_SCREEN_DUMP]:
+        printDump(getWindowOption())
+    else:
+        print '''\
+        ## your test code here ##
+        '''
+
+    print '''
+
+if __name__ == '__main__':
+    CulebraTests.main()
+'''
+else:
+    # Not a unittest class, still could be a unittest method as we allow to generate methods separately from their classes
+    if not options[CulebraOptions.UNIT_TEST_METHOD]:
+        printShortcutVariables()
+        print '''
+kwargs1 = %s
+device, serialno = ViewClient.connectToDeviceOrExit(**kwargs1)
+''' % kwargs1,
+
+    if options[CulebraOptions.START_ACTIVITY] and not options[CulebraOptions.UNIT_TEST_METHOD]:
+        print '''\
+device.startActivity(component='%s')''' % options[CulebraOptions.START_ACTIVITY]
+
+    if not options[CulebraOptions.UNIT_TEST_METHOD]:
+        print '''\
+kwargs2 = %s
+vc = ViewClient(device, serialno, **kwargs2)
+#vc.dump(window=%s) # FIXME: seems not needed
+''' % (kwargs2, getWindowOption())
+
+        if options[CulebraOptions.USE_DICTIONARY]:
+            print '''views = dict()'''
+
+        if options[CulebraOptions.SAVE_SCREENSHOT]:
+            print '''\
+vc.writeImageToFile('%s')
+''' % options[CulebraOptions.SAVE_SCREENSHOT]
+
+    if vc:
+        vc.dump(window=options[CulebraOptions.WINDOW])
+    if options[CulebraOptions.UNIT_TEST_METHOD]:
+        print '''
+    def %s(self):
+        \'\'\'
+        Test method.
+        \'\'\'
+
+        if not self.preconditions():
+            self.fail('Preconditions failed')
+''' % (options[CulebraOptions.UNIT_TEST_METHOD])
+        indent = ' ' * 8
+        prefix = 'self.'
+        printShortcutVariables()
+    
+    if options[CulebraOptions.GUI]:
+        runCulebron()
+    elif not options[CulebraOptions.DO_NOT_VERIFY_SCREEN_DUMP]:
+        printDump(getWindowOption())
+
+if kwargs2[ViewClientOptions.USE_UIAUTOMATOR_HELPER]:
+    try:
+        vc.uiAutomatorHelper.quit()
+    except:
+        pass
+
+if options[CulebraOptions.INTERACTIVE]:
+    import socket
+    HOST = 'localhost'
+    PORT = 8900
+    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+    s.connect((HOST, PORT))
+    s.sendall("RECORD EVENTS START\n")
+    fin = open("/dev/tty")
+    while True:
+        print >> sys.stderr, "Reading events..."
+        data = s.recv(1024)
+        code = ViewClient.excerpt(data)
+        exec code
+        resp = raw_input("Continue recording events? [Y/n]: ")
+        if resp in ['N', 'n']:
+            break
+    s.sendall("RECORD EVENTS STOP\n")
+    s.close()
+
diff --git a/AndroidViewClient/tools/dump b/AndroidViewClient/tools/dump
new file mode 100755
index 0000000..33cbbd5
--- /dev/null
+++ b/AndroidViewClient/tools/dump
@@ -0,0 +1,205 @@
+#! /usr/bin/env python
+'''
+Copyright (C) 2012-2015  Diego Torres Milano
+Created on Feb 3, 2012
+
+@author: diego
+'''
+
+__version__ = '11.5.9'
+
+import sys
+import os
+import getopt
+
+try:
+    sys.path.insert(0, os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
+except:
+    pass
+
+from com.dtmilano.android.viewclient import ViewClient, View, ViewClientOptions
+
+HELP = 'help'
+VERBOSE = 'verbose'
+VERSION = 'version'
+IGNORE_SECURE_DEVICE = 'ignore-secure-device'
+IGNORE_VERSION_CHECK = 'ignore-version-check'
+FORCE_VIEW_SERVER_USE = 'force-view-server-use'
+DO_NOT_START_VIEW_SERVER = 'do-not-start-view-server'
+DO_NOT_IGNORE_UIAUTOMATOR_KILLED = 'do-not-ignore-uiautomator-killed'
+WINDOW = 'window'
+ALL = 'all'
+UNIQUE_ID = 'uniqueId'
+POSITION = 'position'
+BOUNDS = 'bounds'
+CONTENT_DESCRIPTION = 'content-description'
+TAG = 'tag'
+CENTER = 'center'
+SAVE_SCREENSHOT = 'save-screenshot'
+SAVE_VIEW_SCREENSHOTS = 'save-view-screenshots'
+DO_NOT_DUMP_VIEWS = 'do-not-dump-views'
+DEVICE_ART = 'device-art'
+DROP_SHADOW = 'drop-shadow'
+SCREEN_GLARE = 'glare'
+USE_UIAUTOMATOR_HELPER = 'use-uiautomator-helper'
+
+MAP = {
+       'a':View.__str__, ALL:View.__str__,
+       'i':ViewClient.TRAVERSE_CITUI, UNIQUE_ID:ViewClient.TRAVERSE_CITUI,
+       'x':ViewClient.TRAVERSE_CITPS, POSITION:ViewClient.TRAVERSE_CITPS,
+       'b':ViewClient.TRAVERSE_CITB, BOUNDS:ViewClient.TRAVERSE_CITB,
+       'd':ViewClient.TRAVERSE_CITCD, CONTENT_DESCRIPTION:ViewClient.TRAVERSE_CITCD,
+       'g':ViewClient.TRAVERSE_CITG, TAG:ViewClient.TRAVERSE_CITG, 
+       'c':ViewClient.TRAVERSE_CITC, CENTER:ViewClient.TRAVERSE_CITC,
+       'W':ViewClient.TRAVERSE_CITCDS, SAVE_VIEW_SCREENSHOTS:ViewClient.TRAVERSE_CITCDS,
+       'D':ViewClient.TRAVERSE_S, DO_NOT_DUMP_VIEWS:ViewClient.TRAVERSE_S
+       }
+
+USAGE = 'usage: %s [OPTION]... [serialno]'
+SHORT_OPTS = 'HVvIEFSkw:aixbdgcf:W:DA:ZBh'
+LONG_OPTS =  [HELP, VERBOSE, VERSION, IGNORE_SECURE_DEVICE, IGNORE_VERSION_CHECK, FORCE_VIEW_SERVER_USE,
+              DO_NOT_START_VIEW_SERVER, DO_NOT_IGNORE_UIAUTOMATOR_KILLED, WINDOW + '=',
+              ALL, UNIQUE_ID, POSITION, BOUNDS, CONTENT_DESCRIPTION, TAG, CENTER,
+              SAVE_SCREENSHOT + '=', SAVE_VIEW_SCREENSHOTS + '=',
+              DO_NOT_DUMP_VIEWS,
+              DEVICE_ART + '=', DROP_SHADOW, SCREEN_GLARE,
+              USE_UIAUTOMATOR_HELPER,
+              ]
+LONG_OPTS_ARG = {WINDOW: 'WINDOW', SAVE_SCREENSHOT: 'FILE', SAVE_VIEW_SCREENSHOTS: 'DIR', DEVICE_ART: 'MODEL'}
+OPTS_HELP = {
+    'H': 'prints this help',
+    'V': 'verbose comments',
+    'I': 'ignore secure device',
+    'F': 'force view server use (even if UiAutomator present)',
+    'S': 'don\'t start ViewServer',
+    'k': 'don\'t ignore UiAutomator killed',
+    'w': 'dump WINDOW content (default: -1, all windows)',
+    'a': 'dump all information about Views',
+    'i': 'dump View unique IDs',
+    'x': 'dump View positions',
+    'b': 'dump View bounds', 
+    'd': 'dump View content descriptions',
+    'g': 'dump View tags',
+    'c': 'dump View centers',
+    'f': 'save screenshot to file',
+    'W': 'save View screenshots to files in directory',
+    'E': 'ignores ADB version check',
+    'D': 'don\'t dump views, only useful if you specified -f or -W',
+    'A': 'device art model to frame screenshot (auto: autodetected)',
+    'Z': 'drop shadow for device art screenshot',
+    'B': 'screen glare over screenshot',
+    'h': 'use UiAutomatorHelper Android app',
+    }
+
+def shortAndLongOptions():
+    '''
+    @return: the list of corresponding (short-option, long-option) tuples
+    '''
+
+    short_opts = SHORT_OPTS.replace(':', '')
+    if len(short_opts) != len(LONG_OPTS):
+        raise Exception('There is a mismatch between short and long options')
+    t = tuple(short_opts) + tuple(LONG_OPTS)
+    l2 = len(t)/2
+    sl = []
+    for i in range(l2):
+        sl.append((t[i], t[i+l2]))
+    return sl
+
+def usage(exitVal=1):
+    print >> sys.stderr, USAGE % progname
+    print >> sys.stderr, "Try '%s --help' for more information." % progname
+    sys.exit(exitVal)
+
+def help():
+    print >> sys.stderr, USAGE % progname
+    print >> sys.stderr
+    print >> sys.stderr, "Options:"
+    for so, lo in shortAndLongOptions():
+        o = '  -%c, --%s' % (so, lo)
+        if lo[-1] == '=':
+            o += LONG_OPTS_ARG[lo[:-1]]
+        try:
+            o = '%-34s %-45s' % (o, OPTS_HELP[so])
+        except:
+            pass
+        print >> sys.stderr, o
+    sys.exit(0)
+
+def version():
+    print progname, __version__
+    sys.exit(0)
+
+# __main__
+progname = os.path.basename(sys.argv[0])
+try:
+    opts, args = getopt.getopt(sys.argv[1:], SHORT_OPTS, LONG_OPTS)
+    sys.argv[1:] = args
+except getopt.GetoptError, e:
+    print >>sys.stderr, 'ERROR:', str(e)
+    usage()
+
+kwargs1 = {VERBOSE: False, 'ignoresecuredevice': False, 'ignoreversioncheck': False}
+kwargs2 = {ViewClientOptions.FORCE_VIEW_SERVER_USE: False, ViewClientOptions.START_VIEW_SERVER: True,
+           ViewClientOptions.AUTO_DUMP: False, ViewClientOptions.IGNORE_UIAUTOMATOR_KILLED: True,
+           ViewClientOptions.COMPRESSED_DUMP: True,
+           ViewClientOptions.USE_UIAUTOMATOR_HELPER: False,
+           }
+options = {WINDOW: -1, SAVE_SCREENSHOT: None, SAVE_VIEW_SCREENSHOTS: None, DO_NOT_DUMP_VIEWS: False,
+           DEVICE_ART: None, DROP_SHADOW: False, SCREEN_GLARE: False}
+transform = ViewClient.TRAVERSE_CIT
+for o, a in opts:
+    o = o.strip('-')
+    if o in ['H', HELP]:
+        help()
+    elif o in ['V', VERBOSE]:
+        kwargs1[VERBOSE] = True
+    elif o in ['v', VERSION]:
+        version()
+    elif o in ['I', IGNORE_SECURE_DEVICE]:
+        kwargs1['ignoresecuredevice'] = True
+    elif o in ['E', IGNORE_VERSION_CHECK]:
+        kwargs1['ignoreversioncheck'] = True
+    elif o in ['F', FORCE_VIEW_SERVER_USE]:
+        kwargs2[ViewClientOptions.FORCE_VIEW_SERVER_USE] = True
+    elif o in ['S', DO_NOT_START_VIEW_SERVER]:
+        kwargs2[ViewClientOptions.START_VIEW_SERVER] = False
+    elif o in ['k', DO_NOT_IGNORE_UIAUTOMATOR_KILLED]:
+        kwargs2[ViewClientOptions.IGNORE_UIAUTOMATOR_KILLED] = False
+    elif o in ['w', WINDOW]:
+        options[WINDOW] = a
+    elif o in ['f', SAVE_SCREENSHOT]:
+        options[SAVE_SCREENSHOT] = a
+    elif o in ['W', SAVE_VIEW_SCREENSHOTS]:
+        options[SAVE_VIEW_SCREENSHOTS] = a
+        transform = MAP[o]
+    elif o in ['A', DEVICE_ART]:
+        options[DEVICE_ART] = a
+    elif o in ['Z', DROP_SHADOW]:
+        options[DROP_SHADOW] = True
+    elif o in ['B', SCREEN_GLARE]:
+        options[SCREEN_GLARE] = True
+    elif o in ['h', USE_UIAUTOMATOR_HELPER]:
+        kwargs2[ViewClientOptions.USE_UIAUTOMATOR_HELPER] = True
+    elif o in ['D', DO_NOT_DUMP_VIEWS]:
+        options[DO_NOT_DUMP_VIEWS] = True
+        transform = MAP[o]
+    else:
+        transform = MAP[o]
+
+if options[DO_NOT_DUMP_VIEWS]:
+    transform = MAP[DO_NOT_DUMP_VIEWS]
+
+vc = ViewClient(*ViewClient.connectToDeviceOrExit(**kwargs1), **kwargs2)
+if options[SAVE_SCREENSHOT]:
+    vc.device.reconnect = True #(not options[DO_NOT_DUMP_VIEWS])
+    vc.writeImageToFile(options[SAVE_SCREENSHOT], deviceart=options[DEVICE_ART], dropshadow=options[DROP_SHADOW], screenglare=options[SCREEN_GLARE])
+if not options[DO_NOT_DUMP_VIEWS] or options[SAVE_VIEW_SCREENSHOTS]:
+    vc.dump(window=options[WINDOW])
+    ViewClient.imageDirectory = options[SAVE_VIEW_SCREENSHOTS]
+    vc.traverse(transform=transform)
+if kwargs2[ViewClientOptions.USE_UIAUTOMATOR_HELPER]:
+    try:
+        vc.uiAutomatorHelper.quit()
+    except:
+        pass
diff --git a/AndroidViewClient/uml/AndroidViewClient.zargo b/AndroidViewClient/uml/AndroidViewClient.zargo
new file mode 100755
index 0000000..98f8457
--- /dev/null
+++ b/AndroidViewClient/uml/AndroidViewClient.zargo
Binary files differ
diff --git a/AndroidViewClient/viewclient.epydoc b/AndroidViewClient/viewclient.epydoc
new file mode 100755
index 0000000..c2e1686
--- /dev/null
+++ b/AndroidViewClient/viewclient.epydoc
@@ -0,0 +1,149 @@
+[epydoc] # Epydoc section marker (required by ConfigParser)
+
+# The list of objects to document.  Objects can be named using
+# dotted names, module filenames, or package directory names.
+# Alases for this option include "objects" and "values".
+modules: src/com/dtmilano/android/
+
+# The type of output that should be generated.  Should be one
+# of: html, text, latex, dvi, ps, pdf.
+output: html
+
+# The path to the output directory.  May be relative or absolute.
+target: doc/
+
+# An integer indicating how verbose epydoc should be.  The default
+# value is 0; negative values will supress warnings and errors;
+# positive values will give more verbose output.
+verbosity: 1
+
+# A boolean value indicating that Epydoc should show a tracaback
+# in case of unexpected error. By default don't show tracebacks
+debug: 0
+
+# If True, don't try to use colors or cursor control when doing
+# textual output. The default False assumes a rich text prompt
+simple-term: 1
+
+
+### Generation options
+
+# The default markup language for docstrings, for modules that do
+# not define __docformat__.  Defaults to epytext.
+docformat: epytext
+
+# Whether or not parsing should be used to examine objects.
+parse: yes
+
+# Whether or not introspection should be used to examine objects.
+introspect: yes
+
+# Don't examine in any way the modules whose dotted name match this
+# regular expression pattern.
+#exclude
+
+# Don't perform introspection on the modules whose dotted name match this
+# regular expression pattern.
+#exclude-introspect
+
+# Don't perform parsing on the modules whose dotted name match this
+# regular expression pattern.
+#exclude-parse
+
+# The format for showing inheritance objects.
+# It should be one of: 'grouped', 'listed', 'included'.
+inheritance: listed
+
+# Whether or not to inclue private variables.  (Even if included,
+# private variables will be hidden by default.)
+private: yes
+
+# Whether or not to list each module's imports.
+imports: no
+
+# Whether or not to include syntax highlighted source code in
+# the output (HTML only).
+sourcecode: yes
+
+# Whether or not to includea a page with Epydoc log, containing
+# effective option at the time of generation and the reported logs.
+include-log: no
+
+
+### Output options
+
+# The documented project's name.
+#name: Example
+
+# The CSS stylesheet for HTML output.  Can be the name of a builtin
+# stylesheet, or the name of a file.
+css: white
+
+# The documented project's URL.
+url: http://dtmilano.com/viewclient
+
+# HTML code for the project link in the navigation bar.  If left
+# unspecified, the project link will be generated based on the
+# project's name and URL.
+#link: <a href="somewhere">My Cool Project</a>
+
+# The "top" page for the documentation.  Can be a URL, the name
+# of a module or class, or one of the special names "trees.html",
+# "indices.html", or "help.html"
+#top: os.path
+
+# An alternative help file.  The named file should contain the
+# body of an HTML file; navigation bars will be added to it.
+#help: my_helpfile.html
+
+# Whether or not to include a frames-based table of contents.
+frames: yes
+
+# Whether each class should be listed in its own section when
+# generating LaTeX or PDF output.
+separate-classes: no
+
+
+### API linking options
+
+# Define a new API document.  A new interpreted text role
+# will be created
+#external-api: epydoc
+
+# Use the records in this file to resolve objects in the API named NAME.
+#external-api-file: epydoc:api-objects.txt
+
+# Use this URL prefix to configure the string returned for external API.
+#external-api-root: epydoc:http://epydoc.sourceforge.net/api
+
+
+### Graph options
+
+# The list of graph types that should be automatically included
+# in the output.  Graphs are generated using the Graphviz "dot"
+# executable.  Graph types include: "classtree", "callgraph",
+# "umlclass".  Use "all" to include all graph types
+graph: all
+
+# The path to the Graphviz "dot" executable, used to generate
+# graphs.
+dotpath: /usr/local/bin/dot
+
+# The name of one or more pstat files (generated by the profile
+# or hotshot module).  These are used to generate call graphs.
+pstat: profile.out
+
+# Specify the font used to generate Graphviz graphs.
+# (e.g., helvetica or times).
+graph-font: Helvetica
+
+# Specify the font size used to generate Graphviz graphs.
+graph-font-size: 10
+
+
+### Return value options
+
+# The condition upon which Epydoc should exit with a non-zero
+# exit status. Possible values are error, warning, docstring_warning
+#fail-on: error
+