am 962b06f9: Merge "Fixed several time related states for secondary users" into lmp-mr1-dev

* commit '962b06f9a02f08392b6f87225a314ebf39dd7a07':
  Fixed several time related states for secondary users
This commit is contained in:
Selim Cinek
2014-11-24 11:57:59 +00:00
committed by Android Git Automerger
9 changed files with 104 additions and 29 deletions

View File

@@ -474,13 +474,14 @@ public class ZenModeConfig implements Parcelable {
return downtime;
}
public static Condition toTimeCondition(Context context, int minutesFromNow) {
public static Condition toTimeCondition(Context context, int minutesFromNow, int userHandle) {
final long now = System.currentTimeMillis();
final long millis = minutesFromNow == 0 ? ZERO_VALUE_MS : minutesFromNow * MINUTES_MS;
return toTimeCondition(context, now + millis, minutesFromNow, now);
return toTimeCondition(context, now + millis, minutesFromNow, now, userHandle);
}
public static Condition toTimeCondition(Context context, long time, int minutes, long now) {
public static Condition toTimeCondition(Context context, long time, int minutes, long now,
int userHandle) {
final int num, summaryResId, line1ResId;
if (minutes < 60) {
// display as minutes
@@ -493,7 +494,7 @@ public class ZenModeConfig implements Parcelable {
summaryResId = com.android.internal.R.plurals.zen_mode_duration_hours_summary;
line1ResId = com.android.internal.R.plurals.zen_mode_duration_hours;
}
final String skeleton = DateFormat.is24HourFormat(context) ? "Hm" : "hma";
final String skeleton = DateFormat.is24HourFormat(context, userHandle) ? "Hm" : "hma";
final String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton);
final CharSequence formattedTime = DateFormat.format(pattern, time);
final Resources res = context.getResources();

View File

@@ -17,6 +17,7 @@
package android.text.format;
import android.content.Context;
import android.os.UserHandle;
import android.provider.Settings;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
@@ -166,8 +167,20 @@ public class DateFormat {
* @return true if 24 hour time format is selected, false otherwise.
*/
public static boolean is24HourFormat(Context context) {
String value = Settings.System.getString(context.getContentResolver(),
Settings.System.TIME_12_24);
return is24HourFormat(context, UserHandle.myUserId());
}
/**
* Returns true if user preference with the given user handle is set to 24-hour format.
* @param context the context to use for the content resolver
* @param userHandle the user handle of the user to query.
* @return true if 24 hour time format is selected, false otherwise.
*
* @hide
*/
public static boolean is24HourFormat(Context context, int userHandle) {
String value = Settings.System.getStringForUser(context.getContentResolver(),
Settings.System.TIME_12_24, userHandle);
if (value == null) {
Locale locale = context.getResources().getConfiguration().locale;
@@ -179,7 +192,7 @@ public class DateFormat {
}
java.text.DateFormat natural =
java.text.DateFormat.getTimeInstance(java.text.DateFormat.LONG, locale);
java.text.DateFormat.getTimeInstance(java.text.DateFormat.LONG, locale);
if (natural instanceof SimpleDateFormat) {
SimpleDateFormat sdf = (SimpleDateFormat) natural;
@@ -253,8 +266,19 @@ public class DateFormat {
* @hide
*/
public static String getTimeFormatString(Context context) {
return getTimeFormatString(context, UserHandle.myUserId());
}
/**
* Returns a String pattern that can be used to format the time according
* to the current locale and the user's 12-/24-hour clock preference.
* @param context the application context
* @param userHandle the user handle of the user to query the format for
* @hide
*/
public static String getTimeFormatString(Context context, int userHandle) {
LocaleData d = LocaleData.get(context.getResources().getConfiguration().locale);
return is24HourFormat(context) ? d.timeFormat24 : d.timeFormat12;
return is24HourFormat(context, userHandle) ? d.timeFormat24 : d.timeFormat12;
}
/**

View File

@@ -16,6 +16,7 @@
package android.widget;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
@@ -26,6 +27,7 @@ import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.os.SystemClock;
import android.os.UserHandle;
import android.provider.Settings;
import android.text.format.DateFormat;
import android.util.AttributeSet;
@@ -127,6 +129,8 @@ public class TextClock extends TextView {
private Calendar mTime;
private String mTimeZone;
private boolean mShowCurrentUserTime;
private final ContentObserver mFormatChangeObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
@@ -341,6 +345,22 @@ public class TextClock extends TextView {
onTimeChanged();
}
/**
* Sets whether this clock should always track the current user and not the user of the
* current process. This is used for single instance processes like the systemUI who need
* to display time for different users.
*
* @hide
*/
public void setShowCurrentUserTime(boolean showCurrentUserTime) {
mShowCurrentUserTime = showCurrentUserTime;
chooseFormat();
onTimeChanged();
unregisterObserver();
registerObserver();
}
/**
* Indicates whether the system is currently using the 24-hour mode.
*
@@ -360,7 +380,11 @@ public class TextClock extends TextView {
* @see #getFormat24Hour()
*/
public boolean is24HourModeEnabled() {
return DateFormat.is24HourFormat(getContext());
if (mShowCurrentUserTime) {
return DateFormat.is24HourFormat(getContext(), ActivityManager.getCurrentUser());
} else {
return DateFormat.is24HourFormat(getContext());
}
}
/**
@@ -500,7 +524,13 @@ public class TextClock extends TextView {
private void registerObserver() {
final ContentResolver resolver = getContext().getContentResolver();
resolver.registerContentObserver(Settings.System.CONTENT_URI, true, mFormatChangeObserver);
if (mShowCurrentUserTime) {
resolver.registerContentObserver(Settings.System.CONTENT_URI, true,
mFormatChangeObserver, UserHandle.USER_ALL);
} else {
resolver.registerContentObserver(Settings.System.CONTENT_URI, true,
mFormatChangeObserver);
}
}
private void unregisterReceiver() {

View File

@@ -16,6 +16,7 @@
package com.android.keyguard;
import android.app.ActivityManager;
import android.app.AlarmManager;
import android.content.ContentResolver;
import android.content.Context;
@@ -105,6 +106,8 @@ public class KeyguardStatusView extends GridLayout {
mAlarmStatusView = (TextView) findViewById(R.id.alarm_status);
mDateView = (TextClock) findViewById(R.id.date_view);
mClockView = (TextClock) findViewById(R.id.clock_view);
mDateView.setShowCurrentUserTime(true);
mClockView.setShowCurrentUserTime(true);
mOwnerInfo = (TextView) findViewById(R.id.owner_info);
mLockPatternUtils = new LockPatternUtils(getContext());
final boolean screenOn = KeyguardUpdateMonitor.getInstance(mContext).isScreenOn();
@@ -160,7 +163,9 @@ public class KeyguardStatusView extends GridLayout {
if (info == null) {
return "";
}
String skeleton = DateFormat.is24HourFormat(context) ? "EHm" : "Ehma";
String skeleton = DateFormat.is24HourFormat(context, ActivityManager.getCurrentUser())
? "EHm"
: "Ehma";
String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton);
return DateFormat.format(pattern, info.getTriggerTime()).toString();
}

View File

@@ -16,12 +16,14 @@
package com.android.systemui.statusbar.policy;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.os.UserHandle;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.format.DateFormat;
@@ -91,7 +93,8 @@ public class Clock extends TextView implements DemoMode {
filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
filter.addAction(Intent.ACTION_USER_SWITCHED);
getContext().registerReceiver(mIntentReceiver, filter, null, getHandler());
getContext().registerReceiverAsUser(mIntentReceiver, UserHandle.ALL, filter,
null, getHandler());
}
// NOTE: It's safe to do these after registering the receiver since the receiver always runs
@@ -142,7 +145,7 @@ public class Clock extends TextView implements DemoMode {
private final CharSequence getSmallTime() {
Context context = getContext();
boolean is24 = DateFormat.is24HourFormat(context);
boolean is24 = DateFormat.is24HourFormat(context, ActivityManager.getCurrentUser());
LocaleData d = LocaleData.get(context.getResources().getConfiguration().locale);
final char MAGIC1 = '\uEF00';

View File

@@ -39,7 +39,7 @@ public class NextAlarmController extends BroadcastReceiver {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_USER_SWITCHED);
filter.addAction(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED);
context.registerReceiver(this, filter);
context.registerReceiverAsUser(this, UserHandle.ALL, filter, null, null);
updateNextAlarm();
}

View File

@@ -16,10 +16,12 @@
package com.android.systemui.statusbar.policy;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.UserHandle;
import android.text.format.DateFormat;
import android.util.AttributeSet;
import android.widget.LinearLayout;
@@ -42,7 +44,9 @@ public class SplitClockView extends LinearLayout {
final String action = intent.getAction();
if (Intent.ACTION_TIME_CHANGED.equals(action)
|| Intent.ACTION_TIMEZONE_CHANGED.equals(action)
|| Intent.ACTION_LOCALE_CHANGED.equals(action)) {
|| Intent.ACTION_LOCALE_CHANGED.equals(action)
|| Intent.ACTION_CONFIGURATION_CHANGED.equals(action)
|| Intent.ACTION_USER_SWITCHED.equals(action)) {
updatePatterns();
}
}
@@ -57,6 +61,8 @@ public class SplitClockView extends LinearLayout {
super.onFinishInflate();
mTimeView = (TextClock) findViewById(R.id.time_view);
mAmPmView = (TextClock) findViewById(R.id.am_pm_view);
mTimeView.setShowCurrentUserTime(true);
mAmPmView.setShowCurrentUserTime(true);
}
@Override
@@ -67,7 +73,9 @@ public class SplitClockView extends LinearLayout {
filter.addAction(Intent.ACTION_TIME_CHANGED);
filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
filter.addAction(Intent.ACTION_LOCALE_CHANGED);
getContext().registerReceiver(mIntentReceiver, filter, null, null);
filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
filter.addAction(Intent.ACTION_USER_SWITCHED);
getContext().registerReceiverAsUser(mIntentReceiver, UserHandle.ALL, filter, null, null);
updatePatterns();
}
@@ -79,7 +87,8 @@ public class SplitClockView extends LinearLayout {
}
private void updatePatterns() {
String formatString = DateFormat.getTimeFormatString(getContext());
String formatString = DateFormat.getTimeFormatString(getContext(),
ActivityManager.getCurrentUser());
int index = getAmPmPartEndIndex(formatString);
String timeString;
String amPmString;

View File

@@ -18,6 +18,7 @@ package com.android.systemui.volume;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -218,7 +219,7 @@ public class ZenModePanel extends LinearLayout {
} else {
mBucketIndex = DEFAULT_BUCKET_INDEX;
mTimeCondition = ZenModeConfig.toTimeCondition(mContext,
MINUTE_BUCKETS[mBucketIndex]);
MINUTE_BUCKETS[mBucketIndex], ActivityManager.getCurrentUser());
}
if (DEBUG) Log.d(mTag, "Initial bucket index: " + mBucketIndex);
mConditions = null; // reset conditions
@@ -341,7 +342,7 @@ public class ZenModePanel extends LinearLayout {
final long span = time - now;
if (span <= 0 || span > MAX_BUCKET_MINUTES * MINUTES_MS) return null;
return ZenModeConfig.toTimeCondition(mContext,
time, Math.round(span / (float) MINUTES_MS), now);
time, Math.round(span / (float) MINUTES_MS), now, ActivityManager.getCurrentUser());
}
private void handleUpdateConditions(Condition[] conditions) {
@@ -397,7 +398,8 @@ public class ZenModePanel extends LinearLayout {
if (favoriteIndex == -1) {
getConditionTagAt(FOREVER_CONDITION_INDEX).rb.setChecked(true);
} else {
mTimeCondition = ZenModeConfig.toTimeCondition(mContext, MINUTE_BUCKETS[favoriteIndex]);
mTimeCondition = ZenModeConfig.toTimeCondition(mContext,
MINUTE_BUCKETS[favoriteIndex], ActivityManager.getCurrentUser());
mBucketIndex = favoriteIndex;
bind(mTimeCondition, mZenConditions.getChildAt(TIME_CONDITION_INDEX));
getConditionTagAt(TIME_CONDITION_INDEX).rb.setChecked(true);
@@ -511,7 +513,7 @@ public class ZenModePanel extends LinearLayout {
final long span = time - System.currentTimeMillis();
button1.setEnabled(span > MIN_BUCKET_MINUTES * MINUTES_MS);
final Condition maxCondition = ZenModeConfig.toTimeCondition(mContext,
MAX_BUCKET_MINUTES);
MAX_BUCKET_MINUTES, ActivityManager.getCurrentUser());
button2.setEnabled(!Objects.equals(condition.summary, maxCondition.summary));
}
@@ -562,20 +564,20 @@ public class ZenModePanel extends LinearLayout {
if (up && bucketTime > time || !up && bucketTime < time) {
mBucketIndex = j;
newCondition = ZenModeConfig.toTimeCondition(mContext,
bucketTime, bucketMinutes, now);
bucketTime, bucketMinutes, now, ActivityManager.getCurrentUser());
break;
}
}
if (newCondition == null) {
mBucketIndex = DEFAULT_BUCKET_INDEX;
newCondition = ZenModeConfig.toTimeCondition(mContext,
MINUTE_BUCKETS[mBucketIndex]);
MINUTE_BUCKETS[mBucketIndex], ActivityManager.getCurrentUser());
}
} else {
// on a known index, simply increment or decrement
mBucketIndex = Math.max(0, Math.min(N - 1, mBucketIndex + (up ? 1 : -1)));
newCondition = ZenModeConfig.toTimeCondition(mContext,
MINUTE_BUCKETS[mBucketIndex]);
MINUTE_BUCKETS[mBucketIndex], ActivityManager.getCurrentUser());
}
mTimeCondition = newCondition;
bind(mTimeCondition, row);

View File

@@ -1124,7 +1124,7 @@ class AlarmManagerService extends SystemService {
if (DEBUG_ALARM_CLOCK) {
Log.v(TAG, "Found AlarmClockInfo at " +
formatNextAlarm(getContext(), a.alarmClock) +
formatNextAlarm(getContext(), a.alarmClock, userId) +
" for user " + userId);
}
@@ -1162,7 +1162,7 @@ class AlarmManagerService extends SystemService {
if (alarmClock != null) {
if (DEBUG_ALARM_CLOCK) {
Log.v(TAG, "Next AlarmClockInfoForUser(" + userId + "): " +
formatNextAlarm(getContext(), alarmClock));
formatNextAlarm(getContext(), alarmClock, userId));
}
mNextAlarmClockForUser.put(userId, alarmClock);
} else {
@@ -1204,7 +1204,7 @@ class AlarmManagerService extends SystemService {
AlarmManager.AlarmClockInfo alarmClock = pendingUsers.valueAt(i);
Settings.System.putStringForUser(getContext().getContentResolver(),
Settings.System.NEXT_ALARM_FORMATTED,
formatNextAlarm(getContext(), alarmClock),
formatNextAlarm(getContext(), alarmClock, userId),
userId);
getContext().sendBroadcastAsUser(NEXT_ALARM_CLOCK_CHANGED_INTENT,
@@ -1215,8 +1215,9 @@ class AlarmManagerService extends SystemService {
/**
* Formats an alarm like platform/packages/apps/DeskClock used to.
*/
private static String formatNextAlarm(final Context context, AlarmManager.AlarmClockInfo info) {
String skeleton = DateFormat.is24HourFormat(context) ? "EHm" : "Ehma";
private static String formatNextAlarm(final Context context, AlarmManager.AlarmClockInfo info,
int userId) {
String skeleton = DateFormat.is24HourFormat(context, userId) ? "EHm" : "Ehma";
String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton);
return (info == null) ? "" :
DateFormat.format(pattern, info.getTriggerTime()).toString();