Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

View tree created

- Support for different cases in temperature-converter-get-conversion.py
- Added View tree traversal to obtain View coordinates
  • Loading branch information...
commit f93204c439617e9f1798246e4635baf16d2e5da0 1 parent 54e27c7
@dtmilano authored
View
1  AndroidViewClient/.pydevproject
@@ -7,6 +7,5 @@
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
<path>/AndroidViewClient/src</path>
<path>/AndroidViewClient/examples</path>
-<path>/AndroidViewClient/tests</path>
</pydev_pathproperty>
</pydev_project>
View
49 AndroidViewClient/examples/click-button-by-text.py
@@ -0,0 +1,49 @@
+#! /usr/bin/env monkeyrunner
+'''
+Copyright (C) 2012 Diego Torres Milano
+Created on May 5, 2012
+
+@author: diego
+'''
+
+import sys
+import os
+import time
+
+# this must be imported before MonkeyRunner and MonkeyDevice,
+# otherwise the import fails
+try:
+ ANDROID_VIEW_CLIENT_HOME = os.environ['ANDROID_VIEW_CLIENT_HOME']
+except KeyError:
+ print >>sys.stderr, "%s: ERROR: ANDROID_VIEW_CLIENT_HOME not set in environment" % __file__
+ sys.exit(1)
+sys.path.append(ANDROID_VIEW_CLIENT_HOME + '/src')
+from com.dtmilano.android.viewclient import ViewClient
+
+from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
+
+
+#package = 'com.example.i2at.tc'
+#activity = '.TemperatureConverterActivity'
+#componentName = package + "/" + activity
+device = MonkeyRunner.waitForConnection(60, "emulator-5554")
+if not device:
+ raise Exception('Cannot connect to device')
+
+#device.startActivity(component=componentName)
+MonkeyRunner.sleep(5)
+
+vc = ViewClient(device)
+vc.dump()
+
+for bt in [ '1', '2', '3', '4', '5', '6' ]:
+ b = vc.findViewWithAttribute('text:mText', 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"
View
40 AndroidViewClient/examples/temperature-converter-get-conversion.py
@@ -3,6 +3,10 @@
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/fahrenheith are obtained and the conversion printed to stdout.
+
@author: diego
'''
@@ -39,11 +43,41 @@
vc = ViewClient(device)
vc.dump()
+# obtain the views by id
celsius = vc.findViewById("id/celsius")
fahrenheit = vc.findViewById("id/fahrenheit")
+
-c = float(celsius.mText())
-f = float(fahrenheit.mText())
+# in android-15 this is text:mText while in previous versions it was just mText
+try:
+ c = float(celsius.text_mText())
+ f = float(fahrenheit.text_mText())
+
+ print "%.2f C => %.2f F" % (c, f)
+except:
+ try:
+ c = float(celsius.mText())
+ f = float(fahrenheit.mText())
+
+ print "%.2f C => %.2f F" % (c, f)
+ except:
+ print "Unexpected error:", sys.exc_info()[0]
+
+# obtain the views by tag
+celsius = vc.findViewByTag("celsius")
+fahrenheit = vc.findViewByTag("fahrenheit")
+
+# in android-15 this is text:mText while in previous versions it was just mText
+try:
+ c = float(celsius.text_mText())
+ f = float(fahrenheit.text_mText())
-print "%.2f C => %.2f F" % (c, f)
+ print "%.2f C => %.2f F" % (c, f)
+except:
+ try:
+ c = float(celsius.mText())
+ f = float(fahrenheit.mText())
+ print "%.2f C => %.2f F" % (c, f)
+ except:
+ print "Unexpected error:", sys.exc_info()[0]
View
243 AndroidViewClient/src/com/dtmilano/android/viewclient.py
@@ -10,16 +10,18 @@
import re
import socket
import os
+from com.android.monkeyrunner import MonkeyDevice
DEBUG = False
+DEBUG_RECEIVED = DEBUG and True
+DEBUG_TREE = DEBUG and True
+DEBUG_GETATTR = DEBUG and False
ANDROID_HOME = os.environ['ANDROID_HOME'] if os.environ.has_key('ANDROID_HOME') else '/opt/android-sdk'
VIEW_SERVER_HOST = 'localhost'
VIEW_SERVER_PORT = 4939
-STATUS_BAR = 38
-TITLE = 40
-CHECK_BOX = 50 # FIXME: this is not just for CheckBox
+OFFSET = 50
class View:
'''
@@ -33,12 +35,14 @@ def __init__(self, map, device):
self.map = map
self.device = device
+ self.children = []
+ self.parent = None
def __getitem__(self, key):
return self.map[key]
def __getattr__(self, name):
- if DEBUG:
+ if DEBUG_GETATTR:
print >>sys.stderr, "__getattr__(%s)" % (name)
# I should try to see if 'name' is a defined method
@@ -84,18 +88,44 @@ def __call__(self, *args, **kwargs):
if DEBUG:
print "__call__(%s)" % (args if args else None)
+ def getX(self):
+ x = 0
+ if self.map['getVisibility()'] == 'VISIBLE':
+ x += int(self.map['layout:mLeft'])
+ x += OFFSET/2
+ return x
+
+ def getY(self):
+ y = 0
+ if self.map['getVisibility()'] == 'VISIBLE':
+ y += int(self.map['layout:mTop'])
+ return y
+
def getXY(self):
'''
Returns the coordinates of this View
'''
- # FIXME: it's not always a CheckBox
- x = int(self.map['layout:mLeft']) + int(self.map['layout:layout_leftMargin']) + CHECK_BOX/2
- y = int(self.map['layout:mTop']) + int(self.map['layout:layout_topMargin']) + STATUS_BAR + TITLE + CHECK_BOX/2
- return (x, y)
+ # FIXME: this usually don't return the real coordinates of the View but the coordinates
+ # relative to its parent, so to obtain the real coordinates the View root should
+ # have to be traversed to the root adding the coordinates for every child
+ x = self.getX()
+ y = self.getY()
+ parent = self.parent
+ hy = 0
+ while parent != None:
+ if parent.map['class'] in [ 'com.android.internal.widget.ActionBarView',
+ 'com.android.internal.widget.ActionBarContainer',
+ 'com.android.internal.widget.ActionBarContextView',
+ 'com.android.internal.view.menu.ActionMenuView' ]:
+ parent = parent.parent
+ continue
+ if DEBUG: print >>sys.stderr, "$$$ parent=%s y=%d py=%d hy=%d" % (parent.__smallStr__(), y, parent.getY(), hy)
+ hy += parent.getY()
+ parent = parent.parent
+ return (x, y+hy)
- # FIXME: should be MonkeyDevice.DOWN_AND_UP
- def touch(self, type="DOWN_AND_UP"):
+ def touch(self, type=MonkeyDevice.DOWN_AND_UP):
'''
Touches this View
'''
@@ -115,11 +145,33 @@ def allPossibleNamesWithColon(self, name):
def intersection(self, l1, l2):
return list(set(l1) & set(l2))
+ def add(self, child):
+ child.parent = self
+ self.children.append(child)
+
+ def __smallStr__(self):
+ str = "View["
+ if "class" in self.map:
+ str += " class=" + self.map["class"]
+ str += " ] parent="
+ if self.parent and "class" in self.parent.map:
+ str += "%s" % self.parent.map["class"]
+ else:
+ str += "None"
+ return str
+
def __str__(self):
- str = "View[ "
+ str = "View["
+ if "class" in self.map:
+ str += " class=" + self.map["class"] + " "
for a in self.map:
str += a + "=" + self.map[a] + " "
- str += "]"
+ str += "] parent="
+ if self.parent and "class" in self.parent.map:
+ str += "%s" % self.parent.map["class"]
+ else:
+ str += "None"
+
return str
@@ -149,6 +201,9 @@ def __init__(self, device, adb=os.path.join(ANDROID_HOME, 'platform-tools', 'adb
'This only works on emulator and devices running developer versions.\n'
'Does hierarchyviewer work on your device ?')
+ # FIXME: if there are more than one device this command will fail
+ # -s <serialno> should be included in next command but it seems there's
+ # no way of obtaining the serialno from the MonkeyDevice
subprocess.check_call([adb, 'forward', 'tcp:%d' % VIEW_SERVER_PORT,
'tcp:%d' % VIEW_SERVER_PORT])
@@ -165,6 +220,92 @@ def serviceResponse(self, response):
print >>sys.stderr, "serviceResponse: comparing '%s' vs Parcel(%s)" % (response, PARCEL_TRUE)
return response == PARCEL_TRUE
+ def setViews(self, received):
+ self.views = received.split("\n")
+ if DEBUG:
+ print "there are %d views in this dump" % len(self.views)
+
+ def __splitAttrs(self, str, addViewToViewsById=False):
+ '''
+ Splits the view attributes in str and optionally adds the view id to the viewsById list.
+ Returns the attributes map.
+ '''
+
+ idRE = re.compile("(?P<viewId>id/\S+)")
+ attrRE = re.compile("(?P<attr>\S+)(\(\))?=\d+,(?P<val>\S+)")
+ hashRE = re.compile("(?P<class>\S+)@(?P<oid>[0-9a-f]+)")
+
+ attrs = {}
+ viewId = None
+ m = idRE.search(str)
+ if m:
+ viewId = m.group('viewId')
+ if DEBUG:
+ print "found %s" % viewId
+
+ for attr in str.split():
+ m = attrRE.match(attr)
+ if m:
+ attrs[m.group('attr')] = m.group('val')
+ else:
+ m = hashRE.match(attr)
+ if m:
+ attrs['class'] = m.group('class')
+ attrs['oid'] = m.group('oid')
+ else:
+ if DEBUG:
+ print attr, "doesn't match"
+
+ if addViewToViewsById:
+ 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 = viewId + '/%d' % i
+ if not newId in self.viewsById:
+ break
+ i += 1
+ viewId = newId
+ if DEBUG:
+ print "adding viewById %s" % viewId
+ if viewId:
+ self.viewsById[viewId] = attrs
+
+ return attrs
+
+ def parseTree(self, str):
+ self.root = None
+ parent = None
+ treeLevel = 0
+ lastView = None
+ for v in self.views:
+ if v == 'DONE':
+ break
+ attrs = self.__splitAttrs(v, addViewToViewsById=True)
+ if not self.root:
+ if v[0] == ' ':
+ raise "Unexpected ' '."
+ self.root = View(attrs, self.device)
+ parent = self.root
+ lastView = self.root
+ else:
+ newLevel = (len(v) - len(v.lstrip()))
+ if treeLevel != newLevel:
+ parent = lastView
+ treeLevel = newLevel
+ lastView = View(attrs, self.device)
+ parent.add(lastView)
+
+
+ def traverse(self, root, indent=""):
+ if not root:
+ return
+
+ print "%s%s" % (indent, root)
+
+ for ch in root.children:
+ self.traverse(ch, indent=indent+" ")
+
def dump(self, windowId=-1):
'''
Dumps the window content
@@ -181,48 +322,16 @@ def dump(self, windowId=-1):
break
s.close()
- self.views = received.split("\n")
- if DEBUG:
- print "there are %d views in this dump" % len(self.views)
-
- idRE = re.compile("(?P<viewId>id/\S+)")
- attrRE = re.compile("(?P<attr>\S+)(\(\))?=\d+,(?P<val>\S+)")
- hashRE = re.compile("(?P<class>\S+)@(?P<oid>[0-9a-f]+)")
-
- for v in self.views:
- attrs = {}
- m = idRE.search(v)
- if m:
- viewId = m.group('viewId')
- if DEBUG:
- print "found %s" % viewId
- for attr in v.split():
- m = attrRE.match(attr)
- if m:
- attrs[m.group('attr')] = m.group('val')
- else:
- m = hashRE.match(attr)
- if m:
- attrs['class'] = m.group('class')
- attrs['oid'] = m.group('oid')
- else:
- if DEBUG:
- print attr, "doesn't match"
-
-
- 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 = viewId + '/%d' % i
- if not newId in self.viewsById:
- break
- i += 1
- viewId = newId
- if DEBUG:
- print "adding viewById %s" % viewId
- self.viewsById[viewId] = attrs
+ if DEBUG_RECEIVED:
+ print
+ print received
+ print
+ self.setViews(received)
+ self.parseTree(self.views)
+ if DEBUG_TREE:
+ self.traverse(self.root)
+
return self.views
def findViewById(self, viewId):
@@ -231,6 +340,34 @@ def findViewById(self, viewId):
'''
return View(self.viewsById[viewId], self.device)
+ def findViewByTag(self, tag):
+ '''
+ Finds the View with the specified tag
+ '''
+
+ return self.findViewWithAttribute('getTag()', tag)
+
+ def findViewWithAttributeInTree(self, attr, val, root):
+ if DEBUG: print "findViewWitAttributeInTree: 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 "findViewWitAttributeInTree: 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 findViewWithAttribute(self, attr, val):
+ '''
+ Finds the View with the specified attribute and value
+ '''
+
+ return self.findViewWithAttributeInTree(attr, val, self.root)
+
def getViewIds(self):
'''
Returns the Views map.
View
28 AndroidViewClient/tests/com/dtmilano/android/mocks.py
@@ -10,6 +10,34 @@
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
+"""
+
class MockDevice(object):
'''
Mocks an Android device
View
42 AndroidViewClient/tests/com/dtmilano/android/viewclient.py
@@ -17,6 +17,7 @@
from com.dtmilano.android.viewclient import View
from com.dtmilano.android.viewclient import ViewClient
from mocks import MockDevice
+from mocks import DUMP
class ViewTest(unittest.TestCase):
@@ -62,7 +63,27 @@ def testInexistentMethodName(self):
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)
class ViewClientTest(unittest.TestCase):
@@ -81,6 +102,27 @@ def testExceptionDeviceNotConnected(self):
def testConstructor(self):
vc = ViewClient(MockDevice(), adb='/usr/bin/true')
self.assertNotEquals(None, vc)
+
+ def __mockTree(self):
+ vc = ViewClient(MockDevice(), adb='/usr/bin/true')
+ self.assertNotEquals(None, vc)
+ vc.setViews(DUMP)
+ vc.parseTree(vc.views)
+ return vc
+
+ def testRoot(self):
+ vc = self.__mockTree()
+ root = vc.root
+ self.assertTrue(root != None)
+ self.assertTrue(root.parent == None)
+ self.assertTrue(root.map['class'] == 'com.android.internal.policy.impl.PhoneWindow$DecorView')
+
+ def testParseTree(self):
+ vc = self.__mockTree()
+ print
+ print "TRAVERSE:"
+ vc.traverse(vc.root)
+ print
if __name__ == "__main__":
Please sign in to comment.
Something went wrong with that request. Please try again.