Show SIM account preference in Contacts Storage Settings when default
account is set as SIM account. 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: I2f80e63a807f5a060c2ef6f05e3e413c6a689e1f
This commit is contained in:
@@ -71,7 +71,12 @@ public class ContactsStoragePreferenceController extends BasePreferenceControlle
|
||||
== DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_LOCAL) {
|
||||
return mContext.getResources().getString(
|
||||
R.string.contacts_storage_local_account_summary);
|
||||
} else if (currentDefaultAccount != null) {
|
||||
} else if (currentDefaultAccountState
|
||||
== DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_SIM) {
|
||||
return mContext.getResources().getString(
|
||||
R.string.sim_card_label);
|
||||
} else if (currentDefaultAccountState
|
||||
== DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD) {
|
||||
String accountTypeLabel = (String) mAuthenticatorHelper.getLabelForType(mContext,
|
||||
currentDefaultAccount.type);
|
||||
// If there's no account type, or the account type is the same as the
|
||||
|
@@ -28,7 +28,9 @@ import android.content.res.Resources;
|
||||
import android.os.Bundle;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.UiThread;
|
||||
@@ -79,10 +81,16 @@ public class ContactsStorageSettings extends DashboardFragment
|
||||
for (String preferenceKey : mAccountMap.keySet()) {
|
||||
if (selectedPreferenceKey.equals(preferenceKey)) {
|
||||
try {
|
||||
DefaultAccountAndState currentDefaultAccount = mAccountMap.get(preferenceKey);
|
||||
DefaultAccount.setDefaultAccountForNewContacts(getContentResolver(),
|
||||
mAccountMap.get(preferenceKey));
|
||||
currentDefaultAccount);
|
||||
selectedPref.setChecked(true);
|
||||
if (currentDefaultAccount.getState()
|
||||
== DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD) {
|
||||
startMoveLocalAndSimContactsActivity();
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
Log.e(TAG, "Error setting the default account " + e);
|
||||
Toast.makeText(getContext(),
|
||||
R.string.contacts_storage_set_default_account_error_message,
|
||||
Toast.LENGTH_SHORT).show();
|
||||
@@ -123,9 +131,14 @@ public class ContactsStorageSettings extends DashboardFragment
|
||||
// when creating eligible account preferences.
|
||||
mAccountMap.clear();
|
||||
final PreferenceScreen screen = getPreferenceScreen();
|
||||
// If the default account is SIM, we should show in the page, otherwise don't show.
|
||||
SelectorWithWidgetPreference simAccountPreference = buildSimAccountPreference();
|
||||
if (simAccountPreference != null) {
|
||||
getPreferenceScreen().addPreference(simAccountPreference);
|
||||
}
|
||||
List<Account> accounts = DefaultAccount.getEligibleCloudAccounts(getContentResolver());
|
||||
for (int i = 0; i < accounts.size(); i++) {
|
||||
screen.addPreference(buildAccountPreference(accounts.get(i), /*order=*/i));
|
||||
screen.addPreference(buildCloudAccountPreference(accounts.get(i), /*order=*/i));
|
||||
}
|
||||
// If there's no eligible account types, the "Add Account" preference should
|
||||
// not be shown to the users.
|
||||
@@ -156,7 +169,7 @@ public class ContactsStorageSettings extends DashboardFragment
|
||||
if (mAccountMap.containsKey(preferenceKey)) {
|
||||
preference = getPreferenceScreen().findPreference(preferenceKey);
|
||||
} else if (preferenceKey != null && currentDefaultAccount != null) {
|
||||
preference = buildAccountPreference(currentDefaultAccount, mAccountMap.size());
|
||||
preference = buildCloudAccountPreference(currentDefaultAccount, mAccountMap.size());
|
||||
getPreferenceScreen().addPreference(preference);
|
||||
}
|
||||
if (preference != null) {
|
||||
@@ -165,7 +178,7 @@ public class ContactsStorageSettings extends DashboardFragment
|
||||
}
|
||||
|
||||
//TODO: Add preference category on account preferences.
|
||||
private SelectorWithWidgetPreference buildAccountPreference(Account account, int order) {
|
||||
private SelectorWithWidgetPreference buildCloudAccountPreference(Account account, int order) {
|
||||
SelectorWithWidgetPreference preference = new SelectorWithWidgetPreference(
|
||||
getPrefContext());
|
||||
DefaultAccountAndState accountAndState = DefaultAccountAndState.ofCloud(account);
|
||||
@@ -180,6 +193,26 @@ public class ContactsStorageSettings extends DashboardFragment
|
||||
return preference;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private SelectorWithWidgetPreference buildSimAccountPreference() {
|
||||
DefaultAccountAndState currentDefaultAccountAndState =
|
||||
DefaultAccount.getDefaultAccountForNewContacts(getContentResolver());
|
||||
if (currentDefaultAccountAndState.getState()
|
||||
== DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_SIM) {
|
||||
String preferenceKey = getAccountHashCode(currentDefaultAccountAndState);
|
||||
SelectorWithWidgetPreference preference = new SelectorWithWidgetPreference(
|
||||
getPrefContext());
|
||||
preference.setTitle(R.string.sim_card_label);
|
||||
preference.setIcon(R.drawable.ic_sim_card);
|
||||
preference.setSummary(R.string.sim_card_label);
|
||||
preference.setKey(preferenceKey);
|
||||
preference.setOnClickListener(this);
|
||||
mAccountMap.put(preferenceKey, currentDefaultAccountAndState);
|
||||
return preference;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private RestrictedPreference buildAddAccountPreference(boolean noAccountBeenAdded) {
|
||||
RestrictedPreference preference = new RestrictedPreference(getPrefContext());
|
||||
preference.setKey(PREF_KEY_ADD_ACCOUNT);
|
||||
@@ -194,7 +227,17 @@ public class ContactsStorageSettings extends DashboardFragment
|
||||
return preference;
|
||||
}
|
||||
|
||||
private @Nullable String getAccountHashCode(DefaultAccountAndState currentDefaultAccountAndState) {
|
||||
private void startMoveLocalAndSimContactsActivity() {
|
||||
Intent intent = new Intent()
|
||||
.setAction(DefaultAccount.ACTION_MOVE_CONTACTS_TO_DEFAULT_ACCOUNT)
|
||||
.setPackage("com.android.providers.contacts")
|
||||
.addFlags(FLAG_ACTIVITY_NEW_TASK);
|
||||
getContext().startActivity(intent);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private String getAccountHashCode(
|
||||
DefaultAccountAndState currentDefaultAccountAndState) {
|
||||
Account currentDefaultAccount = currentDefaultAccountAndState.getAccount();
|
||||
if (currentDefaultAccount != null && (currentDefaultAccountAndState.getState()
|
||||
== DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD
|
||||
|
Reference in New Issue
Block a user