diff --git a/core/api/current.txt b/core/api/current.txt index ab2cf3a99f3df..4c05f33316204 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -34900,6 +34900,7 @@ package android.provider { } public static final class ContactsContract.Settings implements android.provider.ContactsContract.SettingsColumns { + method @Nullable public static android.accounts.Account getDefaultAccount(@NonNull android.content.ContentResolver); field public static final String ACTION_SET_DEFAULT_ACCOUNT = "android.provider.action.SET_DEFAULT_ACCOUNT"; field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/setting"; field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/setting"; diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 1c55afb94684f..a044256552d16 100755 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -261,6 +261,7 @@ package android { field public static final String SERIAL_PORT = "android.permission.SERIAL_PORT"; field public static final String SET_ACTIVITY_WATCHER = "android.permission.SET_ACTIVITY_WATCHER"; field public static final String SET_CLIP_SOURCE = "android.permission.SET_CLIP_SOURCE"; + field public static final String SET_DEFAULT_ACCOUNT_FOR_CONTACTS = "android.permission.SET_DEFAULT_ACCOUNT_FOR_CONTACTS"; field public static final String SET_HARMFUL_APP_WARNINGS = "android.permission.SET_HARMFUL_APP_WARNINGS"; field public static final String SET_MEDIA_KEY_LISTENER = "android.permission.SET_MEDIA_KEY_LISTENER"; field public static final String SET_ORIENTATION = "android.permission.SET_ORIENTATION"; @@ -9117,6 +9118,10 @@ package android.provider { field @Deprecated public static final String STATE = "state"; } + public static final class ContactsContract.Settings implements android.provider.ContactsContract.SettingsColumns { + method @RequiresPermission(android.Manifest.permission.SET_DEFAULT_ACCOUNT_FOR_CONTACTS) public static void setDefaultAccount(@NonNull android.content.ContentResolver, @Nullable android.accounts.Account); + } + public static final class ContactsContract.SimContacts { method @RequiresPermission("android.contacts.permission.MANAGE_SIM_ACCOUNTS") public static void addSimAccount(@NonNull android.content.ContentResolver, @NonNull String, @NonNull String, int, int); method @RequiresPermission("android.contacts.permission.MANAGE_SIM_ACCOUNTS") public static void removeSimAccounts(@NonNull android.content.ContentResolver, int); diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java index 570d73d4293b2..0108df2a1092c 100644 --- a/core/java/android/provider/ContactsContract.java +++ b/core/java/android/provider/ContactsContract.java @@ -8697,6 +8697,56 @@ public final class ContactsContract { @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_SET_DEFAULT_ACCOUNT = "android.provider.action.SET_DEFAULT_ACCOUNT"; + + /** + * The method to invoke in order to set the default account for new contacts. + * + * @hide + */ + public static final String SET_DEFAULT_ACCOUNT_METHOD = "setDefaultAccount"; + + /** + * The method to invoke in order to query the default account for new contacts. + * + * @hide + */ + public static final String QUERY_DEFAULT_ACCOUNT_METHOD = "queryDefaultAccount"; + + /** + * Key in the incoming Bundle for the default account. + * + * @hide + */ + public static final String KEY_DEFAULT_ACCOUNT = "key_default_account"; + + /** + * Return the account that was set to default account for new contacts. + */ + @Nullable + public static Account getDefaultAccount(@NonNull ContentResolver resolver) { + Bundle response = resolver.call(ContactsContract.AUTHORITY_URI, + QUERY_DEFAULT_ACCOUNT_METHOD, null, null); + return response.getParcelable(KEY_DEFAULT_ACCOUNT); + } + + /** + * Set the account to be the default account for new contacts. + * + * @param account the account to be set to default. + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.SET_DEFAULT_ACCOUNT_FOR_CONTACTS) + public static void setDefaultAccount(@NonNull ContentResolver resolver, + @Nullable Account account) { + Bundle extras = new Bundle(); + if (account != null) { + extras.putString(ACCOUNT_NAME, account.name); + extras.putString(ACCOUNT_TYPE, account.type); + } + + resolver.call(ContactsContract.AUTHORITY_URI, SET_DEFAULT_ACCOUNT_METHOD, null, extras); + } } /** diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 85ae9159edfed..805af24f07bf0 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -746,7 +746,16 @@ android:permissionGroup="android.permission-group.UNDEFINED" android:label="@string/permlab_writeContacts" android:description="@string/permdesc_writeContacts" - android:protectionLevel="dangerous" /> + android:protectionLevel="dangerous" /> + + +