Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 92228715 authored by Liefu Liu's avatar Liefu Liu Committed by Android (Google) Code Review
Browse files

Merge "Added getDefaultAccountForNewContacts and setDefaultAccountForNewContacts APIs" into main

parents 10542429 8e554874
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -36992,7 +36992,7 @@ package android.provider {
  }
  @FlaggedApi("android.provider.new_default_account_api_enabled") public static final class ContactsContract.RawContacts.DefaultAccount {
    ctor public ContactsContract.RawContacts.DefaultAccount();
    method @FlaggedApi("android.provider.new_default_account_api_enabled") @NonNull public static android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState getDefaultAccountForNewContacts(@NonNull android.content.ContentResolver);
  }
  @FlaggedApi("android.provider.new_default_account_api_enabled") public static final class ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState {
+4 −0
Original line number Diff line number Diff line
@@ -11950,6 +11950,10 @@ package android.provider {
    field @Deprecated public static final String STATE = "state";
  }
  @FlaggedApi("android.provider.new_default_account_api_enabled") public static final class ContactsContract.RawContacts.DefaultAccount {
    method @FlaggedApi("android.provider.new_default_account_api_enabled") @RequiresPermission(android.Manifest.permission.SET_DEFAULT_ACCOUNT_FOR_CONTACTS) public static void setDefaultAccountForNewContacts(@NonNull android.content.ContentResolver, @NonNull android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState);
  }
  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);
  }
+128 −24
Original line number Diff line number Diff line
@@ -3027,6 +3027,46 @@ public final class ContactsContract {
         */
        @FlaggedApi(Flags.FLAG_NEW_DEFAULT_ACCOUNT_API_ENABLED)
        public static final class DefaultAccount {
            /**
             * Key in the outgoing Bundle for the default account list.
             *
             * @hide
             */
            public static final String KEY_ELIGIBLE_DEFAULT_ACCOUNTS =
                    "key_eligible_default_accounts";
            /**
             * The method to invoke in order to query eligiblie default accounts.
             *
             * @hide
             */
            public static final String QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD =
                    "queryEligibleDefaultAccounts";
            /**
             * Key in the Bundle for the default account state.
             *
             * @hide
             */
            public static final String KEY_DEFAULT_ACCOUNT_STATE =
                    "key_default_account_state";
            /**
             * The method to invoke in order to set the default account.
             *
             * @hide
             */
            public static final String SET_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD =
                    "setDefaultAccountForNewContacts";
            /**
             * The method to invoke in order to query the default account.
             *
             * @hide
             */
            public static final String QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD =
                    "queryDefaultAccountForNewContacts";

            private DefaultAccount() {

            }


            /**
             * Represents the state of the default account, and the actual {@link Account} if it's
@@ -3228,6 +3268,94 @@ public final class ContactsContract {
                public @interface DefaultAccountState {
                }
            }

            /**
             * Get the account that is set as the default account for new contacts, which should be
             * initially selected when creating a new contact on contact management apps.
             *
             * @param resolver the ContentResolver to query.
             *
             * @return the default account state for new contacts.
             * @throws RuntimeException if failed to look up the default account.
             * @throws IllegalStateException if the default account is in an invalid state.
             */
            @FlaggedApi(Flags.FLAG_NEW_DEFAULT_ACCOUNT_API_ENABLED)
            public static @NonNull DefaultAccountAndState getDefaultAccountForNewContacts(
                    @NonNull ContentResolver resolver) {
                Bundle response = nullSafeCall(resolver, ContactsContract.AUTHORITY_URI,
                        QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD, null, null);

                int defaultContactsAccountState = response.getInt(KEY_DEFAULT_ACCOUNT_STATE, -1);
                if (defaultContactsAccountState
                        == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD) {
                    String accountName = response.getString(Settings.ACCOUNT_NAME);
                    String accountType = response.getString(Settings.ACCOUNT_TYPE);
                    if (TextUtils.isEmpty(accountName) || TextUtils.isEmpty(accountType)) {
                        throw new IllegalStateException(
                                "account name and type cannot be null or empty");
                    }
                    return new DefaultAccountAndState(
                            DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD,
                            new Account(accountName, accountType));
                } else if (defaultContactsAccountState
                        == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_LOCAL
                        || defaultContactsAccountState
                        == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_NOT_SET) {
                    return new DefaultAccountAndState(defaultContactsAccountState, /*cloudAccount=*/
                            null);
                } else {
                    throw new IllegalStateException("Invalid default account state");
                }
            }

            /**
             * Sets the default account that should be initially selected when creating a new
             * contact on
             * contact management apps. Apps can only set one of
             * The following accounts as the default account:
             * <ol>
             *   <li> local account
             *   <li> cloud account that are eligible to be set as default account.
             * </ol>
             *
             * @param resolver               the ContentResolver to query.
             * @param defaultAccountAndState the default account and state to be set. To set the
             *                               local
             *                               account as the
             *                               default account, this parameter should be
             *                               {@link DefaultAccountAndState#ofLocal()}. To set the a
             *                               cloud
             *                               account as the default account, this parameter should
             *                               be
             *                               {@link DefaultAccountAndState#ofCloud(Account)}. To
             *                               set
             *                               the
             *                               default account to a "not set" state, this parameter
             *                               should
             *                               be {@link DefaultAccountAndState#ofNotSet()}.
             *
             * @throws RuntimeException if it fails to set the default account.
             *
             * @hide
             */
            @RequiresPermission(android.Manifest.permission.SET_DEFAULT_ACCOUNT_FOR_CONTACTS)
            @FlaggedApi(Flags.FLAG_NEW_DEFAULT_ACCOUNT_API_ENABLED)
            @SystemApi
            public static void setDefaultAccountForNewContacts(@NonNull ContentResolver resolver,
                    @NonNull DefaultAccountAndState defaultAccountAndState) {
                Bundle extras = new Bundle();

                extras.putInt(KEY_DEFAULT_ACCOUNT_STATE, defaultAccountAndState.getState());
                if (defaultAccountAndState.getState()
                        == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD) {
                    Account cloudAccount = defaultAccountAndState.getAccount();
                    assert cloudAccount != null;
                    extras.putString(Settings.ACCOUNT_NAME, cloudAccount.name);
                    extras.putString(Settings.ACCOUNT_TYPE, cloudAccount.type);
                }
                nullSafeCall(resolver, ContactsContract.AUTHORITY_URI,
                        SET_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD, null, extras);
            }
        }

        /**
@@ -9054,30 +9182,6 @@ public final class ContactsContract {
         */
        public static final String KEY_DEFAULT_ACCOUNT = "key_default_account";

        /**
         * Key in the Bundle for the default account state.
         *
         * @hide
         */
        public static final String KEY_DEFAULT_ACCOUNT_STATE =
                "key_default_contacts_account_state";

        /**
         * The method to invoke in order to set the default account.
         *
         * @hide
         */
        public static final String SET_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD =
                "setDefaultAccountForNewContacts";

        /**
         * The method to invoke in order to query the default account.
         *
         * @hide
         */
        public static final String QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD =
                "queryDefaultAccountForNewContacts";

        /**
         * Get the account that is set as the default account for new contacts, which should be
         * initially selected when creating a new contact on contact management apps.