def loadProperties(self):
     index = 0
     for node in self.tree_nodes_list:
         if node.mVisible:
             if self.isListView(node):
                 for child in node.mChildNodes:
                     self.focusable_view_list.append(child)
             else:
                 element_parser = ParseElement(node.mElement)
                 element_parser.parseElmentData()
                 if "focus:isFocusable()" in element_parser.properties_dict.keys():
                     if element_parser.getBoolean("focus:isFocusable()", False):
                         self.focusable_view_list.append(node)
                         if element_parser.getBoolean("focus:isFocused()", False):  # or ["focus:hasFocus()"]
                             self.currentFocusIndex = index
                         index += 1
                             
     total = len(self.focusable_view_list)
     for i in range(total):
         if i == total-1:
             self.next_direction_list.append(None)
         else:                    
             if self.focusable_view_list[i].mLocation.y == self.focusable_view_list[i+1].mLocation.y:
                 self.next_direction_list.append("dpad_right")
             else:
                 self.next_direction_list.append("dpad_down")
                 
     for i in range(total):
         if 0 == i:
             self.pre_direction_list.append(None)
         else:
             if self.focusable_view_list[i].mLocation.y == self.focusable_view_list[i-1].mLocation.y:
                 self.pre_direction_list.append("dpad_left")
             else:
                 self.pre_direction_list.append("dpad_up")
    def loadProperties(self):
        # has no child
        if None==self.node.mChildNodes or 0==len(self.node.mChildNodes):
#            self.text_list.append(self.node.mText)
#            self.click_location_list.append(self.node.mLocation)

            if self.node.mVisible:         
                self.properties_dict["mText"] = [self.node.mText]
            if self.node.mClickable:
                self.properties_dict["mLocation"] = [self.node.mLocation]
                                    
            element_parser = ParseElement(self.node.mElement)
            element_parser.parseElmentData() 
            res = element_parser.getBoolean("isChecked()", False)
            self.properties_dict["isChecked"] = res
            return True
        
        # has child
        self.getChildProperties(self.node, self.properties_dict)
        
        # check again if the onClickListener event register to the list view node, also mean its parent's node
        if 0 == len(self.properties_dict["mLocation"]):
            if self.node.mParentNode.mClickable:
                self.properties_dict["mLocation"] = [self.node.mLocation]
        
        return True
    def loadProperties(self):
        # has no child
        if None==self.node.mChildNodes or 0==len(self.node.mChildNodes):
#            self.text_list.append(self.node.mText)
#            self.click_location_list.append(self.node.mLocation)

            if self.node.mVisible:         
                self.properties_dict["mText"] = [self.node.mText]
            if self.node.mClickable:
                self.properties_dict["mLocation"] = [self.node.mLocation]
                                    
            element_parser = ParseElement(self.node.mElement)
            element_parser.parseElmentData() 
            res = element_parser.getBoolean("isChecked()", False)
            self.properties_dict["isChecked"] = res
            return True
        
        # has child
        self.getChildProperties(self.node, self.properties_dict)
        
        # check again if the onClickListener event register to the list view node, also mean its parent's node
        if 0 == len(self.properties_dict["mLocation"]):
            if self.node.mParentNode.mClickable:
                self.properties_dict["mLocation"] = [self.node.mLocation]
        
        return True
    def loadProperties(self):
        index = 0
        for node in self.tree_nodes_list:
            if node.mVisible:
                if self.isListView(node):
                    for child in node.mChildNodes:
                        self.focusable_view_list.append(child)
                else:
                    element_parser = ParseElement(node.mElement)
                    element_parser.parseElmentData()
                    if "focus:isFocusable()" in element_parser.properties_dict.keys(
                    ):
                        if element_parser.getBoolean("focus:isFocusable()",
                                                     False):
                            self.focusable_view_list.append(node)
                            if element_parser.getBoolean(
                                    "focus:isFocused()",
                                    False):  # or ["focus:hasFocus()"]
                                self.currentFocusIndex = index
                            index += 1

        total = len(self.focusable_view_list)
        for i in range(total):
            if i == total - 1:
                self.next_direction_list.append(None)
            else:
                if self.focusable_view_list[
                        i].mLocation.y == self.focusable_view_list[
                            i + 1].mLocation.y:
                    self.next_direction_list.append("dpad_right")
                else:
                    self.next_direction_list.append("dpad_down")

        for i in range(total):
            if 0 == i:
                self.pre_direction_list.append(None)
            else:
                if self.focusable_view_list[
                        i].mLocation.y == self.focusable_view_list[
                            i - 1].mLocation.y:
                    self.pre_direction_list.append("dpad_left")
                else:
                    self.pre_direction_list.append("dpad_up")
 def getChildProperties(self, node, properties_dict):
     if None==node:
         return properties_dict
     
     if None==node.mChildNodes or 0==len(node.mChildNodes):
         return properties_dict
     
     for child in node.mChildNodes:
         if self.isLeafNode(child):
             if child.mVisible:
                 properties_dict["mText"].append(child.mText)
             if child.mClickable:                    
                 properties_dict["mLocation"].append(child.mLocation) # this might be TBD
                 
             element_parser = ParseElement(child.mElement)
             element_parser.parseElmentData() 
             res = None
             if "isChecked()" in element_parser.properties_dict.keys():
                 res = element_parser.getBoolean("isChecked()", False)
                 properties_dict["isChecked"] = (res or properties_dict["isChecked"])
             
         else:
             self.getChildProperties(child, properties_dict)
 def getChildProperties(self, node, properties_dict):
     if None==node:
         return properties_dict
     
     if None==node.mChildNodes or 0==len(node.mChildNodes):
         return properties_dict
     
     for child in node.mChildNodes:
         if self.isLeafNode(child):
             if child.mVisible:
                 properties_dict["mText"].append(child.mText)
             if child.mClickable:                    
                 properties_dict["mLocation"].append(child.mLocation) # this might be TBD
                 
             element_parser = ParseElement(child.mElement)
             element_parser.parseElmentData() 
             res = None
             if "isChecked()" in element_parser.properties_dict.keys():
                 res = element_parser.getBoolean("isChecked()", False)
                 properties_dict["isChecked"] = (res or properties_dict["isChecked"])
             
         else:
             self.getChildProperties(child, properties_dict)