Snap for 12561555 from d9553708e6
to 25Q1-release
Change-Id: Id6dff72cae5b5179432174569d0953a41b35d610
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
|
||||
|
@@ -178,6 +178,24 @@ public class ContactsStoragePreferenceControllerTest {
|
||||
assertThat(mPreferenceController.getSummary()).isEqualTo("Device only");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_simAccountIsSetAsDefault_shouldReturnSimAccountSummary()
|
||||
throws Exception {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putInt(KEY_DEFAULT_ACCOUNT_STATE,
|
||||
DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_SIM);
|
||||
bundle.putString(Settings.ACCOUNT_TYPE, "SIM");
|
||||
bundle.putString(Settings.ACCOUNT_NAME, "SIM");
|
||||
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.sim_card_label))).thenReturn("SIM");
|
||||
mPreferenceController = new ContactsStoragePreferenceController(mContext,
|
||||
CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
|
||||
|
||||
assertThat(mPreferenceController.getSummary()).isEqualTo("SIM");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_googleAccountIsSetAsDefault_shouldReturnGoogleAccountTypeAndAccountName()
|
||||
throws Exception {
|
||||
|
@@ -32,7 +32,6 @@ import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.accounts.AccountManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.ContentProviderClient;
|
||||
import android.content.ContentResolver;
|
||||
@@ -83,6 +82,8 @@ public class ContactsStorageSettingsTest {
|
||||
|
||||
private static final Account TEST_ACCOUNT3 = new Account("test@outlook.com", "type3");
|
||||
|
||||
private static final Account SIM_ACCOUNT = new Account("SIM", "SIM");
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mockito = MockitoJUnit.rule();
|
||||
@Spy
|
||||
@@ -216,7 +217,9 @@ public class ContactsStorageSettingsTest {
|
||||
throws Exception {
|
||||
Bundle currentDefaultAccount = new Bundle();
|
||||
currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
|
||||
DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_LOCAL);
|
||||
DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD);
|
||||
currentDefaultAccount.putString(ContactsContract.Settings.ACCOUNT_NAME, TEST_ACCOUNT2.name);
|
||||
currentDefaultAccount.putString(ContactsContract.Settings.ACCOUNT_TYPE, TEST_ACCOUNT2.type);
|
||||
when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
|
||||
any())).thenReturn(currentDefaultAccount);
|
||||
Bundle eligibleAccountBundle = new Bundle();
|
||||
@@ -253,6 +256,14 @@ public class ContactsStorageSettingsTest {
|
||||
"test@samsung.com");
|
||||
assertThat(setAccountBundle.getString(ContactsContract.Settings.ACCOUNT_TYPE)).isEqualTo(
|
||||
"type2");
|
||||
|
||||
ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
|
||||
verify(mContext).startActivity(intentCaptor.capture());
|
||||
Intent moveContactsIntent = intentCaptor.getValue();
|
||||
assertThat(moveContactsIntent.getAction()).isEqualTo(
|
||||
ContactsContract.RawContacts.DefaultAccount.ACTION_MOVE_CONTACTS_TO_DEFAULT_ACCOUNT);
|
||||
assertThat(moveContactsIntent.getPackage()).isEqualTo(
|
||||
"com.android.providers.contacts");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -298,6 +309,32 @@ public class ContactsStorageSettingsTest {
|
||||
assertThat(account3Preference.isChecked()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void verifyAccountPreference_defaultAccountIsSimAccount_createSimAccountPreference()
|
||||
throws Exception {
|
||||
Bundle currentDefaultAccount = new Bundle();
|
||||
currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
|
||||
DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_SIM);
|
||||
currentDefaultAccount.putString(ContactsContract.Settings.ACCOUNT_NAME, SIM_ACCOUNT.name);
|
||||
currentDefaultAccount.putString(ContactsContract.Settings.ACCOUNT_TYPE, SIM_ACCOUNT.type);
|
||||
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.refreshUI();
|
||||
|
||||
SelectorWithWidgetPreference simPreference = mScreen.findPreference(
|
||||
String.valueOf(SIM_ACCOUNT.hashCode()));
|
||||
assertThat(simPreference.getTitle()).isEqualTo("SIM");
|
||||
assertThat(simPreference.getSummary()).isEqualTo("SIM");
|
||||
assertThat(simPreference.getIcon()).isNotNull();
|
||||
assertThat(simPreference.isChecked()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void searchIndexProvider_shouldIndexResource() {
|
||||
final List<SearchIndexableResource> indexRes =
|
||||
|
Reference in New Issue
Block a user