Show "add account" dialog when it needs to appear
Don't show the dialog if the only account is not a device account.
Set the default to be the only account if it is *not* a device
account.
Test:
Manually checked:
* Removing only account and attempting to create a new account shows
dialog
* Clearing preferences shows dialog
* If dialog was canceled, verify dialog doesn't appear anymore.
* After adding a google account, (and without manually setting default)
verified adding a new contact did not show a dialog and the default was
automatically set to the only account on device.
* Having two accounts and no default shows the pick default account dialog
* Removing multiple accounts still has the same behavior as bullet 1
Bug:32555078
Change-Id: Iec664efca7e886d7376cd2aae7c5b2bdad3a8b84
diff --git a/src/com/android/contacts/common/preference/ContactsPreferences.java b/src/com/android/contacts/common/preference/ContactsPreferences.java
index 8865e91..ac7b0e0 100644
--- a/src/com/android/contacts/common/preference/ContactsPreferences.java
+++ b/src/com/android/contacts/common/preference/ContactsPreferences.java
@@ -16,13 +16,10 @@
package com.android.contacts.common.preference;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
-import android.net.Uri;
-import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.preference.PreferenceManager;
@@ -219,7 +216,8 @@
return defaultAccount == null || !defaultAccount.isNullAccount();
}
- if (currentWritableAccounts.size() == 1) {
+ if (currentWritableAccounts.size() == 1
+ && !currentWritableAccounts.get(0).isNullAccount()) {
return false;
}
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index 65c30e8..42ef513 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -987,6 +987,9 @@
mStatus = Status.SUB_ACTIVITY;
startActivityForResult(intent, REQUEST_CODE_ACCOUNTS_CHANGED);
} else {
+ // Make sure the default account is automatically set if there is only one non-device
+ // account.
+ mEditorUtils.maybeUpdateDefaultAccount();
// Otherwise, there should be a default account. Then either create a local contact
// (if default account is null) or create a contact with the specified account.
AccountWithDataSet defaultAccount = mEditorUtils.getOnlyOrDefaultAccount();
diff --git a/src/com/android/contacts/editor/ContactEditorUtils.java b/src/com/android/contacts/editor/ContactEditorUtils.java
index fc1a887..5b80b04 100644
--- a/src/com/android/contacts/editor/ContactEditorUtils.java
+++ b/src/com/android/contacts/editor/ContactEditorUtils.java
@@ -132,6 +132,20 @@
return mContactsPrefs.shouldShowAccountChangedNotification(getWritableAccounts());
}
+ /**
+ * Sets the only non-device account to be default if it is not already.
+ */
+ public void maybeUpdateDefaultAccount() {
+ final List<AccountWithDataSet> currentWritableAccounts = getWritableAccounts();
+ if (currentWritableAccounts.size() == 1) {
+ final AccountWithDataSet onlyAccount = currentWritableAccounts.get(0);
+ if (!onlyAccount.isNullAccount()
+ && !onlyAccount.equals(mContactsPrefs.getDefaultAccount())) {
+ mContactsPrefs.setDefaultAccount(onlyAccount);
+ }
+ }
+ }
+
@VisibleForTesting
String[] getWritableAccountTypeStrings() {
final Set<String> types = Sets.newHashSet();