Merge "Migrate to use instrumentation classes from settingslib."
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 3bb04d3..29459a0e 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -158,7 +158,7 @@
<activity android:name=".Settings$NetworkDashboardActivity"
android:taskAffinity="com.android.settings"
android:label="@string/network_dashboard_title"
- android:icon="@drawable/ic_settings_wireless"
+ android:icon="@drawable/ic_homepage_network"
android:parentActivityName="Settings">
<intent-filter android:priority="1">
<action android:name="android.settings.WIRELESS_SETTINGS" />
@@ -184,7 +184,7 @@
<activity android:name=".Settings$ConnectedDeviceDashboardActivity"
android:taskAffinity="com.android.settings"
android:label="@string/connected_devices_dashboard_title"
- android:icon="@drawable/ic_devices_other"
+ android:icon="@drawable/ic_homepage_connected_device"
android:parentActivityName="Settings">
<intent-filter android:priority="1">
<action android:name="android.settings.NFC_SETTINGS" />
@@ -210,7 +210,7 @@
android:enabled="false"
android:taskAffinity="com.android.settings"
android:label="@string/connected_devices_dashboard_title"
- android:icon="@drawable/ic_devices_other"
+ android:icon="@drawable/ic_homepage_connected_device"
android:parentActivityName="Settings">
<intent-filter android:priority="1">
<action android:name="android.settings.NFC_SETTINGS" />
@@ -903,7 +903,7 @@
<activity android:name="Settings$DisplaySettingsActivity"
android:label="@string/display_settings"
- android:icon="@drawable/ic_settings_display"
+ android:icon="@drawable/ic_homepage_display"
android:taskAffinity="">
<intent-filter android:priority="1">
<action android:name="com.android.settings.DISPLAY_SETTINGS" />
@@ -1284,7 +1284,7 @@
<activity android:name="Settings$SecuritySettingsActivity"
android:label="@string/security_settings_title"
- android:icon="@drawable/ic_settings_security"
+ android:icon="@drawable/ic_homepage_security"
android:configChanges="orientation|keyboardHidden|screenSize"
android:taskAffinity=""
android:parentActivityName="Settings">
@@ -1312,7 +1312,7 @@
<!-- TODO(32953042) Merge with Settings$SecuritySettingsActivity -->
<activity android:name="Settings$SecuritySettingsActivityV2"
android:label="@string/security_settings_title"
- android:icon="@drawable/ic_settings_security"
+ android:icon="@drawable/ic_homepage_security"
android:enabled="false"
android:configChanges="orientation|keyboardHidden|screenSize"
android:taskAffinity=""
@@ -1475,7 +1475,7 @@
<activity android:name="Settings$AccessibilitySettingsActivity"
android:label="@string/accessibility_settings"
- android:icon="@drawable/ic_settings_accessibility"
+ android:icon="@drawable/ic_homepage_accessibility"
android:configChanges="orientation|keyboardHidden|screenSize"
android:taskAffinity="">
<intent-filter android:priority="1">
@@ -1805,7 +1805,7 @@
<activity android:name=".Settings$StorageDashboardActivity"
android:label="@string/storage_settings"
- android:icon="@drawable/ic_settings_storage"
+ android:icon="@drawable/ic_homepage_storage"
android:taskAffinity="com.android.settings"
android:parentActivityName="Settings">
<intent-filter android:priority="1">
@@ -2227,7 +2227,7 @@
<activity android:name="Settings$PowerUsageSummaryActivity"
android:label="@string/power_usage_summary_title"
- android:icon="@drawable/ic_settings_battery"
+ android:icon="@drawable/ic_homepage_battery"
android:enabled="false">
<intent-filter android:priority="1">
<action android:name="android.intent.action.POWER_USAGE_SUMMARY" />
@@ -2258,7 +2258,7 @@
<activity android:name=".Settings$PowerUsageSummaryLegacyActivity"
android:label="@string/power_usage_summary_title"
- android:icon="@drawable/ic_settings_battery">
+ android:icon="@drawable/ic_homepage_battery">
<intent-filter>
<action android:name="android.intent.action.POWER_USAGE_SUMMARY" />
<category android:name="android.intent.category.DEFAULT" />
@@ -2643,7 +2643,7 @@
<!-- Keep compatibility with old shortcuts. -->
<activity android:name="Settings$SoundSettingsActivity"
android:label="@string/sound_settings"
- android:icon="@drawable/ic_settings_sound"
+ android:icon="@drawable/ic_homepage_sound"
android:taskAffinity=""
android:exported="true">
<intent-filter android:priority="1">
@@ -3086,7 +3086,7 @@
<!-- Alias for battery settings in new IA. Remove and merge metadata into TargetActivity -->
<activity android:name=".Settings$AppAndNotificationDashboardActivity"
android:label="@string/app_and_notification_dashboard_title"
- android:icon="@drawable/ic_apps">
+ android:icon="@drawable/ic_homepage_apps">
<intent-filter android:priority="9">
<action android:name="com.android.settings.action.SETTINGS"/>
</intent-filter>
@@ -3100,7 +3100,7 @@
<activity android:name=".Settings$UserAndAccountDashboardActivity"
android:label="@string/account_dashboard_title"
- android:icon="@drawable/ic_settings_accounts">
+ android:icon="@drawable/ic_homepage_accounts">
<intent-filter android:priority="3">
<action android:name="com.android.settings.action.SETTINGS"/>
</intent-filter>
@@ -3118,7 +3118,7 @@
<activity android:name=".Settings$SystemDashboardActivity"
android:label="@string/header_category_system"
- android:icon="@drawable/ic_settings_about">
+ android:icon="@drawable/ic_homepage_system_dashboard">
<intent-filter android:priority="-1">
<action android:name="com.android.settings.action.SETTINGS"/>
</intent-filter>
@@ -3132,7 +3132,7 @@
<activity android:name=".support.SupportDashboardActivity"
android:label="@string/page_tab_title_support"
- android:icon="@drawable/ic_help"
+ android:icon="@drawable/ic_homepage_support"
android:theme="@android:style/Theme.DeviceDefault.Light.Panel"
android:enabled="@bool/config_support_enabled">
<intent-filter android:priority="-2">
diff --git a/color-check-baseline.xml b/color-check-baseline.xml
index 506770c..066dab9 100644
--- a/color-check-baseline.xml
+++ b/color-check-baseline.xml
@@ -93,7 +93,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/layout-land/choose_lock_pattern.xml"
- line="160"
+ line="170"
column="17"/>
</issue>
@@ -1081,6 +1081,214 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <color name="homepage_network_background">#2196F3</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="123"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <color name="homepage_connected_device_background">#71A234</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="124"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <color name="homepage_app_and_notification_background">#FF7E0F</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="125"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <color name="homepage_battery_background">#258982</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="126"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <color name="homepage_display_background">#FFB600</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="127"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <color name="homepage_sound_background">#01B1AF</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="128"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <color name="homepage_storage_background">#C14CE6</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="129"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <color name="homepage_security_background">#0F9D58</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="130"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <color name="homepage_accounts_background">#F15B8D</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="131"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <color name="homepage_accessibility_background">#5011C1</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="132"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <color name="homepage_system_background">#757575</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="133"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <color name="homepage_support_background">#26459C</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="134"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <color name="homepage_generic_icon_background">#1A73E8</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="135"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" android:background="@color/condition_card_background""
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
@@ -1449,6 +1657,198 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" android:color="@color/homepage_accessibility_background" />"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/drawable/ic_homepage_accessibility.xml"
+ line="24"
+ column="17"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" android:color="@color/homepage_accounts_background" />"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/drawable/ic_homepage_accounts.xml"
+ line="24"
+ column="17"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" android:color="@color/homepage_app_and_notification_background" />"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/drawable/ic_homepage_apps.xml"
+ line="24"
+ column="17"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" android:color="@color/homepage_battery_background" />"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/drawable/ic_homepage_battery.xml"
+ line="24"
+ column="17"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" android:color="@color/homepage_connected_device_background" />"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/drawable/ic_homepage_connected_device.xml"
+ line="24"
+ column="17"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" android:color="@color/homepage_display_background" />"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/drawable/ic_homepage_display.xml"
+ line="24"
+ column="17"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" android:color="@color/homepage_network_background" />"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/drawable/ic_homepage_network.xml"
+ line="24"
+ column="17"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" android:color="@color/homepage_security_background" />"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/drawable/ic_homepage_security.xml"
+ line="24"
+ column="17"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" android:color="@color/homepage_sound_background" />"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/drawable/ic_homepage_sound.xml"
+ line="24"
+ column="17"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" android:color="@color/homepage_storage_background" />"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/drawable/ic_homepage_storage.xml"
+ line="24"
+ column="17"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" android:color="@color/homepage_support_background" />"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/drawable/ic_homepage_support.xml"
+ line="24"
+ column="17"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" android:color="@color/homepage_system_background" />"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/drawable/ic_homepage_system_dashboard.xml"
+ line="24"
+ column="17"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" android:tint="#db4437""
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
@@ -2073,22 +2473,6 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <string name="sync_plug" msgid="3905078969081888738">""<font fgcolor="#ffffffff">"Welcome to Google sync!"</font>" \nA Google approach to syncing data to allow access to your contacts, appointments, and more from wherever you are."</string>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/values-en-rXC/strings.xml"
- line="2353"
- column="168"/>
- </issue>
-
- <issue
- id="HardCodedColor"
- severity="Error"
- message="Avoid using hardcoded color"
- category="Correctness"
- priority="4"
- summary="Using hardcoded color"
- explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" <string name="sync_plug" msgid="3905078969081888738"><font fgcolor="#ffffffff">"Welcome to Google sync!"</font>" \nA Google approach to syncing data to allow access to your contacts, appointments and more from wherever you are."</string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
@@ -2153,11 +2537,27 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <string name="sync_plug" msgid="3905078969081888738">""<font fgcolor="#ffffffff">"Welcome to Google sync!"</font>" \nA Google approach to syncing data to allow access to your contacts, appointments, and more from wherever you are."</string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values-en-rXC/strings.xml"
+ line="2396"
+ column="168"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" <string name="sync_plug"><font fgcolor="#ffffffff">Welcome to Google sync!</font>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/strings.xml"
- line="5539"
+ line="5637"
column="36"/>
</issue>
@@ -2189,7 +2589,7 @@
errorLine2=" ^">
<location
file="res/values/styles.xml"
- line="442"
+ line="437"
column="44"/>
</issue>
@@ -2205,7 +2605,7 @@
errorLine2=" ^">
<location
file="res/values/styles.xml"
- line="448"
+ line="443"
column="44"/>
</issue>
@@ -2221,7 +2621,7 @@
errorLine2=" ^">
<location
file="res/values/styles.xml"
- line="449"
+ line="444"
column="44"/>
</issue>
@@ -2237,7 +2637,7 @@
errorLine2=" ^">
<location
file="res/values/styles.xml"
- line="472"
+ line="467"
column="41"/>
</issue>
@@ -2445,7 +2845,7 @@
errorLine2=" ^">
<location
file="res/values/themes.xml"
- line="316"
+ line="308"
column="45"/>
</issue>
@@ -2461,7 +2861,7 @@
errorLine2=" ^">
<location
file="res/values/themes.xml"
- line="317"
+ line="309"
column="49"/>
</issue>
@@ -2477,7 +2877,7 @@
errorLine2=" ^">
<location
file="res/values/themes.xml"
- line="325"
+ line="317"
column="45"/>
</issue>
@@ -2493,7 +2893,7 @@
errorLine2=" ^">
<location
file="res/values/themes.xml"
- line="326"
+ line="318"
column="49"/>
</issue>
diff --git a/res/drawable/ic_apps.xml b/res/drawable/ic_apps.xml
index 9f00141..841c25a 100644
--- a/res/drawable/ic_apps.xml
+++ b/res/drawable/ic_apps.xml
@@ -17,8 +17,7 @@
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:pathData="M6 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6 12c1.1 0 2-.9 2-2s-.9-2-2-2-2
.9-2 2 .9 2 2 2zm-6 0c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0-6c1.1 0 2-.9
diff --git a/res/drawable/ic_devices_other.xml b/res/drawable/ic_devices_other.xml
index b22e483..b40aceb 100644
--- a/res/drawable/ic_devices_other.xml
+++ b/res/drawable/ic_devices_other.xml
@@ -17,8 +17,7 @@
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M3,6h17c0.55,0,1-0.45,1-1v0c0-0.55-0.45-1-1-1H3C1.9,4,1,4.9,1,6v12c0,1.1,0.9,2,2,2h3c0.55,0,1-0.45,1-1v0
diff --git a/res/drawable/ic_help.xml b/res/drawable/ic_help.xml
index 6add484..841de58 100644
--- a/res/drawable/ic_help.xml
+++ b/res/drawable/ic_help.xml
@@ -17,8 +17,7 @@
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:pathData="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 16.81c-.72
0-1.3-.58-1.3-1.3s.58-1.3 1.3-1.3 1.3 .58 1.3 1.3-.58 1.3-1.3
diff --git a/res/drawable/ic_help_24dp.xml b/res/drawable/ic_help_24dp.xml
deleted file mode 100644
index d80b717..0000000
--- a/res/drawable/ic_help_24dp.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<vector
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorAccent">
- <path
- android:fillColor="#FF000000"
- android:pathData="M20,19.59V8l-6,-6H6c-1.1,0 -1.99,0.9 -1.99,2L4,20c0,1.1 0.89,2
- 1.99,2H18c0.45,0 0.85,-0.15 1.19,-0.4l-4.43,-4.43c-0.8,0.52 -1.74,0.83 -2.76,0.83 -2.76,0
- -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5c0,1.02 -0.31,1.96 -0.83,2.75L20,19.59zM9,13c0,1.66
- 1.34,3 3,3s3,-1.34 3,-3 -1.34,-3 -3,-3 -3,1.34 -3,3z"/>
-</vector>
\ No newline at end of file
diff --git a/res/drawable/ic_homepage_accessibility.xml b/res/drawable/ic_homepage_accessibility.xml
new file mode 100644
index 0000000..6cfb124
--- /dev/null
+++ b/res/drawable/ic_homepage_accessibility.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item>
+ <shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid
+ android:color="@color/homepage_accessibility_background" />
+ <size
+ android:width="@dimen/dashboard_tile_image_size"
+ android:height="@dimen/dashboard_tile_image_size" />
+ </shape>
+ </item>
+
+ <item
+ android:width="@dimen/dashboard_tile_foreground_image_size"
+ android:height="@dimen/dashboard_tile_foreground_image_size"
+ android:start="@dimen/dashboard_tile_foreground_image_inset"
+ android:top="@dimen/dashboard_tile_foreground_image_inset"
+ android:drawable="@drawable/ic_settings_accessibility" />
+</layer-list>
diff --git a/res/drawable/ic_homepage_accounts.xml b/res/drawable/ic_homepage_accounts.xml
new file mode 100644
index 0000000..4cfccc2
--- /dev/null
+++ b/res/drawable/ic_homepage_accounts.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item>
+ <shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid
+ android:color="@color/homepage_accounts_background" />
+ <size
+ android:width="@dimen/dashboard_tile_image_size"
+ android:height="@dimen/dashboard_tile_image_size" />
+ </shape>
+ </item>
+
+ <item
+ android:width="@dimen/dashboard_tile_foreground_image_size"
+ android:height="@dimen/dashboard_tile_foreground_image_size"
+ android:start="@dimen/dashboard_tile_foreground_image_inset"
+ android:top="@dimen/dashboard_tile_foreground_image_inset"
+ android:drawable="@drawable/ic_settings_accounts" />
+</layer-list>
diff --git a/res/drawable/ic_homepage_apps.xml b/res/drawable/ic_homepage_apps.xml
new file mode 100644
index 0000000..d494799
--- /dev/null
+++ b/res/drawable/ic_homepage_apps.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item>
+ <shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid
+ android:color="@color/homepage_app_and_notification_background" />
+ <size
+ android:width="@dimen/dashboard_tile_image_size"
+ android:height="@dimen/dashboard_tile_image_size" />
+ </shape>
+ </item>
+
+ <item
+ android:width="@dimen/dashboard_tile_foreground_image_size"
+ android:height="@dimen/dashboard_tile_foreground_image_size"
+ android:start="@dimen/dashboard_tile_foreground_image_inset"
+ android:top="@dimen/dashboard_tile_foreground_image_inset"
+ android:drawable="@drawable/ic_apps" />
+</layer-list>
diff --git a/res/drawable/ic_homepage_battery.xml b/res/drawable/ic_homepage_battery.xml
new file mode 100644
index 0000000..d9ad3d3
--- /dev/null
+++ b/res/drawable/ic_homepage_battery.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item>
+ <shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid
+ android:color="@color/homepage_battery_background" />
+ <size
+ android:width="@dimen/dashboard_tile_image_size"
+ android:height="@dimen/dashboard_tile_image_size" />
+ </shape>
+ </item>
+
+ <item
+ android:width="@dimen/dashboard_tile_foreground_image_size"
+ android:height="@dimen/dashboard_tile_foreground_image_size"
+ android:start="@dimen/dashboard_tile_foreground_image_inset"
+ android:top="@dimen/dashboard_tile_foreground_image_inset"
+ android:drawable="@drawable/ic_settings_battery_white" />
+</layer-list>
diff --git a/res/drawable/ic_homepage_connected_device.xml b/res/drawable/ic_homepage_connected_device.xml
new file mode 100644
index 0000000..20707fb
--- /dev/null
+++ b/res/drawable/ic_homepage_connected_device.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item>
+ <shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid
+ android:color="@color/homepage_connected_device_background" />
+ <size
+ android:width="@dimen/dashboard_tile_image_size"
+ android:height="@dimen/dashboard_tile_image_size" />
+ </shape>
+ </item>
+
+ <item
+ android:width="@dimen/dashboard_tile_foreground_image_size"
+ android:height="@dimen/dashboard_tile_foreground_image_size"
+ android:start="@dimen/dashboard_tile_foreground_image_inset"
+ android:top="@dimen/dashboard_tile_foreground_image_inset"
+ android:drawable="@drawable/ic_devices_other" />
+</layer-list>
diff --git a/res/drawable/ic_homepage_display.xml b/res/drawable/ic_homepage_display.xml
new file mode 100644
index 0000000..ec5e54f
--- /dev/null
+++ b/res/drawable/ic_homepage_display.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item>
+ <shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid
+ android:color="@color/homepage_display_background" />
+ <size
+ android:width="@dimen/dashboard_tile_image_size"
+ android:height="@dimen/dashboard_tile_image_size" />
+ </shape>
+ </item>
+
+ <item
+ android:width="@dimen/dashboard_tile_foreground_image_size"
+ android:height="@dimen/dashboard_tile_foreground_image_size"
+ android:start="@dimen/dashboard_tile_foreground_image_inset"
+ android:top="@dimen/dashboard_tile_foreground_image_inset"
+ android:drawable="@drawable/ic_settings_display_white" />
+</layer-list>
diff --git a/res/drawable/ic_homepage_network.xml b/res/drawable/ic_homepage_network.xml
new file mode 100644
index 0000000..c72e152
--- /dev/null
+++ b/res/drawable/ic_homepage_network.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item>
+ <shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid
+ android:color="@color/homepage_network_background" />
+ <size
+ android:width="@dimen/dashboard_tile_image_size"
+ android:height="@dimen/dashboard_tile_image_size" />
+ </shape>
+ </item>
+
+ <item
+ android:width="@dimen/dashboard_tile_foreground_image_size"
+ android:height="@dimen/dashboard_tile_foreground_image_size"
+ android:start="@dimen/dashboard_tile_foreground_image_inset"
+ android:top="@dimen/dashboard_tile_foreground_image_inset"
+ android:drawable="@drawable/ic_settings_wireless_white" />
+</layer-list>
diff --git a/res/drawable/ic_homepage_security.xml b/res/drawable/ic_homepage_security.xml
new file mode 100644
index 0000000..52dedfb
--- /dev/null
+++ b/res/drawable/ic_homepage_security.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item>
+ <shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid
+ android:color="@color/homepage_security_background" />
+ <size
+ android:width="@dimen/dashboard_tile_image_size"
+ android:height="@dimen/dashboard_tile_image_size" />
+ </shape>
+ </item>
+
+ <item
+ android:width="@dimen/dashboard_tile_foreground_image_size"
+ android:height="@dimen/dashboard_tile_foreground_image_size"
+ android:start="@dimen/dashboard_tile_foreground_image_inset"
+ android:top="@dimen/dashboard_tile_foreground_image_inset"
+ android:drawable="@drawable/ic_settings_security_white" />
+</layer-list>
diff --git a/res/drawable/ic_homepage_sound.xml b/res/drawable/ic_homepage_sound.xml
new file mode 100644
index 0000000..7210889
--- /dev/null
+++ b/res/drawable/ic_homepage_sound.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item>
+ <shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid
+ android:color="@color/homepage_sound_background" />
+ <size
+ android:width="@dimen/dashboard_tile_image_size"
+ android:height="@dimen/dashboard_tile_image_size" />
+ </shape>
+ </item>
+
+ <item
+ android:width="@dimen/dashboard_tile_foreground_image_size"
+ android:height="@dimen/dashboard_tile_foreground_image_size"
+ android:start="@dimen/dashboard_tile_foreground_image_inset"
+ android:top="@dimen/dashboard_tile_foreground_image_inset"
+ android:drawable="@drawable/ic_settings_sound_white" />
+</layer-list>
diff --git a/res/drawable/ic_homepage_storage.xml b/res/drawable/ic_homepage_storage.xml
new file mode 100644
index 0000000..e7f5819
--- /dev/null
+++ b/res/drawable/ic_homepage_storage.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item>
+ <shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid
+ android:color="@color/homepage_storage_background" />
+ <size
+ android:width="@dimen/dashboard_tile_image_size"
+ android:height="@dimen/dashboard_tile_image_size" />
+ </shape>
+ </item>
+
+ <item
+ android:width="@dimen/dashboard_tile_foreground_image_size"
+ android:height="@dimen/dashboard_tile_foreground_image_size"
+ android:start="@dimen/dashboard_tile_foreground_image_inset"
+ android:top="@dimen/dashboard_tile_foreground_image_inset"
+ android:drawable="@drawable/ic_settings_storage_white" />
+</layer-list>
diff --git a/res/drawable/ic_homepage_support.xml b/res/drawable/ic_homepage_support.xml
new file mode 100644
index 0000000..31d51bf
--- /dev/null
+++ b/res/drawable/ic_homepage_support.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item>
+ <shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid
+ android:color="@color/homepage_support_background" />
+ <size
+ android:width="@dimen/dashboard_tile_image_size"
+ android:height="@dimen/dashboard_tile_image_size" />
+ </shape>
+ </item>
+
+ <item
+ android:width="@dimen/dashboard_tile_foreground_image_size"
+ android:height="@dimen/dashboard_tile_foreground_image_size"
+ android:start="@dimen/dashboard_tile_foreground_image_inset"
+ android:top="@dimen/dashboard_tile_foreground_image_inset"
+ android:drawable="@drawable/ic_help" />
+</layer-list>
diff --git a/res/drawable/ic_homepage_system_dashboard.xml b/res/drawable/ic_homepage_system_dashboard.xml
new file mode 100644
index 0000000..bf3d0eb
--- /dev/null
+++ b/res/drawable/ic_homepage_system_dashboard.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item>
+ <shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid
+ android:color="@color/homepage_system_background" />
+ <size
+ android:width="@dimen/dashboard_tile_image_size"
+ android:height="@dimen/dashboard_tile_image_size" />
+ </shape>
+ </item>
+
+ <item
+ android:width="@dimen/dashboard_tile_foreground_image_size"
+ android:height="@dimen/dashboard_tile_foreground_image_size"
+ android:start="@dimen/dashboard_tile_foreground_image_inset"
+ android:top="@dimen/dashboard_tile_foreground_image_inset"
+ android:drawable="@drawable/ic_settings_system_dashboard_white" />
+</layer-list>
diff --git a/res/drawable/ic_settings_accessibility.xml b/res/drawable/ic_settings_accessibility.xml
index 4cf5182..67b6c9a 100644
--- a/res/drawable/ic_settings_accessibility.xml
+++ b/res/drawable/ic_settings_accessibility.xml
@@ -17,8 +17,7 @@
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M20.75,6.99c-0.14,-0.55 -0.69,-0.87 -1.24,-0.75C17.13,6.77 14.48,7 12,7S6.87,6.77 4.49,6.24c-0.55,-0.12 -1.1,0.2 -1.24,0.75l0,0C3.11,7.55 3.45,8.12 4,8.25C5.61,8.61 7.35,8.86 9,9v12c0,0.55 0.45,1 1,1h0c0.55,0 1,-0.45 1,-1v-5h2v5c0,0.55 0.45,1 1,1h0c0.55,0 1,-0.45 1,-1V9c1.65,-0.14 3.39,-0.39 5,-0.75C20.55,8.12 20.89,7.55 20.75,6.99L20.75,6.99zM12,6c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2s-2,0.9 -2,2S10.9,6 12,6z"/>
diff --git a/res/drawable/ic_settings_accounts.xml b/res/drawable/ic_settings_accounts.xml
index 154c09c..d152b14 100644
--- a/res/drawable/ic_settings_accounts.xml
+++ b/res/drawable/ic_settings_accounts.xml
@@ -17,8 +17,7 @@
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M3.0,5.0
diff --git a/res/drawable/ic_settings_battery_white.xml b/res/drawable/ic_settings_battery_white.xml
new file mode 100644
index 0000000..255b75e
--- /dev/null
+++ b/res/drawable/ic_settings_battery_white.xml
@@ -0,0 +1,24 @@
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FFFFFF"
+ android:pathData="M15.67,4H14V2h-4v2H8.33C7.6,4 7,4.6 7,5.33v15.33C7,21.4 7.6,22 8.33,22h7.33c0.74,0 1.34,-0.6 1.34,-1.33V5.33C17,4.6 16.4,4 15.67,4z"/>
+</vector>
diff --git a/res/drawable/ic_settings_display_white.xml b/res/drawable/ic_settings_display_white.xml
new file mode 100644
index 0000000..4a41691
--- /dev/null
+++ b/res/drawable/ic_settings_display_white.xml
@@ -0,0 +1,27 @@
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24.0dp"
+ android:height="24.0dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M20,15.31l2.6-2.6c0.39-0.39,0.39-1.02,0-1.41L20,8.69V5c0-0.55-0.45-1-1-1h-3.69l-2.6-2.6c-0.39-0.39-1.02-0.39-1.41,0
+L8.69,4H5C4.45,4,4,4.45,4,5v3.69l-2.6,2.6c-0.39,0.39-0.39,1.02,0,1.41l2.6,2.6V19c0,0.55,0.45,1,1,1h3.69l2.6,2.6
+c0.39,0.39,1.02,0.39,1.41,0l2.6-2.6H19c0.55,0,1-0.45,1-1V15.31z
+M12,18V6c3.31,0,6,2.69,6,6S15.31,18,12,18z"/>
+</vector>
diff --git a/res/drawable/ic_settings_security_white.xml b/res/drawable/ic_settings_security_white.xml
new file mode 100644
index 0000000..d6c5b64
--- /dev/null
+++ b/res/drawable/ic_settings_security_white.xml
@@ -0,0 +1,24 @@
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24.0dp"
+ android:height="24.0dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M18.0,8.0l-1.0,0.0L17.0,6.0c0.0,-2.76 -2.24,-5.0 -5.0,-5.0S7.0,3.24 7.0,6.0l0.0,2.0L6.0,8.0c-1.1,0.0 -2.0,0.9 -2.0,2.0l0.0,10.0c0.0,1.0 0.9,2.0 2.0,2.0l12.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L20.0,10.0c0.0,-1.1 -0.9,-2.0 -2.0,-2.0zm-6.0,9.0c-1.1,0.0 -2.0,-0.9 -2.0,-2.0s0.9,-2.0 2.0,-2.0 2.0,0.9 2.0,2.0 -0.9,2.0 -2.0,2.0zm3.1,-9.0L8.9,8.0L8.9,6.0c0.0,-1.71 1.39,-3.1 3.1,-3.1 1.71,0.0 3.1,1.39 3.1,3.1l0.0,2.0z"/>
+</vector>
diff --git a/res/drawable/ic_settings_sound_white.xml b/res/drawable/ic_settings_sound_white.xml
new file mode 100644
index 0000000..4737349
--- /dev/null
+++ b/res/drawable/ic_settings_sound_white.xml
@@ -0,0 +1,29 @@
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24.0dp"
+ android:height="24.0dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M3 10v4c0 .55 .45 1 1 1h3l3.29 3.29c.63 .63 1.71 .18
+1.71-.71V6.41c0-.89-1.08-1.34-1.71-.71L7 9H4c-.55 0-1 .45-1 1zm13.5 2A4.5 4.5 0
+0 0 14 7.97v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 4.46v.19c0 .38 .25 .71 .61
+.85C17.18 6.54 19 9.06 19 12s-1.82 5.46-4.39 6.5c-.36 .14 -.61 .47 -.61 .85
+v.19c0 .63 .63 1.08 1.22 .86 a8.995 8.995 0 0 0 0-16.8c-.59-.23-1.22 .23 -1.22
+.86 z"/>
+</vector>
diff --git a/res/drawable/ic_settings_storage_white.xml b/res/drawable/ic_settings_storage_white.xml
new file mode 100644
index 0000000..8f662f3
--- /dev/null
+++ b/res/drawable/ic_settings_storage_white.xml
@@ -0,0 +1,24 @@
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FFFFFF"
+ android:pathData="M20,16L4,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2h16c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2zM5,19.1c-0.61,0 -1.1,-0.49 -1.1,-1.1 0,-0.61 0.49,-1.1 1.1,-1.1s1.1,0.49 1.1,1.1c0,0.61 -0.49,1.1 -1.1,1.1zM4,8h16c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2L4,4c-1.1,0 -2,0.9 -2,2s0.9,2 2,2zM5,4.9c0.61,0 1.1,0.49 1.1,1.1 0,0.61 -0.49,1.1 -1.1,1.1S3.9,6.61 3.9,6c0,-0.61 0.49,-1.1 1.1,-1.1zM20,10L4,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2h16c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2zM5,13.1c-0.61,0 -1.1,-0.49 -1.1,-1.1 0,-0.61 0.49,-1.1 1.1,-1.1s1.1,0.49 1.1,1.1c0,0.61 -0.49,1.1 -1.1,1.1z"/>
+</vector>
diff --git a/res/drawable/ic_settings_system_dashboard_white.xml b/res/drawable/ic_settings_system_dashboard_white.xml
new file mode 100644
index 0000000..5308cb0
--- /dev/null
+++ b/res/drawable/ic_settings_system_dashboard_white.xml
@@ -0,0 +1,30 @@
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24.0dp"
+ android:height="24.0dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FFFFFF"
+ android:pathData="M12,17L12,17c0.55,0 1,-0.45 1,-1v-4c0,-0.55 -0.45,-1 -1,-1l0,0c-0.55,0 -1,0.45 -1,1v4C11,16.55 11.45,17 12,17z"/>
+ <path
+ android:fillColor="#FFFFFF"
+ android:pathData="M12,2c-5.52,0 -10,4.48 -10,10s4.48,10 10,10s10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8s8,3.59 8,8S16.41,20 12,20z"/>
+ <path
+ android:fillColor="#FFFFFF"
+ android:pathData="M12,9.1L12,9.1c0.61,0 1.1,-0.49 1.1,-1.1l0,0c0,-0.61 -0.49,-1.1 -1.1,-1.1l0,0c-0.61,0 -1.1,0.49 -1.1,1.1l0,0C10.9,8.61 11.39,9.1 12,9.1z"/>
+</vector>
diff --git a/res/drawable/ic_settings_wireless_white.xml b/res/drawable/ic_settings_wireless_white.xml
new file mode 100644
index 0000000..8dedb0d
--- /dev/null
+++ b/res/drawable/ic_settings_wireless_white.xml
@@ -0,0 +1,24 @@
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24.0dp"
+ android:height="24.0dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M23.66,8.11c0.39,-0.48 0.29,-1.19 -0.22,-1.54C21.67,5.36 17.55,3 12,3 6.44,3 2.33,5.36 0.56,6.57c-0.51,0.35 -0.61,1.06 -0.23,1.54L11.16,21.6c0.42,0.53 1.23,0.53 1.66,0L23.66,8.11z"/>
+</vector>
diff --git a/res/layout/suggestion_container.xml b/res/layout/suggestion_container.xml
index e01a590..9110c58 100644
--- a/res/layout/suggestion_container.xml
+++ b/res/layout/suggestion_container.xml
@@ -20,7 +20,7 @@
style="@style/SuggestionConditionStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingTop="20dp"
+ android:paddingTop="12dp"
android:orientation="vertical">
<LinearLayout
@@ -55,7 +55,7 @@
android:id="@+id/suggestion_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingTop="20dp"
+ android:paddingTop="18dp"
android:paddingBottom="16dp"
android:scrollbars="none"/>
diff --git a/res/layout/suggestion_tile_v2.xml b/res/layout/suggestion_tile_v2.xml
index 27b3c34..e04febb 100644
--- a/res/layout/suggestion_tile_v2.xml
+++ b/res/layout/suggestion_tile_v2.xml
@@ -20,6 +20,7 @@
android:id="@+id/suggestion_card"
android:layout_width="328dp"
android:layout_height="wrap_content"
+ app:cardPreventCornerOverlap="false"
app:cardUseCompatPadding="true"
app:cardElevation="2dp"
app:cardCornerRadius="@dimen/suggestion_card_corner_radius">
@@ -37,16 +38,17 @@
<ImageView
android:id="@android:id/icon"
- android:layout_width="@dimen/dashboard_tile_image_size"
- android:layout_height="@dimen/dashboard_tile_image_size"
+ android:layout_width="@dimen/suggestion_card_icon_size"
+ android:layout_height="@dimen/suggestion_card_icon_size"
style="@style/SuggestionCardIcon"
android:layout_marginTop="16dp"
android:layout_marginBottom="8dp" />
<ImageView
android:id="@+id/close_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="18dp"
+ android:layout_height="18dp"
+ android:alpha="0.54"
android:layout_alignParentEnd="true"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
@@ -62,7 +64,7 @@
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:singleLine="true"
- android:textAppearance="@style/TextAppearance.TileTitle"
+ android:textAppearance="@style/TextAppearance.SuggestionTitleV2"
android:ellipsize="marquee"
android:fadingEdge="horizontal" />
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 72f2d91..e10b4cb 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -118,4 +118,22 @@
<!-- Suggestion/condition colors -->
<color name="suggestion_condition_background">#f2f2f2</color>
<color name="condition_card_background">#f8f8f8</color>
+
+ <!-- Dashboard/homepage icon background colors -->
+ <color name="homepage_network_background">#2196F3</color>
+ <color name="homepage_connected_device_background">#71A234</color>
+ <color name="homepage_app_and_notification_background">#FF7E0F</color>
+ <color name="homepage_battery_background">#258982</color>
+ <color name="homepage_display_background">#FFB600</color>
+ <color name="homepage_sound_background">#01B1AF</color>
+ <color name="homepage_storage_background">#C14CE6</color>
+ <color name="homepage_security_background">#0F9D58</color>
+ <color name="homepage_accounts_background">#F15B8D</color>
+ <color name="homepage_accessibility_background">#5011C1</color>
+ <color name="homepage_system_background">#757575</color>
+ <color name="homepage_support_background">#26459C</color>
+ <color name="homepage_generic_icon_background">#1A73E8</color>
+ <!-- End of dashboard/homepage icon background colors -->
+
</resources>
+
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 16ac128..332deea 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -101,7 +101,13 @@
<dimen name="dashboard_tile_minimum_height">72dp</dimen>
<!-- Dashboard image tile size -->
- <dimen name="dashboard_tile_image_size">24dp</dimen>
+ <dimen name="dashboard_tile_image_size">36dp</dimen>
+
+ <!-- Dashboard foreground image size -->
+ <dimen name="dashboard_tile_foreground_image_size">24dp</dimen>
+
+ <!-- Dashboard foreground image inset (from background edge to foreground edge) -->
+ <dimen name="dashboard_tile_foreground_image_inset">6dp</dimen>
<!-- Dashboard tile image margin start / end -->
<dimen name="dashboard_tile_image_margin">24dp</dimen>
@@ -297,6 +303,7 @@
<dimen name="suggestion_condition_header_padding_expanded">5dp</dimen>
<!-- Suggestion cards size and padding -->
+ <dimen name="suggestion_card_icon_size">24dp</dimen>
<dimen name="suggestion_card_width_one_card">328dp</dimen>
<dimen name="suggestion_card_width_two_cards">158dp</dimen>
<dimen name="suggestion_card_width_multiple_cards">152dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1fc8e41..043196d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3228,7 +3228,7 @@
<!-- SD card & phone storage settings screen, title for the checkbox to let user decide whether erase eSIM data together [CHAR LIMIT=NONE] -->
<string name="reset_esim_title">Also reset eSIMs</string>
<!-- SD card & phone storage settings screen, message for the checkbox to let user decide whether erase eSIM data together [CHAR LIMIT=NONE] -->
- <string name="reset_esim_desc">Erase all eSIMs on the phone. You\u2019ll have to contract your carrier to redownload your eSIMs. This will not cancel your mobile service plan.</string>
+ <string name="reset_esim_desc">Erase all eSIMs on the phone. You\u2019ll have to contact your carrier to redownload your eSIMs. This will not cancel your mobile service plan.</string>
<!-- SD card & phone storage settings screen, button on screen after user selects Reset network settings -->
<string name="reset_network_button_text">Reset settings</string>
<!-- SD card & phone storage settings screen, message on screen after user selects Reset settings button -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 7764e74..b672247 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -318,7 +318,7 @@
<style name="TextAppearance.SuggestionHeader"
parent="@android:style/TextAppearance.Material.Subhead">
- <item name="android:fontFamily">sans-serif-medium</item>
+ <item name="android:fontFamily">@config/config_headlineFontFamilyMedium</item>
<item name="android:textSize">14sp</item>
<item name="android:textColor">?android:attr/colorAccent</item>
</style>
@@ -337,6 +337,11 @@
<item name="android:fontFamily">sans-serif-medium</item>
</style>
+ <style name="TextAppearance.SuggestionTitleV2"
+ parent="@android:style/TextAppearance.Material.Subhead">
+ <item name="android:fontFamily">@config/config_headlineFontFamily</item>
+ </style>
+
<style name="TextAppearance.SuggestionSummary" parent="TextAppearance.Small">
<item name="android:textColor">?android:attr/textColorSecondary</item>
</style>
@@ -469,6 +474,7 @@
<style name="TextAppearance.SearchBar" parent="@android:style/TextAppearance.Material.Widget.Toolbar.Subtitle">
<item name="android:textSize">@dimen/search_bar_text_size</item>
+ <item name="android:fontFamily">@config/config_headlineFontFamily</item>
</style>
<style name="device_info_dialog_label">
diff --git a/res/xml/connected_devices_advanced.xml b/res/xml/connected_devices_advanced.xml
index 078d7dd..8ca6b81 100644
--- a/res/xml/connected_devices_advanced.xml
+++ b/res/xml/connected_devices_advanced.xml
@@ -16,6 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="connected_devices_screen"
android:title="@string/connected_device_connections_title">
@@ -24,6 +25,7 @@
android:title="@string/bluetooth_settings_title"
android:icon="@drawable/ic_settings_bluetooth"
android:summary="@string/bluetooth_pref_summary"
+ settings:controller="com.android.settings.bluetooth.BluetoothSwitchPreferenceController"
android:order="-7"/>
<SwitchPreference
diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml
index 673b2a5..4988b16 100644
--- a/res/xml/my_device_info.xml
+++ b/res/xml/my_device_info.xml
@@ -30,7 +30,7 @@
<!-- Account name -->
<Preference
- android:key="account"
+ android:key="branded_account"
android:order="1"
android:title="@string/my_device_info_account_preference_title"
android:summary="@string/summary_placeholder"/>
@@ -43,7 +43,7 @@
android:summary="@string/summary_placeholder"/>
<!-- Device name -->
- <Preference
+ <com.android.settings.widget.ValidatedEditTextPreference
android:key="device_name"
android:order="3"
android:title="@string/my_device_info_device_name_preference_title"
diff --git a/src/com/android/settings/bluetooth/BluetoothLengthDeviceNameFilter.java b/src/com/android/settings/bluetooth/BluetoothLengthDeviceNameFilter.java
new file mode 100644
index 0000000..cdf5310
--- /dev/null
+++ b/src/com/android/settings/bluetooth/BluetoothLengthDeviceNameFilter.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.bluetooth;
+
+/**
+ * Filter to max the length of a Bluetotoh device name to 248 bytes, as defined by the spec.
+ */
+public class BluetoothLengthDeviceNameFilter extends Utf8ByteLengthFilter {
+ private static final int BLUETOOTH_NAME_MAX_LENGTH_BYTES = 248;
+
+ public BluetoothLengthDeviceNameFilter() {
+ super(BLUETOOTH_NAME_MAX_LENGTH_BYTES);
+ }
+}
diff --git a/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java b/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java
index 576e656..134bb97 100644
--- a/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java
+++ b/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java
@@ -43,8 +43,6 @@
*/
abstract class BluetoothNameDialogFragment extends InstrumentedDialogFragment
implements TextWatcher {
- private static final int BLUETOOTH_NAME_MAX_LENGTH_BYTES = 248;
-
private AlertDialog mAlertDialog;
private Button mOkButton;
@@ -109,7 +107,7 @@
View view = layoutInflater.inflate(R.layout.dialog_edittext, null);
mDeviceNameView = (EditText) view.findViewById(R.id.edittext);
mDeviceNameView.setFilters(new InputFilter[] {
- new Utf8ByteLengthFilter(BLUETOOTH_NAME_MAX_LENGTH_BYTES)
+ new BluetoothLengthDeviceNameFilter()
});
mDeviceNameView.setText(deviceName); // set initial value before adding listener
if (!TextUtils.isEmpty(deviceName)) {
diff --git a/src/com/android/settings/bluetooth/Utf8ByteLengthFilter.java b/src/com/android/settings/bluetooth/Utf8ByteLengthFilter.java
index bae6e56..ab49818 100644
--- a/src/com/android/settings/bluetooth/Utf8ByteLengthFilter.java
+++ b/src/com/android/settings/bluetooth/Utf8ByteLengthFilter.java
@@ -37,7 +37,7 @@
* pairs are encoded as 4 bytes, with the caveat that the maximum
* length will be constrained more conservatively than necessary.
*/
-class Utf8ByteLengthFilter implements InputFilter {
+public class Utf8ByteLengthFilter implements InputFilter {
private final int mMaxBytes;
Utf8ByteLengthFilter(int maxBytes) {
diff --git a/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java b/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java
index 5565e3d..c968d25 100644
--- a/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java
@@ -31,7 +31,7 @@
import com.android.settings.overlay.FeatureFactory;
public class BrandedAccountPreferenceController extends BasePreferenceController {
- private static final String KEY_PREFERENCE_TITLE = "account";
+ private static final String KEY_PREFERENCE_TITLE = "branded_account";
private final Account[] mAccounts;
public BrandedAccountPreferenceController(Context context) {
diff --git a/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java b/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java
new file mode 100644
index 0000000..0f1dea1
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.deviceinfo;
+
+import android.annotation.Nullable;
+import android.content.Context;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiManager;
+import android.os.Build;
+import android.provider.Settings;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.text.SpannedString;
+
+import com.android.settings.bluetooth.BluetoothLengthDeviceNameFilter;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.widget.ValidatedEditTextPreference;
+import com.android.settings.wifi.tether.WifiDeviceNameTextValidator;
+import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+
+public class DeviceNamePreferenceController extends BasePreferenceController
+ implements ValidatedEditTextPreference.Validator, Preference.OnPreferenceChangeListener {
+ private static final String PREF_KEY = "device_name";
+ private String mDeviceName;
+ protected WifiManager mWifiManager;
+ private final WifiDeviceNameTextValidator mWifiDeviceNameTextValidator;
+ private ValidatedEditTextPreference mPreference;
+ @Nullable
+ private LocalBluetoothManager mBluetoothManager;
+
+ public DeviceNamePreferenceController(Context context) {
+ super(context, PREF_KEY);
+ mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+ mWifiDeviceNameTextValidator = new WifiDeviceNameTextValidator();
+ initializeDeviceName();
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreference = (ValidatedEditTextPreference) screen.findPreference(PREF_KEY);
+ mPreference.setSummary(getSummary());
+ mPreference.setValidator(this);
+ }
+
+ private void initializeDeviceName() {
+ mDeviceName = Settings.Global.getString(mContext.getContentResolver(),
+ Settings.Global.DEVICE_NAME);
+ if (mDeviceName == null) {
+ mDeviceName = Build.MODEL;
+ }
+ }
+
+ @Override
+ public String getSummary() {
+ return mDeviceName;
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return PREF_KEY;
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ mDeviceName = (String) newValue;
+ setDeviceName(mDeviceName);
+ preference.setSummary(getSummary());
+ return true;
+ }
+
+ @Override
+ public boolean isTextValid(String deviceName) {
+ // BluetoothNameDialogFragment describes BT name filter as a 248 bytes long cap.
+ // Given the restrictions presented by the SSID name filter (32 char), I don't believe it is
+ // possible to construct an SSID that is not a valid Bluetooth name.
+ return mWifiDeviceNameTextValidator.isTextValid(deviceName);
+ }
+
+ public void setLocalBluetoothManager(LocalBluetoothManager localBluetoothManager) {
+ mBluetoothManager = localBluetoothManager;
+ }
+
+ /**
+ * This method presumes that security/validity checks have already been passed.
+ */
+ private void setDeviceName(String deviceName) {
+ setSettingsGlobalDeviceName(deviceName);
+ setBluetoothDeviceName(deviceName);
+ setTetherSsidName(deviceName);
+ }
+
+ private void setSettingsGlobalDeviceName(String deviceName) {
+ Settings.Global.putString(mContext.getContentResolver(), Settings.Global.DEVICE_NAME,
+ deviceName);
+ }
+
+ private void setBluetoothDeviceName(String deviceName) {
+ // Bluetooth manager doesn't exist for certain devices.
+ if (mBluetoothManager == null) {
+ return;
+ }
+
+ final LocalBluetoothAdapter localBluetoothAdapter = mBluetoothManager.getBluetoothAdapter();
+ if (localBluetoothAdapter != null) {
+ localBluetoothAdapter.setName(getFilteredBluetoothString(deviceName));
+ }
+ }
+
+ /**
+ * Using a UTF8ByteLengthFilter, we can filter a string to be compliant with the Bluetooth spec.
+ * For more information, see {@link com.android.settings.bluetooth.BluetoothNameDialogFragment}.
+ */
+ private static final String getFilteredBluetoothString(final String deviceName) {
+ CharSequence filteredSequence = new BluetoothLengthDeviceNameFilter().filter(deviceName, 0, deviceName.length(),
+ new SpannedString(""),
+ 0, 0);
+ // null -> use the original
+ if (filteredSequence == null) {
+ return deviceName;
+ }
+ return filteredSequence.toString();
+ }
+
+ private void setTetherSsidName(String deviceName) {
+ final WifiConfiguration config = mWifiManager.getWifiApConfiguration();
+ config.SSID = deviceName;
+ // TODO: If tether is running, turn off the AP and restart it after setting config.
+ mWifiManager.setWifiApConfiguration(config);
+ }
+}
\ No newline at end of file
diff --git a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
index a301807..04e7fde 100644
--- a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
+++ b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
@@ -16,6 +16,8 @@
package com.android.settings.deviceinfo.aboutphone;
+import static com.android.settings.bluetooth.Utils.getLocalBtManager;
+
import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
@@ -54,6 +56,7 @@
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settings.deviceinfo.DeviceNamePreferenceController;
import java.util.ArrayList;
import java.util.Arrays;
@@ -102,6 +105,10 @@
final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(new PhoneNumberPreferenceController(context));
controllers.add(new BrandedAccountPreferenceController(context));
+ DeviceNamePreferenceController deviceNamePreferenceController =
+ new DeviceNamePreferenceController(context);
+ deviceNamePreferenceController.setLocalBluetoothManager(getLocalBtManager(context));
+ controllers.add(deviceNamePreferenceController);
controllers.add(new SimStatusPreferenceController(context, fragment));
controllers.add(new DeviceModelPreferenceController(context, fragment));
controllers.add(new ImeiInfoPreferenceController(context, fragment));
@@ -117,7 +124,6 @@
controllers.add(new FccEquipmentIdPreferenceController(context));
controllers.add(
new BuildNumberPreferenceController(context, activity, fragment, lifecycle));
- // TODO: Add preference controller for getting the device name.
return controllers;
}
diff --git a/src/com/android/settings/slices/SettingsSliceProvider.java b/src/com/android/settings/slices/SettingsSliceProvider.java
index e068b2f..433bdf3 100644
--- a/src/com/android/settings/slices/SettingsSliceProvider.java
+++ b/src/com/android/settings/slices/SettingsSliceProvider.java
@@ -30,7 +30,6 @@
import com.android.settings.R;
import com.android.settingslib.utils.ThreadUtils;
-import java.util.HashMap;
import java.util.Map;
import java.util.WeakHashMap;
diff --git a/src/com/android/settings/slices/SliceBuilderUtils.java b/src/com/android/settings/slices/SliceBuilderUtils.java
index e9152ba..11ff1c1 100644
--- a/src/com/android/settings/slices/SliceBuilderUtils.java
+++ b/src/com/android/settings/slices/SliceBuilderUtils.java
@@ -23,6 +23,7 @@
import android.content.Intent;
import android.graphics.drawable.Icon;
import android.text.TextUtils;
+import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
@@ -85,17 +86,46 @@
*/
public static BasePreferenceController getPreferenceController(Context context,
SliceData sliceData) {
- // TODO check for context-only controller first.
+ try {
+ return getController(context, sliceData, true /* isContextOnly */);
+ } catch (IllegalStateException e) {
+ // Do nothing
+ Log.d(TAG, "Could not find Context-only controller for preference controller: "
+ + sliceData.getKey());
+ }
+
+ return getController(context, sliceData, false /* isContextOnly */);
+ }
+
+ /**
+ * Attempts to build a {@link BasePreferenceController} from {@param SliceData}.
+ *
+ * @param sliceData Backing data for the Slice.
+ * @param contextOnlyCtor {@code true} when the constructor for the
+ * {@link BasePreferenceController}
+ * only takes a {@link Context}. Else the constructor will be ({@link
+ * Context}, {@code String}.
+ */
+ private static BasePreferenceController getController(Context context, SliceData sliceData,
+ boolean contextOnlyCtor) {
try {
Class<?> clazz = Class.forName(sliceData.getPreferenceController());
- Constructor<?> preferenceConstructor = clazz.getConstructor(Context.class,
- String.class);
- return (BasePreferenceController) preferenceConstructor.newInstance(
- new Object[]{context, sliceData.getKey()});
+ Constructor<?> preferenceConstructor;
+ Object[] params;
+
+ if (contextOnlyCtor) {
+ preferenceConstructor = clazz.getConstructor(Context.class);
+ params = new Object[]{context};
+ } else {
+ preferenceConstructor = clazz.getConstructor(Context.class, String.class);
+ params = new Object[]{context, sliceData.getKey()};
+ }
+
+ return (BasePreferenceController) preferenceConstructor.newInstance(params);
} catch (ClassNotFoundException | NoSuchMethodException | InstantiationException |
IllegalArgumentException | InvocationTargetException | IllegalAccessException e) {
throw new IllegalStateException(
- "Invalid preference controller: " + sliceData.getPreferenceController());
+ "Invalid preference controller: " + sliceData.getPreferenceController(), e);
}
}
diff --git a/src/com/android/settings/support/SupportDashboardActivity.java b/src/com/android/settings/support/SupportDashboardActivity.java
index 3b5d623..e829577 100644
--- a/src/com/android/settings/support/SupportDashboardActivity.java
+++ b/src/com/android/settings/support/SupportDashboardActivity.java
@@ -66,7 +66,7 @@
data.title = context.getString(R.string.page_tab_title_support);
data.screenTitle = context.getString(R.string.settings_label);
data.summaryOn = context.getString(R.string.support_summary);
- data.iconResId = R.drawable.ic_help;
+ data.iconResId = R.drawable.ic_homepage_support;
data.intentTargetPackage = context.getPackageName();
data.intentTargetClass = SupportDashboardActivity.class.getName();
data.intentAction = Intent.ACTION_MAIN;
diff --git a/src/com/android/settings/wfd/WifiDisplaySettings.java b/src/com/android/settings/wfd/WifiDisplaySettings.java
index 7a9fc39..8f42389 100755
--- a/src/com/android/settings/wfd/WifiDisplaySettings.java
+++ b/src/com/android/settings/wfd/WifiDisplaySettings.java
@@ -22,6 +22,7 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.hardware.display.DisplayManager;
import android.hardware.display.WifiDisplay;
@@ -218,13 +219,9 @@
}
public static boolean isAvailable(Context context) {
- try {
- return context.getSystemService(Context.DISPLAY_SERVICE) != null
- && context.getSystemService(Context.WIFI_P2P_SERVICE) != null;
- } catch (Exception e) {
- // Service is not registered, so this is definitely not available.
- return false;
- }
+ return context.getSystemService(Context.DISPLAY_SERVICE) != null
+ && context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_DIRECT)
+ && context.getSystemService(Context.WIFI_P2P_SERVICE) != null;
}
private void scheduleUpdate(int changes) {
diff --git a/src/com/android/settings/widget/SettingsAppWidgetProvider.java b/src/com/android/settings/widget/SettingsAppWidgetProvider.java
index 5ccfc1b..adc386a 100644
--- a/src/com/android/settings/widget/SettingsAppWidgetProvider.java
+++ b/src/com/android/settings/widget/SettingsAppWidgetProvider.java
@@ -26,6 +26,7 @@
import android.content.Context;
import android.content.Intent;
import android.database.ContentObserver;
+import android.hardware.display.DisplayManager;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.Uri;
@@ -736,7 +737,7 @@
R.drawable.appwidget_settings_ind_on_r_holo);
} else {
final int brightness = getBrightness(context);
- final PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
+ final PowerManager pm = context.getSystemService(PowerManager.class);
// Set the icon
final int full = (int)(pm.getMaximumScreenBrightnessSetting()
* FULL_BRIGHTNESS_THRESHOLD);
@@ -872,53 +873,48 @@
*/
private void toggleBrightness(Context context) {
try {
- IPowerManager power = IPowerManager.Stub.asInterface(
- ServiceManager.getService("power"));
- if (power != null) {
- PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
+ DisplayManager dm = context.getSystemService(DisplayManager.class);
+ PowerManager pm = context.getSystemService(PowerManager.class);
- ContentResolver cr = context.getContentResolver();
- int brightness = Settings.System.getInt(cr,
- Settings.System.SCREEN_BRIGHTNESS);
- int brightnessMode = Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
- //Only get brightness setting if available
- if (context.getResources().getBoolean(
- com.android.internal.R.bool.config_automatic_brightness_available)) {
- brightnessMode = Settings.System.getInt(cr,
- Settings.System.SCREEN_BRIGHTNESS_MODE);
- }
-
- // Rotate AUTO -> MINIMUM -> DEFAULT -> MAXIMUM
- // Technically, not a toggle...
- if (brightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
- brightness = pm.getMinimumScreenBrightnessSetting();
- brightnessMode = Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
- } else if (brightness < pm.getDefaultScreenBrightnessSetting()) {
- brightness = pm.getDefaultScreenBrightnessSetting();
- } else if (brightness < pm.getMaximumScreenBrightnessSetting()) {
- brightness = pm.getMaximumScreenBrightnessSetting();
- } else {
- brightnessMode = Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
- brightness = pm.getMinimumScreenBrightnessSetting();
- }
-
- if (context.getResources().getBoolean(
- com.android.internal.R.bool.config_automatic_brightness_available)) {
- // Set screen brightness mode (automatic or manual)
- Settings.System.putInt(context.getContentResolver(),
- Settings.System.SCREEN_BRIGHTNESS_MODE,
- brightnessMode);
- } else {
- // Make sure we set the brightness if automatic mode isn't available
- brightnessMode = Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
- }
- if (brightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL) {
- power.setTemporaryScreenBrightnessSettingOverride(brightness);
- Settings.System.putInt(cr, Settings.System.SCREEN_BRIGHTNESS, brightness);
- }
+ ContentResolver cr = context.getContentResolver();
+ int brightness = Settings.System.getInt(cr,
+ Settings.System.SCREEN_BRIGHTNESS);
+ int brightnessMode = Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
+ //Only get brightness setting if available
+ if (context.getResources().getBoolean(
+ com.android.internal.R.bool.config_automatic_brightness_available)) {
+ brightnessMode = Settings.System.getInt(cr,
+ Settings.System.SCREEN_BRIGHTNESS_MODE);
}
- } catch (RemoteException e) {
- Log.d(TAG, "toggleBrightness: " + e);
+
+ // Rotate AUTO -> MINIMUM -> DEFAULT -> MAXIMUM
+ // Technically, not a toggle...
+ if (brightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
+ brightness = pm.getMinimumScreenBrightnessSetting();
+ brightnessMode = Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
+ } else if (brightness < pm.getDefaultScreenBrightnessSetting()) {
+ brightness = pm.getDefaultScreenBrightnessSetting();
+ } else if (brightness < pm.getMaximumScreenBrightnessSetting()) {
+ brightness = pm.getMaximumScreenBrightnessSetting();
+ } else {
+ brightnessMode = Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
+ brightness = pm.getMinimumScreenBrightnessSetting();
+ }
+
+ if (context.getResources().getBoolean(
+ com.android.internal.R.bool.config_automatic_brightness_available)) {
+ // Set screen brightness mode (automatic or manual)
+ Settings.System.putInt(context.getContentResolver(),
+ Settings.System.SCREEN_BRIGHTNESS_MODE,
+ brightnessMode);
+ } else {
+ // Make sure we set the brightness if automatic mode isn't available
+ brightnessMode = Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
+ }
+ if (brightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL) {
+ dm.setTemporaryBrightness(brightness);
+ Settings.System.putInt(cr, Settings.System.SCREEN_BRIGHTNESS, brightness);
+ }
} catch (Settings.SettingNotFoundException e) {
Log.d(TAG, "toggleBrightness: " + e);
}
diff --git a/src/com/android/settings/wifi/tether/WifiDeviceNameTextValidator.java b/src/com/android/settings/wifi/tether/WifiDeviceNameTextValidator.java
new file mode 100644
index 0000000..e766e32
--- /dev/null
+++ b/src/com/android/settings/wifi/tether/WifiDeviceNameTextValidator.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.wifi.tether;
+
+import com.android.settings.widget.ValidatedEditTextPreference;
+import com.android.settings.wifi.WifiUtils;
+
+/**
+ * Validates a text field for a valid Wi-Fi SSID name.
+ */
+public class WifiDeviceNameTextValidator implements ValidatedEditTextPreference.Validator {
+ @Override
+ public boolean isTextValid(String value) {
+ return !WifiUtils.isSSIDTooLong(value) && !WifiUtils.isSSIDTooShort(value);
+ }
+}
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java
index b563e53..d7cb441 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java
@@ -35,10 +35,12 @@
static final String DEFAULT_SSID = "AndroidAP";
private String mSSID;
+ private WifiDeviceNameTextValidator mWifiDeviceNameTextValidator;
public WifiTetherSSIDPreferenceController(Context context,
OnTetherConfigUpdateListener listener) {
super(context, listener);
+ mWifiDeviceNameTextValidator = new WifiDeviceNameTextValidator();
}
@Override
@@ -70,7 +72,7 @@
@Override
public boolean isTextValid(String value) {
- return !WifiUtils.isSSIDTooLong(value) && !WifiUtils.isSSIDTooShort(value);
+ return mWifiDeviceNameTextValidator.isTextValid(value);
}
public String getSSID() {
diff --git a/tests/robotests/src/com/android/settings/core/XmlControllerAttributeTest.java b/tests/robotests/src/com/android/settings/core/XmlControllerAttributeTest.java
index 8ded9d6..e6ca59b 100644
--- a/tests/robotests/src/com/android/settings/core/XmlControllerAttributeTest.java
+++ b/tests/robotests/src/com/android/settings/core/XmlControllerAttributeTest.java
@@ -80,11 +80,6 @@
private static final String BAD_CLASSNAME_ERROR =
"The following controllers set in the XML did not have valid class names:\n";
- private static final String BAD_CONSTRUCTOR_ERROR =
- "The constructor provided by the following classes were insufficient to instantiate "
- + "the object. It could be due to being an interface, abstract, or an "
- + "IllegalAccessException. Please fix the following classes:\n";
-
Context mContext;
SearchFeatureProvider mSearchProvider;
private FakeFeatureFactory mFakeFeatureFactory;
@@ -112,7 +107,6 @@
Set<String> invalidConstructors = new HashSet<>();
Set<String> invalidClassHierarchy = new HashSet<>();
Set<String> badClassNameControllers = new HashSet<>();
- Set<String> badConstructorControllers = new HashSet<>();
for (int resId : xmlSet) {
xmlControllers.addAll(getXmlControllers(resId));
@@ -133,13 +127,7 @@
continue;
}
- Object controller = getObjectFromConstructor(constructor);
- if (controller == null) {
- badConstructorControllers.add(controllerClassName);
- continue;
- }
-
- if (!(controller instanceof BasePreferenceController)) {
+ if (!isBasePreferenceController(clazz)) {
invalidClassHierarchy.add(controllerClassName);
}
}
@@ -150,13 +138,10 @@
invalidClassHierarchy);
final String badClassNameError = buildErrorMessage(BAD_CLASSNAME_ERROR,
badClassNameControllers);
- final String badConstructorError = buildErrorMessage(BAD_CONSTRUCTOR_ERROR,
- badConstructorControllers);
assertWithMessage(invalidConstructorError).that(invalidConstructors).isEmpty();
assertWithMessage(invalidClassHierarchyError).that(invalidClassHierarchy).isEmpty();
assertWithMessage(badClassNameError).that(badClassNameControllers).isEmpty();
- assertWithMessage(badConstructorError).that(badConstructorControllers).isEmpty();
}
private Set<Integer> getIndexableXml() {
@@ -260,25 +245,16 @@
return constructor;
}
- private Object getObjectFromConstructor(Constructor<?> constructor) {
- Object controller = null;
-
- try {
- controller = constructor.newInstance(mContext);
- } catch (InstantiationException | IllegalAccessException | InvocationTargetException |
- IllegalArgumentException e) {
+ /**
+ * Make sure that {@link BasePreferenceController} is in the class hierarchy.
+ */
+ private boolean isBasePreferenceController(Class<?> clazz) {
+ while (clazz != null) {
+ clazz = clazz.getSuperclass();
+ if (BasePreferenceController.class.equals(clazz)) {
+ return true;
+ }
}
-
- if (controller != null) {
- return controller;
- }
-
- try {
- controller = constructor.newInstance(mContext, "key");
- } catch (InstantiationException | IllegalAccessException | InvocationTargetException |
- IllegalArgumentException e) {
- }
-
- return controller;
+ return false;
}
-}
+}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/DeviceNamePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/DeviceNamePreferenceControllerTest.java
new file mode 100644
index 0000000..4ff79ca
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/deviceinfo/DeviceNamePreferenceControllerTest.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.deviceinfo;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiManager;
+import android.os.Build;
+import android.provider.Settings;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.widget.ValidatedEditTextPreference;
+import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DeviceNamePreferenceControllerTest {
+ private static final String TESTING_STRING = "Testing";
+
+ @Mock
+ private LocalBluetoothAdapter mBluetoothAdapter;
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private LocalBluetoothManager mBluetoothManager;
+ @Mock
+ private WifiManager mWifiManager;
+ @Mock
+ private PreferenceScreen mScreen;
+ private ValidatedEditTextPreference mPreference;
+ private DeviceNamePreferenceController mController;
+ private Context mContext;
+
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ ShadowApplication shadowApplication = ShadowApplication.getInstance();
+ shadowApplication.setSystemService(Context.WIFI_SERVICE, mWifiManager);
+ mContext = shadowApplication.getApplicationContext();
+ mPreference = new ValidatedEditTextPreference(mContext);
+ when(mBluetoothManager.getBluetoothAdapter()).thenReturn(mBluetoothAdapter);
+ when(mScreen.findPreference(anyString())).thenReturn(mPreference);
+ final WifiConfiguration configuration = new WifiConfiguration();
+ configuration.SSID = "test-ap";
+ when(mWifiManager.getWifiApConfiguration()).thenReturn(configuration);
+
+ mController = new DeviceNamePreferenceController(mContext);
+ mController.setLocalBluetoothManager(mBluetoothManager);
+ }
+
+ @Test
+ public void constructor_defaultDeviceNameIsModelName() {
+ assertThat(mController.getSummary()).isEqualTo(Build.MODEL);
+ }
+
+ @Test
+ public void constructor_deviceNameLoadedIfSet() {
+ Settings.Global.putString(mContext.getContentResolver(), Settings.Global.DEVICE_NAME,
+ "Test");
+ mController = new DeviceNamePreferenceController(mContext);
+ mController.setLocalBluetoothManager(mBluetoothManager);
+ assertThat(mController.getSummary()).isEqualTo("Test");
+ }
+
+ @Test
+ public void isTextValid_nameUnder33CharactersIsValid() {
+ assertThat(mController.isTextValid("12345678901234567890123456789012")).isTrue();
+ }
+
+ @Test
+ public void isTextValid_nameTooLongIsInvalid() {
+ assertThat(mController.isTextValid("123456789012345678901234567890123")).isFalse();
+ }
+
+ @Test
+ public void setDeviceName_preferenceUpdatedWhenDeviceNameUpdated() {
+ mController.onPreferenceChange(mPreference, TESTING_STRING);
+
+ assertThat(mPreference.getSummary()).isEqualTo(TESTING_STRING);
+ }
+
+ @Test
+ public void setDeviceName_bluetoothNameUpdatedWhenDeviceNameUpdated() {
+ mController.onPreferenceChange(mPreference, TESTING_STRING);
+
+ verify(mBluetoothAdapter).setName(eq(TESTING_STRING));
+ }
+
+ @Test
+ public void setDeviceName_wifiTetherNameUpdatedWhenDeviceNameUpdated() {
+ mController.onPreferenceChange(mPreference, TESTING_STRING);
+
+ ArgumentCaptor<WifiConfiguration> captor = ArgumentCaptor.forClass(WifiConfiguration.class);
+ verify(mWifiManager).setWifiApConfiguration(captor.capture());
+ assertThat(captor.getValue().SSID).isEqualTo(TESTING_STRING);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/slices/FakeContextOnlyPreferenceController.java b/tests/robotests/src/com/android/settings/slices/FakeContextOnlyPreferenceController.java
new file mode 100644
index 0000000..214607b
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/slices/FakeContextOnlyPreferenceController.java
@@ -0,0 +1,19 @@
+package com.android.settings.slices;
+
+import android.content.Context;
+
+import com.android.settings.core.BasePreferenceController;
+
+public class FakeContextOnlyPreferenceController extends BasePreferenceController {
+
+ public static final String KEY = "fakeController2";
+
+ public FakeContextOnlyPreferenceController(Context context) {
+ super(context, KEY);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java b/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java
index 10e4b76..0923571 100644
--- a/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java
@@ -50,8 +50,8 @@
private final String FRAGMENT_NAME = "fragment name";
private final int ICON = 1234; // I declare a thumb war
private final Uri URI = Uri.parse("content://com.android.settings.slices/test");
- private final String PREF_CONTROLLER = FakeToggleController.class.getName();
- ;
+ private final Class PREF_CONTROLLER = FakeToggleController.class;
+ private final Class PREF_CONTROLLER2 = FakeContextOnlyPreferenceController.class;
private Context mContext;
@@ -76,6 +76,14 @@
}
@Test
+ public void testGetPreferenceController_contextOnly_buildsMatchingController() {
+ BasePreferenceController controller = SliceBuilderUtils.getPreferenceController(mContext,
+ getDummyData(PREF_CONTROLLER2));
+
+ assertThat(controller).isInstanceOf(FakeContextOnlyPreferenceController.class);
+ }
+
+ @Test
public void testDynamicSummary_returnsSliceSummary() {
SliceData data = getDummyData();
FakePreferenceController controller = new FakePreferenceController(mContext, KEY);
@@ -87,7 +95,7 @@
@Test
public void testDynamicSummary_returnsFragmentSummary() {
- SliceData data = getDummyData(null);
+ SliceData data = getDummyData((String) null);
FakePreferenceController controller = spy(new FakePreferenceController(mContext, KEY));
String controllerSummary = "new_Summary";
doReturn(controllerSummary).when(controller).getSummary();
@@ -99,7 +107,7 @@
@Test
public void testDynamicSummary_returnsSliceScreenTitle() {
- SliceData data = getDummyData(null);
+ SliceData data = getDummyData((String) null);
FakePreferenceController controller = new FakePreferenceController(mContext, KEY);
String summary = SliceBuilderUtils.getSubtitleText(mContext, controller, data);
@@ -129,10 +137,18 @@
}
private SliceData getDummyData() {
- return getDummyData(SUMMARY);
+ return getDummyData(PREF_CONTROLLER, SUMMARY);
}
private SliceData getDummyData(String summary) {
+ return getDummyData(PREF_CONTROLLER, summary);
+ }
+
+ private SliceData getDummyData(Class prefController) {
+ return getDummyData(prefController, SUMMARY);
+ }
+
+ private SliceData getDummyData(Class prefController, String summary) {
return new SliceData.Builder()
.setKey(KEY)
.setTitle(TITLE)
@@ -141,7 +157,7 @@
.setIcon(ICON)
.setFragmentName(FRAGMENT_NAME)
.setUri(URI)
- .setPreferenceControllerClassName(PREF_CONTROLLER)
+ .setPreferenceControllerClassName(prefController.getName())
.build();
}
}
diff --git a/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java b/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java
index 1cf85fb..fc634d2 100644
--- a/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java
@@ -24,6 +24,7 @@
import android.app.Activity;
import android.content.Context;
+import android.content.pm.PackageManager;
import android.hardware.display.DisplayManager;
import android.media.MediaRouter;
import android.net.wifi.p2p.WifiP2pManager;
@@ -50,6 +51,8 @@
private SummaryLoader mSummaryLoader;
@Mock
private MediaRouter mMediaRouter;
+ @Mock
+ private PackageManager mPackageManager;
private SummaryLoader.SummaryProvider mSummaryProvider;
@@ -58,6 +61,8 @@
MockitoAnnotations.initMocks(this);
when(mActivity.getSystemService(Context.MEDIA_ROUTER_SERVICE))
.thenReturn(mMediaRouter);
+ when(mActivity.getPackageManager()).thenReturn(mPackageManager);
+ when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI_DIRECT)).thenReturn(true);
mSummaryProvider = WifiDisplaySettings.SUMMARY_PROVIDER_FACTORY.createSummaryProvider(
mActivity, mSummaryLoader);
@@ -86,15 +91,15 @@
}
@Test
- public void isAvailable_noService_shouldReturnFalse() {
+ public void isAvailable_nullService_shouldReturnFalse() {
assertThat(WifiDisplaySettings.isAvailable(mActivity))
.isFalse();
}
@Test
- public void isAvailable_throwException_shouldReturnFalse() {
- when(mActivity.getSystemService(Context.WIFI_P2P_SERVICE))
- .thenThrow(new IllegalStateException());
+ public void isAvailable_noWifiDirectFeature_shouldReturnFalse() {
+ when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI_DIRECT))
+ .thenReturn(false);
assertThat(WifiDisplaySettings.isAvailable(mActivity))
.isFalse();