am 0dd0b144: Merge "Include all accounts in dumpsys." into jb-mr1-dev
* commit '0dd0b1447c28f095265c6c108ccb7cdb4f87832c': Include all accounts in dumpsys.
This commit is contained in:
@@ -35,6 +35,7 @@ import android.content.pm.PackageManager;
|
|||||||
import android.content.pm.PackageManager.NameNotFoundException;
|
import android.content.pm.PackageManager.NameNotFoundException;
|
||||||
import android.content.pm.RegisteredServicesCache;
|
import android.content.pm.RegisteredServicesCache;
|
||||||
import android.content.pm.RegisteredServicesCacheListener;
|
import android.content.pm.RegisteredServicesCacheListener;
|
||||||
|
import android.content.pm.UserInfo;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.database.DatabaseUtils;
|
import android.database.DatabaseUtils;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
@@ -54,6 +55,7 @@ import android.os.UserManager;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
|
import android.util.Slog;
|
||||||
import android.util.SparseArray;
|
import android.util.SparseArray;
|
||||||
|
|
||||||
import com.android.internal.R;
|
import com.android.internal.R;
|
||||||
@@ -70,6 +72,7 @@ import java.util.Collection;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
@@ -261,8 +264,7 @@ public class AccountManagerService
|
|||||||
accounts = new UserAccounts(mContext, userId);
|
accounts = new UserAccounts(mContext, userId);
|
||||||
mUsers.append(userId, accounts);
|
mUsers.append(userId, accounts);
|
||||||
purgeOldGrants(accounts);
|
purgeOldGrants(accounts);
|
||||||
mAuthenticatorCache.invalidateCache(accounts.userId);
|
validateAccountsInternal(accounts, true /* invalidateAuthenticatorCache */);
|
||||||
validateAccountsAndPopulateCache(accounts);
|
|
||||||
}
|
}
|
||||||
return accounts;
|
return accounts;
|
||||||
}
|
}
|
||||||
@@ -300,7 +302,28 @@ public class AccountManagerService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validateAccountsAndPopulateCache(UserAccounts accounts) {
|
/**
|
||||||
|
* Validate internal set of accounts against installed authenticators for
|
||||||
|
* given user. Clears cached authenticators before validating.
|
||||||
|
*/
|
||||||
|
public void validateAccounts(int userId) {
|
||||||
|
final UserAccounts accounts = getUserAccounts(userId);
|
||||||
|
|
||||||
|
// Invalidate user-specific cache to make sure we catch any
|
||||||
|
// removed authenticators.
|
||||||
|
validateAccountsInternal(accounts, true /* invalidateAuthenticatorCache */);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate internal set of accounts against installed authenticators for
|
||||||
|
* given user. Clear cached authenticators before validating when requested.
|
||||||
|
*/
|
||||||
|
private void validateAccountsInternal(
|
||||||
|
UserAccounts accounts, boolean invalidateAuthenticatorCache) {
|
||||||
|
if (invalidateAuthenticatorCache) {
|
||||||
|
mAuthenticatorCache.invalidateCache(accounts.userId);
|
||||||
|
}
|
||||||
|
|
||||||
final HashSet<AuthenticatorDescription> knownAuth = Sets.newHashSet();
|
final HashSet<AuthenticatorDescription> knownAuth = Sets.newHashSet();
|
||||||
for (RegisteredServicesCache.ServiceInfo<AuthenticatorDescription> service :
|
for (RegisteredServicesCache.ServiceInfo<AuthenticatorDescription> service :
|
||||||
mAuthenticatorCache.getAllServices(accounts.userId)) {
|
mAuthenticatorCache.getAllServices(accounts.userId)) {
|
||||||
@@ -323,7 +346,7 @@ public class AccountManagerService
|
|||||||
final String accountName = cursor.getString(2);
|
final String accountName = cursor.getString(2);
|
||||||
|
|
||||||
if (!knownAuth.contains(AuthenticatorDescription.newKey(accountType))) {
|
if (!knownAuth.contains(AuthenticatorDescription.newKey(accountType))) {
|
||||||
Log.d(TAG, "deleting account " + accountName + " because type "
|
Slog.w(TAG, "deleting account " + accountName + " because type "
|
||||||
+ accountType + " no longer has a registered authenticator");
|
+ accountType + " no longer has a registered authenticator");
|
||||||
db.delete(TABLE_ACCOUNTS, ACCOUNTS_ID + "=" + accountId, null);
|
db.delete(TABLE_ACCOUNTS, ACCOUNTS_ID + "=" + accountId, null);
|
||||||
accountDeleted = true;
|
accountDeleted = true;
|
||||||
@@ -399,7 +422,8 @@ public class AccountManagerService
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onServiceChanged(AuthenticatorDescription desc, int userId, boolean removed) {
|
public void onServiceChanged(AuthenticatorDescription desc, int userId, boolean removed) {
|
||||||
validateAccountsAndPopulateCache(getUserAccounts(userId));
|
Slog.d(TAG, "onServiceChanged() for userId " + userId);
|
||||||
|
validateAccountsInternal(getUserAccounts(userId), false /* invalidateAuthenticatorCache */);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getPassword(Account account) {
|
public String getPassword(Account account) {
|
||||||
@@ -1493,10 +1517,23 @@ public class AccountManagerService
|
|||||||
// Running in system_server; should never happen
|
// Running in system_server; should never happen
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
return getAccounts(runningUserIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@hide} */
|
||||||
|
public AccountAndUser[] getAllAccounts() {
|
||||||
|
final List<UserInfo> users = getUserManager().getUsers();
|
||||||
|
final int[] userIds = new int[users.size()];
|
||||||
|
for (int i = 0; i < userIds.length; i++) {
|
||||||
|
userIds[i] = users.get(i).id;
|
||||||
|
}
|
||||||
|
return getAccounts(userIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
private AccountAndUser[] getAccounts(int[] userIds) {
|
||||||
final ArrayList<AccountAndUser> runningAccounts = Lists.newArrayList();
|
final ArrayList<AccountAndUser> runningAccounts = Lists.newArrayList();
|
||||||
synchronized (mUsers) {
|
synchronized (mUsers) {
|
||||||
for (int userId : runningUserIds) {
|
for (int userId : userIds) {
|
||||||
UserAccounts userAccounts = getUserAccounts(userId);
|
UserAccounts userAccounts = getUserAccounts(userId);
|
||||||
if (userAccounts == null) continue;
|
if (userAccounts == null) continue;
|
||||||
synchronized (userAccounts.cacheLock) {
|
synchronized (userAccounts.cacheLock) {
|
||||||
@@ -2006,6 +2043,7 @@ public class AccountManagerService
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) {
|
protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) {
|
||||||
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
|
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
|
||||||
!= PackageManager.PERMISSION_GRANTED) {
|
!= PackageManager.PERMISSION_GRANTED) {
|
||||||
@@ -2015,17 +2053,15 @@ public class AccountManagerService
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final boolean isCheckinRequest = scanArgs(args, "--checkin") || scanArgs(args, "-c");
|
final boolean isCheckinRequest = scanArgs(args, "--checkin") || scanArgs(args, "-c");
|
||||||
|
final IndentingPrintWriter ipw = new IndentingPrintWriter(fout, " ");
|
||||||
|
|
||||||
fout = new IndentingPrintWriter(fout, " ");
|
final List<UserInfo> users = getUserManager().getUsers();
|
||||||
int size = mUsers.size();
|
for (UserInfo user : users) {
|
||||||
for (int i = 0; i < size; i++) {
|
ipw.println("User " + user + ":");
|
||||||
fout.println("User " + mUsers.keyAt(i) + ":");
|
ipw.increaseIndent();
|
||||||
((IndentingPrintWriter) fout).increaseIndent();
|
dumpUser(getUserAccounts(user.id), fd, ipw, args, isCheckinRequest);
|
||||||
dumpUser(mUsers.valueAt(i), fd, fout, args, isCheckinRequest);
|
ipw.println();
|
||||||
((IndentingPrintWriter) fout).decreaseIndent();
|
ipw.decreaseIndent();
|
||||||
if (i < size - 1) {
|
|
||||||
fout.println();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -889,6 +889,9 @@ public class SyncManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void onUserStarting(int userId) {
|
private void onUserStarting(int userId) {
|
||||||
|
// Make sure that accounts we're about to use are valid
|
||||||
|
AccountManagerService.getSingleton().validateAccounts(userId);
|
||||||
|
|
||||||
mSyncAdapters.invalidateCache(userId);
|
mSyncAdapters.invalidateCache(userId);
|
||||||
|
|
||||||
updateRunningAccounts();
|
updateRunningAccounts();
|
||||||
@@ -1078,9 +1081,9 @@ public class SyncManager {
|
|||||||
}
|
}
|
||||||
pw.print("memory low: "); pw.println(mStorageIsLow);
|
pw.print("memory low: "); pw.println(mStorageIsLow);
|
||||||
|
|
||||||
final AccountAndUser[] accounts = mRunningAccounts;
|
final AccountAndUser[] accounts = AccountManagerService.getSingleton().getAllAccounts();
|
||||||
|
|
||||||
pw.print("running accounts: ");
|
pw.print("accounts: ");
|
||||||
if (accounts != INITIAL_ACCOUNTS_ARRAY) {
|
if (accounts != INITIAL_ACCOUNTS_ARRAY) {
|
||||||
pw.println(accounts.length);
|
pw.println(accounts.length);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user