Redact Account info from getCurrentSyncs am: f39549e389 am: 1a0aed3257
am: 0e7cd0a9fb
* commit '0e7cd0a9fbdcb48c551d54627eb964364dd946d0':
Redact Account info from getCurrentSyncs
This commit is contained in:
@@ -24,6 +24,13 @@ import android.os.Parcelable;
|
||||
* Information about the sync operation that is currently underway.
|
||||
*/
|
||||
public class SyncInfo implements Parcelable {
|
||||
/**
|
||||
* Used when the caller receiving this object doesn't have permission to access the accounts
|
||||
* on device.
|
||||
* @See Manifest.permission.GET_ACCOUNTS
|
||||
*/
|
||||
private static final Account REDACTED_ACCOUNT = new Account("*****", "*****");
|
||||
|
||||
/** @hide */
|
||||
public final int authorityId;
|
||||
|
||||
@@ -44,6 +51,17 @@ public class SyncInfo implements Parcelable {
|
||||
*/
|
||||
public final long startTime;
|
||||
|
||||
/**
|
||||
* Creates a SyncInfo object with an unusable Account. Used when the caller receiving this
|
||||
* object doesn't have access to the accounts on the device.
|
||||
* @See Manifest.permission.GET_ACCOUNTS
|
||||
* @hide
|
||||
*/
|
||||
public static SyncInfo createAccountRedacted(
|
||||
int authorityId, String authority, long startTime) {
|
||||
return new SyncInfo(authorityId, REDACTED_ACCOUNT, authority, startTime);
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public SyncInfo(int authorityId, Account account, String authority, long startTime) {
|
||||
this.authorityId = authorityId;
|
||||
|
||||
@@ -772,9 +772,13 @@ public final class ContentService extends IContentService.Stub {
|
||||
mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_SYNC_STATS,
|
||||
"no permission to read the sync stats");
|
||||
|
||||
final boolean canAccessAccounts =
|
||||
mContext.checkCallingOrSelfPermission(Manifest.permission.GET_ACCOUNTS)
|
||||
== PackageManager.PERMISSION_GRANTED;
|
||||
long identityToken = clearCallingIdentity();
|
||||
try {
|
||||
return getSyncManager().getSyncStorageEngine().getCurrentSyncsCopy(userId);
|
||||
return getSyncManager().getSyncStorageEngine()
|
||||
.getCurrentSyncsCopy(userId, canAccessAccounts);
|
||||
} finally {
|
||||
restoreCallingIdentity(identityToken);
|
||||
}
|
||||
|
||||
@@ -1426,15 +1426,23 @@ public class SyncStorageEngine extends Handler {
|
||||
}
|
||||
|
||||
/**
|
||||
* @return a copy of the current syncs data structure. Will not return
|
||||
* null.
|
||||
* @param userId Id of user to return current sync info.
|
||||
* @param canAccessAccounts Determines whether to redact Account information from the result.
|
||||
* @return a copy of the current syncs data structure. Will not return null.
|
||||
*/
|
||||
public List<SyncInfo> getCurrentSyncsCopy(int userId) {
|
||||
public List<SyncInfo> getCurrentSyncsCopy(int userId, boolean canAccessAccounts) {
|
||||
synchronized (mAuthorities) {
|
||||
final List<SyncInfo> syncs = getCurrentSyncsLocked(userId);
|
||||
final List<SyncInfo> syncsCopy = new ArrayList<SyncInfo>();
|
||||
for (SyncInfo sync : syncs) {
|
||||
syncsCopy.add(new SyncInfo(sync));
|
||||
SyncInfo copy;
|
||||
if (!canAccessAccounts) {
|
||||
copy = SyncInfo.createAccountRedacted(
|
||||
sync.authorityId, sync.authority, sync.startTime);
|
||||
} else {
|
||||
copy = new SyncInfo(sync);
|
||||
}
|
||||
syncsCopy.add(copy);
|
||||
}
|
||||
return syncsCopy;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user