Snap for 7277590 from 7f0888a6a0 to sc-v2-release
Change-Id: I6ba726869403805bf01a5c3d9b400cf0a394f9bd
This commit is contained in:
@@ -2631,7 +2631,7 @@
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
||||
android:value="com.android.settings.notification.NotificationAssistantPicker" />
|
||||
android:value="com.android.settings.notification.ConfigureNotificationSettings" />
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
|
||||
@@ -2285,6 +2285,102 @@
|
||||
column="23"/>
|
||||
</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="#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"
|
||||
@@ -2669,54 +2765,6 @@
|
||||
column="13"/>
|
||||
</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:fillColor="@color/homepage_generic_icon_background" />"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="res/drawable/ic_network_signal_blue.xml"
|
||||
line="23"
|
||||
column="11"/>
|
||||
</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:fillColor="@color/homepage_generic_icon_background" />"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="res/drawable/ic_network_signal_blue.xml"
|
||||
line="25"
|
||||
column="11"/>
|
||||
</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:fillColor="@color/homepage_generic_icon_background" />"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="res/drawable/ic_network_signal_blue.xml"
|
||||
line="27"
|
||||
column="11"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="HardCodedColor"
|
||||
severity="Error"
|
||||
@@ -2997,12 +3045,28 @@
|
||||
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=" <path"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
errorLine1=" <path android:fillColor="@color/homepage_generic_icon_background""
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="res/drawable/ic_network_signal_blue.xml"
|
||||
line="23"
|
||||
column="11"/>
|
||||
</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=" <path android:fillColor="@color/homepage_generic_icon_background""
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="res/drawable/ic_network_signal_blue.xml"
|
||||
line="25"
|
||||
column="9"/>
|
||||
column="11"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
@@ -3013,28 +3077,12 @@
|
||||
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="C6.67,19.26,7.26,18.67,8,18.67z" />"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
errorLine1=" <path android:fillColor="@color/homepage_generic_icon_background""
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="res/drawable/ic_network_signal_blue.xml"
|
||||
line="32"
|
||||
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:pathData="M16,12h1.33c0.74,0,1.33,0.6,1.33,1.33v12c0,0.74-0.6,1.33-1.33,1.33H16c-0.74,0-1.33-0.6-1.33-1.33v-12"
|
||||
errorLine2="^">
|
||||
<location
|
||||
file="res/drawable/ic_network_signal_blue.xml"
|
||||
line="35"
|
||||
column="1"/>
|
||||
line="27"
|
||||
column="11"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
@@ -3069,22 +3117,6 @@
|
||||
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/notification_silence_color" />"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="res/drawable/ic_notification_silence.xml"
|
||||
line="22"
|
||||
column="17"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="HardCodedColor"
|
||||
severity="Error"
|
||||
@@ -3357,6 +3389,54 @@
|
||||
column="15"/>
|
||||
</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="#FF4285F4"/>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="res/drawable/one_handed_guideline.xml"
|
||||
line="34"
|
||||
column="36"/>
|
||||
</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="#004385F5"/>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="res/drawable/one_handed_guideline.xml"
|
||||
line="35"
|
||||
column="36"/>
|
||||
</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/homepage_emergency_background">"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="res/layout/preference_battery_error.xml"
|
||||
line="35"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="HardCodedColor"
|
||||
severity="Error"
|
||||
@@ -3565,6 +3645,22 @@
|
||||
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=" <string name="sync_plug" msgid="7956982719077985381">""<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="2930"
|
||||
column="170"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="HardCodedColor"
|
||||
severity="Error"
|
||||
@@ -3577,7 +3673,7 @@
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="res/values-en-rAU/strings.xml"
|
||||
line="2821"
|
||||
line="2940"
|
||||
column="64"/>
|
||||
</issue>
|
||||
|
||||
@@ -3593,7 +3689,7 @@
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="res/values-en-rCA/strings.xml"
|
||||
line="2821"
|
||||
line="2940"
|
||||
column="64"/>
|
||||
</issue>
|
||||
|
||||
@@ -3609,7 +3705,7 @@
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="res/values-en-rGB/strings.xml"
|
||||
line="2821"
|
||||
line="2940"
|
||||
column="64"/>
|
||||
</issue>
|
||||
|
||||
@@ -3625,26 +3721,10 @@
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="res/values-en-rIN/strings.xml"
|
||||
line="2821"
|
||||
line="2940"
|
||||
column="64"/>
|
||||
</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="7956982719077985381">""<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="2821"
|
||||
column="170"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="HardCodedColor"
|
||||
severity="Error"
|
||||
@@ -3657,7 +3737,7 @@
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="res/values/strings.xml"
|
||||
line="6543"
|
||||
line="6823"
|
||||
column="36"/>
|
||||
</issue>
|
||||
|
||||
@@ -3689,7 +3769,7 @@
|
||||
errorLine2=" ^">
|
||||
<location
|
||||
file="res/values/styles.xml"
|
||||
line="435"
|
||||
line="439"
|
||||
column="44"/>
|
||||
</issue>
|
||||
|
||||
@@ -3705,7 +3785,7 @@
|
||||
errorLine2=" ^">
|
||||
<location
|
||||
file="res/values/styles.xml"
|
||||
line="441"
|
||||
line="445"
|
||||
column="44"/>
|
||||
</issue>
|
||||
|
||||
@@ -3721,7 +3801,7 @@
|
||||
errorLine2=" ^">
|
||||
<location
|
||||
file="res/values/styles.xml"
|
||||
line="442"
|
||||
line="446"
|
||||
column="44"/>
|
||||
</issue>
|
||||
|
||||
@@ -3737,7 +3817,7 @@
|
||||
errorLine2=" ^">
|
||||
<location
|
||||
file="res/values/styles.xml"
|
||||
line="478"
|
||||
line="482"
|
||||
column="34"/>
|
||||
</issue>
|
||||
|
||||
@@ -3753,7 +3833,7 @@
|
||||
errorLine2=" ^">
|
||||
<location
|
||||
file="res/values/themes.xml"
|
||||
line="106"
|
||||
line="103"
|
||||
column="40"/>
|
||||
</issue>
|
||||
|
||||
@@ -3769,7 +3849,7 @@
|
||||
errorLine2=" ^">
|
||||
<location
|
||||
file="res/values/themes.xml"
|
||||
line="106"
|
||||
line="103"
|
||||
column="40"/>
|
||||
</issue>
|
||||
|
||||
@@ -3785,7 +3865,7 @@
|
||||
errorLine2=" ^">
|
||||
<location
|
||||
file="res/values/themes.xml"
|
||||
line="191"
|
||||
line="188"
|
||||
column="45"/>
|
||||
</issue>
|
||||
|
||||
@@ -3801,7 +3881,7 @@
|
||||
errorLine2=" ^">
|
||||
<location
|
||||
file="res/values/themes.xml"
|
||||
line="192"
|
||||
line="189"
|
||||
column="49"/>
|
||||
</issue>
|
||||
|
||||
@@ -3817,7 +3897,7 @@
|
||||
errorLine2=" ^">
|
||||
<location
|
||||
file="res/values/themes.xml"
|
||||
line="200"
|
||||
line="197"
|
||||
column="45"/>
|
||||
</issue>
|
||||
|
||||
@@ -3833,7 +3913,7 @@
|
||||
errorLine2=" ^">
|
||||
<location
|
||||
file="res/values/themes.xml"
|
||||
line="201"
|
||||
line="198"
|
||||
column="49"/>
|
||||
</issue>
|
||||
|
||||
@@ -3849,7 +3929,7 @@
|
||||
errorLine2=" ^">
|
||||
<location
|
||||
file="res/values/themes.xml"
|
||||
line="272"
|
||||
line="268"
|
||||
column="42"/>
|
||||
</issue>
|
||||
|
||||
@@ -4013,132 +4093,4 @@
|
||||
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=" <item android:offset="0" android:color="#FF4285F4"/>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="res/drawable/one_handed_guideline.xml"
|
||||
line="34"
|
||||
column="36"/>
|
||||
</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="#004385F5"/>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="res/drawable/one_handed_guideline.xml"
|
||||
line="35"
|
||||
column="36"/>
|
||||
</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="#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>
|
||||
|
||||
</issues>
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
-->
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
@@ -51,20 +52,20 @@
|
||||
android:maxHeight="24dp"/>
|
||||
</LinearLayout>
|
||||
|
||||
<RelativeLayout
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical" >
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Subhead"
|
||||
android:textAlignment="viewStart"
|
||||
android:ellipsize="marquee"
|
||||
android:fadingEdge="horizontal" />
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@android:id/summary"/>
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/summary"
|
||||
@@ -74,7 +75,8 @@
|
||||
android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Body1"
|
||||
android:textColor="?android:attr/textColorSecondary"
|
||||
android:maxLines="10"
|
||||
android:layout_alignParentEnd="true"/>
|
||||
app:layout_constraintBaseline_toBaselineOf="@android:id/title"
|
||||
app:layout_constraintEnd_toEndOf="parent"/>
|
||||
|
||||
<ProgressBar
|
||||
android:id="@android:id/progress"
|
||||
@@ -84,8 +86,8 @@
|
||||
android:layout_marginBottom="4dp"
|
||||
android:max="100"
|
||||
android:layout_below="@android:id/title"
|
||||
android:layout_alignStart="@android:id/title"
|
||||
app:layout_constraintTop_toBottomOf="@android:id/title"
|
||||
style="?android:attr/progressBarStyleHorizontal" />
|
||||
</RelativeLayout>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
@@ -7221,7 +7221,7 @@
|
||||
<string name="vpn_require_connection_title">Require VPN connection?</string>
|
||||
|
||||
<!-- Dialog subtitle warning for a VPN app that has an insecure type. [CHAR LIMIT=100] -->
|
||||
<string name="vpn_insecure_dialog_subtitle">This VPN is not secure. Update to an IKEv2 VPN</string>
|
||||
<string name="vpn_insecure_dialog_subtitle">Not secure. Update to an IKEv2 VPN</string>
|
||||
|
||||
<!-- Summary describing the always-on VPN feature. [CHAR LIMIT=NONE] -->
|
||||
<string name="vpn_lockdown_summary">Select a VPN profile to always remain connected to. Network traffic will only be allowed when connected to this VPN.</string>
|
||||
@@ -9032,8 +9032,10 @@
|
||||
<item quantity="other">%d apps can read notifications</item>
|
||||
</plurals>
|
||||
|
||||
<!-- Title for Notification Assistant Picker screen [CHAR LIMIT=30]-->
|
||||
<string name="notification_assistant_title">Adaptive Notifications</string>
|
||||
<!-- Title for Notification Assistant setting [CHAR LIMIT=30]-->
|
||||
<string name="notification_assistant_title">Enhanced notifications</string>
|
||||
<!-- Summary of Notification Assistant provided features [CHAR LIMIT=NONE]-->
|
||||
<string name="notification_assistant_summary">Get suggested actions, replies, and more</string>
|
||||
|
||||
<!-- Label for no NotificationAssistantService [CHAR_LIMIT=NONE] -->
|
||||
<string name="no_notification_assistant">None</string>
|
||||
@@ -9051,10 +9053,11 @@
|
||||
<!-- Summary for a warning message about security implications of enabling a notification
|
||||
listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
|
||||
<string name="notification_assistant_security_warning_summary">
|
||||
<xliff:g id="notification_assistant_name" example="Notification Assistant">%1$s</xliff:g> will be able to read all notifications,
|
||||
including personal information such as contact names and the text of messages you receive.
|
||||
This app will also be able to dismiss notifications or take action on buttons in notifications, including answering phone calls.
|
||||
\n\nThis will also give the app the ability to turn Do Not Disturb on or off and change related settings.
|
||||
Enhanced notifications can read all notification content,
|
||||
including personal information like contact names and messages.
|
||||
This feature can also dismiss notifications or take actions on buttons in notifications,
|
||||
such as answering phone calls.
|
||||
\n\nThis feature can also turn Priority mode on or off and change related settings.
|
||||
</string>
|
||||
|
||||
<!-- Title for a warning message about security implications of enabling a notification
|
||||
@@ -9769,6 +9772,11 @@
|
||||
<string name="switch_on_text">On</string>
|
||||
<string name="switch_off_text">Off</string>
|
||||
|
||||
|
||||
<!-- The subtext when screen pinning feature is enabled. [CHAR LIMIT=28] -->
|
||||
<string name="screen_pinning_switch_on_text">On</string>
|
||||
<!-- The subtext when screen pinning feature is disabled. [CHAR LIMIT=28] -->
|
||||
<string name="screen_pinning_switch_off_text">Off</string>
|
||||
<!-- [CHAR LIMIT=28] Screen pinning title -->
|
||||
<string name="screen_pinning_title">App pinning</string>
|
||||
<!-- [CHAR LIMIT=none] Screen pinning introduction -->
|
||||
|
||||
@@ -115,6 +115,11 @@
|
||||
android:title="@string/snooze_options_title"
|
||||
settings:controller="com.android.settings.notification.SnoozeNotificationPreferenceController" />
|
||||
|
||||
<SwitchPreference
|
||||
android:key="notification_assistant"
|
||||
android:title="@string/notification_assistant_title"
|
||||
android:summary="@string/notification_assistant_summary"/>
|
||||
|
||||
<!-- Notification badging -->
|
||||
<SwitchPreference
|
||||
android:key="notification_badging"
|
||||
|
||||
@@ -155,5 +155,11 @@
|
||||
android:order="22"
|
||||
android:title="@string/notification_pulse_title"
|
||||
settings:controller="com.android.settings.notification.PulseNotificationPreferenceController"/>
|
||||
|
||||
<SwitchPreference
|
||||
android:key="notification_assistant"
|
||||
android:order="23"
|
||||
android:title="@string/notification_assistant_title"
|
||||
android:summary="@string/notification_assistant_summary"/>
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
|
||||
@@ -80,13 +80,6 @@
|
||||
android:value="com.android.settings.Settings$WriteSettingsActivity" />
|
||||
</Preference>
|
||||
|
||||
<com.android.settingslib.widget.AppPreference
|
||||
android:key="notification_assistant"
|
||||
android:title="@string/notification_assistant_title"
|
||||
android:summary="@string/summary_placeholder"
|
||||
settings:fragment="com.android.settings.notification.NotificationAssistantPicker"
|
||||
settings:controller="com.android.settings.notification.NotificationAssistantPreferenceController"/>
|
||||
|
||||
<Preference
|
||||
android:key="notification_access"
|
||||
android:title="@string/manage_notification_access_title"
|
||||
|
||||
@@ -648,12 +648,8 @@ public class MobileNetworkUtils {
|
||||
return getOperatorNameFromTelephonyManager(context);
|
||||
}
|
||||
|
||||
private static SubscriptionInfo getSubscriptionInfo(SubscriptionManager subManager,
|
||||
int subId) {
|
||||
List<SubscriptionInfo> subInfos = subManager.getAccessibleSubscriptionInfoList();
|
||||
if (subInfos == null) {
|
||||
subInfos = subManager.getActiveSubscriptionInfoList();
|
||||
}
|
||||
private static SubscriptionInfo getSubscriptionInfo(SubscriptionManager subManager, int subId) {
|
||||
List<SubscriptionInfo> subInfos = subManager.getActiveSubscriptionInfoList();
|
||||
if (subInfos == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.app.Activity;
|
||||
import android.app.Application;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.app.usage.IUsageStatsManager;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
@@ -62,6 +63,7 @@ public class ConfigureNotificationSettings extends DashboardFragment implements
|
||||
private static final int REQUEST_CODE = 200;
|
||||
private static final String SELECTED_PREFERENCE_KEY = "selected_preference";
|
||||
private static final String KEY_ADVANCED_CATEGORY = "configure_notifications_advanced";
|
||||
private static final String KEY_NAS = "notification_assistant";
|
||||
|
||||
private RingtonePreference mRequestPreference;
|
||||
|
||||
@@ -116,6 +118,8 @@ public class ConfigureNotificationSettings extends DashboardFragment implements
|
||||
}
|
||||
|
||||
});
|
||||
controllers.add(new NotificationAssistantPreferenceController(context,
|
||||
new NotificationBackend(), host, KEY_NAS));
|
||||
|
||||
if (FeatureFlagUtils.isEnabled(context, FeatureFlags.SILKY_HOME)) {
|
||||
controllers.add(new EmergencyBroadcastPreferenceController(context,
|
||||
@@ -199,4 +203,14 @@ public class ConfigureNotificationSettings extends DashboardFragment implements
|
||||
return keys;
|
||||
}
|
||||
};
|
||||
|
||||
// Dialogs only have access to the parent fragment, not the controller, so pass the information
|
||||
// along to keep business logic out of this file
|
||||
protected void enableNAS(ComponentName cn) {
|
||||
final PreferenceScreen screen = getPreferenceScreen();
|
||||
NotificationAssistantPreferenceController napc =
|
||||
use(NotificationAssistantPreferenceController.class);
|
||||
napc.setNotificationAssistantGranted(cn);
|
||||
napc.updateState(screen.findPreference(napc.getPreferenceKey()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Copyright (C) 2021 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.notification;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.ComponentName;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
||||
|
||||
public class NotificationAssistantDialogFragment extends InstrumentedDialogFragment
|
||||
implements DialogInterface.OnClickListener {
|
||||
static final String KEY_COMPONENT = "c";
|
||||
|
||||
public static NotificationAssistantDialogFragment newInstance(Fragment target,
|
||||
ComponentName cn) {
|
||||
final NotificationAssistantDialogFragment dialogFragment =
|
||||
new NotificationAssistantDialogFragment();
|
||||
final Bundle args = new Bundle();
|
||||
args.putString(KEY_COMPONENT, cn.flattenToString());
|
||||
dialogFragment.setArguments(args);
|
||||
dialogFragment.setTargetFragment(target, 0);
|
||||
|
||||
return dialogFragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
final String summary = getResources()
|
||||
.getString(R.string.notification_assistant_security_warning_summary);
|
||||
return new AlertDialog.Builder(getContext())
|
||||
.setMessage(summary)
|
||||
.setCancelable(true)
|
||||
.setPositiveButton(R.string.okay, this)
|
||||
.create();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
return SettingsEnums.DEFAULT_NOTIFICATION_ASSISTANT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
final Bundle args = getArguments();
|
||||
final ComponentName cn = ComponentName.unflattenFromString(args
|
||||
.getString(KEY_COMPONENT));
|
||||
ConfigureNotificationSettings parent = (ConfigureNotificationSettings) getTargetFragment();
|
||||
parent.enableNAS(cn);
|
||||
}
|
||||
}
|
||||
@@ -18,44 +18,72 @@ package com.android.settings.notification;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.Settings;
|
||||
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
import com.android.settingslib.applications.DefaultAppInfo;
|
||||
import com.android.settingslib.widget.CandidateInfo;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.android.settings.core.TogglePreferenceController;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
|
||||
public class NotificationAssistantPreferenceController extends BasePreferenceController {
|
||||
public class NotificationAssistantPreferenceController extends TogglePreferenceController {
|
||||
private static final String TAG = "NASPreferenceController";
|
||||
private static final int AVAILABLE = 1;
|
||||
private Fragment mFragment;
|
||||
private int mUserId = UserHandle.myUserId();
|
||||
|
||||
@VisibleForTesting
|
||||
protected NotificationBackend mNotificationBackend;
|
||||
private PackageManager mPackageManager;
|
||||
|
||||
public NotificationAssistantPreferenceController(Context context, String preferenceKey) {
|
||||
public NotificationAssistantPreferenceController(Context context, NotificationBackend backend,
|
||||
Fragment fragment, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mNotificationBackend = new NotificationBackend();
|
||||
mPackageManager = mContext.getPackageManager();
|
||||
mNotificationBackend = backend;
|
||||
mFragment = fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAvailabilityStatus() {
|
||||
return BasePreferenceController.AVAILABLE;
|
||||
return AVAILABLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence getSummary() {
|
||||
CandidateInfo appSelected = new NotificationAssistantPicker.CandidateNone(mContext);
|
||||
ComponentName assistant = mNotificationBackend.getAllowedNotificationAssistant();
|
||||
if (assistant != null) {
|
||||
appSelected = createCandidateInfo(assistant);
|
||||
}
|
||||
return appSelected.loadLabel();
|
||||
public boolean isChecked() {
|
||||
ComponentName acn = mNotificationBackend.getAllowedNotificationAssistant();
|
||||
ComponentName dcn = mNotificationBackend.getDefaultNotificationAssistant();
|
||||
return (acn != null && acn.equals(dcn));
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
protected CandidateInfo createCandidateInfo(ComponentName cn) {
|
||||
return new DefaultAppInfo(mContext, mPackageManager, UserHandle.myUserId(), cn);
|
||||
@Override
|
||||
public boolean setChecked(boolean isChecked) {
|
||||
ComponentName cn = isChecked
|
||||
? mNotificationBackend.getDefaultNotificationAssistant() : null;
|
||||
if (isChecked) {
|
||||
if (mFragment == null) {
|
||||
throw new IllegalStateException("No fragment to start activity");
|
||||
}
|
||||
showDialog(cn);
|
||||
return false;
|
||||
} else {
|
||||
setNotificationAssistantGranted(null);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
protected void setNotificationAssistantGranted(ComponentName cn) {
|
||||
if (Settings.Secure.getIntForUser(mContext.getContentResolver(),
|
||||
Settings.Secure.NAS_SETTINGS_UPDATED, 0, mUserId) == 0) {
|
||||
Settings.Secure.putIntForUser(mContext.getContentResolver(),
|
||||
Settings.Secure.NAS_SETTINGS_UPDATED, 1, mUserId);
|
||||
mNotificationBackend.resetDefaultNotificationAssistant(cn != null);
|
||||
}
|
||||
mNotificationBackend.setNotificationAssistantGranted(cn);
|
||||
}
|
||||
|
||||
protected void showDialog(ComponentName cn) {
|
||||
NotificationAssistantDialogFragment dialogFragment =
|
||||
NotificationAssistantDialogFragment.newInstance(mFragment, cn);
|
||||
dialogFragment.show(mFragment.getFragmentManager(), TAG);
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,6 @@ import static android.app.NotificationManager.IMPORTANCE_NONE;
|
||||
import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
|
||||
import static android.content.pm.LauncherApps.ShortcutQuery.FLAG_MATCH_CACHED;
|
||||
import static android.content.pm.LauncherApps.ShortcutQuery.FLAG_MATCH_DYNAMIC;
|
||||
import static android.content.pm.LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED;
|
||||
import static android.content.pm.LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED_BY_ANY_LAUNCHER;
|
||||
|
||||
import android.app.INotificationManager;
|
||||
@@ -50,7 +49,6 @@ import android.service.notification.NotificationListenerFilter;
|
||||
import android.text.format.DateUtils;
|
||||
import android.util.IconDrawableFactory;
|
||||
import android.util.Log;
|
||||
import android.util.Slog;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
@@ -563,6 +561,23 @@ public class NotificationBackend {
|
||||
}
|
||||
}
|
||||
|
||||
public ComponentName getDefaultNotificationAssistant() {
|
||||
try {
|
||||
return sINM.getDefaultNotificationAssistant();
|
||||
} catch (Exception e) {
|
||||
Log.w(TAG, "Error calling NoMan", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void resetDefaultNotificationAssistant(boolean loadFromConfig) {
|
||||
try {
|
||||
sINM.resetDefaultNotificationAssistant(loadFromConfig);
|
||||
} catch (Exception e) {
|
||||
Log.w(TAG, "Error calling NoMan", e);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean setNotificationAssistantGranted(ComponentName cn) {
|
||||
try {
|
||||
sINM.setNotificationAssistantAccessGranted(cn, true);
|
||||
|
||||
@@ -83,6 +83,22 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
|
||||
private PackageManager mPm;
|
||||
private CountDownLatch mCountdownLatch;
|
||||
private Future mCountdownFuture;
|
||||
private final ViewOutlineProvider mOutlineProvider = new ViewOutlineProvider() {
|
||||
@Override
|
||||
public void getOutline(View view, Outline outline) {
|
||||
final TypedArray ta = NotificationHistoryActivity.this.obtainStyledAttributes(
|
||||
new int[]{android.R.attr.dialogCornerRadius});
|
||||
final float dialogCornerRadius = ta.getDimension(0, 0);
|
||||
ta.recycle();
|
||||
TypedValue v = new TypedValue();
|
||||
NotificationHistoryActivity.this.getTheme().resolveAttribute(
|
||||
com.android.internal.R.attr.listDivider, v, true);
|
||||
int bottomPadding = NotificationHistoryActivity.this.getDrawable(v.resourceId)
|
||||
.getIntrinsicHeight();
|
||||
outline.setRoundRect(0, 0, view.getWidth(), (view.getHeight() - bottomPadding),
|
||||
dialogCornerRadius);
|
||||
}
|
||||
};
|
||||
private UiEventLogger mUiEventLogger = new UiEventLoggerImpl();
|
||||
|
||||
enum NotificationHistoryEvent implements UiEventLogger.UiEventEnum {
|
||||
@@ -133,22 +149,7 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
|
||||
notifications.isEmpty() ? View.GONE : View.VISIBLE);
|
||||
mCountdownLatch.countDown();
|
||||
mTodayView.setClipToOutline(true);
|
||||
mTodayView.setOutlineProvider(new ViewOutlineProvider() {
|
||||
@Override
|
||||
public void getOutline(View view, Outline outline) {
|
||||
final TypedArray ta = NotificationHistoryActivity.this.obtainStyledAttributes(
|
||||
new int[]{android.R.attr.dialogCornerRadius});
|
||||
final float dialogCornerRadius = ta.getDimension(0, 0);
|
||||
ta.recycle();
|
||||
TypedValue v = new TypedValue();
|
||||
NotificationHistoryActivity.this.getTheme().resolveAttribute(
|
||||
com.android.internal.R.attr.listDivider, v, true);
|
||||
int bottomPadding = NotificationHistoryActivity.this.getDrawable(v.resourceId)
|
||||
.getIntrinsicHeight();
|
||||
outline.setRoundRect(0, 0, view.getWidth(), (view.getHeight() - bottomPadding),
|
||||
dialogCornerRadius);
|
||||
}
|
||||
});
|
||||
mTodayView.setOutlineProvider(mOutlineProvider);
|
||||
// for each package, new header and recycler view
|
||||
for (int i = 0, notificationsSize = notifications.size(); i < notificationsSize; i++) {
|
||||
NotificationHistoryPackage nhp = notifications.get(i);
|
||||
@@ -216,6 +217,8 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
|
||||
mTodayView = findViewById(R.id.apps);
|
||||
mSnoozeView = findViewById(R.id.snoozed_list);
|
||||
mDismissView = findViewById(R.id.recently_dismissed_list);
|
||||
mDismissView.setClipToOutline(true);
|
||||
mDismissView.setOutlineProvider(mOutlineProvider);
|
||||
mHistoryOff = findViewById(R.id.history_off);
|
||||
mHistoryOn = findViewById(R.id.history_on);
|
||||
mHistoryEmpty = findViewById(R.id.history_on_empty);
|
||||
|
||||
@@ -40,7 +40,7 @@ public class ScreenPinningPreferenceController extends BasePreferenceController
|
||||
public CharSequence getSummary() {
|
||||
return Settings.System.getInt(mContext.getContentResolver(),
|
||||
Settings.System.LOCK_TO_APP_ENABLED, 0) != 0
|
||||
? mContext.getText(R.string.switch_on_text)
|
||||
: mContext.getText(R.string.switch_off_text);
|
||||
? mContext.getText(R.string.screen_pinning_switch_on_text)
|
||||
: mContext.getText(R.string.screen_pinning_switch_off_text);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -304,7 +304,9 @@ public class VpnSettings extends RestrictedSettingsFragment implements
|
||||
LegacyVpnPreference p = mSettings.findOrCreatePreference(stubProfile, false);
|
||||
p.setState(vpn.state);
|
||||
p.setAlwaysOn(lockdownVpnKey != null && lockdownVpnKey.equals(vpn.key));
|
||||
p.setInsecureVpn(VpnProfile.isLegacyType(stubProfile.type));
|
||||
// (b/184921649) do not call setInsecureVpn() for connectedLegacyVpns, since the
|
||||
// LegacyVpnInfo does not contain VPN type information, and the profile already
|
||||
// exists within vpnProfiles.
|
||||
updates.add(p);
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.HandlerThread;
|
||||
import android.os.Looper;
|
||||
@@ -40,7 +41,7 @@ import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settings.dashboard.RestrictedDashboardFragment;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settings.wifi.WifiConfigUiBase2;
|
||||
import com.android.settings.wifi.WifiDialog2;
|
||||
@@ -62,7 +63,7 @@ import java.util.List;
|
||||
* <p>The key of {@link WifiEntry} should be saved to the intent Extras when launching this class
|
||||
* in order to properly render this page.
|
||||
*/
|
||||
public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
|
||||
public class WifiNetworkDetailsFragment2 extends RestrictedDashboardFragment implements
|
||||
WifiDialog2.WifiDialog2Listener {
|
||||
|
||||
private static final String TAG = "WifiNetworkDetailsFrg2";
|
||||
@@ -75,6 +76,8 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
|
||||
// Interval between initiating SavedNetworkTracker scans
|
||||
private static final long SCAN_INTERVAL_MILLIS = 10_000;
|
||||
|
||||
@VisibleForTesting
|
||||
boolean mIsUiRestricted;
|
||||
@VisibleForTesting
|
||||
NetworkDetailsTracker mNetworkDetailsTracker;
|
||||
private HandlerThread mWorkerThread;
|
||||
@@ -83,6 +86,34 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
|
||||
@VisibleForTesting
|
||||
List<AbstractPreferenceController> mControllers;
|
||||
|
||||
public WifiNetworkDetailsFragment2() {
|
||||
super(UserManager.DISALLOW_CONFIG_WIFI);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle icicle) {
|
||||
super.onCreate(icicle);
|
||||
setIfOnlyAvailableForAdmins(true);
|
||||
mIsUiRestricted = isUiRestricted();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
if (mIsUiRestricted) {
|
||||
restrictUi();
|
||||
}
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void restrictUi() {
|
||||
clearWifiEntryCallback();
|
||||
if (!isUiRestrictedByOnlyAdmin()) {
|
||||
getEmptyTextView().setText(R.string.wifi_empty_list_user_restricted);
|
||||
}
|
||||
getPreferenceScreen().removeAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
mWorkerThread.quit();
|
||||
@@ -126,7 +157,7 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
|
||||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
if (isEditable()) {
|
||||
if (!mIsUiRestricted && isEditable()) {
|
||||
MenuItem item = menu.add(0, Menu.FIRST, 0, R.string.wifi_modify);
|
||||
item.setIcon(com.android.internal.R.drawable.ic_mode_edit);
|
||||
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
|
||||
@@ -255,6 +286,17 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
|
||||
getArguments().getString(KEY_CHOSEN_WIFIENTRY_KEY));
|
||||
}
|
||||
|
||||
private void clearWifiEntryCallback() {
|
||||
if (mNetworkDetailsTracker == null) {
|
||||
return;
|
||||
}
|
||||
final WifiEntry wifiEntry = mNetworkDetailsTracker.getWifiEntry();
|
||||
if (wifiEntry == null) {
|
||||
return;
|
||||
}
|
||||
wifiEntry.setListener(null);
|
||||
}
|
||||
|
||||
private boolean isEditable() {
|
||||
if (mNetworkDetailsTracker == null) {
|
||||
return false;
|
||||
|
||||
@@ -294,13 +294,4 @@ public class WifiTetherSettings extends RestrictedDashboardFragment
|
||||
screen.setInitialExpandedChildrenCount(getInitialExpandedChildCount());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getInitialExpandedChildCount() {
|
||||
if (mSecurityPreferenceController != null && mSecurityPreferenceController.getSecurityType()
|
||||
== SoftApConfiguration.SECURITY_TYPE_OPEN) {
|
||||
return (EXPANDED_CHILD_COUNT_DEFAULT - 1);
|
||||
}
|
||||
return EXPANDED_CHILD_COUNT_DEFAULT;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright (C) 2021 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.notification;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class NotificationAssistantDialogFragmentTest {
|
||||
|
||||
private Context mContext;
|
||||
@Mock
|
||||
private ConfigureNotificationSettings mFragment;
|
||||
private NotificationAssistantDialogFragment mDialogFragment;
|
||||
@Mock
|
||||
private FragmentActivity mActivity;
|
||||
|
||||
ComponentName mComponentName = new ComponentName("a", "b");
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
mDialogFragment =
|
||||
spy(NotificationAssistantDialogFragment.newInstance(mFragment, mComponentName));
|
||||
doReturn(mActivity).when(mDialogFragment).getActivity();
|
||||
doReturn(mContext).when(mDialogFragment).getContext();
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testClickOK_callEnableNAS() {
|
||||
mDialogFragment.onClick(null, DialogInterface.BUTTON_POSITIVE);
|
||||
|
||||
verify(mFragment, times(1)).enableNAS(eq(mComponentName));
|
||||
}
|
||||
}
|
||||
@@ -16,17 +16,25 @@
|
||||
|
||||
package com.android.settings.notification;
|
||||
|
||||
import static junit.framework.TestCase.assertEquals;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Debug;
|
||||
import android.provider.Settings;
|
||||
|
||||
import com.android.settingslib.widget.CandidateInfo;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -35,7 +43,6 @@ import org.mockito.Answers;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class NotificationAssistantPreferenceControllerTest {
|
||||
@@ -44,57 +51,86 @@ public class NotificationAssistantPreferenceControllerTest {
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
private Context mContext;
|
||||
@Mock
|
||||
private ConfigureNotificationSettings mFragment;
|
||||
@Mock
|
||||
private FragmentManager mFragmentManager;
|
||||
@Mock
|
||||
private FragmentTransaction mFragmentTransaction;
|
||||
@Mock
|
||||
private NotificationBackend mBackend;
|
||||
private NotificationAssistantPreferenceController mPreferenceController;
|
||||
ComponentName mNASComponent = new ComponentName("a", "b");
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mPreferenceController = new TestPreferenceController(mContext, mBackend);
|
||||
mContext = spy(ApplicationProvider.getApplicationContext());
|
||||
doReturn(mContext).when(mFragment).getContext();
|
||||
when(mFragment.getFragmentManager()).thenReturn(mFragmentManager);
|
||||
when(mFragmentManager.beginTransaction()).thenReturn(mFragmentTransaction);
|
||||
when(mBackend.getDefaultNotificationAssistant()).thenReturn(mNASComponent);
|
||||
mPreferenceController = new NotificationAssistantPreferenceController(mContext,
|
||||
mBackend, mFragment, KEY);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetSummary_noAssistant() {
|
||||
public void testIsChecked() throws Exception {
|
||||
when(mBackend.getAllowedNotificationAssistant()).thenReturn(mNASComponent);
|
||||
assertTrue(mPreferenceController.isChecked());
|
||||
|
||||
when(mBackend.getAllowedNotificationAssistant()).thenReturn(null);
|
||||
CharSequence noneLabel = new NotificationAssistantPicker.CandidateNone(mContext)
|
||||
.loadLabel();
|
||||
assertEquals(noneLabel, mPreferenceController.getSummary());
|
||||
assertFalse(mPreferenceController.isChecked());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetSummary_TestAssistant() {
|
||||
String testName = "test_pkg/test_cls";
|
||||
when(mBackend.getAllowedNotificationAssistant()).thenReturn(
|
||||
ComponentName.unflattenFromString(testName));
|
||||
assertEquals(testName, mPreferenceController.getSummary());
|
||||
public void testSetChecked() throws Exception {
|
||||
// Verify a dialog is shown when the switch is to be enabled.
|
||||
assertFalse(mPreferenceController.setChecked(true));
|
||||
verify(mFragmentTransaction).add(
|
||||
any(NotificationAssistantDialogFragment.class), anyString());
|
||||
verify(mBackend, times(0)).setNotificationAssistantGranted(any());
|
||||
|
||||
// Verify no dialog is shown and NAS set to null when disabled
|
||||
assertTrue(mPreferenceController.setChecked(false));
|
||||
verify(mBackend, times(1)).setNotificationAssistantGranted(null);
|
||||
}
|
||||
|
||||
private final class TestPreferenceController extends NotificationAssistantPreferenceController {
|
||||
@Test
|
||||
public void testMigrationFromSetting_userEnable() throws Exception {
|
||||
Settings.Secure.putIntForUser(mContext.getContentResolver(),
|
||||
Settings.Secure.NAS_SETTINGS_UPDATED, 0, 0);
|
||||
|
||||
private TestPreferenceController(Context context, NotificationBackend backend) {
|
||||
super(context, KEY);
|
||||
mNotificationBackend = backend;
|
||||
}
|
||||
//Test user enable for the first time
|
||||
mPreferenceController.setNotificationAssistantGranted(mNASComponent);
|
||||
assertEquals(1, Settings.Secure.getIntForUser(mContext.getContentResolver(),
|
||||
Settings.Secure.NAS_SETTINGS_UPDATED, 0, 0));
|
||||
verify(mBackend, times(1))
|
||||
.resetDefaultNotificationAssistant(eq(true));
|
||||
|
||||
@Override
|
||||
public String getPreferenceKey() {
|
||||
return KEY;
|
||||
}
|
||||
//Test user enable again, migration should not happen
|
||||
mPreferenceController.setNotificationAssistantGranted(mNASComponent);
|
||||
//Number of invocations should not increase
|
||||
verify(mBackend, times(1))
|
||||
.resetDefaultNotificationAssistant(eq(true));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CandidateInfo createCandidateInfo(ComponentName cn) {
|
||||
return new CandidateInfo(true) {
|
||||
@Override
|
||||
public CharSequence loadLabel() { return cn.flattenToString(); }
|
||||
@Test
|
||||
public void testMigrationFromSetting_userDisable() throws Exception {
|
||||
Settings.Secure.putIntForUser(mContext.getContentResolver(),
|
||||
Settings.Secure.NAS_SETTINGS_UPDATED, 0, 0);
|
||||
|
||||
@Override
|
||||
public Drawable loadIcon() { return null; }
|
||||
//Test user disable for the first time
|
||||
mPreferenceController.setChecked(false);
|
||||
assertEquals(1, Settings.Secure.getIntForUser(mContext.getContentResolver(),
|
||||
Settings.Secure.NAS_SETTINGS_UPDATED, 0, 0));
|
||||
verify(mBackend, times(1))
|
||||
.resetDefaultNotificationAssistant(eq(false));
|
||||
|
||||
@Override
|
||||
public String getKey() { return null; }
|
||||
};
|
||||
}
|
||||
//Test user disable again, migration should not happen
|
||||
mPreferenceController.setChecked(false);
|
||||
//Number of invocations should not increase
|
||||
verify(mBackend, times(1))
|
||||
.resetDefaultNotificationAssistant(eq(false));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ import android.app.settings.SettingsEnums;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
@@ -110,6 +111,41 @@ public class WifiNetworkDetailsFragment2Test {
|
||||
verify(mMenu, never()).add(anyInt(), anyInt(), anyInt(), eq(R.string.wifi_modify));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onCreateOptionsMenu_uiRestricted_shouldNotAddEditMenu() {
|
||||
mFragment.mIsUiRestricted = true;
|
||||
|
||||
mFragment.onCreateOptionsMenu(mMenu, mock(MenuInflater.class));
|
||||
|
||||
verify(mMenu, never()).add(anyInt(), anyInt(), anyInt(), eq(R.string.wifi_modify));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void restrictUi_shouldShowRestrictedText() {
|
||||
final FakeFragment fragment = spy(new FakeFragment());
|
||||
final PreferenceScreen screen = mock(PreferenceScreen.class);
|
||||
final TextView restrictedText = mock(TextView.class);
|
||||
doReturn(screen).when(fragment).getPreferenceScreen();
|
||||
doReturn(false).when(fragment).isUiRestrictedByOnlyAdmin();
|
||||
doReturn(restrictedText).when(fragment).getEmptyTextView();
|
||||
|
||||
fragment.restrictUi();
|
||||
|
||||
verify(restrictedText).setText(anyInt());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void restrictUi_shouldRemoveAllPreferences() {
|
||||
final FakeFragment fragment = spy(new FakeFragment());
|
||||
final PreferenceScreen screen = mock(PreferenceScreen.class);
|
||||
doReturn(screen).when(fragment).getPreferenceScreen();
|
||||
doReturn(true).when(fragment).isUiRestrictedByOnlyAdmin();
|
||||
|
||||
fragment.restrictUi();
|
||||
|
||||
verify(screen).removeAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void refreshPreferences_controllerShouldUpdateStateAndDisplayPreference() {
|
||||
final FakeFragment fragment = spy(new FakeFragment());
|
||||
@@ -136,6 +172,11 @@ public class WifiNetworkDetailsFragment2Test {
|
||||
public void addPreferenceController(AbstractPreferenceController controller) {
|
||||
super.addPreferenceController(controller);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUiRestrictedByOnlyAdmin() {
|
||||
return super.isUiRestrictedByOnlyAdmin();
|
||||
}
|
||||
}
|
||||
|
||||
public class TestController extends BasePreferenceController {
|
||||
|
||||
@@ -132,8 +132,6 @@ public class MobileNetworkUtilsTest {
|
||||
|
||||
when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn(
|
||||
Arrays.asList(mSubscriptionInfo1, mSubscriptionInfo2));
|
||||
when(mSubscriptionManager.getAccessibleSubscriptionInfoList()).thenReturn(
|
||||
Arrays.asList(mSubscriptionInfo1, mSubscriptionInfo2));
|
||||
|
||||
when(mTelephonyManager.getNetworkOperatorName()).thenReturn(
|
||||
PLMN_FROM_TELEPHONY_MANAGER_API);
|
||||
|
||||
@@ -88,8 +88,6 @@ public class OpenNetworkSelectPagePreferenceControllerTest {
|
||||
|
||||
when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn(
|
||||
Arrays.asList(mSubscriptionInfo));
|
||||
when(mSubscriptionManager.getAccessibleSubscriptionInfoList()).thenReturn(
|
||||
Arrays.asList(mSubscriptionInfo));
|
||||
|
||||
when(mTelephonyManager.getNetworkOperatorName()).thenReturn(OPERATOR_NAME);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user