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) {
|
== DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_LOCAL) {
|
||||||
return mContext.getResources().getString(
|
return mContext.getResources().getString(
|
||||||
R.string.contacts_storage_local_account_summary);
|
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,
|
String accountTypeLabel = (String) mAuthenticatorHelper.getLabelForType(mContext,
|
||||||
currentDefaultAccount.type);
|
currentDefaultAccount.type);
|
||||||
// If there's no account type, or the account type is the same as the
|
// 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.Bundle;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState;
|
import android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState;
|
||||||
|
import android.util.Log;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.UiThread;
|
import androidx.annotation.UiThread;
|
||||||
@@ -79,10 +81,16 @@ public class ContactsStorageSettings extends DashboardFragment
|
|||||||
for (String preferenceKey : mAccountMap.keySet()) {
|
for (String preferenceKey : mAccountMap.keySet()) {
|
||||||
if (selectedPreferenceKey.equals(preferenceKey)) {
|
if (selectedPreferenceKey.equals(preferenceKey)) {
|
||||||
try {
|
try {
|
||||||
|
DefaultAccountAndState currentDefaultAccount = mAccountMap.get(preferenceKey);
|
||||||
DefaultAccount.setDefaultAccountForNewContacts(getContentResolver(),
|
DefaultAccount.setDefaultAccountForNewContacts(getContentResolver(),
|
||||||
mAccountMap.get(preferenceKey));
|
currentDefaultAccount);
|
||||||
selectedPref.setChecked(true);
|
selectedPref.setChecked(true);
|
||||||
|
if (currentDefaultAccount.getState()
|
||||||
|
== DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD) {
|
||||||
|
startMoveLocalAndSimContactsActivity();
|
||||||
|
}
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
|
Log.e(TAG, "Error setting the default account " + e);
|
||||||
Toast.makeText(getContext(),
|
Toast.makeText(getContext(),
|
||||||
R.string.contacts_storage_set_default_account_error_message,
|
R.string.contacts_storage_set_default_account_error_message,
|
||||||
Toast.LENGTH_SHORT).show();
|
Toast.LENGTH_SHORT).show();
|
||||||
@@ -123,9 +131,14 @@ public class ContactsStorageSettings extends DashboardFragment
|
|||||||
// when creating eligible account preferences.
|
// when creating eligible account preferences.
|
||||||
mAccountMap.clear();
|
mAccountMap.clear();
|
||||||
final PreferenceScreen screen = getPreferenceScreen();
|
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());
|
List<Account> accounts = DefaultAccount.getEligibleCloudAccounts(getContentResolver());
|
||||||
for (int i = 0; i < accounts.size(); i++) {
|
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
|
// If there's no eligible account types, the "Add Account" preference should
|
||||||
// not be shown to the users.
|
// not be shown to the users.
|
||||||
@@ -156,7 +169,7 @@ public class ContactsStorageSettings extends DashboardFragment
|
|||||||
if (mAccountMap.containsKey(preferenceKey)) {
|
if (mAccountMap.containsKey(preferenceKey)) {
|
||||||
preference = getPreferenceScreen().findPreference(preferenceKey);
|
preference = getPreferenceScreen().findPreference(preferenceKey);
|
||||||
} else if (preferenceKey != null && currentDefaultAccount != null) {
|
} else if (preferenceKey != null && currentDefaultAccount != null) {
|
||||||
preference = buildAccountPreference(currentDefaultAccount, mAccountMap.size());
|
preference = buildCloudAccountPreference(currentDefaultAccount, mAccountMap.size());
|
||||||
getPreferenceScreen().addPreference(preference);
|
getPreferenceScreen().addPreference(preference);
|
||||||
}
|
}
|
||||||
if (preference != null) {
|
if (preference != null) {
|
||||||
@@ -165,7 +178,7 @@ public class ContactsStorageSettings extends DashboardFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Add preference category on account preferences.
|
//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(
|
SelectorWithWidgetPreference preference = new SelectorWithWidgetPreference(
|
||||||
getPrefContext());
|
getPrefContext());
|
||||||
DefaultAccountAndState accountAndState = DefaultAccountAndState.ofCloud(account);
|
DefaultAccountAndState accountAndState = DefaultAccountAndState.ofCloud(account);
|
||||||
@@ -180,6 +193,26 @@ public class ContactsStorageSettings extends DashboardFragment
|
|||||||
return preference;
|
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) {
|
private RestrictedPreference buildAddAccountPreference(boolean noAccountBeenAdded) {
|
||||||
RestrictedPreference preference = new RestrictedPreference(getPrefContext());
|
RestrictedPreference preference = new RestrictedPreference(getPrefContext());
|
||||||
preference.setKey(PREF_KEY_ADD_ACCOUNT);
|
preference.setKey(PREF_KEY_ADD_ACCOUNT);
|
||||||
@@ -194,7 +227,17 @@ public class ContactsStorageSettings extends DashboardFragment
|
|||||||
return preference;
|
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();
|
Account currentDefaultAccount = currentDefaultAccountAndState.getAccount();
|
||||||
if (currentDefaultAccount != null && (currentDefaultAccountAndState.getState()
|
if (currentDefaultAccount != null && (currentDefaultAccountAndState.getState()
|
||||||
== DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD
|
== DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD
|
||||||
|
@@ -178,6 +178,24 @@ public class ContactsStoragePreferenceControllerTest {
|
|||||||
assertThat(mPreferenceController.getSummary()).isEqualTo("Device only");
|
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
|
@Test
|
||||||
public void getSummary_googleAccountIsSetAsDefault_shouldReturnGoogleAccountTypeAndAccountName()
|
public void getSummary_googleAccountIsSetAsDefault_shouldReturnGoogleAccountTypeAndAccountName()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
|
@@ -32,7 +32,6 @@ import static org.mockito.Mockito.verify;
|
|||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
import android.accounts.AccountManager;
|
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.ContentProviderClient;
|
import android.content.ContentProviderClient;
|
||||||
import android.content.ContentResolver;
|
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 TEST_ACCOUNT3 = new Account("test@outlook.com", "type3");
|
||||||
|
|
||||||
|
private static final Account SIM_ACCOUNT = new Account("SIM", "SIM");
|
||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
public final MockitoRule mockito = MockitoJUnit.rule();
|
public final MockitoRule mockito = MockitoJUnit.rule();
|
||||||
@Spy
|
@Spy
|
||||||
@@ -216,7 +217,9 @@ public class ContactsStorageSettingsTest {
|
|||||||
throws Exception {
|
throws Exception {
|
||||||
Bundle currentDefaultAccount = new Bundle();
|
Bundle currentDefaultAccount = new Bundle();
|
||||||
currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
|
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(),
|
when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
|
||||||
any())).thenReturn(currentDefaultAccount);
|
any())).thenReturn(currentDefaultAccount);
|
||||||
Bundle eligibleAccountBundle = new Bundle();
|
Bundle eligibleAccountBundle = new Bundle();
|
||||||
@@ -253,6 +256,14 @@ public class ContactsStorageSettingsTest {
|
|||||||
"test@samsung.com");
|
"test@samsung.com");
|
||||||
assertThat(setAccountBundle.getString(ContactsContract.Settings.ACCOUNT_TYPE)).isEqualTo(
|
assertThat(setAccountBundle.getString(ContactsContract.Settings.ACCOUNT_TYPE)).isEqualTo(
|
||||||
"type2");
|
"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
|
@Test
|
||||||
@@ -298,6 +309,32 @@ public class ContactsStorageSettingsTest {
|
|||||||
assertThat(account3Preference.isChecked()).isTrue();
|
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
|
@Test
|
||||||
public void searchIndexProvider_shouldIndexResource() {
|
public void searchIndexProvider_shouldIndexResource() {
|
||||||
final List<SearchIndexableResource> indexRes =
|
final List<SearchIndexableResource> indexRes =
|
||||||
|
Reference in New Issue
Block a user