Merge "Add ACTION_ACCOUNT_REMOVED to Account Manager." into oc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
2a30085e5c
@ -2999,6 +2999,7 @@ package android.accounts {
|
|||||||
method public android.accounts.AccountManagerFuture<android.os.Bundle> startAddAccountSession(java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
method public android.accounts.AccountManagerFuture<android.os.Bundle> startAddAccountSession(java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
||||||
method public android.accounts.AccountManagerFuture<android.os.Bundle> startUpdateCredentialsSession(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
method public android.accounts.AccountManagerFuture<android.os.Bundle> startUpdateCredentialsSession(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
||||||
method public android.accounts.AccountManagerFuture<android.os.Bundle> updateCredentials(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
method public android.accounts.AccountManagerFuture<android.os.Bundle> updateCredentials(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
||||||
|
field public static final java.lang.String ACTION_ACCOUNT_REMOVED = "android.accounts.action.ACCOUNT_REMOVED";
|
||||||
field public static final java.lang.String ACTION_AUTHENTICATOR_INTENT = "android.accounts.AccountAuthenticator";
|
field public static final java.lang.String ACTION_AUTHENTICATOR_INTENT = "android.accounts.AccountAuthenticator";
|
||||||
field public static final java.lang.String AUTHENTICATOR_ATTRIBUTES_NAME = "account-authenticator";
|
field public static final java.lang.String AUTHENTICATOR_ATTRIBUTES_NAME = "account-authenticator";
|
||||||
field public static final java.lang.String AUTHENTICATOR_META_DATA_NAME = "android.accounts.AccountAuthenticator";
|
field public static final java.lang.String AUTHENTICATOR_META_DATA_NAME = "android.accounts.AccountAuthenticator";
|
||||||
|
@ -3123,6 +3123,7 @@ package android.accounts {
|
|||||||
method public android.accounts.AccountManagerFuture<android.os.Bundle> startAddAccountSession(java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
method public android.accounts.AccountManagerFuture<android.os.Bundle> startAddAccountSession(java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
||||||
method public android.accounts.AccountManagerFuture<android.os.Bundle> startUpdateCredentialsSession(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
method public android.accounts.AccountManagerFuture<android.os.Bundle> startUpdateCredentialsSession(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
||||||
method public android.accounts.AccountManagerFuture<android.os.Bundle> updateCredentials(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
method public android.accounts.AccountManagerFuture<android.os.Bundle> updateCredentials(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
||||||
|
field public static final java.lang.String ACTION_ACCOUNT_REMOVED = "android.accounts.action.ACCOUNT_REMOVED";
|
||||||
field public static final java.lang.String ACTION_AUTHENTICATOR_INTENT = "android.accounts.AccountAuthenticator";
|
field public static final java.lang.String ACTION_AUTHENTICATOR_INTENT = "android.accounts.AccountAuthenticator";
|
||||||
field public static final java.lang.String AUTHENTICATOR_ATTRIBUTES_NAME = "account-authenticator";
|
field public static final java.lang.String AUTHENTICATOR_ATTRIBUTES_NAME = "account-authenticator";
|
||||||
field public static final java.lang.String AUTHENTICATOR_META_DATA_NAME = "android.accounts.AccountAuthenticator";
|
field public static final java.lang.String AUTHENTICATOR_META_DATA_NAME = "android.accounts.AccountAuthenticator";
|
||||||
|
@ -2999,6 +2999,7 @@ package android.accounts {
|
|||||||
method public android.accounts.AccountManagerFuture<android.os.Bundle> startAddAccountSession(java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
method public android.accounts.AccountManagerFuture<android.os.Bundle> startAddAccountSession(java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
||||||
method public android.accounts.AccountManagerFuture<android.os.Bundle> startUpdateCredentialsSession(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
method public android.accounts.AccountManagerFuture<android.os.Bundle> startUpdateCredentialsSession(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
||||||
method public android.accounts.AccountManagerFuture<android.os.Bundle> updateCredentials(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
method public android.accounts.AccountManagerFuture<android.os.Bundle> updateCredentials(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
|
||||||
|
field public static final java.lang.String ACTION_ACCOUNT_REMOVED = "android.accounts.action.ACCOUNT_REMOVED";
|
||||||
field public static final java.lang.String ACTION_AUTHENTICATOR_INTENT = "android.accounts.AccountAuthenticator";
|
field public static final java.lang.String ACTION_AUTHENTICATOR_INTENT = "android.accounts.AccountAuthenticator";
|
||||||
field public static final java.lang.String AUTHENTICATOR_ATTRIBUTES_NAME = "account-authenticator";
|
field public static final java.lang.String AUTHENTICATOR_ATTRIBUTES_NAME = "account-authenticator";
|
||||||
field public static final java.lang.String AUTHENTICATOR_META_DATA_NAME = "android.accounts.AccountAuthenticator";
|
field public static final java.lang.String AUTHENTICATOR_META_DATA_NAME = "android.accounts.AccountAuthenticator";
|
||||||
|
@ -335,6 +335,7 @@ public class AccountManager {
|
|||||||
* are removed, or an account's credentials (saved password, etc) are changed.
|
* are removed, or an account's credentials (saved password, etc) are changed.
|
||||||
*
|
*
|
||||||
* @see #addOnAccountsUpdatedListener
|
* @see #addOnAccountsUpdatedListener
|
||||||
|
* @see #ACTION_ACCOUNT_REMOVED
|
||||||
*
|
*
|
||||||
* @deprecated use {@link #addOnAccountsUpdatedListener} to get account updates in runtime.
|
* @deprecated use {@link #addOnAccountsUpdatedListener} to get account updates in runtime.
|
||||||
*/
|
*/
|
||||||
@ -343,6 +344,14 @@ public class AccountManager {
|
|||||||
public static final String LOGIN_ACCOUNTS_CHANGED_ACTION =
|
public static final String LOGIN_ACCOUNTS_CHANGED_ACTION =
|
||||||
"android.accounts.LOGIN_ACCOUNTS_CHANGED";
|
"android.accounts.LOGIN_ACCOUNTS_CHANGED";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Action sent as a broadcast Intent by the AccountsService when any account is removed.
|
||||||
|
*/
|
||||||
|
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
|
||||||
|
@BroadcastBehavior(includeBackground = true)
|
||||||
|
public static final String ACTION_ACCOUNT_REMOVED =
|
||||||
|
"android.accounts.action.ACCOUNT_REMOVED";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Action sent as a broadcast Intent to specific package by the AccountsService
|
* Action sent as a broadcast Intent to specific package by the AccountsService
|
||||||
* when account visibility or account's credentials (saved password, etc) are changed.
|
* when account visibility or account's credentials (saved password, etc) are changed.
|
||||||
|
@ -492,7 +492,9 @@
|
|||||||
<protected-broadcast android:name="android.intent.action.ACTION_RADIO_OFF" />
|
<protected-broadcast android:name="android.intent.action.ACTION_RADIO_OFF" />
|
||||||
|
|
||||||
<protected-broadcast android:name="android.accounts.LOGIN_ACCOUNTS_CHANGED" />
|
<protected-broadcast android:name="android.accounts.LOGIN_ACCOUNTS_CHANGED" />
|
||||||
|
<protected-broadcast android:name="android.accounts.action.ACCOUNT_REMOVED" />
|
||||||
<protected-broadcast android:name="android.accounts.action.VISIBLE_ACCOUNTS_CHANGED" />
|
<protected-broadcast android:name="android.accounts.action.VISIBLE_ACCOUNTS_CHANGED" />
|
||||||
|
|
||||||
<protected-broadcast android:name="com.android.sync.SYNC_CONN_STATUS_CHANGED" />
|
<protected-broadcast android:name="com.android.sync.SYNC_CONN_STATUS_CHANGED" />
|
||||||
|
|
||||||
<protected-broadcast android:name="com.android.phone.SIP_INCOMING_CALL" />
|
<protected-broadcast android:name="com.android.phone.SIP_INCOMING_CALL" />
|
||||||
|
@ -959,6 +959,12 @@ public class AccountManagerService
|
|||||||
mContext.sendBroadcastAsUser(ACCOUNTS_CHANGED_INTENT, new UserHandle(userId));
|
mContext.sendBroadcastAsUser(ACCOUNTS_CHANGED_INTENT, new UserHandle(userId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void sendAccountRemovedBroadcast(int userId) {
|
||||||
|
Intent intent = new Intent(AccountManager.ACTION_ACCOUNT_REMOVED);
|
||||||
|
intent.setFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
|
||||||
|
mContext.sendBroadcastAsUser(intent, new UserHandle(userId));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
|
public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
|
||||||
throws RemoteException {
|
throws RemoteException {
|
||||||
@ -1111,6 +1117,7 @@ public class AccountManagerService
|
|||||||
notifyPackage(packageToVisibility.getKey(), accounts);
|
notifyPackage(packageToVisibility.getKey(), accounts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sendAccountRemovedBroadcast(accounts.userId);
|
||||||
} else {
|
} else {
|
||||||
ArrayList<String> accountNames = accountNamesByType.get(account.type);
|
ArrayList<String> accountNames = accountNamesByType.get(account.type);
|
||||||
if (accountNames == null) {
|
if (accountNames == null) {
|
||||||
@ -1971,6 +1978,7 @@ public class AccountManagerService
|
|||||||
|
|
||||||
sendNotificationAccountUpdated(resultAccount, accounts);
|
sendNotificationAccountUpdated(resultAccount, accounts);
|
||||||
sendAccountsChangedBroadcast(accounts.userId);
|
sendAccountsChangedBroadcast(accounts.userId);
|
||||||
|
sendAccountRemovedBroadcast(accounts.userId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return resultAccount;
|
return resultAccount;
|
||||||
@ -2206,6 +2214,7 @@ public class AccountManagerService
|
|||||||
|
|
||||||
// Only broadcast LOGIN_ACCOUNTS_CHANGED if a change occurred.
|
// Only broadcast LOGIN_ACCOUNTS_CHANGED if a change occurred.
|
||||||
sendAccountsChangedBroadcast(accounts.userId);
|
sendAccountsChangedBroadcast(accounts.userId);
|
||||||
|
sendAccountRemovedBroadcast(accounts.userId);
|
||||||
String action = userUnlocked ? AccountsDb.DEBUG_ACTION_ACCOUNT_REMOVE
|
String action = userUnlocked ? AccountsDb.DEBUG_ACTION_ACCOUNT_REMOVE
|
||||||
: AccountsDb.DEBUG_ACTION_ACCOUNT_REMOVE_DE;
|
: AccountsDb.DEBUG_ACTION_ACCOUNT_REMOVE_DE;
|
||||||
logRecord(action, AccountsDb.TABLE_ACCOUNTS, accountId, accounts);
|
logRecord(action, AccountsDb.TABLE_ACCOUNTS, accountId, accounts);
|
||||||
|
@ -117,6 +117,7 @@ public class AccountManagerServiceTest extends AndroidTestCase {
|
|||||||
@Captor private ArgumentCaptor<Bundle> mBundleCaptor;
|
@Captor private ArgumentCaptor<Bundle> mBundleCaptor;
|
||||||
private int mVisibleAccountsChangedBroadcasts;
|
private int mVisibleAccountsChangedBroadcasts;
|
||||||
private int mLoginAccountsChangedBroadcasts;
|
private int mLoginAccountsChangedBroadcasts;
|
||||||
|
private int mAccountRemovedBroadcasts;
|
||||||
|
|
||||||
private static final int LATCH_TIMEOUT_MS = 500;
|
private static final int LATCH_TIMEOUT_MS = 500;
|
||||||
private static final String PREN_DB = "pren.db";
|
private static final String PREN_DB = "pren.db";
|
||||||
@ -2510,6 +2511,7 @@ public class AccountManagerServiceTest extends AndroidTestCase {
|
|||||||
updateBroadcastCounters(2);
|
updateBroadcastCounters(2);
|
||||||
assertEquals(mVisibleAccountsChangedBroadcasts, 0); // broadcast was not sent
|
assertEquals(mVisibleAccountsChangedBroadcasts, 0); // broadcast was not sent
|
||||||
assertEquals(mLoginAccountsChangedBroadcasts, 2);
|
assertEquals(mLoginAccountsChangedBroadcasts, 2);
|
||||||
|
assertEquals(mAccountRemovedBroadcasts, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SmallTest
|
@SmallTest
|
||||||
@ -2533,9 +2535,10 @@ public class AccountManagerServiceTest extends AndroidTestCase {
|
|||||||
mAms.registerAccountListener( null /* accountTypes */, "testpackage");
|
mAms.registerAccountListener( null /* accountTypes */, "testpackage");
|
||||||
mAms.removeAccountInternal(AccountManagerServiceTestFixtures.ACCOUNT_INTERVENE);
|
mAms.removeAccountInternal(AccountManagerServiceTestFixtures.ACCOUNT_INTERVENE);
|
||||||
|
|
||||||
updateBroadcastCounters(6);
|
updateBroadcastCounters(8);
|
||||||
assertEquals(mVisibleAccountsChangedBroadcasts, 2);
|
assertEquals(mVisibleAccountsChangedBroadcasts, 2);
|
||||||
assertEquals(mLoginAccountsChangedBroadcasts, 4);
|
assertEquals(mLoginAccountsChangedBroadcasts, 4);
|
||||||
|
assertEquals(mAccountRemovedBroadcasts, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SmallTest
|
@SmallTest
|
||||||
@ -2560,17 +2563,19 @@ public class AccountManagerServiceTest extends AndroidTestCase {
|
|||||||
"testpackage3"); // opPackageName
|
"testpackage3"); // opPackageName
|
||||||
// Remove account with 2 active listeners.
|
// Remove account with 2 active listeners.
|
||||||
mAms.removeAccountInternal(AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS);
|
mAms.removeAccountInternal(AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS);
|
||||||
updateBroadcastCounters(7);
|
updateBroadcastCounters(8);
|
||||||
assertEquals(mVisibleAccountsChangedBroadcasts, 5);
|
assertEquals(mVisibleAccountsChangedBroadcasts, 5);
|
||||||
assertEquals(mLoginAccountsChangedBroadcasts, 2); // 3 add, 2 remove
|
assertEquals(mLoginAccountsChangedBroadcasts, 2); // 3 add, 2 remove
|
||||||
|
assertEquals(mAccountRemovedBroadcasts, 1);
|
||||||
|
|
||||||
// Add account of another type.
|
// Add account of another type.
|
||||||
mAms.addAccountExplicitly(
|
mAms.addAccountExplicitly(
|
||||||
AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS_TYPE_2, "p11", null);
|
AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS_TYPE_2, "p11", null);
|
||||||
|
|
||||||
updateBroadcastCounters(8);
|
updateBroadcastCounters(9);
|
||||||
assertEquals(mVisibleAccountsChangedBroadcasts, 5);
|
assertEquals(mVisibleAccountsChangedBroadcasts, 5);
|
||||||
assertEquals(mLoginAccountsChangedBroadcasts, 3);
|
assertEquals(mLoginAccountsChangedBroadcasts, 3);
|
||||||
|
assertEquals(mAccountRemovedBroadcasts, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SmallTest
|
@SmallTest
|
||||||
@ -2602,16 +2607,20 @@ public class AccountManagerServiceTest extends AndroidTestCase {
|
|||||||
private void updateBroadcastCounters (int expectedBroadcasts){
|
private void updateBroadcastCounters (int expectedBroadcasts){
|
||||||
mVisibleAccountsChangedBroadcasts = 0;
|
mVisibleAccountsChangedBroadcasts = 0;
|
||||||
mLoginAccountsChangedBroadcasts = 0;
|
mLoginAccountsChangedBroadcasts = 0;
|
||||||
|
mAccountRemovedBroadcasts = 0;
|
||||||
ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
|
ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
|
||||||
verify(mMockContext, times(expectedBroadcasts)).sendBroadcastAsUser(captor.capture(),
|
verify(mMockContext, times(expectedBroadcasts)).sendBroadcastAsUser(captor.capture(),
|
||||||
any(UserHandle.class));
|
any(UserHandle.class));
|
||||||
for (Intent intent : captor.getAllValues()) {
|
for (Intent intent : captor.getAllValues()) {
|
||||||
if (AccountManager.ACTION_VISIBLE_ACCOUNTS_CHANGED. equals(intent.getAction())) {
|
if (AccountManager.ACTION_VISIBLE_ACCOUNTS_CHANGED.equals(intent.getAction())) {
|
||||||
mVisibleAccountsChangedBroadcasts++;
|
mVisibleAccountsChangedBroadcasts++;
|
||||||
}
|
}
|
||||||
if (AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION. equals(intent.getAction())) {
|
if (AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION.equals(intent.getAction())) {
|
||||||
mLoginAccountsChangedBroadcasts++;
|
mLoginAccountsChangedBroadcasts++;
|
||||||
}
|
}
|
||||||
|
if (AccountManager.ACTION_ACCOUNT_REMOVED.equals(intent.getAction())) {
|
||||||
|
mAccountRemovedBroadcasts++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user