Swtich to use DefaultAccount related API to get and set default account for handling contacts.

Test: atest SettingsRoboTests:com.android.settings.applications.contacts.ContactsStorageSettingsTest
atest SettingsRoboTests:com.android.settings.applications.contacts.ContactsStoragePreferenceControllerTest
Bug: 368641291
Flag: com.android.settings.flags.enable_contacts_default_account_in_settings
Change-Id: I1164c120881714d051a6acc34e75d2b5de0f01b5
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b62df60..8c9045d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -33,9 +33,9 @@
     <string name="device_info_protected_single_press">Tap to show info</string>
     <!-- [CHAR LIMIT=NONE] Device Info screen. Countdown for user taps to enable development settings -->
     <string name="show_dev_countdown">{count, plural,
-      =1      {You are now # step away from being a developer.}
-      other   {You are now # steps away from being a developer.}
-    }</string>
+        =1      {You are now # step away from being a developer.}
+        other   {You are now # steps away from being a developer.}
+        }</string>
     <!-- [CHAR LIMIT=NONE] Device Info screen. Confirmation that developer settings are enabled -->
     <string name="show_dev_on">You are now a developer!</string>
     <!-- [CHAR LIMIT=NONE] Device Info screen. Okay we get it, stop pressing, you already have it on -->
@@ -502,9 +502,9 @@
 
     <!-- The title of the confirmation dialog shown when the user selects one / several languages and tries to remove them [CHAR LIMIT=60] -->
     <string name="dlg_remove_locales_title">{count, plural,
-      =1      {Remove selected language?}
-      other   {Remove selected languages?}
-    }</string>
+        =1      {Remove selected language?}
+        other   {Remove selected languages?}
+        }</string>
 
     <!-- The text of the confirmation dialog shown when the user selects several languages and tries to remove them [CHAR LIMIT=NONE] -->
     <string name="dlg_remove_locales_message">Text will be displayed in another language.</string>
@@ -654,9 +654,9 @@
     <string name="location_settings_summary_location_off">Off</string>
     <!-- Summary for Location settings when location is on, explaining how many apps have location permission [CHAR LIMIT=NONE]-->
     <string name="location_settings_summary_location_on">{count, plural,
-      =1      {On / # app has access to location}
-      other   {On / # apps have access to location}
-    }</string>
+        =1      {On / # app has access to location}
+        other   {On / # apps have access to location}
+        }</string>
     <!-- Location settings, loading the number of apps which have location permission [CHAR LIMIT=30] -->
     <string name="location_settings_loading_app_permission_stats">Loading\u2026</string>
     <!-- Location settings footer warning text when location is on [CHAR LIMIT=NONE] -->
@@ -845,9 +845,9 @@
     <string name="fingerprint_add_title">Add fingerprint</string>
     <!-- Message showing the current number of fingerprints set up. Shown for a menu item that launches fingerprint settings or enrollment. -->
     <string name="security_settings_fingerprint_preference_summary">{count, plural,
-      =1      {Fingerprint added}
-      other   {# fingerprints added}
-    }</string>
+        =1      {Fingerprint added}
+        other   {# fingerprints added}
+        }</string>
     <!-- message shown in summary field when no fingerprints are registered -->
     <string name="security_settings_fingerprint_preference_summary_none">Setup needed</string>
     <!-- Introduction title shown in fingerprint enrollment to introduce the fingerprint feature [CHAR LIMIT=29] -->
@@ -1448,9 +1448,9 @@
     <string name="private_space_category_hide">Hide</string>
     <!-- Header on pattern confirm screen inside private space settings when separate lock set for private space [CHAR LIMIT=50] -->
     <string name="private_space_confirm_your_pattern_header">Confirm your private space pattern</string>
-     <!-- Header on PIN confirm screen inside private space settings when separate lock set for private space [CHAR LIMIT=50] -->
+    <!-- Header on PIN confirm screen inside private space settings when separate lock set for private space [CHAR LIMIT=50] -->
     <string name="private_space_confirm_your_pin_header">Re-enter your private space PIN</string>
-     <!-- Header on password confirm screen inside private space when separate lock set for private space[CHAR LIMIT=50] -->
+    <!-- Header on password confirm screen inside private space when separate lock set for private space[CHAR LIMIT=50] -->
     <string name="private_space_confirm_your_password_header">Re-enter your private space password</string>
 
     <!-- Text shown when "Add fingerprint" button is disabled -->
@@ -1686,21 +1686,21 @@
 
     <!-- Hint shown in dialog screen when password is too short -->
     <string name="lockpassword_password_too_short">{count, plural,
-      =1      {Must contain at least # character}
-      other   {Must be at least # characters}
-    }</string>
+        =1      {Must contain at least # character}
+        other   {Must be at least # characters}
+        }</string>
     <!-- Hint shown in dialog screen when password is too short and only using numbers. [CHAR LIMIT=NONE] -->
     <string name="lockpassword_password_too_short_all_numeric">
         {count, plural,
-            =1    {If using only numbers, must be at least 1 digit}
-            other {If using only numbers, must be at least # digits}
+        =1    {If using only numbers, must be at least 1 digit}
+        other {If using only numbers, must be at least # digits}
         }
     </string>
     <!-- Hint shown in dialog screen when PIN is too short -->
     <string name="lockpassword_pin_too_short">{count, plural,
-      =1      {PIN must contain at least # digit}
-      other   {PIN must be at least # digits}
-    }</string>
+        =1      {PIN must contain at least # digit}
+        other   {PIN must be at least # digits}
+        }</string>
 
     <!-- Hint shown in dialog screen when PIN is too short with Additional text indicating minAutoConfirmLen(eg: 6) digits PIN offer additional security -->
     <string name="lockpassword_pin_too_short_autoConfirm_extra_message">{count, plural,
@@ -1710,14 +1710,14 @@
 
     <!-- Error shown in popup when password is too long -->
     <string name="lockpassword_password_too_long">{count, plural,
-      =1      {Must be fewer than # character}
-      other   {Must be fewer than # characters}
-    }</string>
+        =1      {Must be fewer than # character}
+        other   {Must be fewer than # characters}
+        }</string>
     <!-- Error shown in popup when PIN is too long -->
     <string name="lockpassword_pin_too_long">{count, plural,
-      =1      {Must be fewer than # digit}
-      other   {Must be fewer than # digits}
-    }</string>
+        =1      {Must be fewer than # digit}
+        other   {Must be fewer than # digits}
+        }</string>
 
     <!-- Error shown when in PIN mode and PIN has been used recently. Please keep this string short! -->
     <string name="lockpassword_pin_recently_used">Device admin doesn\'t allow using a recent PIN</string>
@@ -1727,45 +1727,45 @@
 
     <!-- Error shown when in PASSWORD mode and password doesn't contain the required number of letters -->
     <string name="lockpassword_password_requires_letters">{count, plural,
-      =1      {Must contain at least 1 letter}
-      other   {Must contain at least # letters}
-    }</string>
+        =1      {Must contain at least 1 letter}
+        other   {Must contain at least # letters}
+        }</string>
 
     <!-- Error shown when in PASSWORD mode and password doesn't contain the required number of lowercase letters -->
     <string name="lockpassword_password_requires_lowercase">{count, plural,
-      =1      {Must contain at least 1 lowercase letter}
-      other   {Must contain at least # lowercase letters}
-    }</string>
+        =1      {Must contain at least 1 lowercase letter}
+        other   {Must contain at least # lowercase letters}
+        }</string>
 
     <!-- Error shown when in PASSWORD mode and password doesn't contain the required number of uppercase letters -->
     <string name="lockpassword_password_requires_uppercase">{count, plural,
-      =1      {Must contain at least 1 uppercase letter}
-      other   {Must contain at least # uppercase letters}
-    }</string>
+        =1      {Must contain at least 1 uppercase letter}
+        other   {Must contain at least # uppercase letters}
+        }</string>
 
     <!-- Error shown when in PASSWORD mode and password doesn't contain the required number of numerical digits -->
     <string name="lockpassword_password_requires_numeric">{count, plural,
-      =1      {Must contain at least 1 numerical digit}
-      other   {Must contain at least # numerical digits}
-    }</string>
+        =1      {Must contain at least 1 numerical digit}
+        other   {Must contain at least # numerical digits}
+        }</string>
 
     <!-- Error shown when in PASSWORD mode and password doesn't contain the required number of special symbols -->
     <string name="lockpassword_password_requires_symbols">{count, plural,
-      =1      {Must contain at least 1 special symbol}
-      other   {Must contain at least # special symbols}
-    }</string>
+        =1      {Must contain at least 1 special symbol}
+        other   {Must contain at least # special symbols}
+        }</string>
 
     <!-- Error shown when in PASSWORD mode and password doesn't contain the required number of non-letter characters -->
     <string name="lockpassword_password_requires_nonletter">{count, plural,
-      =1      {Must contain at least 1 non-letter character}
-      other   {Must contain at least # non-letter characters}
-    }</string>
+        =1      {Must contain at least 1 non-letter character}
+        other   {Must contain at least # non-letter characters}
+        }</string>
 
     <!-- Error shown when in PASSWORD mode and password doesn't contain the required number of non-numerical characters -->
     <string name="lockpassword_password_requires_nonnumerical">{count, plural,
-      =1      {Must contain at least 1 non-numerical character}
-      other   {Must contain at least # non-numerical characters}
-    }</string>
+        =1      {Must contain at least 1 non-numerical character}
+        other   {Must contain at least # non-numerical characters}
+        }</string>
 
     <!-- Error shown when in PASSWORD mode and password has been used recently. Please keep this string short! -->
     <string name="lockpassword_password_recently_used">Device admin doesn\'t allow using a recent
@@ -1801,9 +1801,9 @@
 
     <!-- Summary of preference to manage device admin apps, informing the user how many device admin apps are installed and active -->
     <string name="number_of_device_admins">{count, plural,
-      =1      {# active app}
-      other   {# active apps}
-    }</string>
+        =1      {# active app}
+        other   {# active apps}
+        }</string>
 
     <!-- Title of preference to manage trust agents -->
     <string name="manage_trust_agents">Trust agents</string>
@@ -1816,9 +1816,9 @@
 
     <!-- Summary of preference to manage device policies when there is trust agent-->
     <string name="manage_trust_agents_summary_on">{count, plural,
-      =1      {1 active trust agent}
-      other   {# active trust agents}
-    }</string>
+        =1      {1 active trust agent}
+        other   {# active trust agents}
+        }</string>
 
     <!-- Bluetooth settings -->
     <!--Used as title on second screen after selecting Bluetooth settings -->
@@ -2412,19 +2412,19 @@
     <!-- Wi-Fi Advanced Settings --> <skip />
     <!-- Wi-Fi settings screen, Saved networks summary.  This shows below the "Saved networks" item and indicates the number of networks, not including passpoint network, a user has saved. [CHAR LIMIT=30] -->
     <string name="wifi_saved_access_points_summary">{count, plural,
-      =1      {1 network}
-      other   {# networks}
-    }</string>
+        =1      {1 network}
+        other   {# networks}
+        }</string>
     <!-- Wi-Fi settings screen, Saved networks summary.  This shows below the "Saved networks" item and indicates the number of passpoint networks a user has saved. [CHAR LIMIT=30] -->
     <string name="wifi_saved_passpoint_access_points_summary">{count, plural,
-      =1      {1 subscription}
-      other   {# subscriptions}
-    }</string>
+        =1      {1 subscription}
+        other   {# subscriptions}
+        }</string>
     <!-- Wi-Fi settings screen, Saved networks summary.  This shows below the "Saved networks" item and indicates number of whole kinds networks, if there are both normal saved networks and saved passpoint networks. The number will be at least 2, so the one case is only to prevent lint error. [CHAR LIMIT=60] -->
     <string name="wifi_saved_all_access_points_summary">{count, plural,
-      =1      {1 network &amp; subscription}
-      other   {# networks &amp; subscriptions}
-    }</string>
+        =1      {1 network &amp; subscription}
+        other   {# networks &amp; subscriptions}
+        }</string>
     <!-- Wi-Fi settings screen, advanced, title of the item to show the Wi-Fi device's SSID. [CHAR LIMIT=20] -->
     <string name="wifi_advanced_ssid_title">SSID</string>
     <!-- Wi-Fi settings screen, advanced, title of the item to show the device's Wi-Fi MAC address. [CHAR LIMIT=50] -->
@@ -2998,11 +2998,11 @@
     <!-- Dark UI screen footer summary text shown to indicate Modes may turn on/off Dark theme automatically according to their triggers. [CHAR LIMIT=NONE] -->
     <string name="dark_ui_modes_footer_summary">
         {count, plural, offset:2
-            =0    {Modes can also activate dark theme}
-            =1    {{mode_1} also activates dark theme}
-            =2    {{mode_1} and {mode_2} also activate dark theme}
-            =3    {{mode_1}, {mode_2}, and {mode_3} also activate dark theme}
-            other {{mode_1}, {mode_2}, and # more also activate dark theme}
+        =0    {Modes can also activate dark theme}
+        =1    {{mode_1} also activates dark theme}
+        =2    {{mode_1} and {mode_2} also activate dark theme}
+        =3    {{mode_1}, {mode_2}, and {mode_3} also activate dark theme}
+        other {{mode_1}, {mode_2}, and # more also activate dark theme}
         }
     </string>
     <!-- Dark UI screen footer action text linking to Modes settings. [CHAR LIMIT=NONE] -->
@@ -3153,9 +3153,9 @@
     <string name="wrong_pin_code_pukked">Incorrect SIM PIN code you must now contact your carrier to unlock your device.</string>
     <!-- Instructions telling the user that they entered the wrong SIM PIN while trying to unlock the keyguard.  Displayed in a dialog box.  [CHAR LIMIT=100] -->
     <string name="wrong_pin_code">{count, plural,
-      =1      {Incorrect SIM PIN code, you have # remaining attempt before you must contact your carrier to unlock your device.}
-      other   {Incorrect SIM PIN code, you have # remaining attempts.}
-    }</string>
+        =1      {Incorrect SIM PIN code, you have # remaining attempt before you must contact your carrier to unlock your device.}
+        other   {Incorrect SIM PIN code, you have # remaining attempts.}
+        }</string>
 
     <!-- This is instruction text to inform the user that they have entered the wrong SIM PIN while trying to unlock the keyguard.
          The variable will be replaced with a number. [CHAR LIMIT=NONE] -->
@@ -3324,27 +3324,27 @@
 
     <!-- Dialog body informing user about an unmountable storage device. [CHAR LIMIT=NONE]-->
     <string name="storage_dialog_unmountable">This <xliff:g id="name" example="SD card">^1</xliff:g> is corrupted.
-\n\nTo use this <xliff:g id="name" example="SD card">^1</xliff:g>, you have to set it up first.</string>
+        \n\nTo use this <xliff:g id="name" example="SD card">^1</xliff:g>, you have to set it up first.</string>
 
     <!-- Body of dialog informing user about consequences of formatting an internal storage device [CHAR LIMIT=NONE]-->
     <string name="storage_internal_format_details">You can format this SD card to store photos, videos, music,
         and more and access them on other devices.
         \n\n<b>All data on this SD card will be erased.</b>
         \n\n<b>Before formatting</b>
-\n\n<b>Back up photos &amp; other media</b>
-\nMove your media files to alternative storage on this device, or transfer them to a computer using a USB cable.
-\n\n<b>Back up apps</b>
-\nAll apps stored on this <xliff:g id="name" example="SD card">^1</xliff:g> will be uninstalled and their data will be erased. To keep these apps, move them to alternative storage on this device.</string>
+        \n\n<b>Back up photos &amp; other media</b>
+        \nMove your media files to alternative storage on this device, or transfer them to a computer using a USB cable.
+        \n\n<b>Back up apps</b>
+        \nAll apps stored on this <xliff:g id="name" example="SD card">^1</xliff:g> will be uninstalled and their data will be erased. To keep these apps, move them to alternative storage on this device.</string>
 
     <!-- Body of dialog informing user about consequences of ejecting an internal storage device [CHAR LIMIT=NONE]-->
     <string name="storage_internal_unmount_details"><b>When you eject this <xliff:g id="name" example="SD card">^1</xliff:g>, apps stored on it will stop working, and media files stored on it will not be available until it is reinserted.</b>
-\n\nThis <xliff:g id="name" example="SD card">^1</xliff:g> is formatted to work on this device only.  It won\u2019t work on any others.</string>
+        \n\nThis <xliff:g id="name" example="SD card">^1</xliff:g> is formatted to work on this device only.  It won\u2019t work on any others.</string>
 
     <!-- Body of dialog informing user about consequences of forgetting an internal storage device [CHAR LIMIT=NONE]-->
     <string name="storage_internal_forget_details">To use the apps, photos, or data this <xliff:g id="name" example="SD card">^1</xliff:g> contains, reinsert it.
-\n\nAlternatively, you can choose to forget this storage if the device isn\u2019t available.
-\n\nIf you choose to forget, all the data the device contains will be lost forever.
-\n\nYou can reinstall the apps later, but their data stored on this device will be lost.</string>
+        \n\nAlternatively, you can choose to forget this storage if the device isn\u2019t available.
+        \n\nIf you choose to forget, all the data the device contains will be lost forever.
+        \n\nYou can reinstall the apps later, but their data stored on this device will be lost.</string>
 
     <!-- Title of dialog confirming that user wants to forget an internal storage device [CHAR LIMIT=32]-->
     <string name="storage_internal_forget_confirm_title">Forget <xliff:g id="name" example="SD card">^1</xliff:g>?</string>
@@ -3378,7 +3378,7 @@
     <string name="storage_wizard_move_confirm_title">Move <xliff:g id="app" example="Calculator">^1</xliff:g></string>
     <!-- Body of wizard step prompting user to move an app [CHAR LIMIT=NONE] -->
     <string name="storage_wizard_move_confirm_body">Moving <xliff:g id="app" example="Calculator">^1</xliff:g> and its data to <xliff:g id="name" example="SD card">^2</xliff:g> will take only a few moments. You won\u2019t be able to use the app until the move is complete.
-\n\nDon\u2019t remove the <xliff:g id="name" example="SD card">^2</xliff:g> during the move.
+        \n\nDon\u2019t remove the <xliff:g id="name" example="SD card">^2</xliff:g> during the move.
     </string>
 
     <!-- Body of lock screen challenge message explaining that the given user must be unlocked before data can be moved [CHAR LIMIT=64] -->
@@ -3388,7 +3388,7 @@
     <string name="storage_wizard_move_progress_title">Moving <xliff:g id="app" example="Calculator">^1</xliff:g>\u2026</string>
     <!-- Body of wizard step showing app move progress [CHAR LIMIT=NONE] -->
     <string name="storage_wizard_move_progress_body">Don\u2019t remove the <xliff:g id="name" example="SD card">^1</xliff:g> during the move.
-\n\nThe <xliff:g id="app" example="Calculator">^2</xliff:g> app on this device won\u2019t be available until the move is complete.
+        \n\nThe <xliff:g id="app" example="Calculator">^2</xliff:g> app on this device won\u2019t be available until the move is complete.
     </string>
 
     <!-- This is the title of a full-screen message. After this question, the user will get to choose how they want to use the storage device that they have in their phone. The placeholder is for the specific device (e.g. SD card, USB drive, etc.). [CHAR LIMIT=32] -->
@@ -3408,7 +3408,7 @@
     <string name="storage_wizard_format_confirm_v2_title">Format this <xliff:g id="name" example="SD card">^1</xliff:g>?</string>
     <!-- Body of a dialog. This text is confirming that the user wants to use their SD card as extra phone storage, but the formatting process will erase existing content on the card. The first placeholder is for the name of the device (e.g. a brand name of the SD card or USB drive). The second and third placeholders are for the general references (e.g. SD card, USB drive). [CHAR LIMIT=NONE] -->
     <string name="storage_wizard_format_confirm_v2_body">This <xliff:g id="name" example="SanDisk SD card">^1</xliff:g> needs to be formatted to store apps, files, and media.
-\n\nFormatting will erase existing content on the <xliff:g id="name" example="SD card">^2</xliff:g>. To avoid losing content, back it up to another <xliff:g id="name" example="SD card">^3</xliff:g> or device.</string>
+        \n\nFormatting will erase existing content on the <xliff:g id="name" example="SD card">^2</xliff:g>. To avoid losing content, back it up to another <xliff:g id="name" example="SD card">^3</xliff:g> or device.</string>
     <!-- Body of a dialog. This text is confirming that the user wants to use their SD card as portable storage, but the formatting process will erase existing content on the card. The first placeholder is for the name of the device (e.g. a brand name of the SD card or USB drive). The second and third placeholders are for the general references (e.g. SD card, USB drive). [CHAR LIMIT=NONE] -->
     <string name="storage_wizard_format_confirm_v2_body_external">This <xliff:g id="name" example="SanDisk SD card">^1</xliff:g> needs to be formatted to store photos, videos, music, and more.
         \n\nFormatting will erase existing content on the <xliff:g id="name" example="SD card">^2</xliff:g>. To avoid losing content, back it up to another <xliff:g id="name" example="SD card">^3</xliff:g> or device.</string>
@@ -3437,8 +3437,8 @@
     <string name="storage_wizard_slow_v2_title">Slow <xliff:g id="name" example="SD card">^1</xliff:g></string>
     <!-- Strings that are part of a full-screen message. These strings let the user know that their storage device is slow, and include some options they can try. The first placeholder is for the name of the storage device (e.g. brand name of the SD card), and the second and third placeholders are for the general references (e.g. SD card, USB drive, etc.). [CHAR LIMIT=NONE] -->
     <string name="storage_wizard_slow_v2_body">You can still use this <xliff:g id="name" example="SanDisk SD card">^1</xliff:g>, but it may be slow.
-\n\nApps stored on this <xliff:g id="name" example="SD card">^2</xliff:g> may not work properly, and content transfers could take a long time.
-\n\nTry using a faster <xliff:g id="name" example="SD card">^3</xliff:g>, or use this <xliff:g id="name" example="SD card">^4</xliff:g> for portable storage instead.</string>
+        \n\nApps stored on this <xliff:g id="name" example="SD card">^2</xliff:g> may not work properly, and content transfers could take a long time.
+        \n\nTry using a faster <xliff:g id="name" example="SD card">^3</xliff:g>, or use this <xliff:g id="name" example="SD card">^4</xliff:g> for portable storage instead.</string>
     <!-- Action of a dialog. This action will start the wizard from the beginning, letting the user make an alternative choice. [CHAR LIMIT=32] -->
     <string name="storage_wizard_slow_v2_start_over">Start over</string>
     <!-- Action of a dialog. This action will continue the wizard, meaning the user acknowledges their card is slow. [CHAR LIMIT=32] -->
@@ -3753,9 +3753,9 @@
 
     [CHAR LIMIT=NONE]-->
     <string name="location_app_permission_summary_location_on">{count, plural,
-      =1      {# of {total} apps has access to location}
-      other   {# of {total} apps have access to location}
-    }</string>
+        =1      {# of {total} apps has access to location}
+        other   {# of {total} apps have access to location}
+        }</string>
     <!-- [CHAR LIMIT=50] Location settings screen, sub category for recent location access -->
     <string name="location_category_recent_location_access">Recent access</string>
     <!-- Location settings screen, displayed when there're more than three recent location access apps [CHAR LIMIT=30] -->
@@ -4141,9 +4141,9 @@
     <string name="recent_app_category_title">Recently opened apps</string>
     <!-- Preference title for showing all apps on device [CHAR_LIMIT=50]-->
     <string name="see_all_apps_title">{count, plural,
-      =1      {See all apps}
-      other   {See all # apps}
-    }</string>
+        =1      {See all apps}
+        other   {See all # apps}
+        }</string>
 
     <!-- Title of the dialog that asks the user to contact the IT admin to reset password [CHAR LIMIT=40] -->
     <string name="forgot_password_title">Contact your IT admin</string>
@@ -4174,9 +4174,9 @@
     <string name="cache_size_label">Cache</string>
     <!-- Manage applications, individual application info storage screen. Describes the number of URIs (directories or files) an app has been granted access (by another apps)-->
     <string name="uri_permissions_text">{count, plural,
-      =1      {1 item}
-      other   {# items}
-    }</string>
+        =1      {1 item}
+        other   {# items}
+        }</string>
     <!-- Manage applications, individual application info storage screen. Button below list of URIs. -->
     <string name="clear_uri_btn_text">Clear access</string>
     <!-- Manage applications, Header name used for other controls -->
@@ -4229,7 +4229,7 @@
     <string name="clear_activities">Clear default preferences</string>
     <!-- Manage applications, individual application info screen, screen, message text under screen compatibility heading -->
     <string name="screen_compatibility_text">This app may not be designed for your screen. You can control how it
-            adjusts to your screen here.</string>
+        adjusts to your screen here.</string>
     <!-- Manage applications, individual application screen, checkbox to control asking for compatibility mode.  -->
     <string name="ask_compatibility">Ask when launched</string>
     <!-- Manage applications, individual application screen, checkbox to control compatibility mode.  -->
@@ -4493,10 +4493,10 @@
     <!-- Warning message about security implications of enabling a spell checker, displayed as a dialog
          message when the user selects to enable a spell checker. -->
     <string name="spellchecker_security_warning">This spell checker may be able to collect
-    all the text you type, including personal data like passwords and credit
-    card numbers.  It comes from the app
-    <xliff:g id="spellchecker_application_name">%1$s</xliff:g>.
-    Use this spell checker?</string>
+        all the text you type, including personal data like passwords and credit
+        card numbers.  It comes from the app
+        <xliff:g id="spellchecker_application_name">%1$s</xliff:g>.
+        Use this spell checker?</string>
     <!-- Image button description for spell checker quick settings. -->
     <string name="spellchecker_quick_settings">Settings</string>
     <!-- Image button description for spell checker language. -->
@@ -5139,18 +5139,18 @@
     <string name="accessibility_tutorial_dialog_twofinger_doubletap_instruction">To start and stop magnification, quickly tap the screen twice with %1$d fingers</string>
     <!-- Instruction for the accessibility tutorial dialog in accessibility service with quick settings shortcut. [CHAR LIMIT=NONE]-->
     <string name="accessibility_tutorial_dialog_message_quick_setting">{count, plural,
-      =1    {To use this feature, swipe down from the top of your screen. Then, find the {featureName} tile.}
-      other {To use this feature, swipe down from the top of your screen with # fingers. Then, find the {featureName} tile.}
-    }</string>
+        =1    {To use this feature, swipe down from the top of your screen. Then, find the {featureName} tile.}
+        other {To use this feature, swipe down from the top of your screen with # fingers. Then, find the {featureName} tile.}
+        }</string>
     <!-- Warning for the accessibility shortcut type that is not available immediately during device setup when chosen, but will be available after setup. [CHAR LIMIT=NONE]-->
     <string name="accessibility_tutorial_dialog_shortcut_unavailable_in_suw">This shortcut will be available after you finish device setup.</string>
     <!-- Message for the accessibility tutorial dialog when user enables an accessibility service while using gesture navigation and touch exploration is not enabled. [CHAR LIMIT=NONE] -->
     <string name="accessibility_tutorial_dialog_message_gesture">To use this feature, swipe up from the bottom of the screen with 2 fingers.\n\nTo switch between features, swipe up with 2 fingers and hold.</string>
     <!-- Instruction for the accessibility tutorial dialog when user enables an accessibility service while using gesture navigation. [CHAR LIMIT=NONE] -->
     <string name="accessibility_tutorial_dialog_gesture_shortcut_instruction">{count, plural,
-      =1    {To use this feature, swipe up from the bottom of your screen}
-      other {To use this feature, swipe up with # fingers from the bottom of your screen}
-    }</string>
+        =1    {To use this feature, swipe up from the bottom of your screen}
+        other {To use this feature, swipe up with # fingers from the bottom of your screen}
+        }</string>
     <!-- Message for the accessibility tutorial dialog when user enables an accessibility service while using gesture navigation and touch exploration is enabled. [CHAR LIMIT=NONE] -->
     <string name="accessibility_tutorial_dialog_message_gesture_talkback">To use this feature, swipe up from the bottom of the screen with 3 fingers.\n\nTo switch between features, swipe up with 3 fingers and hold.</string>
     <!-- Message for the accessibility tutorial dialog when user chooses gesture navigation in navigation settings, an accessibility service is using the accessibility button, and touch exploration is disabled. [CHAR LIMIT=NONE] -->
@@ -5183,9 +5183,9 @@
     <string name="accessibility_shortcut_edit_dialog_summary_software">Tap the accessibility button <xliff:g id="accessibility_icon" example="[Icon]">%s</xliff:g> at the bottom of your screen. To switch between features, touch &amp; hold the accessibility button.</string>
     <!-- Summary for gesture shortcut option -->
     <string name="accessibility_shortcut_edit_dialog_summary_gesture">{count, plural,
-      =1      {Swipe up from the bottom of your screen. To switch between features, swipe up and hold.}
-      other   {Swipe up with # fingers from the bottom of your screen. To switch between features, swipe up with # fingers and hold.}
-    }</string>
+        =1      {Swipe up from the bottom of your screen. To switch between features, swipe up and hold.}
+        other   {Swipe up with # fingers from the bottom of your screen. To switch between features, swipe up with # fingers and hold.}
+        }</string>
     <!-- Summary for software shortcut in accessibility edit shortcut dialog when user had enabled the accessibility floating button mode (Floating over other apps). [CHAR LIMIT=NONE] -->
     <string name="accessibility_shortcut_edit_dialog_summary_software_floating"><annotation id="link">More options</annotation></string>
     <!-- Footer to show help link content description. [CHAR LIMIT=NONE] -->
@@ -5194,14 +5194,14 @@
     <string name="accessibility_shortcut_edit_dialog_title_quick_settings">Quick Settings</string>
     <!-- Summary for quick settings shortcut option in accessibility edit shortcut dialog. [CHAR LIMIT=NONE] -->
     <string name="accessibility_shortcut_edit_dialog_summary_quick_settings">{count, plural,
-      =1      {Swipe down from the top of your screen}
-      other   {Swipe down with # fingers from the top of your screen}
-    }</string>
+        =1      {Swipe down from the top of your screen}
+        other   {Swipe down with # fingers from the top of your screen}
+        }</string>
     <!-- Summary for quick settings shortcut option in accessibility edit shortcut dialog in Setup Wizard. [CHAR LIMIT=NONE] -->
     <string name="accessibility_shortcut_edit_dialog_summary_quick_settings_suw">{count, plural,
-      =1      {Swipe down from the top of your screen. This shortcut will be available after you finish device setup.}
-      other   {Swipe down with # fingers from the top of your screen. This shortcut will be available after you finish device setup.}
-    }</string>
+        =1      {Swipe down from the top of your screen. This shortcut will be available after you finish device setup.}
+        other   {Swipe down with # fingers from the top of your screen. This shortcut will be available after you finish device setup.}
+        }</string>
     <!-- Shown as one of the item in the chosen accessibility shortcut types list presented as a label next to the shortcut toggle. [CHAR LIMIT=NONE] -->
     <string name="accessibility_feature_shortcut_setting_summary_quick_settings">Quick Settings</string>
     <!-- Title for hardware shortcut in accessibility edit shortcut dialog. [CHAR LIMIT=NONE] -->
@@ -5621,25 +5621,25 @@
 
     <!-- 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] -->
     <string name="accessibilty_autoclick_preference_subtitle_short_delay">{count, plural,
-      =1      {Short ({time} second)}
-      other   {Short ({time} seconds)}
-    }</string>
+        =1      {Short ({time} second)}
+        other   {Short ({time} seconds)}
+        }</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] -->
     <string name="accessibilty_autoclick_preference_subtitle_medium_delay">{count, plural,
-      =1      {Medium ({time} second)}
-      other   {Medium ({time} seconds)}
-    }</string>
+        =1      {Medium ({time} second)}
+        other   {Medium ({time} seconds)}
+        }</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] -->
     <string name="accessibilty_autoclick_preference_subtitle_long_delay">{count, plural,
-      =1      {Long ({time} second)}
-      other   {Long ({time} seconds)}
-    }</string>
+        =1      {Long ({time} second)}
+        other   {Long ({time} seconds)}
+        }</string>
 
     <!-- Summary for autoclick seekbar settings preference when user selected custom item. [CHAR LIMIT=35] -->
     <string name="accessibilty_autoclick_delay_unit_second">{count, plural,
-      =1      {{time} second}
-      other   {{time} seconds}
-    }</string>
+        =1      {{time} second}
+        other   {{time} seconds}
+        }</string>
 
     <!-- Title for accessibility menu item to launch a settings activity. [CHAR LIMIT=15] -->
     <string name="accessibility_menu_item_settings">Settings</string>
@@ -5801,15 +5801,15 @@
     <string name="print_settings_summary_no_service">Off</string>
 
     <string name="print_settings_summary">{count, plural,
-      =1      {1 print service on}
-      other   {# print services on}
-    }</string>
+        =1      {1 print service on}
+        other   {# print services on}
+        }</string>
 
     <!-- Print setting summary in settings screenm indicating how many print jobs are active [CHAR LIMIT=None] -->
     <string name="print_jobs_summary">{count, plural,
-      =1      {1 print job}
-      other   {# print jobs}
-    }</string>
+        =1      {1 print job}
+        other   {# print jobs}
+        }</string>
 
     <!-- Title for print service settings screen [CHAR LIMIT=25] -->
     <string name="print_settings_title">Print services</string>
@@ -5894,7 +5894,7 @@
     <string name="power_usage_summary">What has been using the battery</string>
     <!-- Display the battery level and status [CHAR_LIMIT=60] -->
     <string name="power_usage_level_and_status"><xliff:g id="level">%1$s</xliff:g>
-            - <xliff:g id="status">%2$s</xliff:g></string>
+        - <xliff:g id="status">%2$s</xliff:g></string>
     <!-- Display time remaining until battery is discharged [CHAR_LIMIT=60] -->
     <string name="power_discharge_remaining"><xliff:g id="remain">%1$s</xliff:g> remaining</string>
     <!-- Display time remaining until battery is charged [CHAR_LIMIT=60] -->
@@ -6012,30 +6012,30 @@
     <string name="battery_tip_dialog_message_footer">Includes high-power background activity</string>
     <!-- Title for restricted app preference, showing how many app need to be restricted [CHAR LIMIT=NONE] -->
     <string name="battery_tip_restrict_title">{count, plural,
-      =1      {Restrict # app}
-      other   {Restrict # apps}
-    }</string>
+        =1      {Restrict # app}
+        other   {Restrict # apps}
+        }</string>
     <!-- Title for restricted app preference, showing how many app been restricted [CHAR LIMIT=NONE] -->
     <string name="battery_tip_restrict_handled_title">{count, plural,
-      =1      {{label} recently restricted}
-      other   {# apps recently restricted}
-    }</string>
+        =1      {{label} recently restricted}
+        other   {# apps recently restricted}
+        }</string>
     <!-- Summary for restricted app preference, showing the impact of the apps [CHAR LIMIT=NONE] -->
     <string name="battery_tip_restrict_summary">{count, plural,
-      =1      {{label} has high background battery usage}
-      other   {# apps have high background battery usage}
-    }</string>
+        =1      {{label} has high background battery usage}
+        other   {# apps have high background battery usage}
+        }</string>
     <!-- Summary for restricted app preference, showing the impact of the apps [CHAR LIMIT=NONE] -->
     <string name="battery_tip_restrict_handled_summary">{count, plural,
-      =1      {This app can\'t run in the background}
-      other   {These apps can\'t run in the background}
-    }</string>
+        =1      {This app can\'t run in the background}
+        other   {These apps can\'t run in the background}
+        }</string>
 
     <!-- Title for dialog to restrict the app [CHAR LIMIT=NONE] -->
     <string name="battery_tip_restrict_app_dialog_title">{count, plural,
-      =1      {Restrict app?}
-      other   {Restrict # apps?}
-    }</string>
+        =1      {Restrict app?}
+        other   {Restrict # apps?}
+        }</string>
     <!-- Message for battery tip dialog to show the info to restrict the app [CHAR LIMIT=NONE] -->
     <string name="battery_tip_restrict_app_dialog_message">To save battery, stop <xliff:g id="app">%1$s</xliff:g> from using battery in the background. This app may not work properly and notifications may be delayed.</string>
     <!-- Message for battery tip dialog to show the info to restrict the app, below it app list will be shown as a view [CHAR LIMIT=NONE] -->
@@ -6069,9 +6069,9 @@
     <string name="restricted_app_title">Restricted apps</string>
     <!-- Summary for restricted app preference, clicking it will goes to restricted app list [CHAR LIMIT=NONE] -->
     <string name="restricted_app_summary">{count, plural,
-      =1      {Limiting battery usage for # app}
-      other   {Limiting battery usage for # apps}
-    }</string>
+        =1      {Limiting battery usage for # app}
+        other   {Limiting battery usage for # apps}
+        }</string>
 
     <!-- Summary for restricted app to show the restriction time [CHAR LIMIT=NONE] -->
     <string name="restricted_app_time_summary">Restricted <xliff:g id="time" example="5 days ago">%1$s</xliff:g></string>
@@ -6091,9 +6091,9 @@
 
     <!-- Summary for battery manager, showing app restricted -->
     <string name="battery_manager_app_restricted">{count, plural,
-      =1      {# app restricted}
-      other   {# apps restricted}
-    }</string>
+        =1      {# app restricted}
+        other   {# apps restricted}
+        }</string>
 
     <!-- Summary for top level battery tile if battery is not present. [CHAR LIMIT=NONE] -->
     <string name="battery_missing_message">Problem reading the battery meter.</string>
@@ -6581,9 +6581,9 @@
     <string name="remove_credential_management_app_dialog_message">This app won\u2019t manage certificates, but it will stay on your device. Any certificates installed by the app will be uninstalled.</string>
     <!-- List item found in the credential management app's authentication policy [CHAR LIMIT=NONE] -->
     <string name="number_of_urls">{count, plural,
-      =1      {# URL}
-      other   {# URLs}
-    }</string>
+        =1      {# URL}
+        other   {# URLs}
+        }</string>
 
     <!-- Sound settings screen, setting check box label -->
     <string name="emergency_tone_title">Emergency dialing signal</string>
@@ -6685,9 +6685,9 @@
 
     <!-- app summary of notification app list screen [CHAR LIMIT=100] -->
     <string name="notification_history_count">{count, plural,
-      =1      {# notification}
-      other   {# notifications}
-    }</string>
+        =1      {# notification}
+        other   {# notifications}
+        }</string>
 
     <!-- Category title for phone call's ringtone and vibration settings in the Sound Setting.
          [CHAR LIMIT=40] -->
@@ -7108,9 +7108,9 @@
     <string name="done_button">Done</string>
     <!-- Title of Dialog warning users of SSL monitoring. [CHAR LIMIT=NONE] -->
     <string name="ssl_ca_cert_dialog_title">{count, plural,
-      =1      {Trust or remove certificate}
-      other   {Trust or remove certificates}
-    }</string>
+        =1      {Trust or remove certificate}
+        other   {Trust or remove certificates}
+        }</string>
     <!-- Text of message to show to device owner user whose administrator has installed a SSL CA Cert.  [CHAR LIMIT=NONE] -->
     <string name="ssl_ca_cert_info_message_device_owner"> {numberOfCertificates, plural,
         =1 {{orgName} has installed a certificate authority on your device, which may allow them to monitor your device network activity, including emails, apps, and secure websites.\n\nFor more information about this certificate, contact your admin.}
@@ -7125,9 +7125,9 @@
     <string name="ssl_ca_cert_warning_message">A third party is capable of monitoring your network activity, including emails, apps, and secure websites.\n\nA trusted credential installed on your device is making this possible.</string>
     <!-- Label on button that will take the user to the Trusted Credentials settings page.  [CHAR LIMIT=NONE]-->
     <string name="ssl_ca_cert_settings_button">{count, plural,
-      =1      {Check certificate}
-      other   {Check certificates}
-    }</string>
+        =1      {Check certificate}
+        other   {Check certificates}
+        }</string>
 
     <!-- User settings screen title [CHAR LIMIT=40] -->
     <string name="user_settings_title">Users</string>
@@ -8085,9 +8085,9 @@
     <!-- Zen Modes: Summary for the Do not Disturb option that describes how many automatic rules (schedules) are enabled [CHAR LIMIT=NONE]-->
     <string name="zen_mode_settings_schedules_summary">
         {count, plural,
-            =0    {None}
-            =1    {1 schedule set}
-            other {# schedules set}
+        =0    {None}
+        =1    {1 schedule set}
+        other {# schedules set}
         }
     </string>
 
@@ -8123,20 +8123,20 @@
     <!-- Modes: Summary for the modes segment, when at least one mode is active. [CHAR LIMIT=NONE]-->
     <string name="zen_modes_summary_some_active">
         {count, plural, offset:2
-            =0    {}
-            =1    {{mode_1} is active}
-            =2    {{mode_1} and {mode_2} are active}
-            =3    {{mode_1}, {mode_2}, and {mode_3} are active}
-            other {{mode_1}, {mode_2}, and # more are active}
+        =0    {}
+        =1    {{mode_1} is active}
+        =2    {{mode_1} and {mode_2} are active}
+        =3    {{mode_1}, {mode_2}, and {mode_3} are active}
+        other {{mode_1}, {mode_2}, and # more are active}
         }
     </string>
 
     <!-- Modes: Summary for the modes segment, when no modes are active. [CHAR LIMIT=NONE]-->
     <string name="zen_modes_summary_none_active">
         {count, plural,
-            =0    {}
-            =1    {1 mode can turn on automatically}
-            other {# modes can turn on automatically}
+        =0    {}
+        =1    {1 mode can turn on automatically}
+        other {# modes can turn on automatically}
         }
     </string>
 
@@ -8437,25 +8437,25 @@
     <!--  Do not disturb: Summary for zen mode duration setting indicating how long dnd will last when dnd is manually toggled on [CHAR LIMIT=NONE] -->
     <string name="zen_mode_duration_summary_time_hours">
         {count, plural,
-            =1    {1 hour}
-            other {# hours}
+        =1    {1 hour}
+        other {# hours}
         }
     </string>
 
     <!--  Do not disturb: Summary for zen mode duration setting indicating how long dnd will last when toggled on -->
     <string name="zen_mode_duration_summary_time_minutes">
         {count, plural,
-            =1    {1 minute}
-            other {# minutes}
+        =1    {1 minute}
+        other {# minutes}
         }
     </string>
 
     <!-- Summary for the Sound Do not Disturb option when DND isn't currently on. [CHAR LIMIT=NONE]-->
     <string name="zen_mode_sound_summary_off">
         {count, plural,
-            =0    {Off}
-            =1    {Off / 1 schedule can turn on automatically}
-            other {Off / # schedules can turn on automatically}
+        =0    {Off}
+        =1    {Off / 1 schedule can turn on automatically}
+        other {Off / # schedules can turn on automatically}
         }
     </string>
 
@@ -8798,9 +8798,9 @@
 
     <!-- [CHAR LIMIT=100] summary text on link to 'all conversations' page, some conversations are priority -->
     <string name="priority_conversation_count">{count, plural,
-      =1      {# priority conversation}
-      other   {# priority conversations}
-    }</string>
+        =1      {# priority conversation}
+        other   {# priority conversations}
+        }</string>
 
     <!-- [CHAR LIMIT=100] preference category title -->
     <string name="important_conversations">Priority conversations</string>
@@ -8897,13 +8897,13 @@
 
     <!-- app summary of notification app list screen [CHAR LIMIT=100] -->
     <string name="notifications_sent_daily">{count, plural,
-      =1      {About # notification per day}
-      other   {About # notifications per day}
-    }</string>
+        =1      {About # notification per day}
+        other   {About # notifications per day}
+        }</string>
     <string name="notifications_sent_weekly">{count, plural,
-      =1      {About # notification per week}
-      other   {About # notifications per week}
-    }</string>
+        =1      {About # notification per week}
+        other   {About # notifications per week}
+        }</string>
     <!-- app summary of notification app list screen [CHAR LIMIT=100] -->
     <string name="notifications_sent_never">Never</string>
 
@@ -8943,7 +8943,7 @@
     <!-- Title for a warning message about security implications of enabling a notification
           listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
     <string name="notification_listener_security_warning_title">Allow notification access for
-         <xliff:g id="service" example="NotificationReader">%1$s</xliff:g>?</string>
+        <xliff:g id="service" example="NotificationReader">%1$s</xliff:g>?</string>
     <!-- Summary for a warning message about security implications of enabling a notification
           listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
     <string name="notification_listener_security_warning_summary">
@@ -9007,7 +9007,7 @@
     <!-- Title for a warning message about security implications of enabling a VR
           listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
     <string name="vr_listener_security_warning_title">Allow VR service access for
-         <xliff:g id="service" example="VrCore">%1$s</xliff:g>?</string>
+        <xliff:g id="service" example="VrCore">%1$s</xliff:g>?</string>
     <!-- Summary for a warning message about security implications of enabling a VR
           listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
     <string name="vr_listener_security_warning_summary">
@@ -9114,9 +9114,9 @@
 
     <!-- Summary of preference to manage connected work and personal apps, informing the user how many apps are connected -->
     <string name="interact_across_profiles_number_of_connected_apps">{count, plural,
-      =1      {# app connected}
-      other   {# apps connected}
-    }</string>
+        =1      {# app connected}
+        other   {# apps connected}
+        }</string>
 
     <!-- Banner title. This banner lets a user know that they need to install an app in their
     work profile in order to connect it to the corresponding personal app.
@@ -9188,9 +9188,9 @@
 
     <!-- [CHAR LIMIT=NONE] Footer listing a count of deleted channels. -->
     <string name="deleted_channels">{count, plural,
-      =1      {# category deleted}
-      other   {# categories deleted}
-    }</string>
+        =1      {# category deleted}
+        other   {# categories deleted}
+        }</string>
 
     <!-- [CHAR LIMIT=NONE] App notification settings: Block option title -->
     <string name="app_notification_block_title">Block all</string>
@@ -9351,9 +9351,9 @@
     <!-- [CHAR LIMIT=NONE] Zen mode settings: Number of conversations allowed to bypass DND -->
     <string name="zen_mode_conversations_count">
         {count, plural,
-            =0    {None}
-            =1    {1 conversation}
-            other {# conversations}
+        =0    {None}
+        =1    {1 conversation}
+        other {# conversations}
         }
     </string>
 
@@ -9385,11 +9385,11 @@
     <!-- Zen mode settings: Starred contacts summary [CHAR LIMIT=NONE] -->
     <string name="zen_mode_starred_contacts_summary_contacts">
         {count, plural, offset:2
-            =0    {None}
-            =1    {{contact_1}}
-            =2    {{contact_1} and {contact_2}}
-            =3    {{contact_1}, {contact_2}, and {contact_3}}
-            other {{contact_1}, {contact_2}, and # others}
+        =0    {None}
+        =1    {{contact_1}}
+        =2    {{contact_1} and {contact_2}}
+        =3    {{contact_1}, {contact_2}, and {contact_3}}
+        other {{contact_1}, {contact_2}, and # others}
         }
     </string>
 
@@ -9416,9 +9416,9 @@
     <!-- Zen mode settings: Senders in contacts can bypass DND summary summary [CHAR LIMIT=NONE] -->
     <string name="zen_mode_contacts_count">
         {count, plural,
-            =0    {None}
-            =1    {1 contact}
-            other {# contacts}
+        =0    {None}
+        =1    {1 contact}
+        other {# contacts}
         }
     </string>
     <!-- [CHAR LIMIT=40] Zen mode settings: Calls or messages option value: From anyone -->
@@ -9494,11 +9494,11 @@
     <!-- [CHAR LIMIT=NONE] Zen mode settings: Lists apps that can bypass DND. For example, "Nest, Messages, and 2 more can interrupt". -->
     <string name="zen_mode_apps_subtext">
         {count, plural, offset:2
-            =0    {No apps can interrupt}
-            =1    {{app_1} can interrupt}
-            =2    {{app_1} and {app_2} can interrupt}
-            =3    {{app_1}, {app_2}, and {app_3} can interrupt}
-            other {{app_1}, {app_2}, and # more can interrupt}
+        =0    {No apps can interrupt}
+        =1    {{app_1} can interrupt}
+        =2    {{app_1} and {app_2} can interrupt}
+        =3    {{app_1}, {app_2}, and {app_3} can interrupt}
+        other {{app_1}, {app_2}, and # more can interrupt}
         }
     </string>
     <!-- Modes: Entry in the "apps that can bypass DND" list that corresponds to a work profile app (e.g. "Chrome (Work)" [CHAR LIMIT=15]. -->
@@ -9533,11 +9533,11 @@
     <!-- [CHAR LIMIT=NONE] Zen mode settings: Lists apps that can bypass DND. For example, "Nest, Messages, and 2 more can interrupt". -->
     <string name="zen_mode_bypassing_apps_subtext">
         {count, plural, offset:2
-            =0    {No apps can interrupt}
-            =1    {{app_1} can interrupt}
-            =2    {{app_1} and {app_2} can interrupt}
-            =3    {{app_1}, {app_2}, and {app_3} can interrupt}
-            other {{app_1}, {app_2}, and # more can interrupt}
+        =0    {No apps can interrupt}
+        =1    {{app_1} can interrupt}
+        =2    {{app_1} and {app_2} can interrupt}
+        =3    {{app_1}, {app_2}, and {app_3} can interrupt}
+        other {{app_1}, {app_2}, and # more can interrupt}
         }
     </string>
     <!-- [CHAR LIMIT=100] Zen mode settings: Allow apps to bypass DND title-->
@@ -9551,11 +9551,11 @@
     <!-- [CHAR LIMIT=NONE] Zen mode settings: Summary for sound interruption settings -->
     <string name="zen_mode_other_sounds_summary">
         {count, plural, offset:2
-            =0    {Nothing can interrupt}
-            =1    {{sound_category_1} can interrupt}
-            =2    {{sound_category_1} and {sound_category_2} can interrupt}
-            =3    {{sound_category_1}, {sound_category_2}, and {sound_category_3} can interrupt}
-            other {{sound_category_1}, {sound_category_2}, and # more can interrupt}
+        =0    {Nothing can interrupt}
+        =1    {{sound_category_1} can interrupt}
+        =2    {{sound_category_1} and {sound_category_2} can interrupt}
+        =3    {{sound_category_1}, {sound_category_2}, and {sound_category_3} can interrupt}
+        other {{sound_category_1}, {sound_category_2}, and # more can interrupt}
         }
     </string>
     <!-- [CHAR LIMIT=120] Zen mode settings: No sounds are allowed to bypass DND -->
@@ -9599,14 +9599,14 @@
     <string name="zen_mode_summary_alarms_only_indefinite">Change to alarms only indefinitely</string>
     <!-- [CHAR LIMIT=NONE] Zen mode summary spoken when changing mode by voice: switch to alarms only for < 60 minutes. -->
     <string name="zen_mode_summary_alarms_only_by_minute">{count, plural,
-      =1      {Change to alarms only for one minute until {time}}
-      other   {Change to alarms only for # minutes (until {time})}
-    }</string>
+        =1      {Change to alarms only for one minute until {time}}
+        other   {Change to alarms only for # minutes (until {time})}
+        }</string>
     <!-- [CHAR LIMIT=NONE] Zen mode summary spoken when changing mode by voice: switch to alarms only for N hours. -->
     <string name="zen_mode_summary_alarms_only_by_hour">{count, plural,
-      =1      {Change to alarms only for one hour until {time}}
-      other   {Change to alarms only for # hours until {time}}
-    }</string>
+        =1      {Change to alarms only for one hour until {time}}
+        other   {Change to alarms only for # hours until {time}}
+        }</string>
     <!-- [CHAR LIMIT=NONE] Zen mode summary spoken when changing mode by voice: switch to alarms only until a specific time. -->
     <string name="zen_mode_summary_alarms_only_by_time">Change to alarms only until <xliff:g id="formattedTime" example="10:00 PM">%1$s</xliff:g></string>
     <!-- [CHAR LIMIT=NONE] Zen mode summary spoken when changing mode by voice: Turn on all notifications. -->
@@ -9828,13 +9828,13 @@
 
     <!-- Title, message and button for verified links dialog. -->
     <string name="app_launch_verified_links_title">{count, plural,
-      =1      {# verified link}
-      other   {# verified links}
-    }</string>
+        =1      {# verified link}
+        other   {# verified links}
+        }</string>
     <string name="app_launch_verified_links_message">{count, plural,
-      =1      {This link is verified and automatically opens in this app.}
-      other   {These links are verified and automatically open in this app.}
-    }</string>
+        =1      {This link is verified and automatically opens in this app.}
+        other   {These links are verified and automatically open in this app.}
+        }</string>
     <!-- OK button for verified links dialog. [CHAR LIMIT=20] -->
     <string name="app_launch_dialog_ok">OK</string>
     <!-- Info icon description of the verified links. [CHAR LIMIT=NONE] -->
@@ -9847,9 +9847,9 @@
 
     <!-- Title and button for supported links dialog. -->
     <string name="app_launch_supported_links_title">{count, plural,
-      =1      {# supported link}
-      other   {# supported links}
-    }</string>
+        =1      {# supported link}
+        other   {# supported links}
+        }</string>
     <!-- Add button for supported links dialog. [CHAR LIMIT=20] -->
     <string name="app_launch_supported_links_add">Add</string>
     <!-- The subtext of the link title in supported links dialog. [CHAR LIMIT=30] -->
@@ -9885,15 +9885,15 @@
 
     <!-- Permissions preference summary [CHAR LIMIT=40] -->
     <string name="notifications_categories_off">{count, plural,
-      =1      {# category turned off}
-      other   {# categories turned off}
-    }</string>
+        =1      {# category turned off}
+        other   {# categories turned off}
+        }</string>
 
     <!-- Runtime permissions preference summary.  Number of additional permissions granted. [CHAR LIMIT=40] -->
     <string name="runtime_permissions_additional_count">{count, plural,
-      =1      {# additional permission}
-      other   {# additional permissions}
-    }</string>
+        =1      {# additional permission}
+        other   {# additional permissions}
+        }</string>
 
     <!-- Runtime permissions preference summary, shown when the app has no permissions granted. [CHAR LIMIT=40] -->
     <string name="runtime_permissions_summary_no_permissions_granted">No permissions granted</string>
@@ -9915,9 +9915,9 @@
 
     <!-- Summary of number of apps that have not been used for months. [CHAR LIMIT=40]-->
     <string name="unused_apps_summary">{count, plural,
-      =1      {# unused app}
-      other   {# unused apps}
-    }</string>
+        =1      {# unused app}
+        other   {# unused apps}
+        }</string>
 
     <!-- Label for category for unused app settings for an app. [CHAR LIMIT=40]-->
     <string name="unused_apps_category">Unused app settings</string>
@@ -9985,9 +9985,9 @@
 
     <!-- Summary for allow app to open supported links [CHAR LIMIT=42] -->
     <string name="app_link_open_always_summary">{count, plural,
-      =1      {App claims to handle # link}
-      other   {App claims to handle # links}
-    }</string>
+        =1      {App claims to handle # link}
+        other   {App claims to handle # links}
+        }</string>
 
     <!-- Footer of open supported links settings [CHAR LIMIT=NONE] -->
     <string name="open_supported_links_footer">App claims to handle following links:</string>
@@ -10257,9 +10257,9 @@
 
     <!-- Description of number of apps using memory [CHAR LIMIT=NONE] -->
     <string name="memory_usage_apps_summary">{count, plural,
-      =1      {1 app used memory in the last {time}}
-      other   {# apps used memory in the last {time}}
-    }</string>
+        =1      {1 app used memory in the last {time}}
+        other   {# apps used memory in the last {time}}
+        }</string>
 
     <!-- Label for toggle that enables the profiling/aggregating of memory usage [CHAR LIMIT=80]-->
     <string name="force_enable_pss_profiling_title">Enable memory usage profiling</string>
@@ -10685,9 +10685,9 @@
 
     <!-- Description of number of apps allowed to ignore Data Saver [CHAR LIMIT=NONE] -->
     <string name="data_saver_unrestricted_summary">{count, plural,
-      =1      {1 app allowed to use unrestricted mobile data when Data Saver is on}
-      other   {# apps allowed to use unrestricted mobile data when Data Saver is on}
-    }</string>
+        =1      {1 app allowed to use unrestricted mobile data when Data Saver is on}
+        other   {# apps allowed to use unrestricted mobile data when Data Saver is on}
+        }</string>
 
     <!-- Data usage title text [CHAR LIMIT=30] -->
     <string name="data_usage_title">Primary data</string>
@@ -10712,9 +10712,9 @@
 
     <!-- Informational text about time left in billing cycle [CHAR LIMIT=60] -->
     <string name="billing_cycle_days_left">{count, plural,
-      =1      {# day left}
-      other   {# days left}
-    }</string>
+        =1      {# day left}
+        other   {# days left}
+        }</string>
 
     <!-- Informational text about time left in billing cycle [CHAR LIMIT=60] -->
     <string name="billing_cycle_none_left">No time remaining</string>
@@ -11291,9 +11291,9 @@
     <string name="enterprise_privacy_apps_count_estimation_info">Number of apps is estimated. It may not include apps installed outside of the Play Store.</string>
     <!-- Summary indicating the number of apps that a label (e.g. installed apps or apps granted a particular permission) refers to. The number shown is a minimum as there may be additional apps we do not know about. [CHAR LIMIT=NONE] -->
     <string name="enterprise_privacy_number_packages_lower_bound">{count, plural,
-      =1      {Minimum # app}
-      other   {Minimum # apps}
-    }</string>
+        =1      {Minimum # app}
+        other   {Minimum # apps}
+        }</string>
     <!-- Label indicating that the admin granted one or more apps access to the device's location. [CHAR LIMIT=NONE] -->
     <string name="enterprise_privacy_location_access">Location permissions</string>
     <!-- Label indicating that the admin granted one or more apps access to the microphone. [CHAR LIMIT=NONE] -->
@@ -11304,9 +11304,9 @@
     <string name="enterprise_privacy_enterprise_set_default_apps">Default apps</string>
     <!-- Summary indicating the number of apps that a label (e.g. installed apps or apps granted a particular permission) refers to. [CHAR LIMIT=NONE] -->
     <string name="enterprise_privacy_number_packages">{count, plural,
-      =1      {# app}
-      other   {# apps}
-    }</string>
+        =1      {# app}
+        other   {# apps}
+        }</string>
     <!-- Label explaining that the current input method was set by the admin. [CHAR LIMIT=NONE] -->
     <string name="enterprise_privacy_input_method">Default keyboard</string>
     <!-- Summary indicating the input method set by the admin. [CHAR LIMIT=NONE] -->
@@ -11327,9 +11327,9 @@
     <string name="enterprise_privacy_ca_certs_work">Trusted credentials in your work profile</string>
     <!-- Summary indicating the number of trusted CA certificates installed by the admin. The number shown is a minimum as there may be additional CA certificates we do not know about. [CHAR LIMIT=NONE] -->
     <string name="enterprise_privacy_number_ca_certs">{count, plural,
-      =1      {Minimum # CA certificate}
-      other   {Minimum # CA certificates}
-    }</string>
+        =1      {Minimum # CA certificate}
+        other   {Minimum # CA certificates}
+        }</string>
     <!-- Label explaining that the admin can lock the device and change the user's password. [CHAR LIMIT=NONE] -->
     <string name="enterprise_privacy_lock_device">Admin can lock the device and reset password</string>
     <!-- Label explaining that the admin can wipe the device remotely. [CHAR LIMIT=NONE] -->
@@ -11340,9 +11340,9 @@
     <string name="enterprise_privacy_failed_password_wipe_work">Failed password attempts before deleting work profile data</string>
     <!-- Summary indicating the number of mistyped passwords after which the device or work profile wipes itself. [CHAR LIMIT=NONE] -->
     <string name="enterprise_privacy_number_failed_password_wipe">{count, plural,
-      =1      {# attempt}
-      other   {# attempts}
-    }</string>
+        =1      {# attempt}
+        other   {# attempts}
+        }</string>
     <!-- Message indicating that the device is enterprise-managed by a Device Owner [CHAR LIMIT=NONE] -->
     <string name="do_disclosure_generic">This device is managed by your organization.</string>
     <!-- Message indicating that the device is enterprise-managed by a Device Owner [CHAR LIMIT=NONE] -->
@@ -11405,25 +11405,25 @@
     <!-- Strings for displaying which applications were set as default for specific actions. -->
     <!-- Title for the apps that have been set as default handlers of camera-related intents. [CHAR LIMIT=30] -->
     <string name="default_camera_app_title">{count, plural,
-      =1      {Camera app}
-      other   {Camera apps}
-    }</string>
+        =1      {Camera app}
+        other   {Camera apps}
+        }</string>
     <!-- Title for the app that has been set as default handler of calendar-related intents. [CHAR LIMIT=30] -->
     <string name="default_calendar_app_title">Calendar app</string>
     <!-- Title for the app that has been set as default handler of contacts-related intents. [CHAR LIMIT=30] -->
     <string name="default_contacts_app_title">Contacts app</string>
     <!-- Title for the apps that have been set as default handlers of new email intents. [CHAR LIMIT=30] -->
     <string name="default_email_app_title">{count, plural,
-      =1      {Email client app}
-      other   {Email client apps}
-    }</string>
+        =1      {Email client app}
+        other   {Email client apps}
+        }</string>
     <!-- Title for the app that has been set as default handler of geo-related intents. [CHAR LIMIT=30] -->
     <string name="default_map_app_title">Map app</string>
     <!-- Title for the apps that have been set as default handlers of call-related intents. [CHAR LIMIT=30] -->
     <string name="default_phone_app_title">{count, plural,
-      =1      {Phone app}
-      other   {Phone apps}
-    }</string>
+        =1      {Phone app}
+        other   {Phone apps}
+        }</string>
     <!-- Template for concatenating two app names -->
     <string name="app_names_concatenation_template_2"><xliff:g id="first_app_name">%1$s</xliff:g>, <xliff:g id="second_app_name">%2$s</xliff:g></string>
     <!-- Template for concatenating three app names -->
@@ -11518,9 +11518,9 @@
     <!-- Summary for passwords settings that shows how many passwords are saved for each autofill
          service. [CHAR LIMIT=NONE] -->
     <string name="autofill_passwords_count">{count, plural,
-      =1      {# password}
-      other   {# passwords}
-    }</string>
+        =1      {# password}
+        other   {# passwords}
+        }</string>
     <!-- DO NOT TRANSLATE Summary placeholder for when the passwords count is still loading or is
          unavailable. -->
     <string name="autofill_passwords_count_placeholder" translatable="false">\u2014</string>
@@ -12379,10 +12379,10 @@
     <string name="choose_sim_title">Choose a SIM to use</string>
     <!--  The body text of choose SIM activity. [CHAR LIMIT=NONE] -->
     <string name="choose_sim_text">{count, plural,
-      =1      {1 SIM is available on this device, but only one can be used at a time}
-      =2      {2 SIMs are available on this device, but only one can be used at a time}
-      other   {# SIMs are available on this device, but only one can be used at a time}
-    }</string>
+        =1      {1 SIM is available on this device, but only one can be used at a time}
+        =2      {2 SIMs are available on this device, but only one can be used at a time}
+        other   {# SIMs are available on this device, but only one can be used at a time}
+        }</string>
     <!-- String indicating that we are activating the profile [CHAR LIMIT=NONE] -->
     <string name="choose_sim_activating">Turning on<xliff:g id="ellipsis" example="...">&#8230;</xliff:g></string>
     <!-- String indicating that we failed to activate the selected profile [CHAR LIMIT=NONE] -->
@@ -12513,9 +12513,9 @@
 
     <!-- Summary for the accessibility usage preference in the Privacy page.  [CHAR LIMIT=NONE] -->
     <string name="accessibility_usage_summary">{count, plural,
-      =1      {1 app has full access to your device}
-      other   {# apps have full access to your device}
-    }</string>
+        =1      {1 app has full access to your device}
+        other   {# apps have full access to your device}
+        }</string>
 
     <!-- Label for the title on wfc disclaimer fragment. [CHAR LIMIT=40] -->
     <string name="wfc_disclaimer_title_text">Important information</string>
@@ -13268,9 +13268,9 @@
     <!-- Background Install Control UI -->
     <!-- [CHAR LIMIT=NONE] Preference Feature Summary -->
     <string name="background_install_preference_summary">{count, plural,
-    =1    {# app}
-    other {# apps}
-    }</string>
+        =1    {# app}
+        other {# apps}
+        }</string>
 
     <!-- [CHAR LIMIT=NONE] Feature Title -->
     <string name="background_install_title">Apps installed in the background</string>
@@ -13282,14 +13282,14 @@
     <string name="background_install_uninstall_button_description">Uninstall app</string>
     <!-- [CHAR LIMIT=NONE] Before time period group list title -->
     <string name="background_install_before">{count, plural,
-    =1    {Apps installed in the last # month}
-    other {Apps installed in the last # months}
-    }</string>
+        =1    {Apps installed in the last # month}
+        other {Apps installed in the last # months}
+        }</string>
     <!-- [CHAR LIMIT=NONE] After time period group list title -->
     <string name="background_install_after">{count, plural,
-    =1    {Apps installed more than # month ago}
-    other {Apps installed more than # months ago}
-    }</string>
+        =1    {Apps installed more than # month ago}
+        other {Apps installed more than # months ago}
+        }</string>
 
     <!-- App Aspect Ratio (User Aspect Ratio Override) -->
     <!-- [CHAR LIMIT=60] Aspect ratio title setting to choose app aspect ratio -->
@@ -13482,11 +13482,11 @@
     <!--Text for Stylus Pointer Icon preference -->
     <string name="show_stylus_pointer_icon">Show pointer while hovering</string>
 
-     <!-- Developer settings title: Media DRM settings screen. [CHAR LIMIT=50] -->
+    <!-- Developer settings title: Media DRM settings screen. [CHAR LIMIT=50] -->
     <string name="media_drm_settings_title">Media DRM settings</string>
-     <!-- Developer settings title: select whether to enable force Software Secure Crypto fallback. [CHAR LIMIT=50] -->
+    <!-- Developer settings title: select whether to enable force Software Secure Crypto fallback. [CHAR LIMIT=50] -->
     <string name="force_swcrypto_fallback_title">Force Software Secure Crypto</string>
-     <!-- Developer settings summary: select to force Software Secure Crypto.[CHAR LIMIT=NONE] -->
+    <!-- Developer settings summary: select to force Software Secure Crypto.[CHAR LIMIT=NONE] -->
     <string name="force_swcrypto_fallback_summary">Force DRM key management to use software-based whitebox crypto</string>
 
     <!--Text for acquire msg on UDFPS devices -->
@@ -13729,8 +13729,12 @@
     <string name="contacts_storage_device_only_preference_summary">New contacts won\'t be synced with an account</string>
     <!-- Text for explaining the selection in Contacts Storage Settings [CHAR LIMIT=NONE] -->
     <string name="contacts_storage_selection_message">Contacts will be saved to your device and synced to your account by default</string>
+    <!-- Text for error toast when there's error setting the default account in Contacts Storage Settings [CHAR LIMIT=NONE] -->
+    <string name="contacts_storage_set_default_account_error_message">Error setting the default account</string>
     <!-- Text for displaying when no account is set as default account [CHAR LIMIT=50] -->
-    <string name="contacts_storage_no_account_set">No default set</string>
+    <string name="contacts_storage_no_account_set_summary">No default set</string>
+    <!-- Text for displaying when default account is set as local only [CHAR LIMIT=50] -->
+    <string name="contacts_storage_local_account_summary">Device only</string>
     <!-- Text for add account selection message when no account has been added [CHAR LIMIT=100] -->
     <string name="contacts_storage_first_time_add_account_message">Add an account to get started</string>
 
diff --git a/src/com/android/settings/applications/contacts/ContactsStoragePreferenceController.java b/src/com/android/settings/applications/contacts/ContactsStoragePreferenceController.java
index bc6931d..6c179da 100644
--- a/src/com/android/settings/applications/contacts/ContactsStoragePreferenceController.java
+++ b/src/com/android/settings/applications/contacts/ContactsStoragePreferenceController.java
@@ -1,4 +1,3 @@
-
 /*
  * Copyright (C) 2024 The Android Open Source Project
  *
@@ -16,12 +15,13 @@
  */
 package com.android.settings.applications.contacts;
 
+import static android.provider.ContactsContract.RawContacts.DefaultAccount;
+
 import android.accounts.Account;
 import android.content.Context;
 import android.os.UserHandle;
-import android.provider.ContactsContract;
-
-import androidx.preference.PreferenceScreen;
+import android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState;
+import android.util.Log;
 
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
@@ -36,33 +36,53 @@
 
     private final AuthenticatorHelper mAuthenticatorHelper;
 
+    private DefaultAccountAndState mCurrentDefaultAccountAndState;
+
     public ContactsStoragePreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mAuthenticatorHelper = new AuthenticatorHelper(mContext,
                 new UserHandle(UserHandle.myUserId()), null);
+        try {
+            mCurrentDefaultAccountAndState =
+                    DefaultAccount.getDefaultAccountForNewContacts(mContext.getContentResolver());
+        } catch (IllegalStateException e) {
+            Log.e(TAG, "The default account is in an invalid state: " + e);
+        } catch (RuntimeException e) {
+            Log.e(TAG, "Failed to look up the default account: " + e);
+        }
     }
 
     @Override
     public int getAvailabilityStatus() {
-        return Flags.enableContactsDefaultAccountInSettings()
-            ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+        return (Flags.enableContactsDefaultAccountInSettings()
+                && mCurrentDefaultAccountAndState != null) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
     }
 
     @Override
     public CharSequence getSummary() {
-        Account currentDefaultAccount =
-                ContactsContract.Settings.getDefaultAccount(mContext.getContentResolver());
-        if (currentDefaultAccount == null) {
-            return mContext.getResources().getString(
-                    R.string.contacts_storage_no_account_set);
+        if (mCurrentDefaultAccountAndState != null) {
+            int currentDefaultAccountState = mCurrentDefaultAccountAndState.getState();
+            Account currentDefaultAccount = mCurrentDefaultAccountAndState.getAccount();
+            if (currentDefaultAccountState
+                    == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_NOT_SET) {
+                return mContext.getResources().getString(
+                        R.string.contacts_storage_no_account_set_summary);
+            } else if (currentDefaultAccountState
+                    == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_LOCAL) {
+                return mContext.getResources().getString(
+                        R.string.contacts_storage_local_account_summary);
+            } else if (currentDefaultAccount != null) {
+                String accountTypeLabel = (String) mAuthenticatorHelper.getLabelForType(mContext,
+                        currentDefaultAccount.type);
+                // If there's no account type, or the account type is the same as the
+                // current default account name, just return the account name.
+                if (accountTypeLabel == null || accountTypeLabel.equals(
+                        currentDefaultAccount.name)) {
+                    return currentDefaultAccount.name;
+                }
+                return accountTypeLabel + " | " + currentDefaultAccount.name;
+            }
         }
-        String accountTypeLabel = (String) mAuthenticatorHelper.getLabelForType(mContext,
-                currentDefaultAccount.type);
-        // If there's no account type, or the account type is the same as the
-        // current default account name, just return the account name.
-        if (accountTypeLabel == null || accountTypeLabel.equals(currentDefaultAccount.name)) {
-            return currentDefaultAccount.name;
-        }
-        return accountTypeLabel + " | " + currentDefaultAccount.name;
+        return "";
     }
 }
diff --git a/src/com/android/settings/applications/contacts/ContactsStorageSettings.java b/src/com/android/settings/applications/contacts/ContactsStorageSettings.java
index 90d593a..3d449cf 100644
--- a/src/com/android/settings/applications/contacts/ContactsStorageSettings.java
+++ b/src/com/android/settings/applications/contacts/ContactsStorageSettings.java
@@ -1,4 +1,3 @@
-
 /*
  * Copyright (C) 2020 The Android Open Source Project
  *
@@ -17,25 +16,27 @@
 package com.android.settings.applications.contacts;
 
 import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount;
 import static android.provider.Settings.ACTION_ADD_ACCOUNT;
 import static android.provider.Settings.EXTRA_ACCOUNT_TYPES;
 
 import android.accounts.Account;
-import android.accounts.AccountManager;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.os.UserHandle;
-import android.provider.ContactsContract.Settings;
-
+import android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState;
+import android.widget.Toast;
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.annotation.UiThread;
 import androidx.preference.Preference;
 import androidx.preference.Preference.OnPreferenceClickListener;
 import androidx.preference.PreferenceScreen;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.settings.R;
 import com.android.settings.accounts.AddAccountSettings;
 import com.android.settings.dashboard.DashboardFragment;
@@ -46,6 +47,7 @@
 import com.android.settingslib.widget.SelectorWithWidgetPreference;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -59,7 +61,7 @@
     private static final String TAG = "ContactsStorageSettings";
     private static final String PREF_KEY_ADD_ACCOUNT = "add_account";
     private static final String PREF_KEY_DEVICE_ONLY = "device_only_account_preference";
-    private final Map<String, Account> mAccountMap = new HashMap<>();
+    private final Map<String, DefaultAccountAndState> mAccountMap = new HashMap<>();
     private AuthenticatorHelper mAuthenticatorHelper;
 
     @Override
@@ -73,13 +75,18 @@
     @Override
     public void onRadioButtonClicked(@NonNull SelectorWithWidgetPreference selectedPref) {
         final String selectedPreferenceKey = selectedPref.getKey();
-        // Check if current provider is different from the selected provider.
+        // Check if current account is different from the selected account.
         for (String preferenceKey : mAccountMap.keySet()) {
             if (selectedPreferenceKey.equals(preferenceKey)) {
-                selectedPref.setChecked(true);
-                //TODO: Call DefaultAccount.setDefaultAccountForNewContacts once
-                // the implementation is ready.
-                Settings.setDefaultAccount(getContentResolver(), mAccountMap.get(preferenceKey));
+                try {
+                    DefaultAccount.setDefaultAccountForNewContacts(getContentResolver(),
+                            mAccountMap.get(preferenceKey));
+                    selectedPref.setChecked(true);
+                } catch (RuntimeException e) {
+                    Toast.makeText(getContext(),
+                            R.string.contacts_storage_set_default_account_error_message,
+                            Toast.LENGTH_SHORT).show();
+                }
             } else {
                 SelectorWithWidgetPreference unSelectedPreference =
                         getPreferenceScreen().findPreference(preferenceKey);
@@ -92,10 +99,7 @@
 
     public boolean onPreferenceClick(@NonNull Preference preference) {
         if (PREF_KEY_ADD_ACCOUNT.equals(preference.getKey())) {
-            Resources resources = Resources.getSystem();
-            String[] accountTypesArray =
-                    resources.getStringArray(
-                            com.android.internal.R.array.config_rawContactsEligibleDefaultAccountTypes);
+            String[] accountTypesArray = getEligibleAccountTypes();
             Intent intent = new Intent(ACTION_ADD_ACCOUNT);
             intent.setClass(getContext(), AddAccountSettings.class);
             intent.putExtra(EXTRA_ACCOUNT_TYPES, accountTypesArray);
@@ -108,7 +112,7 @@
 
     @Override
     public void onCreatePreferences(@NonNull Bundle savedInstanceState,
-        @NonNull String rootKey) {
+            @NonNull String rootKey) {
         super.onCreatePreferences(savedInstanceState, rootKey);
         refreshUI();
     }
@@ -119,48 +123,60 @@
         // when creating eligible account preferences.
         mAccountMap.clear();
         final PreferenceScreen screen = getPreferenceScreen();
-        AccountManager accountManager = AccountManager.get(getPrefContext());
-        //TODO: Call DefaultAccount.getDefaultAccountForNewContacts once
-        // implementation is ready.
-        Account[] accounts = accountManager.getAccounts();
-
-        for (int i = 0; i < accounts.length; i++) {
-            screen.addPreference(buildAccountPreference(accounts[i], i));
+        List<Account> accounts = DefaultAccount.getEligibleCloudAccounts(getContentResolver());
+        for (int i = 0; i < accounts.size(); i++) {
+            screen.addPreference(buildAccountPreference(accounts.get(i), /*order=*/i));
         }
-        screen.addPreference(buildAddAccountPreference(accounts.length == 0));
+        // If there's no eligible account types, the "Add Account" preference should
+        // not be shown to the users.
+        if (getEligibleAccountTypes().length > 0) {
+            screen.addPreference(buildAddAccountPreference(accounts.isEmpty()));
+        }
         setupDeviceOnlyPreference();
-
-        //TODO: Call DefaultAccount.ListEligibleCloudAccounts once the
-        // implementation is ready. And differentiate device only account vs account not set case.
-        Account currentDefaultAccount = Settings.getDefaultAccount(getContentResolver());
-        String preferenceKey = currentDefaultAccount != null ?
-                String.valueOf(currentDefaultAccount.hashCode()) : PREF_KEY_DEVICE_ONLY;
-        SelectorWithWidgetPreference preference = getPreferenceScreen().findPreference(
-                preferenceKey);
-        if (preference != null) {
-            preference.setChecked(true);
-        }
+        setDefaultAccountPreference();
     }
 
     private void setupDeviceOnlyPreference() {
         SelectorWithWidgetPreference preference = findPreference(PREF_KEY_DEVICE_ONLY);
         if (preference != null) {
             preference.setOnClickListener(this);
-            mAccountMap.put(PREF_KEY_DEVICE_ONLY, null);
+            mAccountMap.put(PREF_KEY_DEVICE_ONLY, DefaultAccountAndState.ofLocal());
+        }
+    }
+
+    private void setDefaultAccountPreference() {
+        DefaultAccountAndState currentDefaultAccountAndState =
+                DefaultAccount.getDefaultAccountForNewContacts(getContentResolver());
+        String preferenceKey = getAccountHashCode(currentDefaultAccountAndState);
+        Account currentDefaultAccount = currentDefaultAccountAndState.getAccount();
+
+        // Set the current default account preference to be checked if found among existing
+        // preferences. If not, then create a new preference for default account.
+        SelectorWithWidgetPreference preference = null;
+        if (mAccountMap.containsKey(preferenceKey)) {
+            preference = getPreferenceScreen().findPreference(preferenceKey);
+        } else if (preferenceKey != null && currentDefaultAccount != null) {
+            preference = buildAccountPreference(currentDefaultAccount, mAccountMap.size());
+            getPreferenceScreen().addPreference(preference);
+        }
+        if (preference != null) {
+            preference.setChecked(true);
         }
     }
 
     //TODO: Add preference category on account preferences.
-    private Preference buildAccountPreference(Account account, int order) {
+    private SelectorWithWidgetPreference buildAccountPreference(Account account, int order) {
         SelectorWithWidgetPreference preference = new SelectorWithWidgetPreference(
                 getPrefContext());
+        DefaultAccountAndState accountAndState = DefaultAccountAndState.ofCloud(account);
+        String preferenceKey = getAccountHashCode(accountAndState);
         preference.setTitle(mAuthenticatorHelper.getLabelForType(getPrefContext(), account.type));
         preference.setIcon(mAuthenticatorHelper.getDrawableForType(getPrefContext(), account.type));
         preference.setSummary(account.name);
-        preference.setKey(String.valueOf(account.hashCode()));
+        preference.setKey(preferenceKey);
         preference.setOnClickListener(this);
         preference.setOrder(order);
-        mAccountMap.put(String.valueOf(account.hashCode()), account);
+        mAccountMap.put(preferenceKey, accountAndState);
         return preference;
     }
 
@@ -178,6 +194,29 @@
         return preference;
     }
 
+    private @Nullable String getAccountHashCode(DefaultAccountAndState currentDefaultAccountAndState) {
+        Account currentDefaultAccount = currentDefaultAccountAndState.getAccount();
+        if (currentDefaultAccount != null && (currentDefaultAccountAndState.getState()
+                == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD
+                || currentDefaultAccountAndState.getState()
+                == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_SIM)) {
+            return String.valueOf(currentDefaultAccount.hashCode());
+        } else if (currentDefaultAccountAndState.getState()
+                == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_LOCAL) {
+            return PREF_KEY_DEVICE_ONLY;
+        } else {
+            // If the account is not set or in error state, it should just return null and won't
+            // set the checked status in radio button.
+            return null;
+        }
+    }
+
+    @VisibleForTesting
+    String[] getEligibleAccountTypes() {
+        return Resources.getSystem().getStringArray(
+                com.android.internal.R.array.config_rawContactsEligibleDefaultAccountTypes);
+    }
+
     @Override
     protected int getPreferenceScreenResId() {
         return R.xml.contacts_storage_settings;
diff --git a/tests/robotests/src/com/android/settings/applications/contacts/ContactsStoragePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/contacts/ContactsStoragePreferenceControllerTest.java
index a934cba..f55cbb4 100644
--- a/tests/robotests/src/com/android/settings/applications/contacts/ContactsStoragePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/contacts/ContactsStoragePreferenceControllerTest.java
@@ -16,8 +16,9 @@
 
 package com.android.settings.applications.contacts;
 
-import static android.provider.ContactsContract.Settings.KEY_DEFAULT_ACCOUNT;
-import static android.provider.ContactsContract.Settings.QUERY_DEFAULT_ACCOUNT_METHOD;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.KEY_DEFAULT_ACCOUNT_STATE;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD;
+import static android.provider.ContactsContract.Settings;
 
 import static com.android.settings.core.BasePreferenceController.AVAILABLE;
 import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
@@ -28,25 +29,26 @@
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.when;
 
-
 import android.accounts.Account;
 import android.accounts.AccountManager;
+import android.content.ContentProviderClient;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.platform.test.annotations.EnableFlags;
+import android.platform.test.annotations.RequiresFlagsDisabled;
+import android.platform.test.flag.junit.CheckFlagsRule;
+import android.platform.test.flag.junit.DeviceFlagsValueProvider;
 import android.platform.test.flag.junit.SetFlagsRule;
 import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState;
 
 import com.android.settings.R;
 import com.android.settings.flags.Flags;
 import com.android.settings.testutils.shadow.ShadowAuthenticationHelper;
 
 import org.junit.Before;
-import android.platform.test.annotations.RequiresFlagsDisabled;
-import android.platform.test.flag.junit.CheckFlagsRule;
-import android.platform.test.flag.junit.DeviceFlagsValueProvider;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -62,11 +64,6 @@
 
     private static final String CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY =
             "contacts_default_account";
-    private static final Account TEST_ACCOUNT1 = new Account("test@gmail.com", "type1");
-
-    private static final Account TEST_ACCOUNT2 = new Account("test@samsung.com", "type2");
-
-    private static final Account TEST_ACCOUNT3 = new Account("LABEL3", "type3");
 
     @Rule
     public final MockitoRule mockito = MockitoJUnit.rule();
@@ -84,6 +81,9 @@
     private ContentResolver mContentResolver;
 
     @Mock
+    private ContentProviderClient mContentProviderClient;
+
+    @Mock
     private Resources mResources;
 
     @Mock
@@ -94,9 +94,15 @@
     @Before
     public void setUp() throws Exception {
         when(mContext.getContentResolver()).thenReturn(mContentResolver);
+        when(mContentResolver.acquireContentProviderClient(
+                eq(ContactsContract.AUTHORITY_URI))).thenReturn(mContentProviderClient);
         when(mContext.getSystemService(eq(Context.ACCOUNT_SERVICE))).thenReturn(mAccountManager);
         when(mAccountManager.getAccountsAsUser(anyInt())).thenReturn(new Account[]{});
-
+        Bundle bundle = new Bundle();
+        bundle.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_NOT_SET);
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(bundle);
         mPreferenceController = new ContactsStoragePreferenceController(mContext,
                 CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
     }
@@ -104,13 +110,39 @@
     @Test
     @EnableFlags(Flags.FLAG_ENABLE_CONTACTS_DEFAULT_ACCOUNT_IN_SETTINGS)
     public void getAvailabilityStatus_flagIsOn_shouldReturnAvailable() {
-
         assertThat(mPreferenceController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
     }
 
     @Test
     @RequiresFlagsDisabled(Flags.FLAG_ENABLE_CONTACTS_DEFAULT_ACCOUNT_IN_SETTINGS)
     public void getAvailabilityStatus_flagIsOff_shouldReturnConditionallyUnavailable() {
+        assertThat(mPreferenceController.getAvailabilityStatus()).isEqualTo(
+                CONDITIONALLY_UNAVAILABLE);
+    }
+
+    @Test
+    @EnableFlags(Flags.FLAG_ENABLE_CONTACTS_DEFAULT_ACCOUNT_IN_SETTINGS)
+    public void getAvailabilityStatus_illegalStateExceptionThrown_shouldReturnConditionallyUnavailable()
+            throws Exception {
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenThrow(new IllegalStateException());
+
+        mPreferenceController = new ContactsStoragePreferenceController(mContext,
+                CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
+
+        assertThat(mPreferenceController.getAvailabilityStatus()).isEqualTo(
+                CONDITIONALLY_UNAVAILABLE);
+    }
+
+    @Test
+    @EnableFlags(Flags.FLAG_ENABLE_CONTACTS_DEFAULT_ACCOUNT_IN_SETTINGS)
+    public void getAvailabilityStatus_runtimeExceptionThrown_shouldReturnConditionallyUnavailable()
+            throws Exception {
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenThrow(new RuntimeException());
+
+        mPreferenceController = new ContactsStoragePreferenceController(mContext,
+                CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
 
         assertThat(mPreferenceController.getAvailabilityStatus()).isEqualTo(
                 CONDITIONALLY_UNAVAILABLE);
@@ -118,43 +150,77 @@
 
     @Test
     public void getSummary_noAccountIsSetAsDefault_shouldReturnNoAccountSetSummary() {
-        Bundle bundle = new Bundle();
-        bundle.putParcelable(KEY_DEFAULT_ACCOUNT, null);
-        when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
-                eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
         when(mContext.getResources()).thenReturn(mResources);
-        when(mResources.getString(eq(R.string.contacts_storage_no_account_set))).thenReturn(
+        when(mResources.getString(eq(R.string.contacts_storage_no_account_set_summary))).thenReturn(
                 "No default set");
 
+        // Fetch the default account from CP2.
+        mPreferenceController = new ContactsStoragePreferenceController(mContext,
+                CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
+
         assertThat(mPreferenceController.getSummary()).isEqualTo("No default set");
     }
 
     @Test
-    public void getSummary_googleAccountIsSetAsDefault_shouldReturnGoogleAccountTypeAndAccountName() {
+    public void getSummary_localAccountIsSetAsDefault_shouldReturnLocalAccountSetSummary()
+            throws Exception {
         Bundle bundle = new Bundle();
-        bundle.putParcelable(KEY_DEFAULT_ACCOUNT, TEST_ACCOUNT1);
-        when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
-                eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
+        bundle.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_LOCAL);
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(bundle);
+        when(mContext.getResources()).thenReturn(mResources);
+        when(mResources.getString(eq(R.string.contacts_storage_local_account_summary))).thenReturn(
+                "Device only");
+        mPreferenceController = new ContactsStoragePreferenceController(mContext,
+                CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
+
+        assertThat(mPreferenceController.getSummary()).isEqualTo("Device only");
+    }
+
+    @Test
+    public void getSummary_googleAccountIsSetAsDefault_shouldReturnGoogleAccountTypeAndAccountName()
+            throws Exception {
+        Bundle bundle = new Bundle();
+        bundle.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD);
+        bundle.putString(Settings.ACCOUNT_TYPE, "type1");
+        bundle.putString(Settings.ACCOUNT_NAME, "test@gmail.com");
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(bundle);
+        mPreferenceController = new ContactsStoragePreferenceController(mContext,
+                CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
 
         assertThat(mPreferenceController.getSummary()).isEqualTo("LABEL1 | test@gmail.com");
     }
 
     @Test
-    public void getSummary_samsungAccountIsSetAsDefault_shouldReturnSamsungAccountTypeAndAccountName() {
+    public void getSummary_samsungAccountIsSetAsDefault_shouldReturnSamsungAccountTypeAndAccountName()
+            throws Exception {
         Bundle bundle = new Bundle();
-        bundle.putParcelable(KEY_DEFAULT_ACCOUNT, TEST_ACCOUNT2);
-        when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
-                eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
+        bundle.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD);
+        bundle.putString(Settings.ACCOUNT_TYPE, "type2");
+        bundle.putString(Settings.ACCOUNT_NAME, "test@samsung.com");
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(bundle);
+        mPreferenceController = new ContactsStoragePreferenceController(mContext,
+                CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
 
         assertThat(mPreferenceController.getSummary()).isEqualTo("LABEL2 | test@samsung.com");
     }
 
     @Test
-    public void getSummary_accountLabelSameAsAccountName_onlyReturnAccountName() {
+    public void getSummary_accountLabelSameAsAccountName_onlyReturnAccountName() throws Exception {
         Bundle bundle = new Bundle();
-        bundle.putParcelable(KEY_DEFAULT_ACCOUNT, TEST_ACCOUNT3);
-        when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
-                eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
+        bundle.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD);
+        bundle.putString(Settings.ACCOUNT_TYPE, "type3");
+        bundle.putString(Settings.ACCOUNT_NAME, "LABEL3");
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(bundle);
+        mPreferenceController = new ContactsStoragePreferenceController(mContext,
+                CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
 
         // Since package name and account name is the same, we only return account name.
         assertThat(mPreferenceController.getSummary()).isEqualTo("LABEL3");
diff --git a/tests/robotests/src/com/android/settings/applications/contacts/ContactsStorageSettingsTest.java b/tests/robotests/src/com/android/settings/applications/contacts/ContactsStorageSettingsTest.java
index 785ef4a..a8c86e1 100644
--- a/tests/robotests/src/com/android/settings/applications/contacts/ContactsStorageSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/contacts/ContactsStorageSettingsTest.java
@@ -15,16 +15,17 @@
  */
 package com.android.settings.applications.contacts;
 
-import static android.provider.ContactsContract.Settings.KEY_DEFAULT_ACCOUNT;
-import static android.provider.ContactsContract.Settings.QUERY_DEFAULT_ACCOUNT_METHOD;
-import static android.provider.ContactsContract.Settings.SET_DEFAULT_ACCOUNT_METHOD;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.KEY_DEFAULT_ACCOUNT_STATE;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.KEY_ELIGIBLE_DEFAULT_ACCOUNTS;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.SET_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD;
 import static android.provider.Settings.ACTION_ADD_ACCOUNT;
 import static android.provider.Settings.EXTRA_ACCOUNT_TYPES;
 
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
@@ -33,14 +34,17 @@
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.app.settings.SettingsEnums;
+import android.content.ContentProviderClient;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState;
 import android.provider.SearchIndexableResource;
 
+import androidx.preference.Preference;
 import androidx.preference.PreferenceManager;
 import androidx.preference.PreferenceScreen;
 import androidx.test.core.app.ApplicationProvider;
@@ -63,6 +67,7 @@
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @RunWith(RobolectricTestRunner.class)
@@ -76,6 +81,8 @@
 
     private static final Account TEST_ACCOUNT2 = new Account("test@samsung.com", "type2");
 
+    private static final Account TEST_ACCOUNT3 = new Account("test@outlook.com", "type3");
+
     @Rule
     public final MockitoRule mockito = MockitoJUnit.rule();
     @Spy
@@ -83,8 +90,7 @@
     @Mock
     private ContentResolver mContentResolver;
     @Mock
-    private AccountManager mAccountManager;
-
+    private ContentProviderClient mContentProviderClient;
     private PreferenceManager mPreferenceManager;
     private TestContactsStorageSettings mContactsStorageSettings;
     private PreferenceScreen mScreen;
@@ -92,8 +98,8 @@
     @Before
     public void setUp() throws Exception {
         mContactsStorageSettings = spy(new TestContactsStorageSettings(mContext, mContentResolver));
-        when(mContext.getSystemService(eq(Context.ACCOUNT_SERVICE))).thenReturn(mAccountManager);
-        when(mAccountManager.getAccountsAsUser(anyInt())).thenReturn(new Account[]{});
+        when(mContentResolver.acquireContentProviderClient(
+                eq(ContactsContract.AUTHORITY_URI))).thenReturn(mContentProviderClient);
         mPreferenceManager = new PreferenceManager(mContext);
         when(mContactsStorageSettings.getPreferenceManager()).thenReturn(mPreferenceManager);
         mScreen = spy(new PreferenceScreen(mContext, /* attrs= */ null));
@@ -115,12 +121,17 @@
     }
 
     @Test
-    public void verifyDeviceOnlyPreference_onClick_setDefaultAccountToNull() {
-        when(mAccountManager.getAccounts()).thenReturn(new Account[]{});
-        Bundle bundle = new Bundle();
-        bundle.putParcelable(KEY_DEFAULT_ACCOUNT, null);
-        when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
-                eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
+    public void verifyDeviceOnlyPreference_onClick_setDefaultAccountToNull() throws Exception {
+        Bundle currentDefaultAccount = new Bundle();
+        currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_NOT_SET);
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(currentDefaultAccount);
+        Bundle eligibleAccountBundle = new Bundle();
+        eligibleAccountBundle.putParcelableArrayList(KEY_ELIGIBLE_DEFAULT_ACCOUNTS,
+                new ArrayList<>());
+        when(mContentProviderClient.call(eq(QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD), any(),
+                any())).thenReturn(eligibleAccountBundle);
 
         PreferenceScreen settingScreen = mPreferenceManager.inflateFromResource(mContext,
                 R.xml.contacts_storage_settings, mScreen);
@@ -139,18 +150,27 @@
 
         assertThat(deviceOnlyPreference.isChecked()).isTrue();
         ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class);
-        verify(mContentResolver).call(eq(ContactsContract.AUTHORITY_URI),
-                eq(SET_DEFAULT_ACCOUNT_METHOD), any(), captor.capture());
+        verify(mContentProviderClient).call(eq(SET_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                captor.capture());
         Bundle accountBundle = captor.getValue();
         assertThat(accountBundle.getString(ContactsContract.Settings.ACCOUNT_NAME)).isNull();
         assertThat(accountBundle.getString(ContactsContract.Settings.ACCOUNT_TYPE)).isNull();
     }
 
     @Test
-    public void verifyAddAccountPreference_onClick_startAddAccountActivity() {
-        when(mAccountManager.getAccounts()).thenReturn(new Account[]{});
-        when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
-                eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(Bundle.EMPTY);
+    public void verifyAddAccountPreference_eligibleAccountsAvailable_startAddAccountActivityOnClick()
+            throws Exception {
+        Bundle currentDefaultAccount = new Bundle();
+        currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_NOT_SET);
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(currentDefaultAccount);
+        Bundle eligibleAccountBundle = new Bundle();
+        eligibleAccountBundle.putParcelableArrayList(KEY_ELIGIBLE_DEFAULT_ACCOUNTS,
+                new ArrayList<>());
+        when(mContentProviderClient.call(eq(QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD), any(),
+                any())).thenReturn(eligibleAccountBundle);
+        mContactsStorageSettings.setEligibleAccountTypes(new String[]{"com.google"});
 
         mContactsStorageSettings.refreshUI();
 
@@ -167,16 +187,45 @@
         assertThat(addAccountIntent.getComponent().getClassName()).isEqualTo(
                 AddAccountSettings.class.getCanonicalName());
         String[] eligibleAccounts = (String[]) addAccountIntent.getExtra(EXTRA_ACCOUNT_TYPES);
-        assertThat(eligibleAccounts).isEmpty();
+        assertThat(List.of(eligibleAccounts)).containsExactly("com.google");
     }
 
     @Test
-    public void verifyEligibleAccountPreference_onClick_setSelectedDefaultAccount() {
-        when(mAccountManager.getAccounts()).thenReturn(new Account[]{TEST_ACCOUNT1, TEST_ACCOUNT2});
-        Bundle bundle = new Bundle();
-        bundle.putParcelable(KEY_DEFAULT_ACCOUNT, TEST_ACCOUNT2);
-        when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
-                eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
+    public void verifyAddAccountPreference_noEligibleAccountsAvailable_dontShowPreference()
+            throws Exception {
+        Bundle currentDefaultAccount = new Bundle();
+        currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_NOT_SET);
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(currentDefaultAccount);
+        Bundle eligibleAccountBundle = new Bundle();
+        eligibleAccountBundle.putParcelableArrayList(KEY_ELIGIBLE_DEFAULT_ACCOUNTS,
+                new ArrayList<>());
+        when(mContentProviderClient.call(eq(QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD), any(),
+                any())).thenReturn(eligibleAccountBundle);
+        mContactsStorageSettings.setEligibleAccountTypes(new String[]{});
+
+        mContactsStorageSettings.refreshUI();
+
+        Preference addAccountPreference = mScreen.findPreference(PREF_KEY_ADD_ACCOUNT);
+        assertThat(addAccountPreference).isNull();
+    }
+
+    @Test
+    public void verifyEligibleAccountPreference_onClick_setSelectedDefaultAccount()
+            throws Exception {
+        Bundle currentDefaultAccount = new Bundle();
+        currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_LOCAL);
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(currentDefaultAccount);
+        Bundle eligibleAccountBundle = new Bundle();
+        ArrayList<Account> eligibleAccounts = new ArrayList<>(
+                List.of(TEST_ACCOUNT1, TEST_ACCOUNT2));
+        eligibleAccountBundle.putParcelableArrayList(KEY_ELIGIBLE_DEFAULT_ACCOUNTS,
+                eligibleAccounts);
+        when(mContentProviderClient.call(eq(QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD), any(),
+                any())).thenReturn(eligibleAccountBundle);
 
         mContactsStorageSettings.refreshUI();
 
@@ -197,8 +246,8 @@
         assertThat(account2Preference.isChecked()).isTrue();
 
         ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class);
-        verify(mContentResolver).call(eq(ContactsContract.AUTHORITY_URI),
-                eq(SET_DEFAULT_ACCOUNT_METHOD), any(), captor.capture());
+        verify(mContentProviderClient).call(eq(SET_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                captor.capture());
         Bundle setAccountBundle = captor.getValue();
         assertThat(setAccountBundle.getString(ContactsContract.Settings.ACCOUNT_NAME)).isEqualTo(
                 "test@samsung.com");
@@ -207,6 +256,49 @@
     }
 
     @Test
+    public void verifyAccountPreference_defaultAccountIsNotEligibleCloudAccount_createNewDefaultAccountPreference()
+            throws Exception {
+        Bundle currentDefaultAccount = new Bundle();
+        currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD);
+        currentDefaultAccount.putString(ContactsContract.Settings.ACCOUNT_NAME, TEST_ACCOUNT3.name);
+        currentDefaultAccount.putString(ContactsContract.Settings.ACCOUNT_TYPE, TEST_ACCOUNT3.type);
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(currentDefaultAccount);
+        Bundle eligibleAccountBundle = new Bundle();
+        ArrayList<Account> eligibleAccounts = new ArrayList<>(
+                List.of(TEST_ACCOUNT1, TEST_ACCOUNT2));
+        eligibleAccountBundle.putParcelableArrayList(KEY_ELIGIBLE_DEFAULT_ACCOUNTS,
+                eligibleAccounts);
+        when(mContentProviderClient.call(eq(QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD), any(),
+                any())).thenReturn(eligibleAccountBundle);
+
+        mContactsStorageSettings.refreshUI();
+
+        SelectorWithWidgetPreference account1Preference = mScreen.findPreference(
+                String.valueOf(TEST_ACCOUNT1.hashCode()));
+        assertThat(account1Preference.getTitle()).isEqualTo("LABEL1");
+        assertThat(account1Preference.getSummary()).isEqualTo("test@gmail.com");
+        assertThat(account1Preference.getIcon()).isNotNull();
+
+        SelectorWithWidgetPreference account2Preference = mScreen.findPreference(
+                String.valueOf(TEST_ACCOUNT2.hashCode()));
+        assertThat(account2Preference.getTitle()).isEqualTo("LABEL2");
+        assertThat(account2Preference.getSummary()).isEqualTo("test@samsung.com");
+        assertThat(account2Preference.getIcon()).isNotNull();
+
+        SelectorWithWidgetPreference account3Preference = mScreen.findPreference(
+                String.valueOf(TEST_ACCOUNT3.hashCode()));
+        assertThat(account3Preference.getTitle()).isEqualTo("LABEL3");
+        assertThat(account3Preference.getSummary()).isEqualTo("test@outlook.com");
+        assertThat(account3Preference.getIcon()).isNotNull();
+
+        assertThat(account1Preference.isChecked()).isFalse();
+        assertThat(account2Preference.isChecked()).isFalse();
+        assertThat(account3Preference.isChecked()).isTrue();
+    }
+
+    @Test
     public void searchIndexProvider_shouldIndexResource() {
         final List<SearchIndexableResource> indexRes =
                 ContactsStorageSettings.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex(
@@ -220,6 +312,7 @@
     private static class TestContactsStorageSettings extends ContactsStorageSettings {
         private final Context mContext;
         private final ContentResolver mContentResolver;
+        private String[] mEligibleAccountTypes;
 
         TestContactsStorageSettings(Context context, ContentResolver contentResolver) {
             mContext = context;
@@ -236,5 +329,16 @@
             // Override it so we can access this method in test
             return mContentResolver;
         }
+
+        @Override
+        String[] getEligibleAccountTypes() {
+            return mEligibleAccountTypes == null ? Resources.getSystem().getStringArray(
+                    com.android.internal.R.array.config_rawContactsEligibleDefaultAccountTypes)
+                    : mEligibleAccountTypes;
+        }
+
+        public void setEligibleAccountTypes(String[] eligibleAccountTypes) {
+            mEligibleAccountTypes = eligibleAccountTypes;
+        }
     }
 }