From 50c05f38b3728b7430dd4bb8d98565d9c5e56798 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Mon, 21 Sep 2009 19:07:44 -0700 Subject: Delay broadcasting ACCOUNTS_CHANGED until we're certain AndroidId is ready. Make sure 'nobroadcast' flag doesn't get stored in database. Update after review. --- .../java/android/accounts/AccountManagerService.java | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'core') diff --git a/core/java/android/accounts/AccountManagerService.java b/core/java/android/accounts/AccountManagerService.java index 32a2997..2d2e75f 100644 --- a/core/java/android/accounts/AccountManagerService.java +++ b/core/java/android/accounts/AccountManagerService.java @@ -73,6 +73,10 @@ import com.android.internal.R; public class AccountManagerService extends IAccountManager.Stub implements RegisteredServicesCacheListener { + private static final String GOOGLE_ACCOUNT_TYPE = "com.google.GAIA"; + + private static final String NO_BROADCAST_FLAG = "nobroadcast"; + private static final String TAG = "AccountManagerService"; private static final int TIMEOUT_DELAY_MS = 1000 * 60; @@ -357,6 +361,14 @@ public class AccountManagerService SQLiteDatabase db = mOpenHelper.getWritableDatabase(); db.beginTransaction(); try { + boolean noBroadcast = false; + if (account.type.equals(GOOGLE_ACCOUNT_TYPE)) { + // Look for the 'nobroadcast' flag and remove it since we don't want it to persist + // in the db. + noBroadcast = extras.getBoolean(NO_BROADCAST_FLAG, false); + extras.remove(NO_BROADCAST_FLAG); + } + long numMatches = DatabaseUtils.longForQuery(db, "select count(*) from " + TABLE_ACCOUNTS + " WHERE " + ACCOUNTS_NAME + "=? AND " + ACCOUNTS_TYPE+ "=?", @@ -381,7 +393,9 @@ public class AccountManagerService } } db.setTransactionSuccessful(); - sendAccountsChangedBroadcast(); + if (!noBroadcast) { + sendAccountsChangedBroadcast(); + } return true; } finally { db.endTransaction(); @@ -608,6 +622,10 @@ public class AccountManagerService public void setUserData(Account account, String key, String value) { checkAuthenticateAccountsPermission(account); long identityToken = clearCallingIdentity(); + if (account.type.equals(GOOGLE_ACCOUNT_TYPE) && key.equals("broadcast")) { + sendAccountsChangedBroadcast(); + return; + } try { writeUserdataIntoDatabase(account, key, value); } finally { -- cgit v1.1