Add auto generated resources to xml

Bug: 142499838
Test: Manual
Change-Id: I8c7ef0da8d652e7ab1d80e53d78a369ac9b74d06
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/auto-generate-resources.py b/car-ui-lib/tests/robotests/src/com/android/car/ui/auto-generate-resources.py
new file mode 100644
index 0000000..ed4b744
--- /dev/null
+++ b/car-ui-lib/tests/robotests/src/com/android/car/ui/auto-generate-resources.py
@@ -0,0 +1,113 @@
+#!/usr/bin/env python
+
+# Copyright 2019, The Android Open Source Project
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use, copy,
+# modify, merge, publish, distribute, sublicense, and/or sell copies
+# of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+#
+
+import operator
+import os
+import sys
+from os import listdir
+from os.path import isfile, join
+from xml.dom import minidom
+import xml.etree.ElementTree as ET
+
+ROOT_FOLDER = 'packages/apps/Car/libs/car-ui-lib'
+
+"""
+Script used to update the 'current.xml' file. This is being used as part of pre-submits to
+verify whether resources previously exposed to OEMs are being changed by a CL, potentially
+breaking existing customizations.
+
+Example usage: python auto-generate-resources.py current.xml
+"""
+def main():
+    # Return the absolute path to the root dir.
+    android_build_top = os.environ.get('ANDROID_BUILD_TOP')
+
+    if not android_build_top:
+        print("ANDROID_BUILD_TOP not defined: run envsetup.sh / lunch")
+        sys.exit(1);
+
+    path_to_color = join(android_build_top, ROOT_FOLDER + '/res/color/')
+    file_color = [f for f in listdir(path_to_color) if isfile(join(path_to_color, f))]
+    path_to_drawable = join(android_build_top, ROOT_FOLDER + '/res/drawable/')
+    file_drawable = [f for f in listdir(path_to_drawable) if isfile(join(path_to_drawable, f))]
+    path_to_values = join(android_build_top, ROOT_FOLDER + '/res/values/')
+    file_values = [f for f in listdir(path_to_values) if isfile(join(path_to_values, f))]
+
+    # Outermost tag for the generated xml file.
+    data = ET.Element('resources')
+    resource_mapping = {}
+
+    for file in file_values:
+        # Complete file path.
+        file_path = join(path_to_values, file)
+        read_xml(file_path, resource_mapping)
+
+    for file in file_color:
+        resource_mapping.update({file[:-4]: 'color'})
+
+    for file in file_drawable:
+        resource_mapping.update({file[:-4]: 'drawable'})
+
+    create_resource(data, resource_mapping)
+    write_xml(data)
+
+
+def read_xml(file_path, resource_mapping):
+    doc = minidom.parse(file_path)
+
+    items = doc.getElementsByTagName('resources')
+
+    for res in items[0].childNodes:
+        # Exclude an node other than element node. such as text, comment etc.
+        if res.nodeType != res.ELEMENT_NODE or res.tagName == 'declare-styleable':
+            continue
+
+        if res.tagName == 'item':
+            resource_mapping.update({res.attributes['name'].value: res.attributes['type'].value})
+        else:
+            resource_mapping.update({res.attributes['name'].value: res.tagName})
+
+
+def write_xml(data):
+    xml_tag = "<?xml version='1.0' encoding='utf-8'?>"
+    header = "<!-- This file is AUTO GENERATED, DO NOT EDIT MANUALLY. -->"
+    data_string = ET.tostring(data)
+    output_file_name =  sys.argv[1] if len(sys.argv) > 1 else "current.xml"
+    output_file = open(output_file_name, "w")
+    data_string = xml_tag + header + data_string
+    output_file.write(data_string)
+
+
+def create_resource(data, resource_mapping):
+    sorted_resources = sorted(resource_mapping.items(),  key=lambda x: x[1]+x[0])
+
+    for resource in sorted_resources:
+        item = ET.SubElement(data, 'public')
+        item.set('type', resource[1])
+        item.set('name', resource[0])
+
+
+if __name__ == '__main__':
+    main()
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/current.xml b/car-ui-lib/tests/robotests/src/com/android/car/ui/current.xml
new file mode 100644
index 0000000..eb7f3a0
--- /dev/null
+++ b/car-ui-lib/tests/robotests/src/com/android/car/ui/current.xml
@@ -0,0 +1,194 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!-- This file is AUTO GENERATED, DO NOT EDIT MANUALLY. -->
+<resources>
+    <public name="CarUiToolbarStyle" type="attr"/>
+    <public name="carUiRecyclerViewStyle" type="attr"/>
+    <public name="state_ux_restricted" type="attr"/>
+    <public name="car_ui_preference_list_show_full_screen" type="bool"/>
+    <public name="car_ui_preference_show_chevron" type="bool"/>
+    <public name="car_ui_preference_switch_toggle_show_animation" type="bool"/>
+    <public name="car_ui_preference_switch_toggle_use_text_track" type="bool"/>
+    <public name="car_ui_scrollbar_above_recycler_view" type="bool"/>
+    <public name="car_ui_scrollbar_enable" type="bool"/>
+    <public name="car_ui_toolbar_tab_flexible_layout" type="bool"/>
+    <public name="car_ui_toolbar_title_and_tabs_are_mutually_exclusive" type="bool"/>
+    <public name="car_ui_activity_background_color" type="color"/>
+    <public name="car_ui_preference_category_title_text_color" type="color"/>
+    <public name="car_ui_preference_edit_text_dialog_message_text_color" type="color"/>
+    <public name="car_ui_preference_icon_color" type="color"/>
+    <public name="car_ui_preference_summary_text_color" type="color"/>
+    <public name="car_ui_preference_switch_track_text_color" type="color"/>
+    <public name="car_ui_preference_title_text_color" type="color"/>
+    <public name="car_ui_primary_text_color" type="color"/>
+    <public name="car_ui_recyclerview_divider_color" type="color"/>
+    <public name="car_ui_ripple_color" type="color"/>
+    <public name="car_ui_scrollbar_thumb" type="color"/>
+    <public name="car_ui_secondary_text_color" type="color"/>
+    <public name="car_ui_toolbar_menu_item_icon_activated_color" type="color"/>
+    <public name="car_ui_toolbar_menu_item_icon_background_activated_color" type="color"/>
+    <public name="car_ui_toolbar_menu_item_icon_background_color" type="color"/>
+    <public name="car_ui_toolbar_menu_item_icon_background_deactivated_color" type="color"/>
+    <public name="car_ui_toolbar_menu_item_icon_background_disabled_color" type="color"/>
+    <public name="car_ui_toolbar_menu_item_icon_background_restricted_color" type="color"/>
+    <public name="car_ui_toolbar_menu_item_icon_color" type="color"/>
+    <public name="car_ui_toolbar_menu_item_icon_deactivated_color" type="color"/>
+    <public name="car_ui_toolbar_menu_item_icon_disabled_color" type="color"/>
+    <public name="car_ui_toolbar_menu_item_icon_restricted_color" type="color"/>
+    <public name="car_ui_toolbar_nav_icon_color" type="color"/>
+    <public name="car_ui_toolbar_search_hint_text_color" type="color"/>
+    <public name="car_ui_toolbar_search_icon_color" type="color"/>
+    <public name="car_ui_toolbar_tab_item_selector" type="color"/>
+    <public name="car_ui_toolbar_tab_selected_color" type="color"/>
+    <public name="car_ui_toolbar_tab_unselected_color" type="color"/>
+    <public name="car_ui_button_disabled_alpha" type="dimen"/>
+    <public name="car_ui_dialog_edittext_height" type="dimen"/>
+    <public name="car_ui_dialog_edittext_margin_bottom" type="dimen"/>
+    <public name="car_ui_dialog_edittext_margin_end" type="dimen"/>
+    <public name="car_ui_dialog_edittext_margin_start" type="dimen"/>
+    <public name="car_ui_dialog_edittext_margin_top" type="dimen"/>
+    <public name="car_ui_letter_spacing_body1" type="dimen"/>
+    <public name="car_ui_letter_spacing_body3" type="dimen"/>
+    <public name="car_ui_margin" type="dimen"/>
+    <public name="car_ui_padding_0" type="dimen"/>
+    <public name="car_ui_padding_1" type="dimen"/>
+    <public name="car_ui_padding_2" type="dimen"/>
+    <public name="car_ui_padding_3" type="dimen"/>
+    <public name="car_ui_padding_4" type="dimen"/>
+    <public name="car_ui_padding_5" type="dimen"/>
+    <public name="car_ui_padding_6" type="dimen"/>
+    <public name="car_ui_preference_category_icon_margin_end" type="dimen"/>
+    <public name="car_ui_preference_category_icon_size" type="dimen"/>
+    <public name="car_ui_preference_category_min_height" type="dimen"/>
+    <public name="car_ui_preference_category_text_size" type="dimen"/>
+    <public name="car_ui_preference_content_margin_bottom" type="dimen"/>
+    <public name="car_ui_preference_content_margin_top" type="dimen"/>
+    <public name="car_ui_preference_dropdown_padding_start" type="dimen"/>
+    <public name="car_ui_preference_edit_text_dialog_margin_bottom" type="dimen"/>
+    <public name="car_ui_preference_edit_text_dialog_margin_top" type="dimen"/>
+    <public name="car_ui_preference_edit_text_dialog_message_margin_bottom" type="dimen"/>
+    <public name="car_ui_preference_edit_text_dialog_message_margin_end" type="dimen"/>
+    <public name="car_ui_preference_edit_text_dialog_message_margin_start" type="dimen"/>
+    <public name="car_ui_preference_edit_text_dialog_message_text_size" type="dimen"/>
+    <public name="car_ui_preference_edit_text_dialog_text_margin_end" type="dimen"/>
+    <public name="car_ui_preference_edit_text_dialog_text_margin_start" type="dimen"/>
+    <public name="car_ui_preference_icon_margin_end" type="dimen"/>
+    <public name="car_ui_preference_icon_size" type="dimen"/>
+    <public name="car_ui_preference_summary_text_size" type="dimen"/>
+    <public name="car_ui_preference_switch_height" type="dimen"/>
+    <public name="car_ui_preference_switch_text_size" type="dimen"/>
+    <public name="car_ui_preference_switch_width" type="dimen"/>
+    <public name="car_ui_preference_switch_width_half" type="dimen"/>
+    <public name="car_ui_preference_title_text_size" type="dimen"/>
+    <public name="car_ui_primary_icon_size" type="dimen"/>
+    <public name="car_ui_recyclerview_divider_bottom_margin" type="dimen"/>
+    <public name="car_ui_recyclerview_divider_end_margin" type="dimen"/>
+    <public name="car_ui_recyclerview_divider_height" type="dimen"/>
+    <public name="car_ui_recyclerview_divider_start_margin" type="dimen"/>
+    <public name="car_ui_recyclerview_divider_top_margin" type="dimen"/>
+    <public name="car_ui_scrollbar_button_size" type="dimen"/>
+    <public name="car_ui_scrollbar_container_width" type="dimen"/>
+    <public name="car_ui_scrollbar_decelerate_interpolator_factor" type="dimen"/>
+    <public name="car_ui_scrollbar_deceleration_times_divisor" type="dimen"/>
+    <public name="car_ui_scrollbar_margin" type="dimen"/>
+    <public name="car_ui_scrollbar_milliseconds_per_inch" type="dimen"/>
+    <public name="car_ui_scrollbar_padding_end" type="dimen"/>
+    <public name="car_ui_scrollbar_padding_start" type="dimen"/>
+    <public name="car_ui_scrollbar_separator_margin" type="dimen"/>
+    <public name="car_ui_scrollbar_thumb_radius" type="dimen"/>
+    <public name="car_ui_scrollbar_thumb_width" type="dimen"/>
+    <public name="car_ui_toolbar_bottom_inset" type="dimen"/>
+    <public name="car_ui_toolbar_end_inset" type="dimen"/>
+    <public name="car_ui_toolbar_first_row_height" type="dimen"/>
+    <public name="car_ui_toolbar_icon_size" type="dimen"/>
+    <public name="car_ui_toolbar_margin" type="dimen"/>
+    <public name="car_ui_toolbar_menu_item_icon_background_size" type="dimen"/>
+    <public name="car_ui_toolbar_menu_item_icon_ripple_radius" type="dimen"/>
+    <public name="car_ui_toolbar_menu_item_icon_size" type="dimen"/>
+    <public name="car_ui_toolbar_menu_item_margin" type="dimen"/>
+    <public name="car_ui_toolbar_row_height" type="dimen"/>
+    <public name="car_ui_toolbar_second_row_height" type="dimen"/>
+    <public name="car_ui_toolbar_start_inset" type="dimen"/>
+    <public name="car_ui_toolbar_tab_icon_height" type="dimen"/>
+    <public name="car_ui_toolbar_tab_icon_width" type="dimen"/>
+    <public name="car_ui_toolbar_tab_padding_x" type="dimen"/>
+    <public name="car_ui_toolbar_tab_text_width" type="dimen"/>
+    <public name="car_ui_toolbar_title_margin_start" type="dimen"/>
+    <public name="car_ui_toolbar_top_inset" type="dimen"/>
+    <public name="car_ui_touch_target_height" type="dimen"/>
+    <public name="car_ui_touch_target_width" type="dimen"/>
+    <public name="wrap_content" type="dimen"/>
+    <public name="car_ui_activity_background" type="drawable"/>
+    <public name="car_ui_divider" type="drawable"/>
+    <public name="car_ui_icon_arrow_back" type="drawable"/>
+    <public name="car_ui_icon_close" type="drawable"/>
+    <public name="car_ui_icon_down" type="drawable"/>
+    <public name="car_ui_icon_overflow_menu" type="drawable"/>
+    <public name="car_ui_icon_search" type="drawable"/>
+    <public name="car_ui_icon_settings" type="drawable"/>
+    <public name="car_ui_preference_icon_chevron" type="drawable"/>
+    <public name="car_ui_preference_switch_text_track" type="drawable"/>
+    <public name="car_ui_recyclerview_button_ripple_background" type="drawable"/>
+    <public name="car_ui_recyclerview_divider" type="drawable"/>
+    <public name="car_ui_recyclerview_ic_down" type="drawable"/>
+    <public name="car_ui_recyclerview_ic_up" type="drawable"/>
+    <public name="car_ui_recyclerview_scrollbar_thumb" type="drawable"/>
+    <public name="car_ui_toolbar_background" type="drawable"/>
+    <public name="car_ui_toolbar_menu_item_divider" type="drawable"/>
+    <public name="car_ui_toolbar_menu_item_icon_background" type="drawable"/>
+    <public name="car_ui_toolbar_menu_item_icon_ripple" type="drawable"/>
+    <public name="search" type="id"/>
+    <public name="car_ui_default_max_string_length" type="integer"/>
+    <public name="car_ui_scrollbar_gutter" type="integer"/>
+    <public name="car_ui_scrollbar_position" type="integer"/>
+    <public name="car_ui_toolbar_tab_item_layout" type="layout"/>
+    <public name="car_ui_alert_dialog_default_button" type="string"/>
+    <public name="car_ui_dialog_preference_negative" type="string"/>
+    <public name="car_ui_dialog_preference_positive" type="string"/>
+    <public name="car_ui_ellipsis" type="string"/>
+    <public name="car_ui_preference_category_title_font_family" type="string"/>
+    <public name="car_ui_preference_switch_off" type="string"/>
+    <public name="car_ui_preference_switch_on" type="string"/>
+    <public name="car_ui_restricted_while_driving" type="string"/>
+    <public name="car_ui_scrollbar_component" type="string"/>
+    <public name="car_ui_scrollbar_page_down_button" type="string"/>
+    <public name="car_ui_scrollbar_page_up_button" type="string"/>
+    <public name="car_ui_toolbar_default_search_hint" type="string"/>
+    <public name="car_ui_toolbar_menu_item_search_title" type="string"/>
+    <public name="car_ui_toolbar_menu_item_settings_title" type="string"/>
+    <public name="CarUiPreferenceTheme" type="style"/>
+    <public name="Preference.CarUi" type="style"/>
+    <public name="Preference.CarUi.Category" type="style"/>
+    <public name="Preference.CarUi.CheckBoxPreference" type="style"/>
+    <public name="Preference.CarUi.DialogPreference" type="style"/>
+    <public name="Preference.CarUi.DialogPreference.EditTextPreference" type="style"/>
+    <public name="Preference.CarUi.DropDown" type="style"/>
+    <public name="Preference.CarUi.Information" type="style"/>
+    <public name="Preference.CarUi.ListPreference" type="style"/>
+    <public name="Preference.CarUi.PreferenceScreen" type="style"/>
+    <public name="Preference.CarUi.SeekBarPreference" type="style"/>
+    <public name="Preference.CarUi.SwitchPreference" type="style"/>
+    <public name="PreferenceFragment.CarUi" type="style"/>
+    <public name="PreferenceFragmentList.CarUi" type="style"/>
+    <public name="RadioButton.CarUi" type="style"/>
+    <public name="TextAppearance.CarUi" type="style"/>
+    <public name="TextAppearance.CarUi.PreferenceCategoryTitle" type="style"/>
+    <public name="TextAppearance.CarUi.PreferenceEditTextDialogMessage" type="style"/>
+    <public name="TextAppearance.CarUi.PreferenceSummary" type="style"/>
+    <public name="TextAppearance.CarUi.PreferenceTitle" type="style"/>
+    <public name="TextAppearance.CarUi.Widget" type="style"/>
+    <public name="TextAppearance.CarUi.Widget.Toolbar" type="style"/>
+    <public name="TextAppearance.CarUi.Widget.Toolbar.Tab" type="style"/>
+    <public name="TextAppearance.CarUi.Widget.Toolbar.Tab.Selected" type="style"/>
+    <public name="TextAppearance.CarUi.Widget.Toolbar.Title" type="style"/>
+    <public name="Theme.CarUi" type="style"/>
+    <public name="Widget.CarUi" type="style"/>
+    <public name="Widget.CarUi.Button.Borderless.Colored" type="style"/>
+    <public name="Widget.CarUi.CarUiRecyclerView" type="style"/>
+    <public name="Widget.CarUi.CarUiRecyclerView.NestedRecyclerView" type="style"/>
+    <public name="Widget.CarUi.Toolbar" type="style"/>
+    <public name="Widget.CarUi.Toolbar.BottomView" type="style"/>
+    <public name="Widget.CarUi.Toolbar.NavIcon" type="style"/>
+    <public name="Widget.CarUi.Toolbar.Search.EditText" type="style"/>
+    <public name="Widget.CarUi.Toolbar.SeparatorView" type="style"/>
+    <public name="Widget.CarUi.Toolbar.TextButton" type="style"/>
+</resources>
\ No newline at end of file