Merge "Pass the activtiy launch flags into the AdvancedPowerUsageDetail" into tm-dev
diff --git a/color-check-baseline.xml b/color-check-baseline.xml
index ade5789..edd2d59 100644
--- a/color-check-baseline.xml
+++ b/color-check-baseline.xml
@@ -405,8 +405,8 @@
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="message_text_incoming">#ffffffff</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ errorLine1=" <color name="message_text_incoming">#E4E3DA</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
line="47"
@@ -437,8 +437,8 @@
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="message_text_outgoing">#ff323232</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ errorLine1=" <color name="message_text_outgoing">#1B1C17</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
line="48"
@@ -533,7 +533,7 @@
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="message_bubble_incoming">#689f38</color>"
+ errorLine1=" <color name="message_bubble_incoming">#52534D</color>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
@@ -549,8 +549,8 @@
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="message_bubble_outgoing">#ffffffff</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ errorLine1=" <color name="message_bubble_outgoing">#C7C8B7</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
line="52"
@@ -565,7 +565,7 @@
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="message_icon_background_incoming">#689f38</color>"
+ errorLine1=" <color name="message_icon_background_incoming">#E6F451</color>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
@@ -597,7 +597,7 @@
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="message_icon_background_outgoing">#4285f4</color>"
+ errorLine1=" <color name="message_icon_background_outgoing">#FBBC04</color>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
@@ -629,11 +629,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=" <color name="message_icon_color">#DADADA</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="57"
+ 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="usage_graph_dots">#B0BEC5</color>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="58"
+ line="59"
column="5"/>
</issue>
@@ -649,7 +665,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="61"
+ line="62"
column="5"/>
</issue>
@@ -665,7 +681,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="64"
+ line="65"
column="5"/>
</issue>
@@ -681,7 +697,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="67"
+ line="68"
column="5"/>
</issue>
@@ -697,7 +713,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="70"
+ line="71"
column="5"/>
</issue>
@@ -713,7 +729,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="71"
+ line="72"
column="5"/>
</issue>
@@ -729,7 +745,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="72"
+ line="73"
column="5"/>
</issue>
@@ -745,7 +761,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="73"
+ line="74"
column="5"/>
</issue>
@@ -761,7 +777,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="74"
+ line="75"
column="5"/>
</issue>
@@ -777,7 +793,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="75"
+ line="76"
column="5"/>
</issue>
@@ -793,7 +809,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="76"
+ line="77"
column="5"/>
</issue>
@@ -809,7 +825,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="77"
+ line="78"
column="5"/>
</issue>
@@ -825,7 +841,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="78"
+ line="79"
column="5"/>
</issue>
@@ -841,7 +857,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="79"
+ line="80"
column="5"/>
</issue>
@@ -857,7 +873,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="80"
+ line="81"
column="5"/>
</issue>
@@ -873,7 +889,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="81"
+ line="82"
column="5"/>
</issue>
@@ -889,7 +905,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="82"
+ line="83"
column="5"/>
</issue>
@@ -905,7 +921,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="83"
+ line="84"
column="5"/>
</issue>
@@ -921,7 +937,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="84"
+ line="85"
column="5"/>
</issue>
@@ -937,7 +953,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="85"
+ line="86"
column="5"/>
</issue>
@@ -953,7 +969,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="86"
+ line="87"
column="5"/>
</issue>
@@ -969,7 +985,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="87"
+ line="88"
column="5"/>
</issue>
@@ -985,7 +1001,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="88"
+ line="89"
column="5"/>
</issue>
@@ -1001,7 +1017,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="95"
+ line="96"
column="5"/>
</issue>
@@ -1017,7 +1033,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="98"
+ line="99"
column="5"/>
</issue>
@@ -1033,7 +1049,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="99"
+ line="100"
column="5"/>
</issue>
@@ -1049,7 +1065,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="100"
+ line="101"
column="5"/>
</issue>
@@ -1065,7 +1081,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="101"
+ line="102"
column="5"/>
</issue>
@@ -1081,7 +1097,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="102"
+ line="103"
column="5"/>
</issue>
@@ -1097,7 +1113,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="103"
+ line="104"
column="5"/>
</issue>
@@ -1113,7 +1129,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="106"
+ line="107"
column="5"/>
</issue>
@@ -1129,7 +1145,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="107"
+ line="108"
column="5"/>
</issue>
@@ -1145,7 +1161,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="108"
+ line="109"
column="5"/>
</issue>
@@ -1161,7 +1177,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="109"
+ line="110"
column="5"/>
</issue>
@@ -1177,7 +1193,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="110"
+ line="111"
column="5"/>
</issue>
@@ -1193,7 +1209,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="113"
+ line="114"
column="5"/>
</issue>
@@ -1209,7 +1225,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="114"
+ line="115"
column="5"/>
</issue>
@@ -1225,7 +1241,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="115"
+ line="116"
column="5"/>
</issue>
@@ -1241,7 +1257,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="118"
+ line="119"
column="5"/>
</issue>
@@ -1257,7 +1273,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="119"
+ line="120"
column="5"/>
</issue>
@@ -1273,7 +1289,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="120"
+ line="121"
column="5"/>
</issue>
@@ -1289,7 +1305,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="121"
+ line="122"
column="5"/>
</issue>
@@ -1305,7 +1321,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="122"
+ line="123"
column="5"/>
</issue>
@@ -1321,7 +1337,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="123"
+ line="124"
column="5"/>
</issue>
@@ -1337,7 +1353,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="130"
+ line="131"
column="5"/>
</issue>
@@ -1353,7 +1369,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="131"
+ line="132"
column="5"/>
</issue>
@@ -1369,7 +1385,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="132"
+ line="133"
column="5"/>
</issue>
@@ -1385,7 +1401,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="138"
+ line="139"
column="5"/>
</issue>
@@ -1401,7 +1417,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="140"
+ line="141"
column="5"/>
</issue>
@@ -1417,7 +1433,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="144"
+ line="145"
column="5"/>
</issue>
@@ -1433,7 +1449,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="145"
+ line="146"
column="5"/>
</issue>
@@ -1449,7 +1465,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="146"
+ line="147"
column="5"/>
</issue>
@@ -1465,7 +1481,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="147"
+ line="148"
column="5"/>
</issue>
@@ -1481,7 +1497,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="148"
+ line="149"
column="5"/>
</issue>
@@ -1497,7 +1513,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="149"
+ line="150"
column="5"/>
</issue>
@@ -1513,7 +1529,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="150"
+ line="151"
column="5"/>
</issue>
@@ -1529,7 +1545,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="151"
+ line="152"
column="5"/>
</issue>
@@ -1545,7 +1561,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="154"
+ line="155"
column="5"/>
</issue>
@@ -1561,7 +1577,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="155"
+ line="156"
column="5"/>
</issue>
@@ -1577,7 +1593,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="156"
+ line="157"
column="5"/>
</issue>
@@ -1593,7 +1609,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="157"
+ line="158"
column="5"/>
</issue>
@@ -1609,7 +1625,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="158"
+ line="159"
column="5"/>
</issue>
@@ -1625,7 +1641,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="159"
+ line="160"
column="5"/>
</issue>
@@ -1641,7 +1657,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="160"
+ line="161"
column="5"/>
</issue>
@@ -1657,7 +1673,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="161"
+ line="162"
column="5"/>
</issue>
@@ -1673,7 +1689,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="164"
+ line="165"
column="5"/>
</issue>
@@ -1689,7 +1705,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="165"
+ line="166"
column="5"/>
</issue>
@@ -1705,7 +1721,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="166"
+ line="167"
column="5"/>
</issue>
@@ -1721,7 +1737,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="167"
+ line="168"
column="5"/>
</issue>
@@ -1737,7 +1753,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="168"
+ line="169"
column="5"/>
</issue>
@@ -1753,7 +1769,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="169"
+ line="170"
column="5"/>
</issue>
@@ -1769,7 +1785,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="172"
+ line="173"
column="5"/>
</issue>
@@ -1785,7 +1801,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="173"
+ line="174"
column="5"/>
</issue>
@@ -1801,7 +1817,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="174"
+ line="175"
column="5"/>
</issue>
@@ -1817,7 +1833,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="175"
+ line="176"
column="5"/>
</issue>
@@ -1833,7 +1849,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="176"
+ line="177"
column="5"/>
</issue>
@@ -1849,7 +1865,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="177"
+ line="178"
column="5"/>
</issue>
@@ -1865,7 +1881,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="180"
+ line="181"
column="5"/>
</issue>
@@ -1881,7 +1897,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="181"
+ line="182"
column="5"/>
</issue>
@@ -1897,7 +1913,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="182"
+ line="183"
column="5"/>
</issue>
@@ -1913,7 +1929,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="183"
+ line="184"
column="5"/>
</issue>
@@ -1929,7 +1945,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="184"
+ line="185"
column="5"/>
</issue>
@@ -1945,7 +1961,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="185"
+ line="186"
column="5"/>
</issue>
@@ -1961,7 +1977,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="191"
+ line="192"
column="5"/>
</issue>
@@ -1977,7 +1993,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="192"
+ line="193"
column="5"/>
</issue>
@@ -1993,7 +2009,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="193"
+ line="194"
column="5"/>
</issue>
@@ -2009,7 +2025,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="194"
+ line="195"
column="5"/>
</issue>
@@ -2025,7 +2041,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="196"
+ line="197"
column="5"/>
</issue>
@@ -2041,7 +2057,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="198"
+ line="199"
column="5"/>
</issue>
@@ -2057,7 +2073,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="201"
+ line="202"
column="5"/>
</issue>
@@ -2085,6 +2101,22 @@
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="#639DF6"/>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/drawable/conversation_message_text_info_view_background.xml"
+ line="23"
+ column="9"/>
+ </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="@color/face_enroll_icon_color">"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
@@ -2997,102 +3029,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=" <item android:offset="0" android:color="#33263238"/>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/drawable/ic_files_go_round.xml"
- line="46"
- column="34"/>
- </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=" <item android:offset="1" android:color="#00263238"/>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/drawable/ic_files_go_round.xml"
- line="47"
- column="34"/>
- </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=" <item android:offset="0" android:color="#281A237E"/>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/drawable/ic_files_go_round.xml"
- line="71"
- column="34"/>
- </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=" <item android:offset="1" android:color="#051A237E"/>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/drawable/ic_files_go_round.xml"
- line="72"
- column="34"/>
- </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=" <item android:offset="0.0029046" android:color="#19FFFFFF"/>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/drawable/ic_files_go_round.xml"
- line="116"
- column="42"/>
- </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=" <item android:offset="1" android:color="#00FFFFFF"/>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/drawable/ic_files_go_round.xml"
- line="117"
- column="34"/>
- </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/accessibility_feature_background"/>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
@@ -4389,11 +4325,11 @@
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=" app:iconTextColor="@color/message_icon_text_outgoing""
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ errorLine1=" app:iconBackgroundColor="@color/message_icon_background_incoming" />"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/layout/screen_zoom_preview_1.xml"
- line="44"
+ line="42"
column="17"/>
</issue>
@@ -4409,103 +4345,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/layout/screen_zoom_preview_1.xml"
- line="45"
- 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=" app:iconTextColor="@color/message_icon_text_incoming""
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/layout/screen_zoom_preview_1.xml"
- line="54"
- 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=" app:iconBackgroundColor="@color/message_icon_background_incoming" />"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/layout/screen_zoom_preview_1.xml"
- line="55"
- 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=" app:iconTextColor="@color/message_icon_text_outgoing""
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/layout/screen_zoom_preview_1.xml"
- line="64"
- 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=" app:iconBackgroundColor="@color/message_icon_background_outgoing" />"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/layout/screen_zoom_preview_1.xml"
- line="65"
- 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=" app:iconTextColor="@color/message_icon_text_incoming""
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/layout/screen_zoom_preview_1.xml"
- line="74"
- 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=" app:iconBackgroundColor="@color/message_icon_background_incoming" />"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/layout/screen_zoom_preview_1.xml"
- line="75"
+ line="49"
column="17"/>
</issue>
@@ -4569,7 +4409,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values-en-rXC/strings.xml"
- line="3144"
+ line="3152"
column="170"/>
</issue>
@@ -4585,7 +4425,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values-en-rAU/strings.xml"
- line="3158"
+ line="3157"
column="64"/>
</issue>
@@ -4601,7 +4441,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values-en-rCA/strings.xml"
- line="3158"
+ line="3157"
column="64"/>
</issue>
@@ -4617,7 +4457,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values-en-rGB/strings.xml"
- line="3158"
+ line="3157"
column="64"/>
</issue>
@@ -4633,7 +4473,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values-en-rIN/strings.xml"
- line="3158"
+ line="3157"
column="64"/>
</issue>
@@ -4649,7 +4489,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/strings.xml"
- line="7139"
+ line="7160"
column="36"/>
</issue>
diff --git a/res/layout/app_locale_details_description.xml b/res/layout/app_locale_details_description.xml
index 989f6c9..1ced3a3 100644
--- a/res/layout/app_locale_details_description.xml
+++ b/res/layout/app_locale_details_description.xml
@@ -19,7 +19,7 @@
android:layout_height="wrap_content"
android:gravity="center_horizontal" >
<TextView
- android:id="@id/description"
+ android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dip"
diff --git a/res/layout/notification_sbn_log_row.xml b/res/layout/notification_sbn_log_row.xml
index 91d6600..23bc110 100644
--- a/res/layout/notification_sbn_log_row.xml
+++ b/res/layout/notification_sbn_log_row.xml
@@ -74,8 +74,8 @@
<ImageView
android:id="@+id/profile_badge"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="16dp"
+ android:layout_height="16dp"
android:layout_marginEnd="6dp"
android:scaleType="fitCenter"
android:contentDescription="@*android:string/notification_work_profile_content_description"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 863bd8d..28c456b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -519,13 +519,13 @@
<string name="preference_of_system_locale_title">System language</string>
<!-- Summary for preference of the system default locale. [CHAR LIMIT=50]-->
- <string name="preference_of_system_locale_summary">System default - <xliff:g id="default_language" example="English (United States)">%1$s</xliff:g></string>
+ <string name="preference_of_system_locale_summary">System default</string>
<!-- Description for the app without any supported languages. [CHAR LIMIT=NONE]-->
<string name="desc_no_available_supported_locale">Language selection for this app isn\u2019t available from Settings.</string>
- <!-- Description for the app without any supported languages. [CHAR LIMIT=NONE]-->
- <string name="desc_disallow_locale_change_in_settings">You can\u2019t select a language for this app from Settings.</string>
+ <!-- Description for the disclaimer of per app language. [CHAR LIMIT=NONE]-->
+ <string name="desc_app_locale_disclaimer">Language may differ from languages available in the app. Some apps may not support this setting.</string>
<!-- The title of the confirmation dialog shown when the user selects one / several languages and tries to remove them [CHAR LIMIT=60] -->
<plurals name="dlg_remove_locales_title">
diff --git a/res/xml/app_locale_details.xml b/res/xml/app_locale_details.xml
index 7ded8d7..8b1b370 100644
--- a/res/xml/app_locale_details.xml
+++ b/res/xml/app_locale_details.xml
@@ -19,14 +19,20 @@
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/app_locale_picker_title">
+ <com.android.settingslib.widget.TopIntroPreference
+ android:title="@string/desc_app_locale_disclaimer"
+ android:order="1"/>
+
<com.android.settingslib.widget.BannerMessagePreference
android:key="key_warnings"
+ android:order="20"
android:icon="@drawable/ic_error_outline"
android:title="@string/warnings_title"
android:summary="@string/warnings_summary"/>
<com.android.settingslib.widget.LayoutPreference
android:key="app_locale_description"
+ android:order="30"
android:layout="@layout/app_locale_details_description"
android:selectable="false"
android:visibility="gone"
diff --git a/res/xml/mobile_network_settings.xml b/res/xml/mobile_network_settings.xml
index 673994a..8206223 100644
--- a/res/xml/mobile_network_settings.xml
+++ b/res/xml/mobile_network_settings.xml
@@ -20,6 +20,7 @@
<com.android.settings.widget.SettingsMainSwitchPreference
android:key="use_sim_switch"
+ android:title="@string/mobile_network_use_sim_on"
settings:controller="com.android.settings.network.telephony.MobileNetworkSwitchController"/>
<PreferenceCategory
diff --git a/src/com/android/settings/MainClearConfirm.java b/src/com/android/settings/MainClearConfirm.java
index c45a907..9208c4f 100644
--- a/src/com/android/settings/MainClearConfirm.java
+++ b/src/com/android/settings/MainClearConfirm.java
@@ -31,6 +31,7 @@
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
+import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
import android.service.oemlock.OemLockManager;
@@ -67,6 +68,8 @@
public class MainClearConfirm extends InstrumentedFragment {
private static final String TAG = "MainClearConfirm";
+ private static final String PERSISTENT_DATA_BLOCK_PROP = "ro.frp.pst";
+
@VisibleForTesting View mContentView;
private boolean mEraseSdCard;
@VisibleForTesting boolean mEraseEsims;
@@ -83,6 +86,11 @@
return;
}
+ // pre-flight check hardware support PersistentDataBlockManager
+ if (SystemProperties.get(PERSISTENT_DATA_BLOCK_PROP).equals("")) {
+ return;
+ }
+
final PersistentDataBlockManager pdbManager = (PersistentDataBlockManager)
getActivity().getSystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE);
diff --git a/src/com/android/settings/accessibility/RingVibrationPreferenceConfig.java b/src/com/android/settings/accessibility/RingVibrationPreferenceConfig.java
index f4ec747..bce9260 100644
--- a/src/com/android/settings/accessibility/RingVibrationPreferenceConfig.java
+++ b/src/com/android/settings/accessibility/RingVibrationPreferenceConfig.java
@@ -42,21 +42,6 @@
}
@Override
- public int readIntensity() {
- final int vibrateWhenRinging = Settings.System.getInt(mContentResolver,
- Settings.System.VIBRATE_WHEN_RINGING, ON);
-
- if ((vibrateWhenRinging == OFF)
- && !mAudioManager.isRampingRingerEnabled()) {
- // VIBRATE_WHEN_RINGING is deprecated but should still be applied if the user has
- // turned it off and has not enabled the ramping ringer (old three-state setting).
- return Vibrator.VIBRATION_INTENSITY_OFF;
- }
-
- return super.readIntensity();
- }
-
- @Override
public boolean updateIntensity(int intensity) {
final boolean success = super.updateIntensity(intensity);
diff --git a/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java b/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java
index da02876..1148584 100644
--- a/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java
@@ -22,6 +22,7 @@
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.DialogInterface;
+import android.os.Bundle;
import androidx.appcompat.app.AlertDialog;
@@ -32,6 +33,8 @@
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.search.SearchIndexable;
+import com.google.common.annotations.VisibleForTesting;
+
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -49,6 +52,26 @@
private static final String RESET_KEY = "reset";
private static final String BOLD_TEXT_KEY = "toggle_force_bold_text";
private static final String HIGHT_TEXT_CONTRAST_KEY = "toggle_high_text_contrast_preference";
+ private static final String NEED_RESET_SETTINGS = "need_reset_settings";
+ private FontWeightAdjustmentPreferenceController mFontWeightAdjustmentController;
+
+ @VisibleForTesting
+ List<ResetStateListener> mResetStateListeners;
+
+ @VisibleForTesting
+ boolean mNeedResetSettings;
+
+ @Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+
+ mNeedResetSettings = false;
+ mResetStateListeners = getResetStateListeners();
+
+ if (icicle != null && icicle.getBoolean(NEED_RESET_SETTINGS)) {
+ mResetStateListeners.forEach(ResetStateListener::resetState);
+ }
+ }
@Override
protected int getPreferenceScreenResId() {
@@ -69,7 +92,7 @@
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
final FontSizeData fontSizeData = new FontSizeData(context);
- final DisplaySizeData displaySizeData = new DisplaySizeData(context);
+ final DisplaySizeData displaySizeData = createDisplaySizeData(context);
final TextReadingPreviewController previewController = new TextReadingPreviewController(
context, PREVIEW_KEY, fontSizeData, displaySizeData);
@@ -85,9 +108,9 @@
displaySizeController.setInteractionListener(previewController);
controllers.add(displaySizeController);
- final FontWeightAdjustmentPreferenceController fontWeightController =
+ mFontWeightAdjustmentController =
new FontWeightAdjustmentPreferenceController(context, BOLD_TEXT_KEY);
- controllers.add(fontWeightController);
+ controllers.add(mFontWeightAdjustmentController);
final HighTextContrastPreferenceController highTextContrastController =
new HighTextContrastPreferenceController(context, HIGHT_TEXT_CONTRAST_KEY);
@@ -126,12 +149,35 @@
return super.getDialogMetricsCategory(dialogId);
}
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ if (mNeedResetSettings) {
+ outState.putBoolean(NEED_RESET_SETTINGS, true);
+ }
+ }
+
+ @VisibleForTesting
+ DisplaySizeData createDisplaySizeData(Context context) {
+ return new DisplaySizeData(context);
+ }
+
private void onPositiveButtonClicked(DialogInterface dialog, int which) {
// To avoid showing the dialog again, probably the onDetach() of SettingsDialogFragment
// was interrupted by unexpectedly recreating the activity.
removeDialog(DialogEnums.DIALOG_RESET_SETTINGS);
- getResetStateListeners().forEach(ResetStateListener::resetState);
+ if (mFontWeightAdjustmentController.isChecked()) {
+ // TODO(b/228956791): Consider replacing or removing it once the root cause is
+ // clarified and the better method is available.
+ // Probably has the race condition issue between "Bold text" and the other features
+ // including "Display Size", “Font Size” if they would be enabled at the same time,
+ // so our workaround is that the “Bold text” would be reset first and then do the
+ // remaining to avoid flickering problem.
+ mNeedResetSettings = true;
+ mFontWeightAdjustmentController.resetState();
+ } else {
+ mResetStateListeners.forEach(ResetStateListener::resetState);
+ }
}
private List<ResetStateListener> getResetStateListeners() {
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index bd8ee66..248bc12 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -157,7 +157,6 @@
}
}
- setupDefaultShortcutIfNecessary(getPrefContext());
final int resId = getPreferenceScreenResId();
if (resId <= 0) {
final PreferenceScreen preferenceScreen = getPreferenceManager().createPreferenceScreen(
@@ -226,6 +225,8 @@
if (mNeedsQSTooltipReshow) {
getView().post(this::showQuickSettingsTooltipIfNeeded);
}
+
+ writeDefaultShortcutTargetServiceToSettingsIfNeeded(getPrefContext());
}
@Override
@@ -792,8 +793,22 @@
/**
* Setups a configurable default if the setting has never been set.
+ *
+ * TODO(b/228562075): Remove this function when correcting the format in config file
+ * `config_defaultAccessibilityService`.
*/
- private static void setupDefaultShortcutIfNecessary(Context context) {
+ private void writeDefaultShortcutTargetServiceToSettingsIfNeeded(Context context) {
+ if (mComponentName == null) {
+ return;
+ }
+
+ final ComponentName defaultService = ComponentName.unflattenFromString(context.getString(
+ com.android.internal.R.string.config_defaultAccessibilityService));
+ // write default accessibility service only when user enter into corresponding page.
+ if (!mComponentName.equals(defaultService)) {
+ return;
+ }
+
final String targetKey = Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE;
String targetString = Settings.Secure.getString(context.getContentResolver(), targetKey);
if (!TextUtils.isEmpty(targetString)) {
diff --git a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
index 70383d1..e6caafc 100644
--- a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
+++ b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
@@ -146,6 +146,7 @@
.setUid(mApplicationInfo.uid)
.setHasAppInfoLink(true)
.setButtonActions(ActionType.ACTION_NONE, ActionType.ACTION_NONE)
+ .setOrder(10)
.done(activity, getPrefContext());
getPreferenceScreen().addPreference(pref);
}
@@ -208,13 +209,9 @@
LocaleList packageLocaleList = getPackageLocales();
String[] assetLocaleList = getAssetLocales();
// TODO add apended url string, "Learn more", to these both sentenses.
- if (packageLocaleList == null && assetLocaleList.length == 0) {
- // There is no locale info from PackageManager amd AssetManager.
+ if ((packageLocaleList != null && packageLocaleList.isEmpty())
+ || (packageLocaleList == null && assetLocaleList.length == 0)) {
return R.string.desc_no_available_supported_locale;
- } else if (packageLocaleList != null && packageLocaleList.isEmpty()) {
- // LocaleConfig is empty, and this means only allow user modify language
- // by the application.
- return R.string.desc_disallow_locale_change_in_settings;
}
return -1;
}
@@ -276,9 +273,7 @@
final Context contextAsUser = context.createContextAsUser(userHandle, 0);
Locale appLocale = getAppDefaultLocale(contextAsUser, entry.info.packageName);
if (appLocale == null) {
- Locale systemLocale = Locale.getDefault();
- return context.getString(R.string.preference_of_system_locale_summary,
- systemLocale.getDisplayName(systemLocale));
+ return context.getString(R.string.preference_of_system_locale_summary);
} else {
return appLocale.getDisplayName(appLocale);
}
diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java b/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java
index b57ea92..36b5718 100644
--- a/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java
+++ b/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java
@@ -20,6 +20,7 @@
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
+import android.provider.DeviceConfig;
import android.text.TextUtils;
import android.util.Log;
@@ -31,6 +32,7 @@
import androidx.preference.SwitchPreference;
import com.android.settings.R;
+import com.android.settings.core.SettingsUIDeviceConfig;
import com.android.settingslib.bluetooth.A2dpProfile;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.LeAudioProfile;
@@ -70,6 +72,7 @@
private List<CachedBluetoothDevice> mAllOfCachedDevices;
private Map<String, List<CachedBluetoothDevice>> mProfileDeviceMap =
new HashMap<String, List<CachedBluetoothDevice>>();
+ private boolean mIsLeContactSharingEnabled = false;
@VisibleForTesting
PreferenceCategory mProfilesContainer;
@@ -88,6 +91,8 @@
protected void init(PreferenceScreen screen) {
mProfilesContainer = (PreferenceCategory)screen.findPreference(getPreferenceKey());
mProfilesContainer.setLayoutResource(R.layout.preference_bluetooth_profile_category);
+ mIsLeContactSharingEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
+ SettingsUIDeviceConfig.BT_LE_AUDIO_CONTACT_SHARING_ENABLED, false);
// Call refresh here even though it will get called later in onResume, to avoid the
// list of switches appearing to "pop" into the page.
refresh();
@@ -119,21 +124,11 @@
private void refreshProfilePreference(SwitchPreference profilePref,
LocalBluetoothProfile profile) {
BluetoothDevice device = mCachedDevice.getDevice();
- boolean isLeAudioEnabled = false;
+ boolean isLeAudioEnabled = isLeAudioEnabled();
if (profile instanceof A2dpProfile || HEADSET_CLIENT.equals(profile.toString())) {
- LocalBluetoothProfile leAudio = mProfileManager.getLeAudioProfile();
- if (leAudio != null) {
- List<CachedBluetoothDevice> leAudioDeviceList = mProfileDeviceMap.get(
- leAudio.toString());
- if (leAudioDeviceList != null
- && leAudioDeviceList.stream()
- .anyMatch(item -> leAudio.isEnabled(item.getDevice()))) {
- isLeAudioEnabled = true;
- }
- }
if (isLeAudioEnabled) {
// If the LeAudio profile is enabled on the LeAudio devices, then the
- // SwitchPreferences of A2dp profile and Hfp profile are graied out.
+ // SwitchPreferences of A2dp profile and Hfp profile are grayed out.
profilePref.setEnabled(false);
} else {
List<CachedBluetoothDevice> deviceList = mProfileDeviceMap.get(
@@ -145,12 +140,9 @@
} else if (profile instanceof LeAudioProfile) {
List<CachedBluetoothDevice> leAudioDeviceList = mProfileDeviceMap.get(
profile.toString());
- boolean isLeAudioProfileEnable =
- leAudioDeviceList != null && leAudioDeviceList.stream().anyMatch(
- item -> profile.isEnabled(item.getDevice()));
boolean isBusy = leAudioDeviceList != null
&& leAudioDeviceList.stream().anyMatch(item -> item.isBusy());
- if (isLeAudioProfileEnable && !isBusy) {
+ if (isLeAudioEnabled && !isBusy) {
LocalBluetoothProfile a2dp = mProfileManager.getA2dpProfile();
LocalBluetoothProfile hfp = mProfileManager.getHfpClientProfile();
// If the LeAudio profile is enabled on the LeAudio devices, then the
@@ -169,6 +161,10 @@
}
}
profilePref.setEnabled(!isBusy);
+ } else if (profile instanceof PbapServerProfile
+ && isLeAudioEnabled
+ && !mIsLeContactSharingEnabled) {
+ profilePref.setEnabled(false);
} else {
profilePref.setEnabled(!mCachedDevice.isBusy());
}
@@ -203,6 +199,20 @@
}
}
+ private boolean isLeAudioEnabled(){
+ LocalBluetoothProfile leAudio = mProfileManager.getLeAudioProfile();
+ if (leAudio != null) {
+ List<CachedBluetoothDevice> leAudioDeviceList = mProfileDeviceMap.get(
+ leAudio.toString());
+ if (leAudioDeviceList != null
+ && leAudioDeviceList.stream()
+ .anyMatch(item -> leAudio.isEnabled(item.getDevice()))) {
+ return true;
+ }
+ }
+ return false;
+ }
+
/**
* Helper method to enable a profile for a device.
*/
diff --git a/src/com/android/settings/core/SettingsUIDeviceConfig.java b/src/com/android/settings/core/SettingsUIDeviceConfig.java
index 8c85c82..94074df 100644
--- a/src/com/android/settings/core/SettingsUIDeviceConfig.java
+++ b/src/com/android/settings/core/SettingsUIDeviceConfig.java
@@ -33,7 +33,11 @@
* {@code true} if near by device suggestion is enabled in connected device page
*/
public static final String BT_NEAR_BY_SUGGESTION_ENABLED = "bt_near_by_suggestion_enabled";
-
+ /**
+ * {@code true} if le audio contact sharing is enabled in BT device detail page
+ */
+ public static final String BT_LE_AUDIO_CONTACT_SHARING_ENABLED =
+ "bt_le_audio_contact_sharing_enabled";
/**
* {@code true} whether or not event_log for generic actions is enabled. Default is true.
*/
diff --git a/src/com/android/settings/dream/DreamAdapter.java b/src/com/android/settings/dream/DreamAdapter.java
index 8494088..c595c09 100644
--- a/src/com/android/settings/dream/DreamAdapter.java
+++ b/src/com/android/settings/dream/DreamAdapter.java
@@ -177,4 +177,11 @@
notifyDataSetChanged();
}
}
+
+ /**
+ * Gets the enabled state of all items.
+ */
+ public boolean getEnabled() {
+ return mEnabled;
+ }
}
diff --git a/src/com/android/settings/dream/DreamPickerController.java b/src/com/android/settings/dream/DreamPickerController.java
index c638a97..20d8aeb 100644
--- a/src/com/android/settings/dream/DreamPickerController.java
+++ b/src/com/android/settings/dream/DreamPickerController.java
@@ -158,7 +158,7 @@
@Override
public boolean isActive() {
- if (mActiveDream == null) {
+ if (!mAdapter.getEnabled() || mActiveDream == null) {
return false;
}
return mDreamInfo.componentName.equals(mActiveDream.componentName);
diff --git a/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java b/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java
index ee46090..9ef8c8c 100644
--- a/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java
+++ b/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java
@@ -69,15 +69,6 @@
return;
}
- ApplicationInfo ai;
- try {
- ai = getPackageManager().getApplicationInfo(mPackageName, 0);
- } catch (PackageManager.NameNotFoundException e) {
- debugLog("Requested package doesn't exist: " + mPackageName);
- finish();
- return;
- }
-
if (getPackageManager().checkPermission(
Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, mPackageName)
!= PackageManager.PERMISSION_GRANTED) {
@@ -87,6 +78,15 @@
return;
}
+ ApplicationInfo ai;
+ try {
+ ai = getPackageManager().getApplicationInfo(mPackageName, 0);
+ } catch (PackageManager.NameNotFoundException e) {
+ debugLog("Requested package doesn't exist: " + mPackageName);
+ finish();
+ return;
+ }
+
final AlertController.AlertParams p = mAlertParams;
final CharSequence appLabel = ai.loadSafeLabel(getPackageManager(),
PackageItemInfo.DEFAULT_MAX_LABEL_SIZE_PX, PackageItemInfo.SAFE_LABEL_FLAG_TRIM
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java
index da0f2e2..ee3f54f 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java
@@ -22,6 +22,7 @@
import android.os.Handler;
import android.os.Looper;
import android.os.PowerManager;
+import android.provider.Settings;
import android.provider.SettingsSlicesContract;
import android.widget.Switch;
@@ -101,6 +102,11 @@
@Override
public void onSwitchChanged(Switch switchView, boolean isChecked) {
+ // Cancel preference's check state once it's first time launch
+ if (isChecked && (Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 0) == 0)) {
+ mPreference.setChecked(false);
+ }
setChecked(isChecked);
}
diff --git a/src/com/android/settings/gestures/SystemNavigationGestureSettings.java b/src/com/android/settings/gestures/SystemNavigationGestureSettings.java
index 7f0d7c3..08b043e 100644
--- a/src/com/android/settings/gestures/SystemNavigationGestureSettings.java
+++ b/src/com/android/settings/gestures/SystemNavigationGestureSettings.java
@@ -28,6 +28,7 @@
import android.content.SharedPreferences;
import android.content.om.IOverlayManager;
import android.content.om.OverlayInfo;
+import android.content.res.Resources;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -49,6 +50,7 @@
import com.android.settings.utils.CandidateInfoExtra;
import com.android.settings.widget.RadioButtonPickerFragment;
import com.android.settingslib.search.SearchIndexable;
+import com.android.settingslib.search.SearchIndexableRaw;
import com.android.settingslib.widget.CandidateInfo;
import com.android.settingslib.widget.IllustrationPreference;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
@@ -320,6 +322,39 @@
protected boolean isPageSearchEnabled(Context context) {
return SystemNavigationPreferenceController.isGestureAvailable(context);
}
+
+ @Override
+ public List<SearchIndexableRaw> getRawDataToIndex(Context context,
+ boolean enabled) {
+ final Resources res = context.getResources();
+ final List<SearchIndexableRaw> result = new ArrayList<>();
+
+ if (SystemNavigationPreferenceController.isOverlayPackageAvailable(context,
+ NAV_BAR_MODE_GESTURAL_OVERLAY)) {
+ SearchIndexableRaw data = new SearchIndexableRaw(context);
+ data.title = res.getString(R.string.edge_to_edge_navigation_title);
+ data.key = KEY_SYSTEM_NAV_GESTURAL;
+ result.add(data);
+ }
+
+ if (SystemNavigationPreferenceController.isOverlayPackageAvailable(context,
+ NAV_BAR_MODE_2BUTTON_OVERLAY)) {
+ SearchIndexableRaw data = new SearchIndexableRaw(context);
+ data.title = res.getString(R.string.swipe_up_to_switch_apps_title);
+ data.key = KEY_SYSTEM_NAV_2BUTTONS;
+ result.add(data);
+ }
+
+ if (SystemNavigationPreferenceController.isOverlayPackageAvailable(context,
+ NAV_BAR_MODE_3BUTTON_OVERLAY)) {
+ SearchIndexableRaw data = new SearchIndexableRaw(context);
+ data.title = res.getString(R.string.legacy_navigation_title);
+ data.key = KEY_SYSTEM_NAV_3BUTTONS;
+ result.add(data);
+ }
+
+ return result;
+ }
};
// From HelpResourceProvider
diff --git a/src/com/android/settings/localepicker/AppLocalePickerActivity.java b/src/com/android/settings/localepicker/AppLocalePickerActivity.java
index d3c855e..4700f3f 100644
--- a/src/com/android/settings/localepicker/AppLocalePickerActivity.java
+++ b/src/com/android/settings/localepicker/AppLocalePickerActivity.java
@@ -28,6 +28,7 @@
import android.view.MenuItem;
import android.view.View;
import android.widget.FrameLayout;
+import android.widget.ListView;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.LocalePickerWithRegion;
@@ -49,6 +50,7 @@
private LocalePickerWithRegion mLocalePickerWithRegion;
private AppLocaleDetails mAppLocaleDetails;
private Context mContextAsUser;
+ private View mAppLocaleDetailContainer;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -82,7 +84,7 @@
false /* translate only */,
mPackageName);
mAppLocaleDetails = AppLocaleDetails.newInstance(mPackageName);
-
+ mAppLocaleDetailContainer = launchAppLocaleDetailsPage();
// Launch Locale picker part.
launchLocalePickerPage();
}
@@ -134,12 +136,14 @@
fragmentManager.registerFragmentLifecycleCallbacks(
new android.app.FragmentManager.FragmentLifecycleCallbacks() {
@Override
- public void onFragmentResumed(
+ public void onFragmentViewCreated(
android.app.FragmentManager fm,
- android.app.Fragment f) {
- super.onFragmentResumed(fm, f);
- mLocalePickerWithRegion.getListView()
- .addHeaderView(launchAppLocaleDetailsPage());
+ android.app.Fragment f, View v, Bundle s) {
+ super.onFragmentViewCreated(fm, f, v, s);
+ ListView listView = (ListView) v.findViewById(android.R.id.list);
+ if (listView != null) {
+ listView.addHeaderView(mAppLocaleDetailContainer);
+ }
}
}, true);
fragmentManager.beginTransaction()
diff --git a/src/com/android/settings/network/TetherEnabler.java b/src/com/android/settings/network/TetherEnabler.java
index ef031f6..c83d971 100644
--- a/src/com/android/settings/network/TetherEnabler.java
+++ b/src/com/android/settings/network/TetherEnabler.java
@@ -31,6 +31,8 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
+import android.net.EthernetManager;
+import android.net.IpConfiguration;
import android.net.TetheringManager;
import android.net.wifi.WifiManager;
import android.os.Handler;
@@ -40,6 +42,7 @@
import android.text.TextUtils;
import android.util.Log;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
@@ -53,6 +56,7 @@
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicReference;
/**
@@ -81,6 +85,16 @@
private static final String TAG = "TetherEnabler";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+ private final class EthernetListener implements EthernetManager.InterfaceStateListener {
+ public void onInterfaceStateChanged(@NonNull String iface, int state, int role,
+ @NonNull IpConfiguration configuration) {
+ if (state == EthernetManager.STATE_LINK_UP) {
+ mAvailableInterfaces.put(iface, configuration);
+ } else {
+ mAvailableInterfaces.remove(iface, configuration);
+ }
+ }
+ }
@Retention(SOURCE)
@IntDef(
@@ -108,7 +122,6 @@
private final ConnectivityManager mConnectivityManager;
private final TetheringManager mTetheringManager;
private final UserManager mUserManager;
- private final String mEthernetRegex;
private final DataSaverBackend mDataSaverBackend;
private boolean mDataSaverEnabled;
@VisibleForTesting
@@ -121,6 +134,10 @@
private final AtomicReference<BluetoothPan> mBluetoothPan;
private boolean mBluetoothEnableForTether;
private final BluetoothAdapter mBluetoothAdapter;
+ private final EthernetManager mEthernetManager;
+ private final EthernetManager.InterfaceStateListener mEthernetListener = new EthernetListener();
+ private final ConcurrentHashMap<String, IpConfiguration> mAvailableInterfaces =
+ new ConcurrentHashMap<>();
public TetherEnabler(Context context, SwitchWidgetController switchWidgetController,
AtomicReference<BluetoothPan> bluetoothPan) {
@@ -134,11 +151,10 @@
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
mBluetoothPan = bluetoothPan;
- mEthernetRegex =
- context.getString(com.android.internal.R.string.config_ethernet_iface_regex);
mDataSaverEnabled = mDataSaverBackend.isDataSaverEnabled();
mListeners = new ArrayList<>();
mMainThreadHandler = new Handler(Looper.getMainLooper());
+ mEthernetManager = context.getSystemService(EthernetManager.class);
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
@@ -163,6 +179,10 @@
mOnStartTetheringCallback = new OnStartTetheringCallback(this);
updateState(null/*tethered*/);
+ if (mEthernetManager != null) {
+ mEthernetManager.addInterfaceStateListener(r -> mMainThreadHandler.post(r),
+ mEthernetListener);
+ }
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
@@ -173,6 +193,9 @@
mContext.unregisterReceiver(mTetherChangeReceiver);
mTetheringManager.unregisterTetheringEventCallback(mTetheringEventCallback);
mTetheringEventCallback = null;
+ if (mEthernetManager != null) {
+ mEthernetManager.removeInterfaceStateListener(mEthernetListener);
+ }
}
public void addListener(OnTetherStateUpdateListener listener) {
@@ -246,7 +269,7 @@
tetherState |= TETHERING_USB_ON;
}
}
- if (s.matches(mEthernetRegex)) {
+ if (mAvailableInterfaces.containsKey(s)) {
tetherState |= TETHERING_ETHERNET_ON;
}
}
diff --git a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java
index 0be61e5..42fa95e 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java
@@ -28,7 +28,6 @@
import androidx.lifecycle.OnLifecycleEvent;
import androidx.preference.PreferenceScreen;
-import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.SubscriptionsChangeListener;
@@ -70,7 +69,6 @@
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mSwitchBar = (SettingsMainSwitchPreference) screen.findPreference(mPreferenceKey);
- mSwitchBar.setTitle(mContext.getString(R.string.mobile_network_use_sim_on));
mSwitchBar.setOnBeforeCheckedChangeListener((toggleSwitch, isChecked) -> {
// TODO b/135222940: re-evaluate whether to use
diff --git a/src/com/android/settings/notification/history/NotificationHistoryActivity.java b/src/com/android/settings/notification/history/NotificationHistoryActivity.java
index ec09a9f..4fecfc9 100644
--- a/src/com/android/settings/notification/history/NotificationHistoryActivity.java
+++ b/src/com/android/settings/notification/history/NotificationHistoryActivity.java
@@ -356,8 +356,10 @@
}
final int newState = isChecked ? 1 : 0;
if (oldState != newState) {
- Settings.Secure.putInt(getContentResolver(),
- NOTIFICATION_HISTORY_ENABLED, newState);
+ for (int user : mUm.getProfileIds(ActivityManager.getCurrentUser(), false)) {
+ Settings.Secure.putIntForUser(getContentResolver(),
+ NOTIFICATION_HISTORY_ENABLED, newState, user);
+ }
mUiEventLogger.log(isChecked ? NotificationHistoryEvent.NOTIFICATION_HISTORY_ON
: NotificationHistoryEvent.NOTIFICATION_HISTORY_OFF);
Log.d(TAG, "onSwitchChange history to " + isChecked);
diff --git a/src/com/android/settings/notification/history/NotificationSbnAdapter.java b/src/com/android/settings/notification/history/NotificationSbnAdapter.java
index 7eca3b7..1d61ae7 100644
--- a/src/com/android/settings/notification/history/NotificationSbnAdapter.java
+++ b/src/com/android/settings/notification/history/NotificationSbnAdapter.java
@@ -121,7 +121,7 @@
int userId = normalizeUserId(sbn);
if (!mUserBadgeCache.containsKey(userId)) {
Drawable profile = mContext.getPackageManager().getUserBadgeForDensity(
- UserHandle.of(userId), -1);
+ UserHandle.of(userId), 0);
mUserBadgeCache.put(userId, profile);
}
holder.setProfileBadge(mUserBadgeCache.get(userId));
diff --git a/src/com/android/settings/notification/zen/AbstractZenModeAutomaticRulePreferenceController.java b/src/com/android/settings/notification/zen/AbstractZenModeAutomaticRulePreferenceController.java
index 701abbb..cce715d 100644
--- a/src/com/android/settings/notification/zen/AbstractZenModeAutomaticRulePreferenceController.java
+++ b/src/com/android/settings/notification/zen/AbstractZenModeAutomaticRulePreferenceController.java
@@ -16,6 +16,8 @@
package com.android.settings.notification.zen;
+import static android.app.NotificationManager.EXTRA_AUTOMATIC_RULE_ID;
+
import android.app.AutomaticZenRule;
import android.app.NotificationManager;
import android.app.settings.SettingsEnums;
@@ -79,7 +81,8 @@
ComponentName configurationActivity, String ruleId) {
final Intent intent = new Intent()
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
- .putExtra(ConditionProviderService.EXTRA_RULE_ID, ruleId);
+ .putExtra(ConditionProviderService.EXTRA_RULE_ID, ruleId)
+ .putExtra(EXTRA_AUTOMATIC_RULE_ID, ruleId);
if (configurationActivity != null) {
intent.setComponent(configurationActivity);
} else {
diff --git a/src/com/android/settings/notification/zen/ZenModeRuleSettingsBase.java b/src/com/android/settings/notification/zen/ZenModeRuleSettingsBase.java
index 5ce8b48..e155093 100644
--- a/src/com/android/settings/notification/zen/ZenModeRuleSettingsBase.java
+++ b/src/com/android/settings/notification/zen/ZenModeRuleSettingsBase.java
@@ -16,6 +16,8 @@
package com.android.settings.notification.zen;
+import static android.app.NotificationManager.EXTRA_AUTOMATIC_RULE_ID;
+
import android.app.AutomaticZenRule;
import android.app.NotificationManager;
import android.content.Context;
@@ -72,9 +74,12 @@
mId = intent.getStringExtra(ConditionProviderService.EXTRA_RULE_ID);
if (mId == null) {
- Log.w(TAG, "rule id is null");
- toastAndFinish();
- return;
+ mId = intent.getStringExtra(EXTRA_AUTOMATIC_RULE_ID);
+ if (mId == null) {
+ Log.w(TAG, "rule id is null");
+ toastAndFinish();
+ return;
+ }
}
if (DEBUG) Log.d(TAG, "mId=" + mId);
diff --git a/src/com/android/settings/users/AppRestrictionsFragment.java b/src/com/android/settings/users/AppRestrictionsFragment.java
index c67a687..db7612f 100644
--- a/src/com/android/settings/users/AppRestrictionsFragment.java
+++ b/src/com/android/settings/users/AppRestrictionsFragment.java
@@ -661,10 +661,7 @@
}
private void assertSafeToStartCustomActivity(Intent intent) {
- // Activity can be started if it belongs to the same app
- if (intent.getPackage() != null && intent.getPackage().equals(packageName)) {
- return;
- }
+ EventLog.writeEvent(0x534e4554, "223578534", -1 /* UID */, "");
ResolveInfo resolveInfo = mPackageManager.resolveActivity(
intent, PackageManager.MATCH_DEFAULT_ONLY);
diff --git a/src/com/android/settings/widget/EntityHeaderController.java b/src/com/android/settings/widget/EntityHeaderController.java
index 7c3ee79..51911c0 100644
--- a/src/com/android/settings/widget/EntityHeaderController.java
+++ b/src/com/android/settings/widget/EntityHeaderController.java
@@ -74,6 +74,7 @@
private Lifecycle mLifecycle;
private RecyclerView mRecyclerView;
private Drawable mIcon;
+ private int mPrefOrder = -1000;
private String mIconContentDescription;
private CharSequence mLabel;
private CharSequence mSummary;
@@ -214,12 +215,18 @@
}
public EntityHeaderController setIsInstantApp(boolean isInstantApp) {
- this.mIsInstantApp = isInstantApp;
+ mIsInstantApp = isInstantApp;
return this;
}
public EntityHeaderController setEditListener(View.OnClickListener listener) {
- this.mEditOnClickListener = listener;
+ mEditOnClickListener = listener;
+ return this;
+ }
+
+ /** Sets this preference order. */
+ public EntityHeaderController setOrder(int order) {
+ mPrefOrder = order;
return this;
}
@@ -229,7 +236,7 @@
public LayoutPreference done(Activity activity, Context uiContext) {
final LayoutPreference pref = new LayoutPreference(uiContext, done(activity));
// Makes sure it's the first preference onscreen.
- pref.setOrder(-1000);
+ pref.setOrder(mPrefOrder);
pref.setSelectable(false);
pref.setKey(PREF_KEY_APP_HEADER);
pref.setAllowDividerBelow(true);
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSettings.java b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
index 4f2f3c0..93d267b 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSettings.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
@@ -16,7 +16,6 @@
package com.android.settings.wifi.tether;
-import static android.net.TetheringManager.ACTION_TETHER_STATE_CHANGED;
import static android.net.wifi.WifiManager.WIFI_AP_STATE_CHANGED_ACTION;
import android.app.settings.SettingsEnums;
@@ -32,7 +31,6 @@
import android.util.Log;
import androidx.annotation.VisibleForTesting;
-import androidx.preference.PreferenceGroup;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
@@ -79,8 +77,7 @@
TetherChangeReceiver mTetherChangeReceiver;
static {
- TETHER_STATE_CHANGE_FILTER = new IntentFilter(ACTION_TETHER_STATE_CHANGED);
- TETHER_STATE_CHANGE_FILTER.addAction(WIFI_AP_STATE_CHANGED_ACTION);
+ TETHER_STATE_CHANGE_FILTER = new IntentFilter(WIFI_AP_STATE_CHANGED_ACTION);
}
public WifiTetherSettings() {
@@ -269,12 +266,7 @@
String action = intent.getAction();
Log.d(TAG, "updating display config due to receiving broadcast action " + action);
updateDisplayWithNewConfig();
- if (action.equals(ACTION_TETHER_STATE_CHANGED)) {
- if (mWifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_DISABLED
- && mRestartWifiApAfterConfigChange) {
- startTether();
- }
- } else if (action.equals(WIFI_AP_STATE_CHANGED_ACTION)) {
+ if (action.equals(WIFI_AP_STATE_CHANGED_ACTION)) {
int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_AP_STATE, 0);
if (state == WifiManager.WIFI_AP_STATE_DISABLED
&& mRestartWifiApAfterConfigChange) {
diff --git a/tests/robotests/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceControllerTest.java
index 2bffaf4..fa3f3bf 100644
--- a/tests/robotests/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceControllerTest.java
@@ -121,22 +121,22 @@
}
@Test
- public void updateState_vibrateWhenRingingAndRampingRingerOff_shouldDisplayAlwaysOff() {
+ public void updateState_vibrateWhenRingingAndRampingRingerOff_shouldDisplayRingIntensity() {
when(mAudioManager.isRampingRingerEnabled()).thenReturn(false);
updateSetting(Settings.System.VIBRATE_WHEN_RINGING, OFF);
updateSetting(Settings.System.RING_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_HIGH);
mController.updateState(mPreference);
- assertThat(mPreference.getProgress()).isEqualTo(Vibrator.VIBRATION_INTENSITY_OFF);
+ assertThat(mPreference.getProgress()).isEqualTo(Vibrator.VIBRATION_INTENSITY_HIGH);
updateSetting(Settings.System.RING_VIBRATION_INTENSITY,
Vibrator.VIBRATION_INTENSITY_MEDIUM);
mController.updateState(mPreference);
- assertThat(mPreference.getProgress()).isEqualTo(Vibrator.VIBRATION_INTENSITY_OFF);
+ assertThat(mPreference.getProgress()).isEqualTo(Vibrator.VIBRATION_INTENSITY_MEDIUM);
updateSetting(Settings.System.RING_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_LOW);
mController.updateState(mPreference);
- assertThat(mPreference.getProgress()).isEqualTo(Vibrator.VIBRATION_INTENSITY_OFF);
+ assertThat(mPreference.getProgress()).isEqualTo(Vibrator.VIBRATION_INTENSITY_LOW);
updateSetting(Settings.System.RING_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_OFF);
mController.updateState(mPreference);
diff --git a/tests/robotests/src/com/android/settings/accessibility/RingVibrationTogglePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/RingVibrationTogglePreferenceControllerTest.java
index 08ad1cd..865c290 100644
--- a/tests/robotests/src/com/android/settings/accessibility/RingVibrationTogglePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/RingVibrationTogglePreferenceControllerTest.java
@@ -116,22 +116,24 @@
}
@Test
- public void updateState_vibrateWhenRingingAndRampingRingerOff_shouldDisplayAlwaysOff() {
+ public void updateState_vibrateWhenRingingAndRampingRingerOff_shouldIgnoreAndUseIntensity() {
+ // VIBRATE_WHEN_RINGING is deprecated and should have no effect on the ring vibration
+ // setting. The ramping ringer is also independent now, instead of a 3-state setting.
when(mAudioManager.isRampingRingerEnabled()).thenReturn(false);
updateSetting(Settings.System.VIBRATE_WHEN_RINGING, OFF);
updateSetting(Settings.System.RING_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_HIGH);
mController.updateState(mPreference);
- assertThat(mPreference.isChecked()).isFalse();
+ assertThat(mPreference.isChecked()).isTrue();
updateSetting(Settings.System.RING_VIBRATION_INTENSITY,
Vibrator.VIBRATION_INTENSITY_MEDIUM);
mController.updateState(mPreference);
- assertThat(mPreference.isChecked()).isFalse();
+ assertThat(mPreference.isChecked()).isTrue();
updateSetting(Settings.System.RING_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_LOW);
mController.updateState(mPreference);
- assertThat(mPreference.isChecked()).isFalse();
+ assertThat(mPreference.isChecked()).isTrue();
updateSetting(Settings.System.RING_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_OFF);
mController.updateState(mPreference);
diff --git a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreferenceFragmentTest.java
new file mode 100644
index 0000000..1793cc2
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreferenceFragmentTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2022 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.accessibility;
+
+import static com.android.settings.accessibility.FontWeightAdjustmentPreferenceController.BOLD_TEXT_ADJUSTMENT;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.provider.Settings;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.FragmentActivity;
+import androidx.preference.PreferenceManager;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settings.accessibility.AccessibilityDialogUtils.DialogEnums;
+import com.android.settings.accessibility.TextReadingResetController.ResetStateListener;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ * Tests for {@link TextReadingPreferenceFragment}.
+ */
+@RunWith(RobolectricTestRunner.class)
+public class TextReadingPreferenceFragmentTest {
+ private TextReadingPreferenceFragment mFragment;
+ private Context mContext = ApplicationProvider.getApplicationContext();
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private PreferenceManager mPreferenceManager;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mContext.setTheme(R.style.Theme_AppCompat);
+
+ mFragment = spy(new TextReadingPreferenceFragment());
+ when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager);
+ when(mFragment.getPreferenceManager().getContext()).thenReturn(mContext);
+ when(mFragment.getContext()).thenReturn(mContext);
+ when(mFragment.getActivity()).thenReturn(Robolectric.setupActivity(FragmentActivity.class));
+
+ // Avoid a NPE is happened in ShadowWindowManagerGlobal
+ doReturn(mock(DisplaySizeData.class)).when(mFragment).createDisplaySizeData(mContext);
+ mFragment.createPreferenceControllers(mContext);
+ }
+
+ @Test
+ public void onDialogPositiveButtonClicked_boldTextEnabled_needResetSettings() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.FONT_WEIGHT_ADJUSTMENT, BOLD_TEXT_ADJUSTMENT);
+ final AlertDialog dialog = (AlertDialog) mFragment.onCreateDialog(
+ DialogEnums.DIALOG_RESET_SETTINGS);
+ dialog.show();
+
+ dialog.getButton(DialogInterface.BUTTON_POSITIVE).callOnClick();
+
+ assertThat(mFragment.mNeedResetSettings).isTrue();
+ }
+
+ @Test
+ public void onDialogPositiveButtonClicked_boldTextDisabled_resetAllListeners() {
+ final ResetStateListener listener1 = mock(ResetStateListener.class);
+ final ResetStateListener listener2 = mock(ResetStateListener.class);
+ mFragment.mResetStateListeners = new ArrayList<>(Arrays.asList(listener1, listener2));
+ final AlertDialog dialog = (AlertDialog) mFragment.onCreateDialog(
+ DialogEnums.DIALOG_RESET_SETTINGS);
+ dialog.show();
+
+ dialog.getButton(DialogInterface.BUTTON_POSITIVE).callOnClick();
+
+ verify(listener1).resetState();
+ verify(listener2).resetState();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceControllerTest.java
index 594de6a..881a18d 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceControllerTest.java
@@ -30,6 +30,7 @@
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
+import android.provider.Settings;
import android.provider.SettingsSlicesContract;
import androidx.preference.PreferenceScreen;
@@ -76,6 +77,24 @@
}
@Test
+ public void onSwitchChanged_isCheckedButNotAcked_preferenceIsUnchecked() {
+ setLowPowerWarningAcked(/* acked= */ 0);
+
+ mController.onSwitchChanged(/* switchView= */ null, /* isChecked= */ true);
+
+ assertThat(mPreference.isChecked()).isFalse();
+ }
+
+ @Test
+ public void onSwitchChanged_isCheckedAndAcked_setPowerSaveMode() {
+ setLowPowerWarningAcked(/* acked= */ 1);
+
+ mController.onSwitchChanged(/* switchView= */ null, /* isChecked= */ true);
+
+ verify(mPowerManager).setPowerSaveModeEnabled(true);
+ }
+
+ @Test
public void updateState_lowPowerOn_preferenceIsChecked() {
when(mPowerManager.isPowerSaveMode()).thenReturn(true);
@@ -126,4 +145,12 @@
public void isPublicSlice_returnsTrue() {
assertThat(mController.isPublicSlice()).isTrue();
}
+
+ // 0 means not acked, 1 means acked.
+ private void setLowPowerWarningAcked(int acked) {
+ Settings.Secure.putInt(
+ mContext.getContentResolver(),
+ Settings.Secure.LOW_POWER_WARNING_ACKNOWLEDGED,
+ acked);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/gestures/SystemNavigationGestureSettingsTest.java b/tests/robotests/src/com/android/settings/gestures/SystemNavigationGestureSettingsTest.java
index 78424da..e761570 100644
--- a/tests/robotests/src/com/android/settings/gestures/SystemNavigationGestureSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/SystemNavigationGestureSettingsTest.java
@@ -34,6 +34,7 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -41,10 +42,14 @@
import android.content.Context;
import android.content.om.IOverlayManager;
import android.content.om.OverlayInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.provider.SearchIndexableResource;
import com.android.internal.R;
import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settingslib.search.SearchIndexableRaw;
import org.junit.Before;
import org.junit.Test;
@@ -67,6 +72,8 @@
@Mock
private IOverlayManager mOverlayManager;
@Mock
+ private PackageManager mPackageManager;
+ @Mock
private OverlayInfo mOverlayInfoEnabled;
@Mock
private OverlayInfo mOverlayInfoDisabled;
@@ -75,16 +82,17 @@
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
- mContext = RuntimeEnvironment.application;
+ mContext = spy(RuntimeEnvironment.application);
mSettings = new SystemNavigationGestureSettings();
when(mOverlayInfoDisabled.isEnabled()).thenReturn(false);
when(mOverlayInfoEnabled.isEnabled()).thenReturn(true);
when(mOverlayManager.getOverlayInfo(any(), anyInt())).thenReturn(mOverlayInfoDisabled);
+ when(mContext.getPackageManager()).thenReturn(mPackageManager);
}
@Test
- public void testSearchIndexProvider_shouldIndexResource() {
+ public void searchIndexProvider_shouldIndexResource() {
final List<SearchIndexableResource> indexRes =
SystemNavigationGestureSettings.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex(
RuntimeEnvironment.application, true /* enabled */);
@@ -94,6 +102,29 @@
}
@Test
+ public void searchIndexProvider_gesturePackageExist_shouldBeIndexed()
+ throws NameNotFoundException {
+ PackageInfo info = new PackageInfo();
+ when(mPackageManager.getPackageInfo(NAV_BAR_MODE_GESTURAL_OVERLAY, 0))
+ .thenReturn(info);
+
+ final List<SearchIndexableRaw> indexRaws =
+ SystemNavigationGestureSettings.SEARCH_INDEX_DATA_PROVIDER
+ .getRawDataToIndex(mContext, true /* enabled */);
+
+ assertThat(indexRaws).isNotEmpty();
+ }
+
+ @Test
+ public void searchIndexProvider_noNavigationPackageExist_shouldReturnEmpty() {
+ final List<SearchIndexableRaw> indexRaws =
+ SystemNavigationGestureSettings.SEARCH_INDEX_DATA_PROVIDER
+ .getRawDataToIndex(mContext, true /* enabled */);
+
+ assertThat(indexRaws).isEmpty();
+ }
+
+ @Test
public void testGetCurrentSystemNavigationMode() {
SettingsShadowResources.overrideResource(
R.integer.config_navBarInteractionMode, NAV_BAR_MODE_GESTURAL);
diff --git a/tests/robotests/src/com/android/settings/notification/zen/AbstractZenModeAutomaticRulePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/zen/AbstractZenModeAutomaticRulePreferenceControllerTest.java
index ae6e1d0..1c247a6 100644
--- a/tests/robotests/src/com/android/settings/notification/zen/AbstractZenModeAutomaticRulePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/zen/AbstractZenModeAutomaticRulePreferenceControllerTest.java
@@ -16,6 +16,9 @@
package com.android.settings.notification.zen;
+import static android.app.NotificationManager.EXTRA_AUTOMATIC_RULE_ID;
+import static android.service.notification.ConditionProviderService.EXTRA_RULE_ID;
+
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;
@@ -24,6 +27,7 @@
import android.app.NotificationManager;
import android.content.ComponentName;
import android.content.Context;
+import android.content.Intent;
import android.content.pm.ComponentInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
@@ -166,4 +170,21 @@
assertThat(actual).isEqualTo(new ComponentName(mContext.getPackageName(), "activity"));
}
+
+ @Test
+ public void testGetRuleIntent() throws Exception {
+ AutomaticZenRule rule = new AutomaticZenRule("name", null,
+ new ComponentName(mContext.getPackageName(), "test"), Uri.EMPTY,
+ new ZenPolicy(), NotificationManager.INTERRUPTION_FILTER_PRIORITY, true);
+ rule.setPackageName(mContext.getPackageName());
+
+ when(mPm.getPackageUid(null, 0)).thenReturn(-1);
+ when(mPm.getPackageUid(mContext.getPackageName(), 0)).thenReturn(1);
+
+ Intent intent = AbstractZenModeAutomaticRulePreferenceController
+ .getRuleIntent(null, rule.getConfigurationActivity(), "id");
+
+ assertThat("id").isEqualTo(intent.getStringExtra(EXTRA_RULE_ID));
+ assertThat("id").isEqualTo(intent.getStringExtra(EXTRA_AUTOMATIC_RULE_ID));
+ }
}
\ No newline at end of file