Merge "Refine remove locale warning dialog string" into rvc-dev
diff --git a/OWNERS b/OWNERS
index 16fc48c..47961cd 100644
--- a/OWNERS
+++ b/OWNERS
@@ -6,7 +6,6 @@
edgarwang@google.com
emilychuang@google.com
millchen@google.com
-rafftsai@google.com
stanleytfwang@google.com
sunnyshao@google.com
tmfang@google.com
diff --git a/res/layout/notification_history_app_layout.xml b/res/layout/notification_history_app_layout.xml
index 4c899e6..5d8ff3f 100644
--- a/res/layout/notification_history_app_layout.xml
+++ b/res/layout/notification_history_app_layout.xml
@@ -82,10 +82,8 @@
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/notification_list"
android:layout_width="match_parent"
- android:layout_height="0dp"
+ android:layout_height="wrap_content"
android:clipChildren="true"
- settings:layout_constraintHeight_max="300dp"
- settings:layout_constrainedHeight="true"
settings:fastScrollEnabled="true"
settings:fastScrollHorizontalThumbDrawable="@drawable/thumb_drawable"
settings:fastScrollHorizontalTrackDrawable="@drawable/line_drawable"
diff --git a/res/layout/palette_listview_item.xml b/res/layout/palette_listview_item.xml
index 3342ef1..e67b7cb 100644
--- a/res/layout/palette_listview_item.xml
+++ b/res/layout/palette_listview_item.xml
@@ -28,6 +28,6 @@
android:maxLength="20"
android:paddingLeft="@dimen/accessibility_layout_margin_start_end"
android:singleLine="true"
- android:textSize="14dp" />
+ android:textSize="14sp" />
</FrameLayout>
diff --git a/res/values-night/colors.xml b/res/values-night/colors.xml
index c88158b..4ce02ee 100644
--- a/res/values-night/colors.xml
+++ b/res/values-night/colors.xml
@@ -37,6 +37,6 @@
<color name="palette_list_color_cyan">@color/palette_list_dark_mode_color_cyan</color>
<color name="palette_list_color_blue">@color/palette_list_dark_mode_color_blue</color>
<color name="palette_list_color_purple">@color/palette_list_dark_mode_color_purple</color>
- <color name="palette_list_color_pink">@color/palette_list_dark_mode_color_pink</color>
+ <color name="gestures_setting_background_color">@android:color/black</color>
</resources>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index c19b948..1649cb2 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -786,7 +786,7 @@
<string-array name="captioning_font_size_selector_titles">
<item>Very small</item>
<item>Small</item>
- <item>Normal</item>
+ <item>Default</item>
<item>Large</item>
<item>Very large</item>
</string-array>
@@ -920,7 +920,7 @@
<!-- Titles for captioning text style preset preference. [CHAR LIMIT=35] -->
<string-array name="captioning_preset_selector_titles" >
- <item>Use app defaults</item>
+ <item>Set by app</item>
<item>White on black</item>
<item>Black on white</item>
<item>Yellow on black</item>
@@ -1375,89 +1375,6 @@
<item>"1"</item>
</string-array>
- <string-array name="enabled_networks_except_gsm_choices" translatable="false">
- <item>@string/network_lte</item>
- <item>@string/network_3G</item>
- </string-array>
- <string-array name="enabled_networks_except_gsm_4g_choices" translatable="false">
- <item>@string/network_4G</item>
- <item>@string/network_3G</item>
- </string-array>
- <string-array name="enabled_networks_except_gsm_values" translatable="false">
- <item>"9"</item>
- <item>"0"</item>
- </string-array>
-
- <string-array name="enabled_networks_except_lte_choices" translatable="false">
- <item>@string/network_3G</item>
- <item>@string/network_2G</item>
- </string-array>
- <string-array name="enabled_networks_except_lte_values" translatable="false">
- <item>"0"</item>
- <item>"1"</item>
- </string-array>
-
- <string-array name="enabled_networks_except_gsm_lte_choices" translatable="false">
- <item>@string/network_3G</item>
- </string-array>
- <string-array name="enabled_networks_except_gsm_lte_values" translatable="false">
- <item>"0"</item>
- </string-array>
-
- <string-array name="enabled_networks_cdma_choices" translatable="false">
- <item>@string/network_lte</item>
- <item>@string/network_3G</item>
- <item>@string/network_1x</item>
- <item>@string/network_global</item>
- </string-array>
- <string-array name="enabled_networks_cdma_values" translatable="false">
- <item>"8"</item>
- <item>"4"</item>
- <item>"5"</item>
- <item>"10"</item>
- </string-array>
-
- <string-array name="enabled_networks_cdma_no_lte_choices" translatable="false">
- <item>@string/network_3G</item>
- <item>@string/network_1x</item>
- </string-array>
- <string-array name="enabled_networks_cdma_no_lte_values" translatable="false">
- <item>"4"</item>
- <item>"5"</item>
- </string-array>
-
- <string-array name="enabled_networks_cdma_only_lte_choices" translatable="false">
- <item>@string/network_lte</item>
- <item>@string/network_global</item>
- </string-array>
- <string-array name="enabled_networks_cdma_only_lte_values" translatable="false">
- <item>"8"</item>
- <item>"10"</item>
- </string-array>
-
- <string-array name="enabled_networks_tdscdma_choices" translatable="false">
- <item>@string/network_lte</item>
- <item>@string/network_3G</item>
- <item>@string/network_2G</item>
- </string-array>
- <string-array name="enabled_networks_tdscdma_values" translatable="false">
- <item>"22"</item>
- <item>"18"</item>
- <item>"1"</item>
- </string-array>
-
- <!--String arrays for World preferred netwrok modes -->
- <string-array name="preferred_network_mode_choices_world_mode">
- <item>Global</item>
- <item>LTE / CDMA</item>
- <item>LTE / GSM / UMTS</item>
- </string-array>
-
- <string-array name="preferred_network_mode_values_world_mode" translatable="false">
- <item>"10"</item>
- <item>"8"</item>
- <item>"9"</item>
- </string-array>
<!-- WiFi calling mode array -->
<string-array name="wifi_calling_mode_summaries" translatable="false">
@@ -1507,7 +1424,6 @@
<item>@string/color_cyan</item>
<item>@string/color_blue</item>
<item>@string/color_purple</item>
- <item>@string/color_pink</item>
</string-array>
<!-- Values for palette list view preference. -->
@@ -1519,7 +1435,6 @@
<item>@color/palette_list_color_cyan</item>
<item>@color/palette_list_color_blue</item>
<item>@color/palette_list_color_purple</item>
- <item>@color/palette_list_color_pink</item>
</array>
<!--String arrays for showing the rtt settings options -->
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 1c18c6a..06f135f 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -158,7 +158,6 @@
<color name="palette_list_color_cyan">#12b5cb</color> <!-- Material Cyan 600 -->
<color name="palette_list_color_blue">#1a73e8</color> <!-- Material Blue 600 -->
<color name="palette_list_color_purple">#9334e6</color> <!-- Material Purple 600 -->
- <color name="palette_list_color_pink">#e52592</color> <!-- Material Pink 600 -->
<!-- Palette list preference dark mode colors. -->
<color name="palette_list_dark_mode_color_red">#f28b82</color> <!-- Material Red 300 -->
@@ -168,6 +167,5 @@
<color name="palette_list_dark_mode_color_cyan">#78d9ec</color> <!-- Material Cyan 300 -->
<color name="palette_list_dark_mode_color_blue">#8AB4F8</color> <!-- Material Blue 300 -->
<color name="palette_list_dark_mode_color_purple">#c58af9</color> <!-- Material Purple 300 -->
- <color name="palette_list_dark_mode_color_pink">#ff8bcb</color> <!-- Material Pink 300 -->
</resources>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 92e2527..dae9080 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4935,9 +4935,9 @@
<!-- Label for shortcut settings button. [CHAR LIMIT=NONE] -->
<string name="accessibility_shortcut_settings">Shortcut settings</string>
<!-- Title for the switch preference that controls whether or not the accessibility shortcut works on the lock screen. [CHAR LIMIT=35] -->
- <string name="accessibility_shortcut_service_on_lock_screen_title">Allow from lock screen</string>
+ <string name="accessibility_shortcut_service_on_lock_screen_title">Shortcut from lock screen</string>
<!-- Description of accessibility shortcut. [CHAR LIMIT=NONE] -->
- <string name="accessibility_shortcut_description">When the shortcut is on, you can press both volume keys for 3 seconds to start an accessibility feature.</string>
+ <string name="accessibility_shortcut_description">Allow feature shortcut to turn on from the lock screen. Hold both volume keys for 3 seconds.</string>
<!-- Title for the accessibility preference to high contrast text. [CHAR LIMIT=35] -->
<string name="accessibility_toggle_high_text_contrast_preference_title">High contrast text</string>
<!-- Title for the accessibility preference to auto update screen magnification. [CHAR LIMIT=35] -->
@@ -4987,13 +4987,13 @@
<!-- Used in the accessibility service settings to control turning display color inversion on/off entirely. [CHAR LIMIT=NONE] -->
<string name="accessibility_display_inversion_switch_title">Use color inversion</string>
<!-- Subtitle for the accessibility preference to configure display color inversion. [CHAR LIMIT=NONE] -->
- <string name="accessibility_display_inversion_preference_subtitle"><![CDATA[Color inversion turns light screens dark. This helps people who are sensitive to bright light see the screen more easily.<br/><br/>Note: Dark colors will turn light. Colors will change in media and images. You can also use Dark theme (Settings > Display).]]></string>
+ <string name="accessibility_display_inversion_preference_subtitle"><![CDATA[Color inversion turns light screens dark. This feature may be helpful for people who are sensitive to bright light.<br/><br/>Color inversion also turns dark screens light. Colors will change in media and images.<br/><br/>Note: You can also use Dark theme to display a dark background. Dark theme works with supported apps. Color inversion works on all apps.]]></string>
<!-- Title for accessibility preference for configuring feature that performs click action soon after mouse/trackpad pointer stops moving. [CHAR LIMIT=NONE] -->
- <string name="accessibility_autoclick_preference_title">Auto click (dwell timing)</string>
+ <string name="accessibility_autoclick_preference_title">Autoclick (dwell timing)</string>
<!-- Footer text to explain what autoclick does -->
- <string name="accessibility_autoclick_description">If you are using a mouse, you can set the cursor to take action automatically when it stops moving for a certain amount of time.</string>
+ <string name="accessibility_autoclick_description">Autoclick works with a connected mouse. You can set the mouse cursor to click automatically when the cursor stops moving for a certain amount of time.</string>
<!-- Option heading to leave the auto click requirement for accessibility users at its default level. [CHAR LIMIT=50] -->
- <string name="accessibility_autoclick_default_title">Don\u2019t use auto click (default)</string>
+ <string name="accessibility_autoclick_default_title">Off</string>
<!-- Option heading to leave the auto click requirement for accessibility users at its short level. [CHAR LIMIT=35] -->
<string name="accessibility_autoclick_short_title">Short</string>
<!-- Option summary text for the auto click delay 0.2 seconds radio button. [CHAR LIMIT=35] -->
@@ -5028,16 +5028,18 @@
<string name="accessibility_service_master_open_title">Open <xliff:g id="accessibility_app_name" example="TalkBack">%1$s</xliff:g></string>
<!-- Used in the Color correction settings screen to control turning on/off the feature entirely -->
<string name="accessibility_daltonizer_master_switch_title">Use color correction</string>
- <!-- Used in the Captions settings screen to control turning on/off the feature entirely -->
+ <!-- Title for Captions settings screen to control turning on/off the feature entirely -->
<string name="accessibility_caption_master_switch_title">Show captions</string>
+ <!-- Summary for Captions settings screen to control turning on/off the feature entirely [CHAR LIMIT=NONE] -->
+ <string name="accessibility_caption_master_switch_summary">For supported app only</string>
<!-- Title for Caption preference settings screen for configuring font style. [CHAR LIMIT=NONE] -->
- <string name="captioning_caption_appearance_title">Caption appearance</string>
+ <string name="captioning_caption_appearance_title">Caption size and style</string>
<!-- Summary for Captions settings, explaining important settings under it. [CHAR LIMIT=NONE] -->
- <string name="captioning_caption_appearance_summary">Text size, caption style</string>
+ <string name="captioning_caption_appearance_summary"><xliff:g id="accessibility_font_size" example="Large">%1$s</xliff:g> text size</string>
<!-- Title for Caption preference settings screen for configuring language. [CHAR LIMIT=NONE] -->
<string name="captioning_more_options_title">More options</string>
<!-- Used in the Captions preference to tell users that the setting doesn't support all apps. [CHAR LIMIT=NONE] -->
- <string name="accessibility_caption_preference_summary">Not all apps support this setting.</string>
+ <string name="accessibility_caption_preference_summary">Not all apps support these caption preferences</string>
<!-- Summary for accessibility shortcut preference for software shortcut type. [CHAR LIMIT=NONE] -->
<string name="accessibility_shortcut_type_software">Accessibility button</string>
<!-- Summary for accessibility shortcut preference for software shortcut type when gesture mode is on. [CHAR LIMIT=NONE] -->
@@ -5065,9 +5067,13 @@
<item quantity="other"><xliff:g id="number_device_count">%1$d</xliff:g> saved hearing aids</item>
</plurals>
- <!-- Preference's state when enabled. -->
+ <!-- Preference's shortcut when enabled. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_summary_shortcut_enabled">Shortcut on</string>
+ <!-- Preference's shortcut when disabled. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_summary_shortcut_disabled">Off</string>
+ <!-- Preference's state when enabled. [CHAR LIMIT=NONE] -->
<string name="accessibility_summary_state_enabled">On</string>
- <!-- Preference's state when disabled. -->
+ <!-- Preference's state when disabled. [CHAR LIMIT=NONE] -->
<string name="accessibility_summary_state_disabled">Off</string>
<!-- Accessibility service's preference's state when enabled but not running (like maybe it crashed). -->
<string name="accessibility_summary_state_stopped">Not working. Tap for info.</string>
@@ -5079,17 +5085,17 @@
<!-- Title for the preference to configure the type of color space correction to apply. [CHAR LIMIT=NONE] -->
<string name="daltonizer_type">Correction mode</string>
<!-- Title shown for deuteranomaly (red-green color blindness) [CHAR LIMIT=45] -->
- <string name="daltonizer_mode_deuteranomaly_title">Red-green</string>
+ <string name="daltonizer_mode_deuteranomaly_title">Deuteranomaly</string>
<!-- Title shown for protanomaly (red-green color blindness) [CHAR LIMIT=45] -->
- <string name="daltonizer_mode_protanomaly_title">Green-red</string>
+ <string name="daltonizer_mode_protanomaly_title">Protanomaly</string>
<!-- Title shown for tritanomaly (blue-yellow color blindness) [CHAR LIMIT=45] -->
- <string name="daltonizer_mode_tritanomaly_title">Blue-yellow</string>
+ <string name="daltonizer_mode_tritanomaly_title">Tritanomaly</string>
<!-- Summary shown for deuteranomaly (red-green color blindness) [CHAR LIMIT=45] -->
- <string name="daltonizer_mode_deuteranomaly_summary">Deuteranomaly</string>
+ <string name="daltonizer_mode_deuteranomaly_summary">Red-green</string>
<!-- Summary shown for protanomaly (red-green color blindness) [CHAR LIMIT=45] -->
- <string name="daltonizer_mode_protanomaly_summary">Protanomaly</string>
+ <string name="daltonizer_mode_protanomaly_summary">Red-green</string>
<!-- Summary shown for tritanomaly (blue-yellow color blindness) [CHAR LIMIT=45] -->
- <string name="daltonizer_mode_tritanomaly_summary">Tritanomaly</string>
+ <string name="daltonizer_mode_tritanomaly_summary">Blue-yellow</string>
<!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] -->
<plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay">
@@ -7145,6 +7151,8 @@
<string name="help_url_magnification" translatable="false"></string>
<string name="help_url_color_correction" translatable="false"></string>
<string name="help_url_autoclick" translatable="false"></string>
+ <!-- Help URL, Accessibility caption preferences [DO NOT TRANSLATE] -->
+ <string name="help_url_caption" translatable="false"></string>
<string name="help_url_system_dashboard" translatable="false"></string>
<string name="help_url_double_tap_screen" translatable="false"></string>
<string name="help_url_account_detail" translatable="false"></string>
@@ -7213,7 +7221,7 @@
contacts support advanced calling features, such as video calling. [CHAR LIMIT=50]-->
<string name="contact_discovery_opt_in_title">Contact discovery</string>
<!-- Summary of a preference determining whether or not the user has enabled contact discovery.
- [CHAR LIMIT=100] -->
+ [CHAR LIMIT=110] -->
<string name="contact_discovery_opt_in_summary">Allows your carrier to discover which calling features your contacts support.</string>
<!-- Title of the dialog shown when the user tries to enable Contact Discovery.
[CHAR LIMIT=50] -->
@@ -7341,8 +7349,6 @@
<string name="color_orange">Orange</string>
<!-- Purple label. [CHAR LIMIT=40] -->
<string name="color_purple">Purple</string>
- <!-- Pink label. [CHAR LIMIT=40] -->
- <string name="color_pink">Pink</string>
<!-- Message informing the user that no SIM card is inserted [CHAR LIMIT=60] -->
<string name="sim_no_inserted_msg">No SIM cards inserted</string>
<!-- SIM status title [CHAR LIMIT=40] -->
@@ -8922,6 +8928,9 @@
<!-- [CHAR LIMIT=100] Zen mode settings: Allow apps to bypass DND title-->
<string name="zen_mode_bypassing_apps_title">App exceptions</string>
+ <!-- [CHAR LIMIT=120] Zen mode settings: No apps are bypassing DND -->
+ <string name="zen_mode_bypassing_apps_subtext_none">No apps can override Do Not Disturb</string>
+
<!-- [CHAR LIMIT=120] Zen mode settings: Allow apps to bypass DND -->
<plurals name="zen_mode_bypassing_apps_subtext">
<item quantity="zero">No apps can override Do Not Disturb</item>
@@ -9312,7 +9321,10 @@
<string name="assist_and_voice_input_title">Assist & voice input</string>
<!-- Title for Default Assist settings [CHAR LIMIT=30] -->
- <string name="default_assist_title">Assist app</string>
+ <string name="default_assist_title">Digital assistant app</string>
+
+ <!-- Title for Default Assist settings [CHAR LIMIT=30] -->
+ <string name="default_digital_assistant_title">Default digital assistant app</string>
<!-- [CHAR_LIMIT=45] Title of the security warning dialog for setting an assitant -->
<string name="assistant_security_warning_title">
@@ -11289,7 +11301,11 @@
<!-- Text for Network 1x [CHAR LIMIT=NONE] -->
<string name="network_1x" translatable="false">1x</string>
<!-- Text for Network global [CHAR LIMIT=NONE] -->
- <string name="network_global">Global</string>
+ <string name="network_global" translatable="false">Global</string>
+ <!-- Text for Network world mode CDMA LTE [CHAR LIMIT=NONE] -->
+ <string name="network_world_mode_cdma_lte" translatable="false">LTE / CDMA</string>
+ <!-- Text for Network world mode GSM LTE [CHAR LIMIT=NONE] -->
+ <string name="network_world_mode_gsm_lte" translatable="false">LTE / GSM / UMTS</string>
<!-- Available networks screen title/heading [CHAR LIMIT=NONE] -->
<string name="label_available">Available networks</string>
diff --git a/res/xml/accessibility_magnification_service_settings.xml b/res/xml/accessibility_magnification_service_settings.xml
index 74765b2..0548e5e 100644
--- a/res/xml/accessibility_magnification_service_settings.xml
+++ b/res/xml/accessibility_magnification_service_settings.xml
@@ -19,12 +19,14 @@
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="magnification_mode_screen"
android:persistent="false"
- android:title="@string/accessibility_magnification_service_settings_title">
+ android:title="@string/accessibility_magnification_service_settings_title"
+ settings:searchable="false">
<Preference
android:key="magnification_mode"
android:persistent="false"
android:title="@string/accessibility_magnification_mode_title"
+ settings:searchable="false"
settings:controller="com.android.settings.accessibility.MagnificationModePreferenceController" />
<SwitchPreference
@@ -33,6 +35,7 @@
android:title="@string/accessibility_magnification_enable_mode_title"
android:summaryOn="@string/accessibility_magnification_area_settings_full_screen_summary"
android:summaryOff="@string/accessibility_magnification_area_settings_window_screen_summary"
+ settings:searchable="false"
settings:controller="com.android.settings.accessibility.MagnificationEnablePreferenceController" />
</PreferenceScreen>
diff --git a/res/xml/accessibility_magnification_settings.xml b/res/xml/accessibility_magnification_settings.xml
index 6731dba..83ce79b 100644
--- a/res/xml/accessibility_magnification_settings.xml
+++ b/res/xml/accessibility_magnification_settings.xml
@@ -16,15 +16,18 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
- android:title="@string/accessibility_screen_magnification_title">
+ android:title="@string/accessibility_screen_magnification_title"
+ settings:searchable="false">
<Preference
android:fragment="com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment"
android:key="screen_magnification_gestures_preference_screen"
android:title="@string/accessibility_screen_magnification_gestures_title"
+ settings:searchable="false"
settings:controller="com.android.settings.accessibility.MagnificationGesturesPreferenceController"/>
<Preference
android:fragment="com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment"
android:key="screen_magnification_navbar_preference_screen"
android:title="@string/accessibility_screen_magnification_navbar_title"
+ settings:searchable="false"
settings:controller="com.android.settings.accessibility.MagnificationNavbarPreferenceController"/>
</PreferenceScreen>
diff --git a/res/xml/captioning_settings.xml b/res/xml/captioning_settings.xml
index c8cb46c..2a709f2 100644
--- a/res/xml/captioning_settings.xml
+++ b/res/xml/captioning_settings.xml
@@ -18,25 +18,31 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
- android:title="@string/accessibility_captioning_title" >
+ android:persistent="false"
+ android:title="@string/accessibility_captioning_title">
<SwitchPreference
android:key="captioning_preference_switch"
+ android:persistent="false"
+ android:summary="@string/accessibility_caption_master_switch_summary"
android:title="@string/accessibility_caption_master_switch_title" />
<Preference
+ android:fragment="com.android.settings.accessibility.CaptionAppearanceFragment"
android:key="captioning_caption_appearance"
- android:title="@string/captioning_caption_appearance_title"
- android:summary="@string/captioning_caption_appearance_summary"
- android:fragment="com.android.settings.accessibility.CaptionAppearanceFragment" />
+ android:persistent="false"
+ android:title="@string/captioning_caption_appearance_title" />
<Preference
+ android:fragment="com.android.settings.accessibility.CaptionMoreOptionsFragment"
android:key="captioning_more_options"
- android:title="@string/captioning_more_options_title"
- android:fragment="com.android.settings.accessibility.CaptionMoreOptionsFragment" />
+ android:persistent="false"
+ android:title="@string/captioning_more_options_title" />
<com.android.settingslib.widget.FooterPreference
+ android:persistent="false"
+ android:selectable="false"
android:title="@string/accessibility_caption_preference_summary"
- android:selectable="false" />
+ settings:searchable="false"/>
</PreferenceScreen>
diff --git a/res/xml/conversation_list_settings.xml b/res/xml/conversation_list_settings.xml
index 1d6b13c..5b9f0c4 100644
--- a/res/xml/conversation_list_settings.xml
+++ b/res/xml/conversation_list_settings.xml
@@ -27,11 +27,6 @@
<Preference
android:key="behavior"
android:summary="@string/important_conversation_behavior_summary"/>
- <SwitchPreference
- android:key="important_bubble"
- android:title="@string/important_bubble"
- android:icon="@drawable/ic_create_bubble"
- settings:controller="com.android.settings.notification.app.ImportantConversationBubblePreferenceController"/>
<!-- Important conversations added here -->
<PreferenceCategory
android:key="important_conversations_list"
diff --git a/res/xml/manage_assist.xml b/res/xml/manage_assist.xml
index ef0f696..3430c05 100644
--- a/res/xml/manage_assist.xml
+++ b/res/xml/manage_assist.xml
@@ -19,12 +19,12 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="manage_assist_screen"
- android:title="@string/assist_and_voice_input_title"
+ android:title="@string/default_assist_title"
settings:keywords="@string/keywords_assist_input">
<com.android.settings.widget.GearPreference
android:key="default_assist"
- android:title="@string/default_assist_title"
+ android:title="@string/default_digital_assistant_title"
android:summary="@string/summary_placeholder" />
<Preference
diff --git a/src/com/android/settings/IccLockSettings.java b/src/com/android/settings/IccLockSettings.java
index b906a73..6bb75a5 100644
--- a/src/com/android/settings/IccLockSettings.java
+++ b/src/com/android/settings/IccLockSettings.java
@@ -123,6 +123,7 @@
// @see android.widget.Toast$TN
private static final long LONG_DURATION_TIMEOUT = 7000;
+ private int mSlotId;
private int mSubId;
private TelephonyManager mTelephonyManager;
@@ -219,6 +220,7 @@
Bundle savedInstanceState) {
final int numSims = mProxySubscriptionMgr.getActiveSubscriptionInfoCountMax();
+ mSlotId = 0;
if (numSims > 1) {
final View view = inflater.inflate(R.layout.icc_lock_tabs, container, false);
final ViewGroup prefs_container = (ViewGroup) view.findViewById(R.id.prefs_container);
@@ -244,7 +246,8 @@
? getContext().getString(R.string.sim_editor_title, i + 1)
: subInfo.getDisplayName())));
}
- final SubscriptionInfo sir = getActiveSubscriptionInfoForSimSlotIndex(subInfoList, 0);
+ final SubscriptionInfo sir = getActiveSubscriptionInfoForSimSlotIndex(
+ subInfoList, mSlotId);
mSubId = sir.getSubscriptionId();
if (savedInstanceState != null && savedInstanceState.containsKey(CURRENT_TAB)) {
@@ -266,7 +269,7 @@
final List<SubscriptionInfo> subInfoList =
mProxySubscriptionMgr.getActiveSubscriptionsInfo();
- final SubscriptionInfo sir = getActiveSubscriptionInfoForSimSlotIndex(subInfoList, 0);
+ final SubscriptionInfo sir = getActiveSubscriptionInfoForSimSlotIndex(subInfoList, mSlotId);
mSubId = sir.getSubscriptionId();
if (mPinDialog != null) {
@@ -653,9 +656,9 @@
private OnTabChangeListener mTabListener = new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
- final int slotId = Integer.parseInt(tabId);
+ mSlotId = Integer.parseInt(tabId);
final SubscriptionInfo sir = getActiveSubscriptionInfoForSimSlotIndex(
- mProxySubscriptionMgr.getActiveSubscriptionsInfo(), slotId);
+ mProxySubscriptionMgr.getActiveSubscriptionsInfo(), mSlotId);
// The User has changed tab; update the body.
updatePreferences();
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 315cba1..e8eb8ba 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -888,6 +888,27 @@
}
/**
+ * Return {@code true} if the supplied package is the device owner or profile owner of a
+ * given user.
+ *
+ * @param devicePolicyManager used to check whether it is device owner and profile owner app
+ * @param packageName package to check about
+ * @param userId the if of the relevant user
+ */
+ public static boolean isProfileOrDeviceOwner(DevicePolicyManager devicePolicyManager,
+ String packageName, int userId) {
+ if ((devicePolicyManager.getDeviceOwnerUserId() == userId)
+ && devicePolicyManager.isDeviceOwnerApp(packageName)) {
+ return true;
+ }
+ final ComponentName cn = devicePolicyManager.getProfileOwnerAsUser(userId);
+ if (cn != null && cn.getPackageName().equals(packageName)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
* Return the resource id to represent the install status for an app
*/
@StringRes
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index 23b0f1a..1e3944e 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -76,8 +76,6 @@
// Index of the first preference in a preference category.
private static final int FIRST_PREFERENCE_IN_CATEGORY_INDEX = -1;
- private static final String EMPTY_STRING = "";
-
// Preference categories
private static final String CATEGORY_SCREEN_READER = "screen_reader_category";
private static final String CATEGORY_AUDIO_AND_CAPTIONS = "audio_and_captions_category";
@@ -195,6 +193,10 @@
for (AccessibilityShortcutController.ToggleableFrameworkFeatureInfo feature : features) {
shortcutFeatureKeys.add(feature.getSettingKey());
}
+
+ // Observe changes from accessibility selection menu
+ shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_BUTTON_TARGET_COMPONENT);
+ shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE);
mSettingsContentObserver = new SettingsContentObserver(mHandler, shortcutFeatureKeys) {
@Override
public void onChange(boolean selfChange, Uri uri) {
@@ -268,16 +270,24 @@
return context.getText(R.string.accessibility_summary_state_stopped);
}
- final CharSequence serviceSummary = info.loadSummary(context.getPackageManager());
-
+ final CharSequence serviceState;
final int fragmentType = AccessibilityUtil.getAccessibilityServiceFragmentType(info);
if (fragmentType == AccessibilityServiceFragmentType.INVISIBLE) {
- return TextUtils.isEmpty(serviceSummary) ? EMPTY_STRING : serviceSummary;
+ final ComponentName componentName = new ComponentName(
+ info.getResolveInfo().serviceInfo.packageName,
+ info.getResolveInfo().serviceInfo.name);
+ final boolean shortcutEnabled = AccessibilityUtil.getUserShortcutTypesFromSettings(
+ context, componentName) != AccessibilityUtil.UserShortcutType.EMPTY;
+ serviceState = shortcutEnabled
+ ? context.getText(R.string.accessibility_summary_shortcut_enabled)
+ : context.getText(R.string.accessibility_summary_shortcut_disabled);
+ } else {
+ serviceState = serviceEnabled
+ ? context.getText(R.string.accessibility_summary_state_enabled)
+ : context.getText(R.string.accessibility_summary_state_disabled);
}
- final CharSequence serviceState = serviceEnabled
- ? context.getText(R.string.accessibility_summary_state_enabled)
- : context.getText(R.string.accessibility_summary_state_disabled);
+ final CharSequence serviceSummary = info.loadSummary(context.getPackageManager());
final String stateSummaryCombo = context.getString(
R.string.preference_summary_default_combination,
serviceState, serviceSummary);
@@ -485,6 +495,8 @@
mCategoryToPrefCategoryMap.get(CATEGORY_DISPLAY);
experimentalCategory.removePreference(mToggleInversionPreference);
experimentalCategory.removePreference(mDisplayDaltonizerPreferenceScreen);
+ mDisplayMagnificationPreferenceScreen.setSummary(
+ ToggleScreenMagnificationPreferenceFragment.getServiceSummary(getContext()));
mDisplayDaltonizerPreferenceScreen.setOrder(
mDisplayMagnificationPreferenceScreen.getOrder() + 1);
mDisplayDaltonizerPreferenceScreen.setSummary(AccessibilityUtil.getSummary(
diff --git a/src/com/android/settings/accessibility/CaptionAppearanceFragment.java b/src/com/android/settings/accessibility/CaptionAppearanceFragment.java
index d31465e..394f50a 100644
--- a/src/com/android/settings/accessibility/CaptionAppearanceFragment.java
+++ b/src/com/android/settings/accessibility/CaptionAppearanceFragment.java
@@ -407,6 +407,11 @@
return true;
}
+ @Override
+ public int getHelpResource() {
+ return R.string.help_url_caption;
+ }
+
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.captioning_appearance);
}
diff --git a/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java b/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java
index a785424..8e5c003 100644
--- a/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java
+++ b/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java
@@ -83,6 +83,11 @@
return true;
}
+ @Override
+ public int getHelpResource() {
+ return R.string.help_url_caption;
+ }
+
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.captioning_more_options);
}
diff --git a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java b/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
index 0034fe6..43539fd 100644
--- a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
+++ b/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
@@ -32,6 +32,8 @@
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.search.SearchIndexable;
+import com.google.common.primitives.Floats;
+
import java.util.ArrayList;
import java.util.List;
@@ -52,6 +54,7 @@
private Preference mMoreOptions;
private final List<Preference> mPreferenceList = new ArrayList<>();
+ private float[] mFontSizeValuesArray;
@Override
public int getMetricsCategory() {
@@ -66,8 +69,14 @@
addPreferencesFromResource(R.xml.captioning_settings);
initializeAllPreferences();
- updateAllPreferences();
installUpdateListeners();
+ initFontSizeValuesArray();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ updateAllPreferences();
}
private void initializeAllPreferences() {
@@ -83,8 +92,19 @@
mSwitch.setOnPreferenceChangeListener(this);
}
+ private void initFontSizeValuesArray() {
+ final String[] fontSizeValuesStrArray = getPrefContext().getResources().getStringArray(
+ R.array.captioning_font_size_selector_values);
+ final int length = fontSizeValuesStrArray.length;
+ mFontSizeValuesArray = new float[length];
+ for (int i = 0; i < length; ++i) {
+ mFontSizeValuesArray[i] = Float.parseFloat(fontSizeValuesStrArray[i]);
+ }
+ }
+
private void updateAllPreferences() {
mSwitch.setChecked(mCaptioningManager.isEnabled());
+ mTextAppearance.setSummary(geTextAppearanceSummary(getPrefContext()));
}
@Override
@@ -98,6 +118,21 @@
return true;
}
+ @Override
+ public int getHelpResource() {
+ return R.string.help_url_caption;
+ }
+
+ private CharSequence geTextAppearanceSummary(Context context) {
+ final String[] fontSizeSummaries = context.getResources().getStringArray(
+ R.array.captioning_font_size_selector_titles);
+
+ final float fontSize = mCaptioningManager.getFontScale();
+ final int idx = Floats.indexOf(mFontSizeValuesArray, fontSize);
+ final String fontSizeSummary = fontSizeSummaries[idx == /* not exist */ -1 ? 0 : idx];
+ return context.getString(R.string.captioning_caption_appearance_summary, fontSizeSummary);
+ }
+
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.captioning_settings);
}
diff --git a/src/com/android/settings/accessibility/MagnificationPreferenceController.java b/src/com/android/settings/accessibility/MagnificationPreferenceController.java
index 7ac7bef..5b5236e 100644
--- a/src/com/android/settings/accessibility/MagnificationPreferenceController.java
+++ b/src/com/android/settings/accessibility/MagnificationPreferenceController.java
@@ -22,7 +22,6 @@
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
-import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
public class MagnificationPreferenceController extends BasePreferenceController {
@@ -40,8 +39,7 @@
@Override
public CharSequence getSummary() {
- return mContext.getResources().getText(
- R.string.accessibility_screen_magnification_navbar_title);
+ return ToggleScreenMagnificationPreferenceFragment.getServiceSummary(mContext);
}
@Override
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index 292e931..4c2945a 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -624,4 +624,17 @@
}
return shortcutTypes;
}
+
+ /**
+ * Gets the service summary of magnification.
+ *
+ * @param context The current context.
+ */
+ public static CharSequence getServiceSummary(Context context) {
+ // Get the user shortcut type from settings provider.
+ final int uerShortcutType = getUserShortcutTypeFromSettings(context);
+ return (uerShortcutType != AccessibilityUtil.UserShortcutType.EMPTY)
+ ? context.getText(R.string.accessibility_summary_shortcut_enabled)
+ : context.getText(R.string.accessibility_summary_shortcut_disabled);
+ }
}
diff --git a/src/com/android/settings/applications/AppStateManageExternalStorageBridge.java b/src/com/android/settings/applications/AppStateManageExternalStorageBridge.java
index 7933062..1132137 100644
--- a/src/com/android/settings/applications/AppStateManageExternalStorageBridge.java
+++ b/src/com/android/settings/applications/AppStateManageExternalStorageBridge.java
@@ -69,7 +69,7 @@
/**
* Returns the MANAGE_EXTERNAL_STORAGE {@link AppStateAppOpsBridge.PermissionState} object
- * associated with the given package and user.
+ * associated with the given package and UID.
*/
public PermissionState getManageExternalStoragePermState(String pkg, int uid) {
return getPermissionInfo(pkg, uid);
diff --git a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
index 1b14402..19627ff 100644
--- a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
@@ -25,8 +25,8 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
-import android.content.om.OverlayManager;
import android.content.om.OverlayInfo;
+import android.content.om.OverlayManager;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
@@ -393,11 +393,19 @@
enabled = false;
}
- // We don't allow uninstalling DO/PO on *any* users, because if it's a system app,
+ // We don't allow uninstalling DO/PO on *any* users if it's a system app, because
// "uninstall" is actually "downgrade to the system version + disable", and "downgrade"
// will clear data on all users.
- if (Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mPackageInfo.packageName)) {
- enabled = false;
+ if (Utils.isSystemPackage(mActivity.getResources(), mPm, mPackageInfo)) {
+ if (Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mPackageInfo.packageName)) {
+ enabled = false;
+ }
+ // We allow uninstalling if the calling user is not a DO/PO and if it's not a system app,
+ // because this will not have device-wide consequences.
+ } else {
+ if (Utils.isProfileOrDeviceOwner(mDpm, mPackageInfo.packageName, mUserId)) {
+ enabled = false;
+ }
}
// Don't allow uninstalling the device provisioning package.
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index 54af16f..8a37473 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -38,6 +38,7 @@
import android.app.settings.SettingsEnums;
import android.app.usage.IUsageStatsManager;
import android.compat.annotation.ChangeId;
+import android.compat.annotation.LoggingOnly;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
@@ -186,6 +187,7 @@
* requested such permission.
*/
@ChangeId
+ @LoggingOnly
private static final long CHANGE_RESTRICT_SAW_INTENT = 135920175L;
// sort order
diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
index 3e534b3..9afb2b4 100644
--- a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
+++ b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
@@ -457,12 +457,20 @@
private void showPolicyTransparencyDialogIfRequired() {
if (isManagedProfile(mDeviceAdmin)
&& mDeviceAdmin.getComponent().equals(mDPM.getProfileOwner())) {
- if (hasBaseCantRemoveProfileRestriction()) {
- // If DISALLOW_REMOVE_MANAGED_PROFILE is set by the system, there's no
- // point showing a dialog saying it's disabled by an admin.
- return;
+ EnforcedAdmin enforcedAdmin;
+ ComponentName adminComponent = mDPM.getProfileOwnerAsUser(getUserId());
+ if (adminComponent != null && mDPM.isOrganizationOwnedDeviceWithManagedProfile()) {
+ enforcedAdmin = new EnforcedAdmin(adminComponent,
+ UserManager.DISALLOW_REMOVE_MANAGED_PROFILE, UserHandle.of(getUserId()));
+ } else {
+ // Todo (b/151061366): Investigate this case to check if it is still viable.
+ if (hasBaseCantRemoveProfileRestriction()) {
+ // If DISALLOW_REMOVE_MANAGED_PROFILE is set by the system, there's no
+ // point showing a dialog saying it's disabled by an admin.
+ return;
+ }
+ enforcedAdmin = getAdminEnforcingCantRemoveProfile();
}
- EnforcedAdmin enforcedAdmin = getAdminEnforcingCantRemoveProfile();
if (enforcedAdmin != null) {
RestrictedLockUtils.sendShowAdminSupportDetailsIntent(
DeviceAdminAdd.this,
@@ -640,7 +648,8 @@
final EnforcedAdmin admin = getAdminEnforcingCantRemoveProfile();
final boolean hasBaseRestriction = hasBaseCantRemoveProfileRestriction();
- if (admin != null && !hasBaseRestriction) {
+ if ((hasBaseRestriction && mDPM.isOrganizationOwnedDeviceWithManagedProfile())
+ || (admin != null && !hasBaseRestriction)) {
findViewById(R.id.restricted_icon).setVisibility(View.VISIBLE);
}
mActionButton.setEnabled(admin == null && !hasBaseRestriction);
diff --git a/src/com/android/settings/biometrics/BiometricEnrollActivity.java b/src/com/android/settings/biometrics/BiometricEnrollActivity.java
index fa01977..a0aa6db 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollActivity.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollActivity.java
@@ -47,7 +47,6 @@
public class BiometricEnrollActivity extends InstrumentedActivity {
private static final String TAG = "BiometricEnrollActivity";
- private static final int REQUEST_ENROLL = 1;
public static final String EXTRA_SKIP_INTRO = "skip_intro";
@@ -72,7 +71,6 @@
if (result == BiometricManager.BIOMETRIC_SUCCESS
|| result == BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE) {
Log.e(TAG, "Unexpected result: " + result);
- setResult(RESULT_CANCELED);
finish();
return;
}
@@ -96,6 +94,8 @@
}
if (intent != null) {
+ intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+
if (this instanceof InternalActivity) {
// Propagate challenge and user Id from ChooseLockGeneric.
final byte[] token = getIntent()
@@ -107,18 +107,10 @@
intent.putExtra(Intent.EXTRA_USER_ID, userId);
}
- startActivityForResult(intent, REQUEST_ENROLL);
- } else {
- Log.e(TAG, "Intent was null, finishing with RESULT_CANCELED");
- setResult(RESULT_CANCELED);
+ startActivity(intent);
finish();
- }
- }
-
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == REQUEST_ENROLL) {
- setResult(RESULT_OK);
+ } else {
+ Log.e(TAG, "Intent was null, finishing");
finish();
}
}
diff --git a/src/com/android/settings/bluetooth/OWNERS b/src/com/android/settings/bluetooth/OWNERS
index 2c8d8b7..5e716e1 100644
--- a/src/com/android/settings/bluetooth/OWNERS
+++ b/src/com/android/settings/bluetooth/OWNERS
@@ -1,8 +1,6 @@
# Default reviewers for this and subdirectories.
-asargent@google.com
-eisenbach@google.com
-jackqdyulei@google.com
-pavlin@google.com
+hughchen@google.com
+timhypeng@google.com
siyuanh@google.com
# Emergency approvers in case the above are not available
diff --git a/src/com/android/settings/development/OWNERS b/src/com/android/settings/development/OWNERS
deleted file mode 100644
index ecdc4df..0000000
--- a/src/com/android/settings/development/OWNERS
+++ /dev/null
@@ -1,9 +0,0 @@
-# Default reviewers for this and subdirectories.
-edgarwang@google.com
-emilychuang@google.com
-rafftsai@google.com
-tmfang@google.com
-
-
-# Emergency approvers in case the above are not available
-zhfan@google.com
diff --git a/src/com/android/settings/fuelgauge/OWNERS b/src/com/android/settings/fuelgauge/OWNERS
index 5b26c46..4e5ee0e 100644
--- a/src/com/android/settings/fuelgauge/OWNERS
+++ b/src/com/android/settings/fuelgauge/OWNERS
@@ -1,6 +1,3 @@
# Default reviewers for this and subdirectories.
-dehboxturtle@google.com
-jackqdyulei@google.com
-
-# Emergency approvers in case the above are not available
-asapperstein@google.com
\ No newline at end of file
+millchen@google.com
+tmfang@google.com
diff --git a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
index 05531d6..5f1e955 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
@@ -120,6 +120,11 @@
swipeBackground.setVisibility(View.GONE);
}
sliceLiveData.observe(mLifecycleOwner, slice -> {
+ if (slice == null) {
+ // The logic handling this case is in OnErrorListener. Adding this check is to
+ // prevent from NPE when it calls .hasHint().
+ return;
+ }
if (slice.hasHint(HINT_ERROR)) {
Log.w(TAG, "Slice has HINT_ERROR, skipping rendering. uri=" + slice.getUri());
mSliceLiveDataMap.get(slice.getUri()).removeObservers(mLifecycleOwner);
diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
index d633b39..c0df851 100644
--- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
@@ -28,10 +28,8 @@
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
-import android.text.TextUtils;
import android.util.Log;
-import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
@@ -43,6 +41,7 @@
import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
/**
@@ -53,19 +52,14 @@
ListPreference.OnPreferenceChangeListener, LifecycleObserver {
private static final String LOG_TAG = "EnabledNetworkMode";
- private CarrierConfigManager mCarrierConfigManager;
private ContentObserver mPreferredNetworkModeObserver;
- private TelephonyManager mTelephonyManager;
- private boolean mIsGlobalCdma;
- @VisibleForTesting
- boolean mShow4GForLTE;
private Preference mPreference;
- @VisibleForTesting
- boolean mDisplay5gList = false;
+ private TelephonyManager mTelephonyManager;
+ private CarrierConfigManager mCarrierConfigManager;
+ private PreferenceEntriesBuilder mBuilder;
public EnabledNetworkModePreferenceController(Context context, String key) {
super(context, key);
- mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
mPreferredNetworkModeObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
@Override
public void onChange(boolean selfChange) {
@@ -101,7 +95,8 @@
@OnLifecycleEvent(ON_START)
public void onStart() {
mContext.getContentResolver().registerContentObserver(
- Settings.Global.getUriFor(Settings.Global.PREFERRED_NETWORK_MODE + mSubId), true,
+ Settings.Global.getUriFor(Settings.Global.PREFERRED_NETWORK_MODE + mSubId),
+ true,
mPreferredNetworkModeObserver);
}
@@ -120,444 +115,539 @@
public void updateState(Preference preference) {
super.updateState(preference);
final ListPreference listPreference = (ListPreference) preference;
- final int networkMode = getPreferredNetworkMode();
- Log.d(LOG_TAG, "updateState networkMode: " + networkMode);
- updatePreferenceEntries(listPreference);
- updatePreferenceValueAndSummary(listPreference, networkMode);
+ mBuilder.setPreferenceEntries();
+ mBuilder.setPreferenceValueAndSummary();
+
+ listPreference.setEntries(mBuilder.getEntries());
+ listPreference.setEntryValues(mBuilder.getEntryValues());
+ listPreference.setValue(Integer.toString(mBuilder.getSelectedEntryValue()));
+ listPreference.setSummary(mBuilder.getSummary());
}
@Override
public boolean onPreferenceChange(Preference preference, Object object) {
final int newPreferredNetworkMode = Integer.parseInt((String) object);
+ final ListPreference listPreference = (ListPreference) preference;
if (mTelephonyManager.setPreferredNetworkTypeBitmask(
MobileNetworkUtils.getRafFromNetworkType(newPreferredNetworkMode))) {
- updatePreferenceValueAndSummary((ListPreference) preference, newPreferredNetworkMode);
+ mBuilder.setPreferenceValueAndSummary(newPreferredNetworkMode);
+ listPreference.setValue(Integer.toString(mBuilder.getSelectedEntryValue()));
+ listPreference.setSummary(mBuilder.getSummary());
return true;
}
-
return false;
}
public void init(Lifecycle lifecycle, int subId) {
mSubId = subId;
- final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
.createForSubscriptionId(mSubId);
+ mCarrierConfigManager = mContext.getSystemService(CarrierConfigManager.class);
+ mBuilder = new PreferenceEntriesBuilder(mContext, mSubId);
- mIsGlobalCdma = mTelephonyManager.isLteCdmaEvdoGsmWcdmaEnabled()
- && carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
- mShow4GForLTE = carrierConfig != null
- ? carrierConfig.getBoolean(
- CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL)
- : false;
-
- final long supportedRadioBitmask = mTelephonyManager.getSupportedRadioAccessFamily();
- final boolean is5gEnabledByCarrier = (mTelephonyManager.getAllowedNetworkTypes()
- & TelephonyManager.NETWORK_TYPE_BITMASK_NR) > 0;
- mDisplay5gList = checkSupportedRadioBitmask(
- supportedRadioBitmask, mTelephonyManager.NETWORK_TYPE_BITMASK_NR)
- && is5gEnabledByCarrier;
lifecycle.addObserver(this);
}
- private int getPreferredNetworkMode() {
- long preferredNetworkBitMask = MobileNetworkUtils.getRafFromNetworkType(
- Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
- TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE));
- return MobileNetworkUtils.getNetworkTypeFromRaf((int)
- (preferredNetworkBitMask & mTelephonyManager.getAllowedNetworkTypes()));
- }
+ private final static class PreferenceEntriesBuilder {
+ private CarrierConfigManager mCarrierConfigManager;
+ private Context mContext;
+ private TelephonyManager mTelephonyManager;
- private void updatePreferenceEntries(ListPreference preference) {
- final int phoneType = mTelephonyManager.getPhoneType();
- final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
- if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) {
- final int lteForced = android.provider.Settings.Global.getInt(
- mContext.getContentResolver(),
- android.provider.Settings.Global.LTE_SERVICE_FORCED + mSubId,
- 0);
- final int settingsNetworkMode = getPreferredNetworkMode();
- if (mTelephonyManager.isLteCdmaEvdoGsmWcdmaEnabled()) {
- if (lteForced == 0) {
- preference.setEntries(
- R.array.enabled_networks_cdma_choices);
- preference.setEntryValues(
- R.array.enabled_networks_cdma_values);
- } else {
- switch (settingsNetworkMode) {
- case TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO:
- case TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO:
- case TelephonyManagerConstants.NETWORK_MODE_EVDO_NO_CDMA:
- preference.setEntries(
- R.array.enabled_networks_cdma_no_lte_choices);
- preference.setEntryValues(
- R.array.enabled_networks_cdma_no_lte_values);
- break;
- case TelephonyManagerConstants.NETWORK_MODE_GLOBAL:
- case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
- case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
- case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
- preference.setEntries(
- R.array.enabled_networks_cdma_only_lte_choices);
- preference.setEntryValues(
- R.array.enabled_networks_cdma_only_lte_values);
- break;
- default:
- preference.setEntries(
- R.array.enabled_networks_cdma_choices);
- preference.setEntryValues(
- R.array.enabled_networks_cdma_values);
- break;
- }
- }
- }
- } else if (phoneType == TelephonyManager.PHONE_TYPE_GSM) {
- if (MobileNetworkUtils.isTdscdmaSupported(mContext, mSubId)) {
- preference.setEntries(
- R.array.enabled_networks_tdscdma_choices);
- preference.setEntryValues(
- R.array.enabled_networks_tdscdma_values);
- } else if (carrierConfig != null
- && !carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)
- && !carrierConfig.getBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL)) {
- preference.setEntries(R.array.enabled_networks_except_gsm_lte_choices);
- preference.setEntryValues(R.array.enabled_networks_except_gsm_lte_values);
- } else if (carrierConfig != null
- && !carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)) {
- int select = mShow4GForLTE
- ? R.array.enabled_networks_except_gsm_4g_choices
- : R.array.enabled_networks_except_gsm_choices;
- preference.setEntries(select);
- preference.setEntryValues(
- R.array.enabled_networks_except_gsm_values);
- } else if (carrierConfig != null
- && !carrierConfig.getBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL)) {
- preference.setEntries(
- R.array.enabled_networks_except_lte_choices);
- preference.setEntryValues(
- R.array.enabled_networks_except_lte_values);
- } else if (mIsGlobalCdma) {
- preference.setEntries(R.array.enabled_networks_cdma_choices);
- preference.setEntryValues(R.array.enabled_networks_cdma_values);
- } else {
- int select = mShow4GForLTE ? R.array.enabled_networks_4g_choices
- : R.array.enabled_networks_choices;
- preference.setEntries(select);
- preference.setEntryValues(R.array.enabled_networks_values);
- }
- }
- //TODO(b/117881708): figure out what world mode is, then we can optimize code. Otherwise
- // I prefer to keep this old code
- if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
- preference.setEntries(
- R.array.preferred_network_mode_choices_world_mode);
- preference.setEntryValues(
- R.array.preferred_network_mode_values_world_mode);
+ private boolean mAllowed5gNetworkType;
+ private boolean mIsGlobalCdma;
+ private boolean mIs5gEntryDisplayed;
+ private boolean mShow4gForLTE;
+ private boolean mSupported5gRadioAccessFamily;
+ private int mSelectedEntry;
+ private int mSubId;
+ private String mSummary;
+
+ private List<String> mEntries = new ArrayList<>();
+ private List<Integer> mEntriesValue = new ArrayList<>();
+
+ enum EnabledNetworks {
+ ENABLED_NETWORKS_UNKNOWN,
+ ENABLED_NETWORKS_CDMA_CHOICES,
+ ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES,
+ ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES,
+ ENABLED_NETWORKS_TDSCDMA_CHOICES,
+ ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES,
+ ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES,
+ ENABLED_NETWORKS_EXCEPT_GSM_CHOICES,
+ ENABLED_NETWORKS_EXCEPT_LTE_CHOICES,
+ ENABLED_NETWORKS_4G_CHOICES,
+ ENABLED_NETWORKS_CHOICES,
+ PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE
}
- if (mDisplay5gList) {
- add5gListItem(preference);
- }
- }
+ PreferenceEntriesBuilder(Context context, int subId) {
+ this.mContext = context;
+ this.mSubId = subId;
- @VisibleForTesting
- boolean checkSupportedRadioBitmask(long supportedRadioBitmask, long targetBitmask) {
- Log.d(LOG_TAG, "supportedRadioBitmask: " + supportedRadioBitmask);
- if ((targetBitmask & supportedRadioBitmask) > 0) {
- return true;
- }
- return false;
- }
+ mCarrierConfigManager = mContext.getSystemService(CarrierConfigManager.class);
+ mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
+ .createForSubscriptionId(mSubId);
- /***
- * Generate preferred network choices list for 5G
- *
- * @string/enabled_networks_cdma_choices
- * Before | After
- * @string/network_lte , 8 |@string/network_5G + @string/network_recommended , 25
- * @string/network_3G , 4 |@string/network_lte_pure, 8
- * @string/network_1x , 5 |@string/network_3G , 4
- * @string/network_global, 10|@string/network_1x , 5
- * |@string/network_global , 27
- *
- * @string/enabled_networks_cdma_only_lte_choices
- * Before | After
- * @string/network_lte , 8 |@string/network_5G + @string/network_recommended , 25
- * @string/network_global, 10|@string/network_lte_pure, 8
- * |@string/network_global , 27
- *
- * @string/enabled_networks_tdscdma_choices
- * Before | After
- * @string/network_lte, 22|@string/network_5G + @string/network_recommended , 33
- * @string/network_3G , 18|@string/network_lte_pure, 22
- * @string/network_2G , 1 |@string/network_3G , 18
- * |@string/network_2G , 1
- *
- * @string/enabled_networks_except_gsm_4g_choices
- * Before | After
- * @string/network_4G , 9 |@string/network_5G + @string/network_recommended , 26
- * @string/network_3G , 0 |@string/network_4G_pure , 9
- * |@string/network_3G , 0
- *
- * @string/enabled_networks_except_gsm_choices
- * Before | After
- * @string/network_lte, 9 |@string/network_5G + @string/network_recommended , 26
- * @string/network_3G , 0 |@string/network_lte_pure, 9
- * |@string/network_3G , 0
- *
- * @string/enabled_networks_4g_choices
- * Before | After
- * @string/network_4G , 9 |@string/network_5G + @string/network_recommended , 26
- * @string/network_3G , 0 |@string/network_4G_pure , 9
- * @string/network_2G , 1 |@string/network_3G , 0
- * |@string/network_2G , 1
- *
- * @string/enabled_networks_choices
- * Before | After
- * @string/network_lte, 9 |@string/network_5G + @string/network_recommended , 26
- * @string/network_3G , 0 |@string/network_lte_pure, 9
- * @string/network_2G , 1 |@string/network_3G , 0
- * |@string/network_2G , 1
- *
- * @string/preferred_network_mode_choices_world_mode
- * Before | After
- * "Global" , 10|@string/network_global , 27
- * "LTE / CDMA" , 8 |"LTE / CDMA" , 8
- * "LTE / GSM / UMTS" , 9 |"LTE / GSM / UMTS" , 9
- */
- @VisibleForTesting
- void add5gListItem(ListPreference preference) {
- final CharSequence[] oldEntries = preference.getEntries();
- final CharSequence[] oldEntryValues = preference.getEntryValues();
- List<CharSequence> newEntries = new ArrayList<>();
- List<CharSequence> newEntryValues = new ArrayList<>();
-
- CharSequence oldEntry;
- CharSequence oldEntryValue;
- CharSequence new5gEntry;
- CharSequence new5gEntryValue;
-
- for (int i = 0; i < oldEntries.length; i++) {
- oldEntry = oldEntries[i];
- oldEntryValue = oldEntryValues[i];
- new5gEntry = "";
- new5gEntryValue = "";
-
- if (mContext.getString(R.string.network_lte).equals(oldEntry)) {
- oldEntry = mContext.getString(R.string.network_lte_pure);
- new5gEntry = mContext.getString(R.string.network_5G)
- + mContext.getString(R.string.network_recommended);
- new5gEntryValue = transformLteEntryValueTo5gEntryValue(oldEntryValue);
- } else if (mContext.getString(R.string.network_4G).equals(oldEntry)) {
- oldEntry = mContext.getString(R.string.network_4G_pure);
- new5gEntry = mContext.getString(R.string.network_5G)
- + mContext.getString(R.string.network_recommended);
- new5gEntryValue = transformLteEntryValueTo5gEntryValue(oldEntryValue);
- } else if (mContext.getString(R.string.network_global).equals(oldEntry)) {
- //oldEntry: network_global
- //oldEntryValue: TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA
- oldEntryValue = Integer.toString(
- TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
- }
-
- if (!TextUtils.isEmpty(new5gEntry)) {
- newEntries.add(new5gEntry);
- newEntryValues.add(new5gEntryValue);
- }
- newEntries.add(oldEntry);
- newEntryValues.add(oldEntryValue);
+ final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
+ mAllowed5gNetworkType = checkSupportedRadioBitmask(
+ mTelephonyManager.getAllowedNetworkTypes(),
+ TelephonyManager.NETWORK_TYPE_BITMASK_NR);
+ mSupported5gRadioAccessFamily = checkSupportedRadioBitmask(
+ mTelephonyManager.getSupportedRadioAccessFamily(),
+ TelephonyManager.NETWORK_TYPE_BITMASK_NR);
+ mIsGlobalCdma = mTelephonyManager.isLteCdmaEvdoGsmWcdmaEnabled()
+ && carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
+ mShow4gForLTE = carrierConfig != null && carrierConfig.getBoolean(
+ CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL);
}
- preference.setEntries(newEntries.toArray(new CharSequence[newEntries.size()]));
- preference.setEntryValues(newEntryValues.toArray(new CharSequence[newEntryValues.size()]));
- }
-
- /**
- * transform LTE network mode to 5G network mode.
- *
- * @param networkMode an LTE network mode without 5G.
- * @return the corresponding network mode with 5G.
- */
- private CharSequence transformLteEntryValueTo5gEntryValue(CharSequence networkMode) {
- int networkModeInt = Integer.valueOf(networkMode.toString());
- return Integer.toString(addNrToLteNetworkType(networkModeInt));
- }
- private int addNrToLteNetworkType(int networkType) {
- switch(networkType) {
- case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA:
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA:
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_WCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA:
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_WCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
- default:
- return networkType; // not LTE
- }
- }
-
- /**
- * Sets the display string for the network mode choice and selects the corresponding item
- *
- * @param preference ListPreference for selecting the preferred network mode.
- * @param networkMode the current network mode. The current mode might not be an option in the
- * choice list. The nearest choice is selected instead
- */
- private void updatePreferenceValueAndSummary(ListPreference preference, int networkMode) {
- preference.setValue(Integer.toString(networkMode));
- switch (networkMode) {
- case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_WCDMA:
- case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
- case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM:
- preference.setValue(
- Integer.toString(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA));
- preference.setSummary(R.string.network_3G);
- break;
- case TelephonyManagerConstants.NETWORK_MODE_WCDMA_ONLY:
- case TelephonyManagerConstants.NETWORK_MODE_GSM_UMTS:
- case TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF:
- if (!mIsGlobalCdma) {
- preference.setValue(Integer.toString(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF));
- preference.setSummary(R.string.network_3G);
- } else {
- preference.setValue(Integer.toString(TelephonyManagerConstants
- .NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
- preference.setSummary(R.string.network_global);
- }
- break;
- case TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY:
- if (!mIsGlobalCdma) {
- preference.setValue(
- Integer.toString(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY));
- preference.setSummary(R.string.network_2G);
- } else {
- preference.setValue(
- Integer.toString(TelephonyManagerConstants
- .NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
- preference.setSummary(R.string.network_global);
- }
- break;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA:
- if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
- preference.setSummary(
- R.string.preferred_network_mode_lte_gsm_umts_summary);
+ void setPreferenceEntries() {
+ switch (getEnabledNetworkType()) {
+ case ENABLED_NETWORKS_CDMA_CHOICES:
+ add5gEntry(addNrToLteNetworkType(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO));
+ addLteEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO);
+ add3gEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO);
+ add1xEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO);
+ addGlobalEntry();
break;
- }
- case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
- case TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA:
- if (!mIsGlobalCdma) {
- preference.setValue(
- Integer.toString(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
- preference.setSummary(
- mShow4GForLTE ? R.string.network_4G : R.string.network_lte);
- } else {
- preference.setValue(
- Integer.toString(TelephonyManagerConstants
- .NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
- preference.setSummary(R.string.network_global);
- }
- break;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
- if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
- preference.setSummary(
- R.string.preferred_network_mode_lte_cdma_summary);
- } else {
- preference.setValue(
- Integer.toString(TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO));
- preference.setSummary(
- mDisplay5gList ? R.string.network_lte_pure : R.string.network_lte);
- }
- break;
- case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
- preference.setValue(Integer.toString(TelephonyManagerConstants
- .NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA));
- preference.setSummary(R.string.network_3G);
- break;
- case TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO:
- case TelephonyManagerConstants.NETWORK_MODE_EVDO_NO_CDMA:
- case TelephonyManagerConstants.NETWORK_MODE_GLOBAL:
- preference.setValue(
- Integer.toString(TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO));
- preference.setSummary(R.string.network_3G);
- break;
- case TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO:
- preference.setValue(
- Integer.toString(TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO));
- preference.setSummary(R.string.network_1x);
- break;
- case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_ONLY:
- preference.setValue(
- Integer.toString(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_ONLY));
- preference.setSummary(R.string.network_3G);
- break;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
- case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
- case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA:
- case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
- case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
- case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
- if (MobileNetworkUtils.isTdscdmaSupported(mContext, mSubId)) {
- preference.setValue(
- Integer.toString(TelephonyManagerConstants
- .NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA));
- preference.setSummary(
- mDisplay5gList ? R.string.network_lte_pure : R.string.network_lte);
- } else {
- preference.setValue(
- Integer.toString(TelephonyManagerConstants
- .NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
- if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA
- || mIsGlobalCdma
- || MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
- preference.setSummary(R.string.network_global);
+ case ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES:
+ add3gEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO);
+ add1xEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO);
+ break;
+ case ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES:
+ addLteEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO);
+ addGlobalEntry();
+ break;
+ case ENABLED_NETWORKS_TDSCDMA_CHOICES:
+ add5gEntry(addNrToLteNetworkType(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA));
+ addLteEntry(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA);
+ add3gEntry(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
+ add2gEntry(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY);
+ break;
+ case ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES:
+ add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF);
+ break;
+ case ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES:
+ add5gEntry(addNrToLteNetworkType(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
+ add4gEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
+ add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF);
+ break;
+ case ENABLED_NETWORKS_EXCEPT_GSM_CHOICES:
+ add5gEntry(addNrToLteNetworkType(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
+ addLteEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
+ add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF);
+ break;
+ case ENABLED_NETWORKS_EXCEPT_LTE_CHOICES:
+ add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF);
+ add2gEntry(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY);
+ break;
+ case ENABLED_NETWORKS_4G_CHOICES:
+ add5gEntry(addNrToLteNetworkType(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
+ add4gEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
+ add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF);
+ add2gEntry(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY);
+ break;
+ case ENABLED_NETWORKS_CHOICES:
+ add5gEntry(addNrToLteNetworkType(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
+ addLteEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
+ add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF);
+ add2gEntry(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY);
+ break;
+ case PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE:
+ addGlobalEntry();
+ addCustomEntry(mContext.getString(R.string.network_world_mode_cdma_lte),
+ TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO);
+ addCustomEntry(mContext.getString(R.string.network_world_mode_gsm_lte),
+ TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
+ break;
+ default:
+ throw new IllegalArgumentException("Not supported enabled network types.");
+ }
+ }
+
+ private int getPreferredNetworkMode() {
+ return Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
+ TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE);
+ }
+
+ private EnabledNetworks getEnabledNetworkType() {
+ EnabledNetworks enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_UNKNOWN;
+ final int phoneType = mTelephonyManager.getPhoneType();
+ final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
+
+ if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) {
+ final int lteForced = android.provider.Settings.Global.getInt(
+ mContext.getContentResolver(),
+ android.provider.Settings.Global.LTE_SERVICE_FORCED + mSubId,
+ 0);
+ final int settingsNetworkMode = getPreferredNetworkMode();
+ if (mTelephonyManager.isLteCdmaEvdoGsmWcdmaEnabled()) {
+ if (lteForced == 0) {
+ enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_CDMA_CHOICES;
} else {
- if (mDisplay5gList) {
- preference.setSummary(mShow4GForLTE
- ? R.string.network_4G_pure : R.string.network_lte_pure);
- } else {
- preference.setSummary(mShow4GForLTE
- ? R.string.network_4G : R.string.network_lte);
+ switch (settingsNetworkMode) {
+ case TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO:
+ case TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO:
+ case TelephonyManagerConstants.NETWORK_MODE_EVDO_NO_CDMA:
+ enabledNetworkType =
+ EnabledNetworks.ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES;
+ break;
+ case TelephonyManagerConstants.NETWORK_MODE_GLOBAL:
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
+ enabledNetworkType =
+ EnabledNetworks.ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES;
+ break;
+ default:
+ enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_CDMA_CHOICES;
+ break;
}
}
}
- break;
- case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO:
- case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
- preference.setValue(Integer.toString(networkMode));
- preference.setSummary(mContext.getString(R.string.network_5G)
- + mContext.getString(R.string.network_recommended));
- break;
- case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA:
- preference.setValue(
- Integer.toString(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA));
- if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA
- || mIsGlobalCdma
- || MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
- preference.setSummary(R.string.network_global);
+ } else if (phoneType == TelephonyManager.PHONE_TYPE_GSM) {
+ if (MobileNetworkUtils.isTdscdmaSupported(mContext, mSubId)) {
+ enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_TDSCDMA_CHOICES;
+ } else if (carrierConfig != null
+ && !carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)
+ && !carrierConfig.getBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL)) {
+ enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES;
+ } else if (carrierConfig != null
+ && !carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)) {
+ enabledNetworkType = mShow4gForLTE
+ ? EnabledNetworks.ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES
+ : EnabledNetworks.ENABLED_NETWORKS_EXCEPT_GSM_CHOICES;
+ } else if (carrierConfig != null
+ && !carrierConfig.getBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL)) {
+ enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_EXCEPT_LTE_CHOICES;
+ } else if (mIsGlobalCdma) {
+ enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_CDMA_CHOICES;
} else {
- preference.setSummary(mContext.getString(R.string.network_5G)
- + mContext.getString(R.string.network_recommended));
+ enabledNetworkType = mShow4gForLTE ? EnabledNetworks.ENABLED_NETWORKS_4G_CHOICES
+ : EnabledNetworks.ENABLED_NETWORKS_CHOICES;
}
- break;
- default:
- preference.setSummary(
- mContext.getString(R.string.mobile_network_mode_error, networkMode));
+ }
+ //TODO(b/117881708): figure out what world mode is, then we can optimize code. Otherwise
+ // I prefer to keep this old code
+ if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
+ enabledNetworkType = EnabledNetworks.PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE;
+ }
+
+ Log.d(LOG_TAG, "enabledNetworkType: " + enabledNetworkType);
+ return enabledNetworkType;
}
+
+ /**
+ * Sets the display string for the network mode choice and selects the corresponding item
+ *
+ * @param networkMode the current network mode. The current mode might not be an option in
+ * the choice list. The nearest choice is selected instead
+ */
+ void setPreferenceValueAndSummary(int networkMode) {
+ setSelectedEntry(networkMode);
+ switch (networkMode) {
+ case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_WCDMA:
+ case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
+ case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM:
+ setSelectedEntry(
+ TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
+ setSummary(R.string.network_3G);
+ break;
+ case TelephonyManagerConstants.NETWORK_MODE_WCDMA_ONLY:
+ case TelephonyManagerConstants.NETWORK_MODE_GSM_UMTS:
+ case TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF:
+ if (!mIsGlobalCdma) {
+ setSelectedEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF);
+ setSummary(R.string.network_3G);
+ } else {
+ setSelectedEntry(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
+ setSummary(R.string.network_global);
+ }
+ break;
+ case TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY:
+ if (!mIsGlobalCdma) {
+ setSelectedEntry(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY);
+ setSummary(R.string.network_2G);
+ } else {
+ setSelectedEntry(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
+ setSummary(R.string.network_global);
+ }
+ break;
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA:
+ if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
+ setSummary(
+ R.string.preferred_network_mode_lte_gsm_umts_summary);
+ break;
+ }
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA:
+ if (!mIsGlobalCdma) {
+ setSelectedEntry(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
+ setSummary(
+ mShow4gForLTE ? R.string.network_4G : R.string.network_lte);
+ } else {
+ setSelectedEntry(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
+ setSummary(R.string.network_global);
+ }
+ break;
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
+ if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
+ setSummary(
+ R.string.preferred_network_mode_lte_cdma_summary);
+ } else {
+ setSelectedEntry(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO);
+ setSummary(is5gEntryDisplayed()
+ ? R.string.network_lte_pure : R.string.network_lte);
+ }
+ break;
+ case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
+ setSelectedEntry(
+ TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA);
+ setSummary(R.string.network_3G);
+ break;
+ case TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO:
+ case TelephonyManagerConstants.NETWORK_MODE_EVDO_NO_CDMA:
+ case TelephonyManagerConstants.NETWORK_MODE_GLOBAL:
+ setSelectedEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO);
+ setSummary(R.string.network_3G);
+ break;
+ case TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO:
+ setSelectedEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO);
+ setSummary(R.string.network_1x);
+ break;
+ case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_ONLY:
+ setSelectedEntry(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_ONLY);
+ setSummary(R.string.network_3G);
+ break;
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA:
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
+ if (MobileNetworkUtils.isTdscdmaSupported(mContext, mSubId)) {
+ setSelectedEntry(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA);
+ setSummary(is5gEntryDisplayed()
+ ? R.string.network_lte_pure : R.string.network_lte);
+ } else {
+ setSelectedEntry(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
+ if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA
+ || mIsGlobalCdma
+ || MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
+ setSummary(R.string.network_global);
+ } else {
+ if (is5gEntryDisplayed()) {
+ setSummary(mShow4gForLTE
+ ? R.string.network_4G_pure : R.string.network_lte_pure);
+ } else {
+ setSummary(mShow4gForLTE
+ ? R.string.network_4G : R.string.network_lte);
+ }
+ }
+ }
+ break;
+ case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO:
+ case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
+ setSelectedEntry(networkMode);
+ setSummary(mContext.getString(R.string.network_5G)
+ + mContext.getString(R.string.network_recommended));
+ break;
+ case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA:
+ setSelectedEntry(
+ TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
+ if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA
+ || mIsGlobalCdma
+ || MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
+ setSummary(R.string.network_global);
+ } else {
+ setSummary(mContext.getString(R.string.network_5G)
+ + mContext.getString(R.string.network_recommended));
+ }
+ break;
+ default:
+ setSummary(
+ mContext.getString(R.string.mobile_network_mode_error, networkMode));
+ }
+ }
+
+ /**
+ * Transform LTE network mode to 5G network mode.
+ *
+ * @param networkType an LTE network mode without 5G.
+ * @return the corresponding network mode with 5G.
+ */
+ private static int addNrToLteNetworkType(int networkType) {
+ switch(networkType) {
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
+ return TelephonyManagerConstants.NETWORK_MODE_NR_LTE;
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
+ return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO;
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA:
+ return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA;
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
+ return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA;
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA:
+ return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_WCDMA;
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA:
+ return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA;
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
+ return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM;
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
+ return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_WCDMA;
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
+ return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA;
+ case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
+ return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
+ default:
+ return networkType; // not LTE
+ }
+ }
+
+ private void setPreferenceValueAndSummary() {
+ setPreferenceValueAndSummary(getPreferredNetworkMode());
+ }
+
+ private boolean checkSupportedRadioBitmask(long supportedRadioBitmask, long targetBitmask) {
+ return (targetBitmask & supportedRadioBitmask) > 0;
+ }
+
+ /**
+ * Add 5G option. Only show the UI when device supported 5G and allowed 5G.
+ */
+ private void add5gEntry(int value) {
+ boolean isNRValue = value >= TelephonyManagerConstants.NETWORK_MODE_NR_ONLY;
+ if (mSupported5gRadioAccessFamily && mAllowed5gNetworkType && isNRValue) {
+ mEntries.add(mContext.getString(R.string.network_5G)
+ + mContext.getString(R.string.network_recommended));
+ mEntriesValue.add(value);
+ mIs5gEntryDisplayed = true;
+ } else {
+ Log.d(LOG_TAG, "Hide 5G option. "
+ + " supported5GRadioAccessFamily: " + mSupported5gRadioAccessFamily
+ + " allowed5GNetworkType: " + mAllowed5gNetworkType
+ + " isNRValue: " + isNRValue);
+ }
+ }
+
+ private void addGlobalEntry() {
+ Log.d(LOG_TAG, "addGlobalEntry. "
+ + " supported5GRadioAccessFamily: " + mSupported5gRadioAccessFamily
+ + " allowed5GNetworkType: " + mAllowed5gNetworkType);
+ mEntries.add(mContext.getString(R.string.network_global));
+ if (mSupported5gRadioAccessFamily & mAllowed5gNetworkType) {
+ mEntriesValue.add(
+ TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
+ } else {
+ mEntriesValue.add(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
+ }
+ }
+
+ /**
+ * Add LTE entry. If device supported 5G, show "LTE" instead of "LTE (recommended)".
+ */
+ private void addLteEntry(int value) {
+ if (mSupported5gRadioAccessFamily) {
+ mEntries.add(mContext.getString(R.string.network_lte_pure));
+ } else {
+ mEntries.add(mContext.getString(R.string.network_lte));
+ }
+ mEntriesValue.add(value);
+ }
+
+ /**
+ * Add 4G entry. If device supported 5G, show "4G" instead of "4G (recommended)".
+ */
+ private void add4gEntry(int value) {
+ if (mSupported5gRadioAccessFamily) {
+ mEntries.add(mContext.getString(R.string.network_4G_pure));
+ } else {
+ mEntries.add(mContext.getString(R.string.network_4G));
+ }
+ mEntriesValue.add(value);
+ }
+
+ private void add3gEntry(int value) {
+ mEntries.add(mContext.getString(R.string.network_3G));
+ mEntriesValue.add(value);
+ }
+
+ private void add2gEntry(int value) {
+ mEntries.add(mContext.getString(R.string.network_2G));
+ mEntriesValue.add(value);
+ }
+
+ private void add1xEntry(int value) {
+ mEntries.add(mContext.getString(R.string.network_1x));
+ mEntriesValue.add(value);
+ }
+
+ private void addCustomEntry(String name, int value) {
+ mEntries.add(name);
+ mEntriesValue.add(value);
+ }
+
+ private String[] getEntries() {
+ return mEntries.toArray(new String[0]);
+ }
+
+ private String[] getEntryValues() {
+ Integer intArr[] = mEntriesValue.toArray(new Integer[0]);
+ return Arrays.stream(intArr)
+ .map(String::valueOf)
+ .toArray(String[]::new);
+ }
+
+ private int getSelectedEntryValue() {
+ return mSelectedEntry;
+ }
+
+ private void setSelectedEntry(int value) {
+ boolean isInEntriesValue = mEntriesValue.stream()
+ .anyMatch(v -> v == value);
+
+ if (isInEntriesValue) {
+ mSelectedEntry = value;
+ } else if (mEntriesValue.size() > 0) {
+ // if the value isn't in entriesValue, select on the first one.
+ mSelectedEntry = mEntriesValue.get(0);
+ } else {
+ Log.e(LOG_TAG, "entriesValue is empty");
+ }
+ }
+
+ private String getSummary() {
+ return mSummary;
+ }
+
+ private void setSummary(int summaryResId) {
+ setSummary(mContext.getString(summaryResId));
+ }
+
+ private void setSummary(String summary) {
+ this.mSummary = summary;
+ }
+
+ private boolean is5gEntryDisplayed() {
+ return mIs5gEntryDisplayed;
+ }
+
}
}
diff --git a/src/com/android/settings/notification/app/ImportantConversationBubblePreferenceController.java b/src/com/android/settings/notification/app/ImportantConversationBubblePreferenceController.java
deleted file mode 100644
index f6f14aa..0000000
--- a/src/com/android/settings/notification/app/ImportantConversationBubblePreferenceController.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2020 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.app;
-
-import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
-import static android.provider.Settings.Secure.BUBBLE_IMPORTANT_CONVERSATIONS;
-
-import android.content.Context;
-import android.provider.Settings;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.core.TogglePreferenceController;
-
-public class ImportantConversationBubblePreferenceController extends TogglePreferenceController
- implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener {
-
- private static final String TAG = "ImpConvBubPrefContr";
- @VisibleForTesting
- static final int ON = 1;
- @VisibleForTesting
- static final int OFF = 0;
-
-
- public ImportantConversationBubblePreferenceController(Context context, String preferenceKey) {
- super(context, preferenceKey);
- }
-
- private boolean isGloballyEnabled() {
- return Settings.Global.getInt(mContext.getContentResolver(),
- NOTIFICATION_BUBBLES, OFF) == ON;
- }
-
- @Override
- public int getAvailabilityStatus() {
- return isGloballyEnabled() ? AVAILABLE : DISABLED_DEPENDENT_SETTING;
- }
-
- @Override
- public boolean isSliceable() {
- return false;
- }
-
- @Override
- public boolean isChecked() {
- return Settings.Secure.getInt(mContext.getContentResolver(),
- BUBBLE_IMPORTANT_CONVERSATIONS, ON) == ON;
- }
-
- @Override
- public boolean setChecked(boolean isChecked) {
- return Settings.Secure.putInt(mContext.getContentResolver(),
- BUBBLE_IMPORTANT_CONVERSATIONS, isChecked ? ON : OFF);
- }
-}
diff --git a/src/com/android/settings/notification/zen/ZenModeAllBypassingAppsPreferenceController.java b/src/com/android/settings/notification/zen/ZenModeAllBypassingAppsPreferenceController.java
index b3630a0..9484a09 100644
--- a/src/com/android/settings/notification/zen/ZenModeAllBypassingAppsPreferenceController.java
+++ b/src/com/android/settings/notification/zen/ZenModeAllBypassingAppsPreferenceController.java
@@ -105,9 +105,7 @@
ApplicationsState.AppFilter filter = ApplicationsState.FILTER_ALL_ENABLED;
List<ApplicationsState.AppEntry> apps = mAppSession.rebuild(filter,
ApplicationsState.ALPHA_COMPARATOR);
- if (apps != null) {
- updateNotificationChannelList(apps);
- }
+ updateNotificationChannelList(apps);
}
@VisibleForTesting
@@ -116,6 +114,8 @@
return;
}
+ boolean showEmptyState = true;
+
List<Preference> channelsBypassingDnd = new ArrayList<>();
for (ApplicationsState.AppEntry entry : apps) {
String pkg = entry.info.packageName;
@@ -148,6 +148,7 @@
return true;
});
channelsBypassingDnd.add(pref);
+ showEmptyState = false;
}
mPreferenceScreen.removeAll();
@@ -156,6 +157,11 @@
mPreferenceScreen.addPreference(prefToAdd);
}
}
+ if (showEmptyState) {
+ Preference pref = new Preference(mPrefContext);
+ pref.setTitle(R.string.zen_mode_bypassing_apps_subtext_none);
+ mPreferenceScreen.addPreference(pref);
+ }
}
}
diff --git a/src/com/android/settings/notification/zen/ZenModeBypassingAppsPreferenceController.java b/src/com/android/settings/notification/zen/ZenModeBypassingAppsPreferenceController.java
index 9ef9380..a93fa1b 100644
--- a/src/com/android/settings/notification/zen/ZenModeBypassingAppsPreferenceController.java
+++ b/src/com/android/settings/notification/zen/ZenModeBypassingAppsPreferenceController.java
@@ -9,7 +9,7 @@
public class ZenModeBypassingAppsPreferenceController extends AbstractZenModePreferenceController {
- protected static final String KEY = "zen_mode_bypassing_apps";
+ protected static final String KEY = "zen_mode_behavior_apps";
private NotificationBackend mNotificationBackend = new NotificationBackend();
public ZenModeBypassingAppsPreferenceController(Context context, Lifecycle lifecycle) {
@@ -18,13 +18,16 @@
@Override
public boolean isAvailable() {
- return mNotificationBackend.getNumAppsBypassingDnd(UserHandle.getCallingUserId()) != 0;
+ return true;
}
@Override
public String getSummary() {
final int channelsBypassing =
mNotificationBackend.getNumAppsBypassingDnd(UserHandle.getCallingUserId());
+ if (channelsBypassing == 0) {
+ return mContext.getResources().getString(R.string.zen_mode_bypassing_apps_subtext_none);
+ }
return mContext.getResources().getQuantityString(R.plurals.zen_mode_bypassing_apps_subtext,
channelsBypassing, channelsBypassing);
}
diff --git a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
index c0f7e1f..4843736 100644
--- a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
+++ b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
@@ -32,6 +32,7 @@
import android.graphics.drawable.Icon;
import android.graphics.drawable.LayerDrawable;
import android.net.ConnectivityManager;
+import android.util.FeatureFlagUtils;
import android.util.Log;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
@@ -45,6 +46,8 @@
import com.android.settings.R;
import com.android.settings.Settings.TetherSettingsActivity;
+import com.android.settings.Settings.WifiSettings2Activity;
+import com.android.settings.Settings.WifiSettingsActivity;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -187,6 +190,15 @@
Log.d(TAG, "Skipping non-system app: " + info.activityInfo);
continue;
}
+ if (FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_WIFITRACKER2)) {
+ if (info.activityInfo.name.endsWith(WifiSettingsActivity.class.getSimpleName())) {
+ continue;
+ }
+ } else {
+ if (info.activityInfo.name.endsWith(WifiSettings2Activity.class.getSimpleName())) {
+ continue;
+ }
+ }
shortcuts.add(info);
}
Collections.sort(shortcuts, SHORTCUT_COMPARATOR);
diff --git a/src/com/android/settings/users/OWNERS b/src/com/android/settings/users/OWNERS
deleted file mode 100644
index 59096be..0000000
--- a/src/com/android/settings/users/OWNERS
+++ /dev/null
@@ -1,6 +0,0 @@
-# Default reviewers for this and subdirectories.
-dling@google.com
-yamasani@google.com
-zhfan@google.com
-
-# Emergency approvers in case the above are not available
\ No newline at end of file
diff --git a/src/com/android/settings/widget/VideoPreference.java b/src/com/android/settings/widget/VideoPreference.java
index 6356378..fe91669 100644
--- a/src/com/android/settings/widget/VideoPreference.java
+++ b/src/com/android/settings/widget/VideoPreference.java
@@ -39,17 +39,12 @@
public class VideoPreference extends Preference {
private static final String TAG = "VideoPreference";
- private static final int DEFAULT_BACKGROUND_RESOURCE_ID = -1;
private final Context mContext;
@VisibleForTesting
AnimationController mAnimationController;
@VisibleForTesting
boolean mAnimationAvailable;
- @VisibleForTesting
- LinearLayout mAnimationView;
- @VisibleForTesting
- int mBackgroundResId = DEFAULT_BACKGROUND_RESOURCE_ID;
private float mAspectRatio = 1.0f;
private int mPreviewId;
@@ -120,7 +115,6 @@
mVideo = (TextureView) holder.findViewById(R.id.video_texture_view);
mPreviewImage = (ImageView) holder.findViewById(R.id.video_preview_image);
mPlayButton = (ImageView) holder.findViewById(R.id.video_play_button);
- mAnimationView = (LinearLayout) holder.itemView;
final AspectRatioFrameLayout layout = (AspectRatioFrameLayout) holder.findViewById(
R.id.video_container);
@@ -130,9 +124,6 @@
layout.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, mHeight));
}
- if (mBackgroundResId != DEFAULT_BACKGROUND_RESOURCE_ID) {
- mAnimationView.setBackgroundResource(mBackgroundResId);
- }
if (mAnimationController != null) {
mAnimationController.attachView(mVideo, mPreviewImage, mPlayButton);
}
@@ -213,14 +204,6 @@
}
/**
- * Set the background color of the video preference
- * @param resId resource id of color
- */
- public void setBackgroundColor(int resId) {
- mBackgroundResId = resId;
- }
-
- /**
* Handle animation operations.
*/
interface AnimationController {
diff --git a/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java
index 03ea121..a4a51dc 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java
@@ -18,18 +18,22 @@
import static com.android.settings.AllInOneTetherSettings.DEDUP_POSTFIX;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.net.wifi.SoftApConfiguration;
import android.text.TextUtils;
import android.util.FeatureFlagUtils;
+import androidx.annotation.VisibleForTesting;
import androidx.preference.EditTextPreference;
import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.core.FeatureFlags;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.ValidatedEditTextPreference;
import com.android.settings.wifi.WifiUtils;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import java.util.UUID;
@@ -40,9 +44,19 @@
private String mPassword;
+ private final MetricsFeatureProvider mMetricsFeatureProvider;
+
+ @VisibleForTesting
+ WifiTetherPasswordPreferenceController(Context context, OnTetherConfigUpdateListener listener,
+ MetricsFeatureProvider provider) {
+ super(context, listener);
+ mMetricsFeatureProvider = provider;
+ }
+
public WifiTetherPasswordPreferenceController(Context context,
OnTetherConfigUpdateListener listener) {
super(context, listener);
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
}
@Override
@@ -69,6 +83,10 @@
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
+ if (!TextUtils.equals(mPassword, (String) newValue)) {
+ mMetricsFeatureProvider.action(mContext,
+ SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_PASSWORD);
+ }
mPassword = (String) newValue;
updatePasswordDisplay((EditTextPreference) mPreference);
mListener.onTetherConfigUpdated(this);
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java
index a4289a6..9070d44 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java
@@ -22,6 +22,7 @@
import android.content.Context;
import android.content.Intent;
import android.net.wifi.SoftApConfiguration;
+import android.text.TextUtils;
import android.util.FeatureFlagUtils;
import android.util.Log;
@@ -48,6 +49,15 @@
private final MetricsFeatureProvider mMetricsFeatureProvider;
+ // This constructor is used for testing.
+ @VisibleForTesting
+ WifiTetherSSIDPreferenceController(Context context, OnTetherConfigUpdateListener listener,
+ MetricsFeatureProvider provider) {
+ super(context, listener);
+ mWifiDeviceNameTextValidator = new WifiDeviceNameTextValidator();
+ mMetricsFeatureProvider = provider;
+ }
+
public WifiTetherSSIDPreferenceController(Context context,
OnTetherConfigUpdateListener listener) {
super(context, listener);
@@ -93,6 +103,10 @@
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
+ if (!TextUtils.equals(mSSID, (String) newValue)) {
+ mMetricsFeatureProvider.action(mContext,
+ SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_NAME);
+ }
mSSID = (String) newValue;
updateSsidDisplay((EditTextPreference) preference);
mListener.onTetherConfigUpdated(this);
diff --git a/tests/robotests/src/com/android/settings/TetherSettingsTest.java b/tests/robotests/src/com/android/settings/TetherSettingsTest.java
index 17c8fe8..3c38c51d 100644
--- a/tests/robotests/src/com/android/settings/TetherSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/TetherSettingsTest.java
@@ -30,9 +30,12 @@
import android.net.wifi.WifiManager;
import android.os.UserHandle;
import android.os.UserManager;
+import android.util.FeatureFlagUtils;
import androidx.preference.Preference;
+import com.android.settings.core.FeatureFlags;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -72,6 +75,7 @@
@Test
public void testTetherNonIndexableKeys_tetherAvailable_keysNotReturned() {
+ FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, false);
// To let TetherUtil.isTetherAvailable return true, select one of the combinations
setupIsTetherAvailable(true);
@@ -106,6 +110,7 @@
@Test
public void testTetherNonIndexableKeys_usbAvailable_usbKeyNotReturned() {
+ FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, false);
// We can ignore the condition of Utils.isMonkeyRunning()
// In normal case, monkey and robotest should not execute at the same time
when(mConnectivityManager.getTetherableUsbRegexs()).thenReturn(new String[]{"dummyRegex"});
@@ -128,6 +133,7 @@
@Test
public void testTetherNonIndexableKeys_bluetoothAvailable_bluetoothKeyNotReturned() {
+ FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, false);
when(mConnectivityManager.getTetherableBluetoothRegexs())
.thenReturn(new String[]{"dummyRegex"});
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
index 3528fb6..98d2918 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
@@ -130,14 +130,17 @@
}
@Test
- public void getServiceSummary_invisibleType_showsDefaultSummary() {
+ public void getServiceSummary_invisibleType_shortcutDisabled_showsOffSummary() {
setInvisibleFragmentType(mServiceInfo);
doReturn(DEFAULT_SUMMARY).when(mServiceInfo).loadSummary(any());
final CharSequence summary = AccessibilitySettings.getServiceSummary(mContext,
mServiceInfo, SERVICE_ENABLED);
- assertThat(summary).isEqualTo(DEFAULT_SUMMARY);
+ assertThat(summary).isEqualTo(
+ mContext.getString(R.string.preference_summary_default_combination,
+ mContext.getString(R.string.accessibility_summary_shortcut_disabled),
+ DEFAULT_SUMMARY));
}
@Test
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
index ca2a800..044b698 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
@@ -36,7 +36,6 @@
import static org.mockito.Mockito.when;
import android.app.ActivityManager;
-import android.app.Application;
import android.app.admin.DevicePolicyManager;
import android.app.settings.SettingsEnums;
import android.content.Context;
@@ -51,8 +50,6 @@
import android.util.ArraySet;
import android.view.View;
-import androidx.preference.PreferenceScreen;
-
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.core.InstrumentedPreferenceFragment;
@@ -277,7 +274,8 @@
}
@Test
- public void updateUninstallButton_isProfileOrDeviceOwner_setButtonDisable() {
+ public void updateUninstallButton_isSystemAndIsProfileOrDeviceOwner_setButtonDisable() {
+ mAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
doReturn(true).when(mDpm).isDeviceOwnerAppOnAnyUser(anyString());
mController.updateUninstallButton();
@@ -286,6 +284,36 @@
}
@Test
+ public void updateUninstallButton_isSystemAndIsNotProfileOrDeviceOwner_setButtonEnabled() {
+ mAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
+ doReturn(false).when(mDpm).isDeviceOwnerAppOnAnyUser(anyString());
+
+ mController.updateUninstallButton();
+
+ verify(mButtonPrefs).setButton2Enabled(true);
+ }
+
+ @Test
+ public void updateUninstallButton_isNotSystemAndIsProfileOrDeviceOwner_setButtonDisable() {
+ doReturn(0).when(mDpm).getDeviceOwnerUserId();
+ doReturn(true).when(mDpm).isDeviceOwnerApp(anyString());
+
+ mController.updateUninstallButton();
+
+ verify(mButtonPrefs).setButton2Enabled(false);
+ }
+
+ @Test
+ public void updateUninstallButton_isNotSystemAndIsNotProfileOrDeviceOwner_setButtonEnabled() {
+ doReturn(10).when(mDpm).getDeviceOwnerUserId();
+ doReturn(false).when(mDpm).isDeviceOwnerApp(anyString());
+
+ mController.updateUninstallButton();
+
+ verify(mButtonPrefs).setButton2Enabled(true);
+ }
+
+ @Test
public void updateUninstallButton_isDeviceProvisioningApp_setButtonDisable() {
doReturn(true).when(mDpm).isDeviceOwnerAppOnAnyUser(anyString());
when(mSettingsActivity.getResources().getString(anyInt())).thenReturn(PACKAGE_NAME);
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/ManageExternalStorageDetailsTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/ManageExternalStorageDetailsTest.java
index ed85c01..88c2471 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/ManageExternalStorageDetailsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/ManageExternalStorageDetailsTest.java
@@ -64,13 +64,11 @@
private ManageExternalStorageDetails mFragment;
- private final HashMap<String, Integer> mPkgToOpModeMap = new HashMap<>();
private final HashMap<Integer, Integer> mUidToOpModeMap = new HashMap<>();
@Before
public void setUp() {
// Reset the global trackers
- mPkgToOpModeMap.clear();
mUidToOpModeMap.clear();
//Start the mockin'
@@ -106,8 +104,7 @@
// Verify that mAppOpsManager was called to allow the app-op
verify(mAppOpsManager, times(1))
- .setMode(anyInt(), anyInt(), nullable(String.class), anyInt());
- assertThat(mPkgToOpModeMap).containsExactly(mockPkgName, AppOpsManager.MODE_ALLOWED);
+ .setUidMode(anyInt(), anyInt(), anyInt());
assertThat(mUidToOpModeMap).containsExactly(mockUid, AppOpsManager.MODE_ALLOWED);
// Verify the mSwitchPref was enabled
@@ -141,8 +138,7 @@
// Verify that mAppOpsManager was called to deny the app-op
verify(mAppOpsManager, times(1))
- .setMode(anyInt(), anyInt(), nullable(String.class), anyInt());
- assertThat(mPkgToOpModeMap).containsExactly(mockPkgName, AppOpsManager.MODE_ERRORED);
+ .setUidMode(anyInt(), anyInt(), anyInt());
assertThat(mUidToOpModeMap).containsExactly(mockUid, AppOpsManager.MODE_ERRORED);
// Verify the mSwitchPref was enabled
@@ -164,33 +160,32 @@
}
private void mockAppOpsOperations() {
- Answer<Void> answerSetMode = invocation -> {
+ Answer<Void> answerSetUidMode = invocation -> {
int code = invocation.getArgument(0);
int uid = invocation.getArgument(1);
- String packageName = invocation.getArgument(2);
- int mode = invocation.getArgument(3);
+ int mode = invocation.getArgument(2);
if (code != AppOpsManager.OP_MANAGE_EXTERNAL_STORAGE) {
return null;
}
- mPkgToOpModeMap.put(packageName, mode);
mUidToOpModeMap.put(uid, mode);
return null;
};
- doAnswer(answerSetMode).when(mAppOpsManager)
- .setMode(anyInt(), anyInt(), nullable(String.class), anyInt());
+ doAnswer(answerSetUidMode).when(mAppOpsManager)
+ .setUidMode(anyInt(), anyInt(), anyInt());
Answer<PermissionState> answerPermState = invocation -> {
String packageName = invocation.getArgument(0);
+ int uid = invocation.getArgument(1);
PermissionState res = new PermissionState(packageName, null);
res.permissionDeclared = false;
- if (mPkgToOpModeMap.containsKey(packageName)) {
+ if (mUidToOpModeMap.containsKey(uid)) {
res.permissionDeclared = true;
- res.appOpMode = mPkgToOpModeMap.get(packageName);
+ res.appOpMode = mUidToOpModeMap.get(uid);
}
return res;
};
diff --git a/tests/robotests/src/com/android/settings/applications/assist/AssistFlashScreenPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/assist/AssistFlashScreenPreferenceControllerTest.java
index 8392ac1..1e6faa1 100644
--- a/tests/robotests/src/com/android/settings/applications/assist/AssistFlashScreenPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/assist/AssistFlashScreenPreferenceControllerTest.java
@@ -41,7 +41,6 @@
import com.android.settingslib.core.lifecycle.Lifecycle;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
@@ -81,7 +80,6 @@
}
@Test
- @Ignore
@Config(shadows = {ShadowSecureSettings.class})
public void isAvailable_hasAssistantAndAllowDisclosure_shouldReturnTrue() {
ReflectionHelpers.setField(mController, "mContext", mMockContext);
@@ -93,7 +91,6 @@
}
@Test
- @Ignore
@Config(shadows = {ShadowSecureSettings.class})
public void isAvailable_hasAssistantAndDisallowDisclosure_shouldReturnTrue() {
ReflectionHelpers.setField(mController, "mContext", mMockContext);
@@ -112,7 +109,6 @@
}
@Test
- @Ignore
@Config(shadows = {ShadowSecureSettings.class})
public void onResume_shouldUpdatePreference() {
Settings.Secure.putString(mContext.getContentResolver(),
diff --git a/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java
index 7de830c..3e46027 100644
--- a/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java
@@ -44,7 +44,6 @@
import com.android.settingslib.applications.DefaultAppInfo;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
@@ -95,7 +94,6 @@
}
@Test
- @Ignore
@Config(shadows = {ShadowSecureSettings.class})
public void getDefaultAppInfo_hasDefaultAssist_shouldReturnKey() {
final String flattenKey = "com.android.settings/assist";
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java
index dfacd81..9ec7f0b 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java
@@ -45,7 +45,6 @@
import com.android.settingslib.applications.DefaultAppInfo;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
@@ -107,7 +106,6 @@
}
@Test
- @Ignore
public void setAndGetDefaultAppKey_shouldUpdateDefaultAutoFill() {
mPicker.onAttach((Context) mActivity);
diff --git a/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java
index 83a4880..101297b 100644
--- a/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java
@@ -49,9 +49,9 @@
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
-import org.robolectric.shadows.androidx.fragment.FragmentController;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowUserManager;
+import org.robolectric.shadows.androidx.fragment.FragmentController;
import org.robolectric.util.ReflectionHelpers;
import java.util.List;
@@ -133,7 +133,8 @@
@Config(shadows = {
ShadowPictureColorModePreferenceController.class,
ShadowAdbPreferenceController.class,
- ShadowClearAdbKeysPreferenceController.class
+ ShadowClearAdbKeysPreferenceController.class,
+ ShadowWirelessDebuggingPreferenceController.class
})
public void searchIndex_pageEnabled_shouldNotAddKeysToNonIndexable() {
final Context appContext = RuntimeEnvironment.application;
@@ -325,4 +326,12 @@
return true;
}
}
+
+ @Implements(WirelessDebuggingPreferenceController.class)
+ public static class ShadowWirelessDebuggingPreferenceController {
+ @Implementation
+ protected boolean isAvailable() {
+ return true;
+ }
+ }
}
diff --git a/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java
index 2f3aecc..57729ea 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java
@@ -44,7 +44,6 @@
import androidx.preference.ListPreference;
import androidx.preference.PreferenceScreen;
-import com.android.settings.R;
import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -61,6 +60,9 @@
private static final int SUB_ID = 2;
public static final String KEY = "enabled_network";
+ private static final long ALLOWED_ALL_NETWORK_TYPE = -1;
+ private static final long DISABLED_5G_NETWORK_TYPE = ~TelephonyManager.NETWORK_TYPE_BITMASK_NR;
+
@Mock
private TelephonyManager mTelephonyManager;
@Mock
@@ -92,19 +94,20 @@
doReturn(mContext).when(mContext).createPackageContext(anyString(), anyInt());
doReturn(mServiceState).when(mTelephonyManager).getServiceState();
mPersistableBundle = new PersistableBundle();
+ doReturn(mPersistableBundle).when(mCarrierConfigManager).getConfig();
doReturn(mPersistableBundle).when(mCarrierConfigManager).getConfigForSubId(SUB_ID);
-
mPreference = new ListPreference(mContext);
- mPreference.setEntries(R.array.enabled_networks_choices);
- mPreference.setEntryValues(R.array.enabled_networks_values);
mController = new EnabledNetworkModePreferenceController(mContext, KEY);
+ mockAllowedNetworkTypes(ALLOWED_ALL_NETWORK_TYPE);
+ mockAccessFamily(TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
mController.init(mLifecycle, SUB_ID);
mPreference.setKey(mController.getPreferenceKey());
}
@Test
public void getAvailabilityStatus_hideCarrierNetworkSettings_returnUnavailable() {
- mPersistableBundle.putBoolean(CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL,
+ mPersistableBundle.putBoolean(
+ CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL,
true);
assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
@@ -140,40 +143,118 @@
}
@Test
- public void init_initShow4GForLTE() {
- mPersistableBundle.putBoolean(CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL,
- true);
+ public void updateState_LteWorldPhone_GlobalHasLte() {
+ mPersistableBundle.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
- mController.init(mLifecycle, SUB_ID);
+ mController.updateState(mPreference);
- assertThat(mController.mShow4GForLTE).isTrue();
+ assertThat(mPreference.getEntryValues())
+ .asList()
+ .contains(String.valueOf(TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
}
@Test
- public void init_initDisplay5gList_returnTrue() {
- long testBitmask = TelephonyManager.NETWORK_TYPE_BITMASK_NR
- | TelephonyManager.NETWORK_TYPE_BITMASK_LTE;
- long allowedNetworkTypes = -1;
- doReturn(testBitmask).when(mTelephonyManager).getSupportedRadioAccessFamily();
- doReturn(allowedNetworkTypes).when(mTelephonyManager).getAllowedNetworkTypes();
+ public void updateState_5gWorldPhone_GlobalHasNr() {
+ mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
mController.init(mLifecycle, SUB_ID);
+ mPersistableBundle.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
- assertThat(mController.mDisplay5gList).isTrue();
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.getEntryValues())
+ .asList()
+ .contains(String.valueOf(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA));
}
@Test
- public void checkSupportedRadioBitmask_nrBitmask_returnTrue() {
- long testBitmask = TelephonyManager.NETWORK_TYPE_BITMASK_NR
- | TelephonyManager.NETWORK_TYPE_BITMASK_LTE;
+ public void updateState_selectedOn5gItem() {
+ mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
+ mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
+ mController.init(mLifecycle, SUB_ID);
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
+ TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
- assertThat(mController.checkSupportedRadioBitmask(testBitmask,
- TelephonyManager.NETWORK_TYPE_BITMASK_NR)).isTrue();
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.getValue()).isEqualTo(
+ String.valueOf(
+ TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA));
+ }
+
+ @Test
+ public void updateState_disAllowed5g_5gOptionHidden() {
+ mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
+ mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
+ mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
+ mController.init(mLifecycle, SUB_ID);
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
+ TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.getEntryValues())
+ .asList()
+ .doesNotContain(
+ String.valueOf(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA));
+ }
+
+ @Test
+ public void updateState_disAllowed5g_selectOn4gOption() {
+ mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
+ mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
+ mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
+ mController.init(mLifecycle, SUB_ID);
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
+ TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.getValue()).isEqualTo(
+ String.valueOf(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA));
+ }
+
+ @Test
+ public void updateState_GlobalDisAllowed5g_GlobalWithoutNR() {
+ mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
+ mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
+ mController.init(mLifecycle, SUB_ID);
+ mPersistableBundle.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
+ TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.getEntryValues())
+ .asList()
+ .doesNotContain(
+ String.valueOf(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA));
+ }
+
+ @Test
+ public void updateState_GlobalDisAllowed5g_SelectOnGlobal() {
+ mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
+ mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
+ mController.init(mLifecycle, SUB_ID);
+ mPersistableBundle.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
+ TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.getValue()).isEqualTo(
+ String.valueOf(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
}
@Test
public void updateState_updateByNetworkMode() {
- long allowedNetworkTypes = -1;
- doReturn(allowedNetworkTypes).when(mTelephonyManager).getAllowedNetworkTypes();
+ mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
@@ -187,8 +268,7 @@
@Test
public void updateState_updateByNetworkMode_useDefaultValue() {
- long allowedNetworkTypes = -1;
- doReturn(allowedNetworkTypes).when(mTelephonyManager).getAllowedNetworkTypes();
+ mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
@@ -199,208 +279,13 @@
String.valueOf(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
}
- /**
- * @string/enabled_networks_cdma_choices
- * Before | After
- * @string/network_lte , 8 |@string/network_5G + @string/network_recommended , 25
- * @string/network_3G , 4 |@string/network_lte_pure, 8
- * @string/network_1x , 5 |@string/network_3G , 4
- * @string/network_global, 10|@string/network_1x , 5
- * |@string/network_global , 27
- *
- * @string/enabled_networks_cdma_only_lte_choices
- * Before | After
- * @string/network_lte , 8 |@string/network_5G + @string/network_recommended , 25
- * @string/network_global, 10|@string/network_lte_pure, 8
- * |@string/network_global , 27
- */
- @Test
- public void add5gListItem_lteCdma_5gLteCdma() {
- //case#1
- mPreference.setEntries(R.array.enabled_networks_cdma_choices);
- mPreference.setEntryValues(R.array.enabled_networks_cdma_values);
- CharSequence[] testEntries = {mContext.getString(R.string.network_5G)
- + mContext.getString(R.string.network_recommended)
- , mContext.getString(R.string.network_lte_pure)
- , mContext.getString(R.string.network_3G)
- , mContext.getString(R.string.network_1x)
- , mContext.getString(R.string.network_global)};
- CharSequence[] testEntryValues = {"25", "8", "4", "5", "27"};
-
- mController.add5gListItem(mPreference);
-
- assertThat(mPreference.getEntries()).isEqualTo(testEntries);
- assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues);
-
- //case#2
- mPreference.setEntries(R.array.enabled_networks_cdma_only_lte_choices);
- mPreference.setEntryValues(R.array.enabled_networks_cdma_only_lte_values);
- CharSequence[] testEntries1 = {mContext.getString(R.string.network_5G)
- + mContext.getString(R.string.network_recommended)
- , mContext.getString(R.string.network_lte_pure)
- , mContext.getString(R.string.network_global)};
- CharSequence[] testEntryValues1 = {"25", "8", "27"};
-
- mController.add5gListItem(mPreference);
-
- assertThat(mPreference.getEntries()).isEqualTo(testEntries1);
- assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues1);
- }
-
- /**
- * @string/enabled_networks_except_gsm_4g_choices
- * Before | After
- * @string/network_4G , 9 |@string/network_5G + @string/network_recommended , 26
- * @string/network_3G , 0 |@string/network_4G_pure , 9
- * |@string/network_3G , 0
- *
- * @string/enabled_networks_except_gsm_choices
- * Before | After
- * @string/network_lte, 9 |@string/network_5G + @string/network_recommended , 26
- * @string/network_3G , 0 |@string/network_lte_pure, 9
- * |@string/network_3G , 0
- *
- * @string/enabled_networks_4g_choices
- * Before | After
- * @string/network_4G , 9 |@string/network_5G + @string/network_recommended , 26
- * @string/network_3G , 0 |@string/network_4G_pure , 9
- * @string/network_2G , 1 |@string/network_3G , 0
- * |@string/network_2G , 1
- *
- * @string/enabled_networks_choices
- * Before | After
- * @string/network_lte, 9 |@string/network_5G + @string/network_recommended , 26
- * @string/network_3G , 0 |@string/network_lte_pure, 9
- * @string/network_2G , 1 |@string/network_3G , 0
- * |@string/network_2G , 1
- */
- @Test
- public void add5gListItem_lteGsm_5gLteGsm() {
- //csae#1
- mPreference.setEntries(R.array.enabled_networks_except_gsm_4g_choices);
- mPreference.setEntryValues(R.array.enabled_networks_except_gsm_values);
- CharSequence[] testEntries = {mContext.getString(R.string.network_5G)
- + mContext.getString(R.string.network_recommended)
- , mContext.getString(R.string.network_4G_pure)
- , mContext.getString(R.string.network_3G)};
- CharSequence[] testEntryValues = {"26", "9", "0"};
-
- mController.add5gListItem(mPreference);
-
- assertThat(mPreference.getEntries()).isEqualTo(testEntries);
- assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues);
-
- //case#2
- mPreference.setEntries(R.array.enabled_networks_except_gsm_choices);
- mPreference.setEntryValues(R.array.enabled_networks_except_gsm_values);
- CharSequence[] testEntries1 = {mContext.getString(R.string.network_5G)
- + mContext.getString(R.string.network_recommended)
- , mContext.getString(R.string.network_lte_pure)
- , mContext.getString(R.string.network_3G)};
- CharSequence[] testEntryValues1 = {"26", "9", "0"};
-
- mController.add5gListItem(mPreference);
-
- assertThat(mPreference.getEntries()).isEqualTo(testEntries1);
- assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues1);
-
- //case#3
- mPreference.setEntries(R.array.enabled_networks_4g_choices);
- mPreference.setEntryValues(R.array.enabled_networks_values);
- CharSequence[] testEntries2 = {mContext.getString(R.string.network_5G)
- + mContext.getString(R.string.network_recommended)
- , mContext.getString(R.string.network_4G_pure)
- , mContext.getString(R.string.network_3G)
- , mContext.getString(R.string.network_2G)};
- CharSequence[] testEntryValues2 = {"26", "9", "0", "1"};
-
- mController.add5gListItem(mPreference);
-
- assertThat(mPreference.getEntries()).isEqualTo(testEntries2);
- assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues2);
-
- //case#4
- mPreference.setEntries(R.array.enabled_networks_choices);
- mPreference.setEntryValues(R.array.enabled_networks_values);
- CharSequence[] testEntries3 = {mContext.getString(R.string.network_5G)
- + mContext.getString(R.string.network_recommended)
- , mContext.getString(R.string.network_lte_pure)
- , mContext.getString(R.string.network_3G)
- , mContext.getString(R.string.network_2G)};
- CharSequence[] testEntryValues3 = {"26", "9", "0", "1"};
-
- mController.add5gListItem(mPreference);
-
- assertThat(mPreference.getEntries()).isEqualTo(testEntries3);
- assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues3);
- }
-
- /**
- * @string/preferred_network_mode_choices_world_mode
- * Before | After
- * "Global" , 10|@string/network_global , 27
- * "LTE / CDMA" , 8 |"LTE / CDMA" , 8
- * "LTE / GSM / UMTS" , 9 |"LTE / GSM / UMTS" , 9
- */
- @Test
- public void add5gListItem_worldPhone_Global() {
- mPreference.setEntries(R.array.preferred_network_mode_choices_world_mode);
- mPreference.setEntryValues(R.array.preferred_network_mode_values_world_mode);
- CharSequence[] testEntries = {mContext.getString(R.string.network_global)
- , "LTE / CDMA"
- , "LTE / GSM / UMTS"};
- CharSequence[] testEntryValues = {"27", "8", "9"};
-
- mController.add5gListItem(mPreference);
-
- assertThat(mPreference.getEntries()).isEqualTo(testEntries);
- assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues);
- }
-
- /**
- * @string/enabled_networks_tdscdma_choices
- * Before | After
- * @string/network_lte, 22|@string/network_5G + @string/network_recommended , 33
- * @string/network_3G , 18|@string/network_lte_pure, 22
- * @string/network_2G , 1 |@string/network_3G , 18
- * |@string/network_2G , 1
- */
- @Test
- public void add5gListItem_td_5gTd() {
- mPreference.setEntries(R.array.enabled_networks_tdscdma_choices);
- mPreference.setEntryValues(R.array.enabled_networks_tdscdma_values);
- CharSequence[] testEntries = {mContext.getString(R.string.network_5G)
- + mContext.getString(R.string.network_recommended)
- , mContext.getString(R.string.network_lte_pure)
- , mContext.getString(R.string.network_3G)
- , mContext.getString(R.string.network_2G)};
- CharSequence[] testEntryValues = {"33", "22", "18", "1"};
-
- mController.add5gListItem(mPreference);
-
- assertThat(mPreference.getEntries()).isEqualTo(testEntries);
- assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues);
- }
-
- @Test
- public void add5gListItem_noLte_no5g() {
- mPreference.setEntries(R.array.enabled_networks_except_lte_choices);
- mPreference.setEntryValues(R.array.enabled_networks_except_lte_values);
- CharSequence[] testEntries = {mContext.getString(R.string.network_3G)
- , mContext.getString(R.string.network_2G)};
- CharSequence[] testEntryValues = {"0", "1"};
-
- mController.add5gListItem(mPreference);
-
- assertThat(mPreference.getEntries()).isEqualTo(testEntries);
- assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues);
- }
-
@Test
public void onPreferenceChange_updateSuccess() {
+ mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
doReturn(true).when(mTelephonyManager).setPreferredNetworkTypeBitmask(
getRafFromNetworkType(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
+ mController.updateState(mPreference);
mController.onPreferenceChange(mPreference,
String.valueOf(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
@@ -410,9 +295,11 @@
@Test
public void onPreferenceChange_updateFail() {
+ mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
doReturn(false).when(mTelephonyManager).setPreferredNetworkTypeBitmask(
getRafFromNetworkType(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
+ mController.updateState(mPreference);
mController.onPreferenceChange(mPreference,
String.valueOf(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
@@ -423,8 +310,7 @@
@Test
public void preferredNetworkModeNotification_preferenceUpdates() {
PreferenceScreen screen = mock(PreferenceScreen.class);
- long allowedNetworkTypes = -1;
- doReturn(allowedNetworkTypes).when(mTelephonyManager).getAllowedNetworkTypes();
+ mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
doReturn(mPreference).when(screen).findPreference(KEY);
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
@@ -448,4 +334,32 @@
TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY);
assertThat(mPreference.getSummary()).isEqualTo("2G");
}
+
+ private void mockEnabledNetworkMode(int networkMode) {
+ if (networkMode == TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA) {
+ mockPhoneType(TelephonyManager.PHONE_TYPE_GSM);
+ mPersistableBundle.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, true);
+ } else if (networkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA) {
+ mockPhoneType(TelephonyManager.PHONE_TYPE_GSM);
+ mPersistableBundle.putBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL, true);
+ mPersistableBundle.putBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL, true);
+ } else if (networkMode == TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA) {
+ mockPhoneType(TelephonyManager.PHONE_TYPE_GSM);
+ mPersistableBundle.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, true);
+ }
+ }
+
+ private void mockAllowedNetworkTypes(long allowedNetworkType) {
+ doReturn(allowedNetworkType).when(mTelephonyManager).getAllowedNetworkTypes();
+ }
+
+ private void mockAccessFamily(int networkMode) {
+ doReturn(MobileNetworkUtils.getRafFromNetworkType(networkMode))
+ .when(mTelephonyManager)
+ .getSupportedRadioAccessFamily();
+ }
+
+ private void mockPhoneType(int phoneType) {
+ doReturn(TelephonyManager.PHONE_TYPE_GSM).when(mTelephonyManager).getPhoneType();
+ }
}
diff --git a/tests/robotests/src/com/android/settings/notification/app/ImportantConversationBubblePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/ImportantConversationBubblePreferenceControllerTest.java
deleted file mode 100644
index c99e095..0000000
--- a/tests/robotests/src/com/android/settings/notification/app/ImportantConversationBubblePreferenceControllerTest.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2020 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.app;
-
-import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
-import static android.provider.Settings.Secure.BUBBLE_IMPORTANT_CONVERSATIONS;
-
-import static com.android.settings.core.BasePreferenceController.AVAILABLE;
-import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING;
-import static com.android.settings.notification.app.ImportantConversationBubblePreferenceController.OFF;
-import static com.android.settings.notification.app.ImportantConversationBubblePreferenceController.ON;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.provider.Settings;
-
-import androidx.preference.PreferenceScreen;
-import androidx.preference.TwoStatePreference;
-
-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.RobolectricTestRunner;
-
-@RunWith(RobolectricTestRunner.class)
-public class ImportantConversationBubblePreferenceControllerTest {
-
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private Context mContext;
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private PreferenceScreen mScreen;
-
- private ImportantConversationBubblePreferenceController mController;
- @Mock
- private TwoStatePreference mPreference;
-
- private static final String KEY = "important_bubble";
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mController = new ImportantConversationBubblePreferenceController(mContext, KEY);
- when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
- when(mScreen.findPreference(mPreference.getKey())).thenReturn(mPreference);
- }
-
- @Test
- public void testGetAvailabilityStatus_globallyOn() {
- Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, ON);
-
- assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
- }
-
- @Test
- public void testGetAvailabilityStatus_globallyOff() {
- Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, OFF);
-
- assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_DEPENDENT_SETTING);
- }
-
- @Test
- public void updateState_preferenceSetCheckedWhenSettingIsOn() {
- Settings.Secure.putInt(mContext.getContentResolver(), BUBBLE_IMPORTANT_CONVERSATIONS, ON);
-
- mController.updateState(mPreference);
-
- verify(mPreference).setChecked(true);
- }
-
- @Test
- public void updateState_preferenceSetUncheckedWhenSettingIsOff() {
- Settings.Secure.putInt(mContext.getContentResolver(), BUBBLE_IMPORTANT_CONVERSATIONS, OFF);
-
- mController.updateState(mPreference);
-
- verify(mPreference).setChecked(false);
- }
-
- @Test
- public void isChecked_settingIsOff_shouldReturnFalse() {
- Settings.Secure.putInt(mContext.getContentResolver(), BUBBLE_IMPORTANT_CONVERSATIONS, OFF);
-
- assertThat(mController.isChecked()).isFalse();
- }
-
- @Test
- public void isChecked_settingIsOn_shouldReturnTrue() {
- Settings.Secure.putInt(mContext.getContentResolver(), BUBBLE_IMPORTANT_CONVERSATIONS, ON);
-
- assertThat(mController.isChecked()).isTrue();
- }
-
- @Test
- public void setChecked_setFalse_disablesSetting() {
- Settings.Secure.putInt(mContext.getContentResolver(), BUBBLE_IMPORTANT_CONVERSATIONS, ON);
-
- mController.setChecked(false);
- int updatedValue = Settings.Secure.getInt(mContext.getContentResolver(),
- BUBBLE_IMPORTANT_CONVERSATIONS, -1);
-
- assertThat(updatedValue).isEqualTo(OFF);
- }
-
- @Test
- public void setChecked_setTrue_enablesSetting() {
- Settings.Secure.putInt(mContext.getContentResolver(), BUBBLE_IMPORTANT_CONVERSATIONS, OFF);
-
- mController.setChecked(true);
- int updatedValue = Settings.Secure.getInt(mContext.getContentResolver(),
- BUBBLE_IMPORTANT_CONVERSATIONS, -1);
-
- assertThat(updatedValue).isEqualTo(ON);
- }
-
- @Test
- public void isSliceable_returnsFalse() {
- assertThat(mController.isSliceable()).isFalse();
- }
-}
diff --git a/tests/robotests/src/com/android/settings/wallpaper/StyleSuggestionActivityTest.java b/tests/robotests/src/com/android/settings/wallpaper/StyleSuggestionActivityTest.java
index 72f9c62..120c780 100644
--- a/tests/robotests/src/com/android/settings/wallpaper/StyleSuggestionActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wallpaper/StyleSuggestionActivityTest.java
@@ -28,7 +28,6 @@
import com.android.settings.testutils.shadow.ShadowSecureSettings;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
@@ -61,7 +60,6 @@
}
@Test
- @Ignore
@Config(shadows = ShadowSecureSettings.class)
public void hasStyleSet_yes_shouldReturnTrue() {
when(mResources.getBoolean(com.android.internal.R.bool.config_enableWallpaperService))
@@ -73,7 +71,6 @@
}
@Test
- @Ignore
@Config(shadows = ShadowSecureSettings.class)
public void hasStyleSet_no_shouldReturnFalse() {
when(mResources.getBoolean(com.android.internal.R.bool.config_enableWallpaperService))
diff --git a/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java
index 720ad20..46b582f 100644
--- a/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java
@@ -32,7 +32,6 @@
import android.view.TextureView;
import android.view.View;
import android.widget.ImageView;
-import android.widget.LinearLayout;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceViewHolder;
@@ -61,8 +60,6 @@
private ImageView fakePreview;
@Mock
private ImageView fakePlayButton;
- @Mock
- private LinearLayout mAnimationView;
private Context mContext;
private VideoPreference mVideoPreference;
@@ -77,7 +74,6 @@
new MediaAnimationController(mContext, R.raw.accessibility_screen_magnification));
mVideoPreference = new VideoPreference(mContext, null /* attrs */);
mVideoPreference.mAnimationController = mAnimationController;
- mVideoPreference.mAnimationView = mAnimationView;
when(mAnimationController.getVideoWidth()).thenReturn(VIDEO_WIDTH);
when(mAnimationController.getVideoHeight()).thenReturn(VIDEO_HEIGHT);
@@ -162,13 +158,6 @@
assertThat(vp2.mAnimationController instanceof VectorAnimationController).isTrue();
}
- @Test
- public void setBackgroundColor_shouldBeCalled() {
- mVideoPreference.setBackgroundColor(1111);
-
- assertThat(mVideoPreference.mBackgroundResId).isEqualTo(1111);
- }
-
public static class TestFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceControllerTest.java
index bf2261a..7835f7e 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceControllerTest.java
@@ -19,10 +19,12 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.wifi.SoftApConfiguration;
@@ -31,6 +33,7 @@
import androidx.preference.PreferenceScreen;
import com.android.settings.widget.ValidatedEditTextPreference;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import org.junit.Before;
import org.junit.Test;
@@ -46,6 +49,7 @@
private static final String VALID_PASS = "12345678";
private static final String VALID_PASS2 = "23456789";
+ private static final String INITIAL_PASSWORD = "test_password";
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Context mContext;
@Mock
@@ -56,6 +60,8 @@
private WifiTetherBasePreferenceController.OnTetherConfigUpdateListener mListener;
@Mock
private PreferenceScreen mScreen;
+ @Mock
+ private MetricsFeatureProvider mMetricsFeatureProvider;
private WifiTetherPasswordPreferenceController mController;
private ValidatedEditTextPreference mPreference;
@@ -66,7 +72,8 @@
MockitoAnnotations.initMocks(this);
mPreference = new ValidatedEditTextPreference(RuntimeEnvironment.application);
mConfig = new SoftApConfiguration.Builder().setSsid("test_1234")
- .setPassphrase("test_password", SoftApConfiguration.SECURITY_TYPE_WPA2_PSK).build();
+ .setPassphrase(INITIAL_PASSWORD, SoftApConfiguration.SECURITY_TYPE_WPA2_PSK)
+ .build();
when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager);
when(mWifiManager.getSoftApConfiguration()).thenReturn(mConfig);
@@ -76,7 +83,8 @@
when(mContext.getResources()).thenReturn(RuntimeEnvironment.application.getResources());
when(mScreen.findPreference(anyString())).thenReturn(mPreference);
- mController = new WifiTetherPasswordPreferenceController(mContext, mListener);
+ mController = new WifiTetherPasswordPreferenceController(mContext, mListener,
+ mMetricsFeatureProvider);
}
@Test
@@ -102,6 +110,22 @@
}
@Test
+ public void changePreference_shouldLogActionWhenChanged() {
+ mController.displayPreference(mScreen);
+ mController.onPreferenceChange(mPreference, VALID_PASS);
+ verify(mMetricsFeatureProvider).action(mContext,
+ SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_PASSWORD);
+ }
+
+ @Test
+ public void changePreference_shouldNotLogActionWhenNotChanged() {
+ mController.displayPreference(mScreen);
+ mController.onPreferenceChange(mPreference, INITIAL_PASSWORD);
+ verify(mMetricsFeatureProvider, never()).action(mContext,
+ SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_PASSWORD);
+ }
+
+ @Test
public void updateDisplay_shouldUpdateValue() {
// Set controller password to anything and verify is set.
mController.displayPreference(mScreen);
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceControllerTest.java
index fc38088..a6a9dda 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceControllerTest.java
@@ -19,10 +19,12 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.wifi.SoftApConfiguration;
@@ -30,6 +32,8 @@
import androidx.preference.PreferenceScreen;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -52,6 +56,8 @@
private WifiTetherBasePreferenceController.OnTetherConfigUpdateListener mListener;
@Mock
private PreferenceScreen mScreen;
+ @Mock
+ private MetricsFeatureProvider mMetricsFeatureProvider;
private WifiTetherSSIDPreferenceController mController;
private WifiTetherSsidPreference mPreference;
@@ -67,8 +73,8 @@
when(mConnectivityManager.getTetherableWifiRegexs()).thenReturn(new String[]{"1", "2"});
when(mContext.getResources()).thenReturn(RuntimeEnvironment.application.getResources());
when(mScreen.findPreference(anyString())).thenReturn(mPreference);
-
- mController = new WifiTetherSSIDPreferenceController(mContext, mListener);
+ mController = new WifiTetherSSIDPreferenceController(mContext, mListener,
+ mMetricsFeatureProvider);
}
@Test
@@ -103,6 +109,23 @@
}
@Test
+ public void changePreference_shouldLogActionWhenChanged() {
+ mController.displayPreference(mScreen);
+ mController.onPreferenceChange(mPreference, "1");
+ verify(mMetricsFeatureProvider).action(mContext,
+ SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_NAME);
+ }
+
+ @Test
+ public void changePreference_shouldNotLogActionWhenNotChanged() {
+ mController.displayPreference(mScreen);
+ mController.onPreferenceChange(mPreference,
+ WifiTetherSSIDPreferenceController.DEFAULT_SSID);
+ verify(mMetricsFeatureProvider, never()).action(mContext,
+ SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_NAME);
+ }
+
+ @Test
public void updateDisplay_shouldUpdateValue() {
// Set controller ssid to anything and verify is set.
mController.displayPreference(mScreen);
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java
index e501689..e996b2d 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java
@@ -33,11 +33,13 @@
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
+import android.util.FeatureFlagUtils;
import android.widget.TextView;
import androidx.fragment.app.FragmentActivity;
import androidx.preference.PreferenceScreen;
+import com.android.settings.core.FeatureFlags;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowFragment;
import com.android.settings.testutils.shadow.ShadowWifiManager;
@@ -83,6 +85,7 @@
@Test
public void wifiTetherNonIndexableKeys_tetherAvailable_keysNotReturned() {
+ FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, false);
// To let TetherUtil.isTetherAvailable return true, select one of the combinations
setupIsTetherAvailable(true);