diff --git a/core/api/current.txt b/core/api/current.txt index e866b74980460..2d84ef146455e 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -34949,6 +34949,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 9e47e96c97db8..3373d4b334969 100755 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -262,6 +262,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"; @@ -9181,6 +9182,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 28df119b1734d..5e66bff449331 100644 --- a/core/java/android/provider/ContactsContract.java +++ b/core/java/android/provider/ContactsContract.java @@ -8692,6 +8692,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 87d83e48b72ec..4f8b317516727 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -753,7 +753,16 @@ android:permissionGroup="android.permission-group.UNDEFINED" android:label="@string/permlab_writeContacts" android:description="@string/permdesc_writeContacts" - android:protectionLevel="dangerous" /> + android:protectionLevel="dangerous" /> + + +