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.
|
* Information about the sync operation that is currently underway.
|
||||||
*/
|
*/
|
||||||
public class SyncInfo implements Parcelable {
|
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 */
|
/** @hide */
|
||||||
public final int authorityId;
|
public final int authorityId;
|
||||||
|
|
||||||
@@ -44,6 +51,17 @@ public class SyncInfo implements Parcelable {
|
|||||||
*/
|
*/
|
||||||
public final long startTime;
|
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 */
|
/** @hide */
|
||||||
public SyncInfo(int authorityId, Account account, String authority, long startTime) {
|
public SyncInfo(int authorityId, Account account, String authority, long startTime) {
|
||||||
this.authorityId = authorityId;
|
this.authorityId = authorityId;
|
||||||
|
|||||||
@@ -772,9 +772,13 @@ public final class ContentService extends IContentService.Stub {
|
|||||||
mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_SYNC_STATS,
|
mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_SYNC_STATS,
|
||||||
"no permission to read the sync stats");
|
"no permission to read the sync stats");
|
||||||
|
|
||||||
|
final boolean canAccessAccounts =
|
||||||
|
mContext.checkCallingOrSelfPermission(Manifest.permission.GET_ACCOUNTS)
|
||||||
|
== PackageManager.PERMISSION_GRANTED;
|
||||||
long identityToken = clearCallingIdentity();
|
long identityToken = clearCallingIdentity();
|
||||||
try {
|
try {
|
||||||
return getSyncManager().getSyncStorageEngine().getCurrentSyncsCopy(userId);
|
return getSyncManager().getSyncStorageEngine()
|
||||||
|
.getCurrentSyncsCopy(userId, canAccessAccounts);
|
||||||
} finally {
|
} finally {
|
||||||
restoreCallingIdentity(identityToken);
|
restoreCallingIdentity(identityToken);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1426,15 +1426,23 @@ public class SyncStorageEngine extends Handler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return a copy of the current syncs data structure. Will not return
|
* @param userId Id of user to return current sync info.
|
||||||
* null.
|
* @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) {
|
synchronized (mAuthorities) {
|
||||||
final List<SyncInfo> syncs = getCurrentSyncsLocked(userId);
|
final List<SyncInfo> syncs = getCurrentSyncsLocked(userId);
|
||||||
final List<SyncInfo> syncsCopy = new ArrayList<SyncInfo>();
|
final List<SyncInfo> syncsCopy = new ArrayList<SyncInfo>();
|
||||||
for (SyncInfo sync : syncs) {
|
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;
|
return syncsCopy;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user