use of android.content.pm.UserInfo in project platform_frameworks_base by android.
the class UserManager method isUserSwitcherEnabled.
/**
* Returns true if the user switcher should be shown, this will be if device supports multi-user
* and there are at least 2 users available that are not managed profiles.
* @hide
* @return true if user switcher should be shown.
*/
public boolean isUserSwitcherEnabled() {
if (!supportsMultipleUsers()) {
return false;
}
// If Demo Mode is on, don't show user switcher
if (isDeviceInDemoMode(mContext)) {
return false;
}
List<UserInfo> users = getUsers(true);
if (users == null) {
return false;
}
int switchableUserCount = 0;
for (UserInfo user : users) {
if (user.supportsSwitchToByUser()) {
++switchableUserCount;
}
}
final boolean guestEnabled = !mContext.getSystemService(DevicePolicyManager.class).getGuestUserDisabled(null);
return switchableUserCount > 1 || guestEnabled;
}
use of android.content.pm.UserInfo in project android_frameworks_base by ParanoidAndroid.
the class WallpaperManagerService method hasNamedWallpaper.
public boolean hasNamedWallpaper(String name) {
synchronized (mLock) {
List<UserInfo> users;
long ident = Binder.clearCallingIdentity();
try {
users = ((UserManager) mContext.getSystemService(Context.USER_SERVICE)).getUsers();
} finally {
Binder.restoreCallingIdentity(ident);
}
for (UserInfo user : users) {
WallpaperData wd = mWallpaperMap.get(user.id);
if (wd == null) {
// User hasn't started yet, so load her settings to peek at the wallpaper
loadSettingsLocked(user.id);
wd = mWallpaperMap.get(user.id);
}
if (wd != null && name.equals(wd.name)) {
return true;
}
}
}
return false;
}
use of android.content.pm.UserInfo in project android_frameworks_base by ParanoidAndroid.
the class SyncManager method doDatabaseCleanup.
private void doDatabaseCleanup() {
for (UserInfo user : mUserManager.getUsers(true)) {
// Skip any partially created/removed users
if (user.partial)
continue;
Account[] accountsForUser = AccountManagerService.getSingleton().getAccounts(user.id);
mSyncStorageEngine.doDatabaseCleanup(accountsForUser, user.id);
}
}
use of android.content.pm.UserInfo in project android_frameworks_base by ParanoidAndroid.
the class SyncManager method dumpSyncState.
protected void dumpSyncState(PrintWriter pw) {
pw.print("data connected: ");
pw.println(mDataConnectionIsConnected);
pw.print("auto sync: ");
List<UserInfo> users = getAllUsers();
if (users != null) {
for (UserInfo user : users) {
pw.print("u" + user.id + "=" + mSyncStorageEngine.getMasterSyncAutomatically(user.id) + " ");
}
pw.println();
}
pw.print("memory low: ");
pw.println(mStorageIsLow);
final AccountAndUser[] accounts = AccountManagerService.getSingleton().getAllAccounts();
pw.print("accounts: ");
if (accounts != INITIAL_ACCOUNTS_ARRAY) {
pw.println(accounts.length);
} else {
pw.println("not known yet");
}
final long now = SystemClock.elapsedRealtime();
pw.print("now: ");
pw.print(now);
pw.println(" (" + formatTime(System.currentTimeMillis()) + ")");
pw.print("offset: ");
pw.print(DateUtils.formatElapsedTime(mSyncRandomOffsetMillis / 1000));
pw.println(" (HH:MM:SS)");
pw.print("uptime: ");
pw.print(DateUtils.formatElapsedTime(now / 1000));
pw.println(" (HH:MM:SS)");
pw.print("time spent syncing: ");
pw.print(DateUtils.formatElapsedTime(mSyncHandler.mSyncTimeTracker.timeSpentSyncing() / 1000));
pw.print(" (HH:MM:SS), sync ");
pw.print(mSyncHandler.mSyncTimeTracker.mLastWasSyncing ? "" : "not ");
pw.println("in progress");
if (mSyncHandler.mAlarmScheduleTime != null) {
pw.print("next alarm time: ");
pw.print(mSyncHandler.mAlarmScheduleTime);
pw.print(" (");
pw.print(DateUtils.formatElapsedTime((mSyncHandler.mAlarmScheduleTime - now) / 1000));
pw.println(" (HH:MM:SS) from now)");
} else {
pw.println("no alarm is scheduled (there had better not be any pending syncs)");
}
pw.print("notification info: ");
final StringBuilder sb = new StringBuilder();
mSyncHandler.mSyncNotificationInfo.toString(sb);
pw.println(sb.toString());
pw.println();
pw.println("Active Syncs: " + mActiveSyncContexts.size());
final PackageManager pm = mContext.getPackageManager();
for (SyncManager.ActiveSyncContext activeSyncContext : mActiveSyncContexts) {
final long durationInSeconds = (now - activeSyncContext.mStartTime) / 1000;
pw.print(" ");
pw.print(DateUtils.formatElapsedTime(durationInSeconds));
pw.print(" - ");
pw.print(activeSyncContext.mSyncOperation.dump(pm, false));
pw.println();
}
synchronized (mSyncQueue) {
sb.setLength(0);
mSyncQueue.dump(sb);
}
pw.println();
pw.print(sb.toString());
// join the installed sync adapter with the accounts list and emit for everything
pw.println();
pw.println("Sync Status");
for (AccountAndUser account : accounts) {
pw.printf("Account %s u%d %s\n", account.account.name, account.userId, account.account.type);
pw.println("=======================================================================");
final PrintTable table = new PrintTable(13);
table.set(0, 0, // 0
"Authority", // 1
"Syncable", // 2
"Enabled", // 3
"Delay", // 4
"Loc", // 5
"Poll", // 6
"Per", // 7
"Serv", // 8
"User", // 9
"Tot", // 10
"Time", // 11
"Last Sync", // 12
"Periodic");
final List<RegisteredServicesCache.ServiceInfo<SyncAdapterType>> sorted = Lists.newArrayList();
sorted.addAll(mSyncAdapters.getAllServices(account.userId));
Collections.sort(sorted, new Comparator<RegisteredServicesCache.ServiceInfo<SyncAdapterType>>() {
@Override
public int compare(RegisteredServicesCache.ServiceInfo<SyncAdapterType> lhs, RegisteredServicesCache.ServiceInfo<SyncAdapterType> rhs) {
return lhs.type.authority.compareTo(rhs.type.authority);
}
});
for (RegisteredServicesCache.ServiceInfo<SyncAdapterType> syncAdapterType : sorted) {
if (!syncAdapterType.type.accountType.equals(account.account.type)) {
continue;
}
int row = table.getNumRows();
SyncStorageEngine.AuthorityInfo settings = mSyncStorageEngine.getOrCreateAuthority(account.account, account.userId, syncAdapterType.type.authority);
SyncStatusInfo status = mSyncStorageEngine.getOrCreateSyncStatus(settings);
String authority = settings.authority;
if (authority.length() > 50) {
authority = authority.substring(authority.length() - 50);
}
table.set(row, 0, authority, settings.syncable, settings.enabled);
table.set(row, 4, status.numSourceLocal, status.numSourcePoll, status.numSourcePeriodic, status.numSourceServer, status.numSourceUser, status.numSyncs, DateUtils.formatElapsedTime(status.totalElapsedTime / 1000));
for (int i = 0; i < settings.periodicSyncs.size(); i++) {
final Pair<Bundle, Long> pair = settings.periodicSyncs.get(0);
final String period = String.valueOf(pair.second);
final String extras = pair.first.size() > 0 ? pair.first.toString() : "";
final String next = formatTime(status.getPeriodicSyncTime(0) + pair.second * 1000);
table.set(row + i * 2, 12, period + extras);
table.set(row + i * 2 + 1, 12, next);
}
int row1 = row;
if (settings.delayUntil > now) {
table.set(row1++, 12, "D: " + (settings.delayUntil - now) / 1000);
if (settings.backoffTime > now) {
table.set(row1++, 12, "B: " + (settings.backoffTime - now) / 1000);
table.set(row1++, 12, settings.backoffDelay / 1000);
}
}
if (status.lastSuccessTime != 0) {
table.set(row1++, 11, SyncStorageEngine.SOURCES[status.lastSuccessSource] + " " + "SUCCESS");
table.set(row1++, 11, formatTime(status.lastSuccessTime));
}
if (status.lastFailureTime != 0) {
table.set(row1++, 11, SyncStorageEngine.SOURCES[status.lastFailureSource] + " " + "FAILURE");
table.set(row1++, 11, formatTime(status.lastFailureTime));
//noinspection UnusedAssignment
table.set(row1++, 11, status.lastFailureMesg);
}
}
table.writeTo(pw);
}
}
use of android.content.pm.UserInfo in project android_frameworks_base by ParanoidAndroid.
the class SyncManager method dumpSyncAdapters.
private void dumpSyncAdapters(IndentingPrintWriter pw) {
pw.println();
final List<UserInfo> users = getAllUsers();
if (users != null) {
for (UserInfo user : users) {
pw.println("Sync adapters for " + user + ":");
pw.increaseIndent();
for (RegisteredServicesCache.ServiceInfo<?> info : mSyncAdapters.getAllServices(user.id)) {
pw.println(info);
}
pw.decreaseIndent();
pw.println();
}
}
}
Aggregations