am a0bc738f: Merge "Move coalescing to callback, optimize KeyguardStatusView." into klp-dev
* commit 'a0bc738f46f62ba1a02e956a8c262323ab4ab75c': Move coalescing to callback, optimize KeyguardStatusView.
This commit is contained in:
@@ -68,8 +68,6 @@ public class KeyguardService extends Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private final IKeyguardService.Stub mBinder = new IKeyguardService.Stub() {
|
private final IKeyguardService.Stub mBinder = new IKeyguardService.Stub() {
|
||||||
private boolean mSetHiddenCalled;
|
|
||||||
private boolean mIsHidden;
|
|
||||||
public boolean isShowing() {
|
public boolean isShowing() {
|
||||||
return mKeyguardViewMediator.isShowing();
|
return mKeyguardViewMediator.isShowing();
|
||||||
}
|
}
|
||||||
@@ -91,10 +89,7 @@ public class KeyguardService extends Service {
|
|||||||
}
|
}
|
||||||
public void setHidden(boolean isHidden) {
|
public void setHidden(boolean isHidden) {
|
||||||
checkPermission();
|
checkPermission();
|
||||||
if (mSetHiddenCalled && mIsHidden == isHidden) return;
|
|
||||||
mKeyguardViewMediator.setHidden(isHidden);
|
mKeyguardViewMediator.setHidden(isHidden);
|
||||||
mSetHiddenCalled = true;
|
|
||||||
mIsHidden = isHidden;
|
|
||||||
}
|
}
|
||||||
public void dismiss() {
|
public void dismiss() {
|
||||||
mKeyguardViewMediator.dismiss();
|
mKeyguardViewMediator.dismiss();
|
||||||
|
|||||||
@@ -98,26 +98,13 @@ public class KeyguardStatusView extends GridLayout {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void refresh() {
|
protected void refresh() {
|
||||||
Resources res = mContext.getResources();
|
Patterns.update(mContext);
|
||||||
Locale locale = Locale.getDefault();
|
|
||||||
final String dateFormat = DateFormat.getBestDateTimePattern(locale,
|
|
||||||
res.getString(R.string.abbrev_wday_month_day_no_year));
|
|
||||||
|
|
||||||
mDateView.setFormat24Hour(dateFormat);
|
mDateView.setFormat24Hour(Patterns.dateView);
|
||||||
mDateView.setFormat12Hour(dateFormat);
|
mDateView.setFormat12Hour(Patterns.dateView);
|
||||||
|
|
||||||
// 12-hour clock.
|
mClockView.setFormat12Hour(Patterns.clockView12);
|
||||||
// CLDR insists on adding an AM/PM indicator even though it wasn't in the skeleton
|
mClockView.setFormat24Hour(Patterns.clockView24);
|
||||||
// format. The following code removes the AM/PM indicator if we didn't want it.
|
|
||||||
final String clock12skel = res.getString(R.string.clock_12hr_format);
|
|
||||||
String clock12hr = DateFormat.getBestDateTimePattern(locale, clock12skel);
|
|
||||||
clock12hr = clock12skel.contains("a") ? clock12hr : clock12hr.replaceAll("a", "").trim();
|
|
||||||
mClockView.setFormat12Hour(clock12hr);
|
|
||||||
|
|
||||||
// 24-hour clock
|
|
||||||
final String clock24skel = res.getString(R.string.clock_24hr_format);
|
|
||||||
final String clock24hr = DateFormat.getBestDateTimePattern(locale, clock24skel);
|
|
||||||
mClockView.setFormat24Hour(clock24hr);
|
|
||||||
|
|
||||||
refreshAlarmStatus();
|
refreshAlarmStatus();
|
||||||
}
|
}
|
||||||
@@ -149,4 +136,35 @@ public class KeyguardStatusView extends GridLayout {
|
|||||||
return LockPatternUtils.ID_DEFAULT_STATUS_WIDGET;
|
return LockPatternUtils.ID_DEFAULT_STATUS_WIDGET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DateFormat.getBestDateTimePattern is extremely expensive, and refresh is called often.
|
||||||
|
// This is an optimization to ensure we only recompute the patterns when the inputs change.
|
||||||
|
private static final class Patterns {
|
||||||
|
static String dateView;
|
||||||
|
static String clockView12;
|
||||||
|
static String clockView24;
|
||||||
|
static String cacheKey;
|
||||||
|
|
||||||
|
static void update(Context context) {
|
||||||
|
final Locale locale = Locale.getDefault();
|
||||||
|
final Resources res = context.getResources();
|
||||||
|
final String dateViewSkel = res.getString(R.string.abbrev_wday_month_day_no_year);
|
||||||
|
final String clockView12Skel = res.getString(R.string.clock_12hr_format);
|
||||||
|
final String clockView24Skel = res.getString(R.string.clock_24hr_format);
|
||||||
|
final String key = locale.toString() + dateViewSkel + clockView12Skel + clockView24Skel;
|
||||||
|
if (key.equals(cacheKey)) return;
|
||||||
|
|
||||||
|
dateView = DateFormat.getBestDateTimePattern(locale, dateViewSkel);
|
||||||
|
|
||||||
|
clockView12 = DateFormat.getBestDateTimePattern(locale, clockView12Skel);
|
||||||
|
// CLDR insists on adding an AM/PM indicator even though it wasn't in the skeleton
|
||||||
|
// format. The following code removes the AM/PM indicator if we didn't want it.
|
||||||
|
if (!clockView12Skel.contains("a")) {
|
||||||
|
clockView12 = clockView12.replaceAll("a", "").trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
clockView24 = DateFormat.getBestDateTimePattern(locale, clockView24Skel);
|
||||||
|
|
||||||
|
cacheKey = key;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -815,7 +815,7 @@ public class KeyguardUpdateMonitor {
|
|||||||
for (int i = 0; i < mCallbacks.size(); i++) {
|
for (int i = 0; i < mCallbacks.size(); i++) {
|
||||||
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
|
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
|
||||||
if (cb != null) {
|
if (cb != null) {
|
||||||
cb.onKeyguardVisibilityChanged(isShowing);
|
cb.onKeyguardVisibilityChangedRaw(isShowing);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import android.app.PendingIntent;
|
|||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
|
import android.os.SystemClock;
|
||||||
import android.view.WindowManagerPolicy;
|
import android.view.WindowManagerPolicy;
|
||||||
|
|
||||||
import com.android.internal.telephony.IccCardConstants;
|
import com.android.internal.telephony.IccCardConstants;
|
||||||
@@ -27,6 +28,11 @@ import com.android.internal.telephony.IccCardConstants;
|
|||||||
* Callback for general information relevant to lock screen.
|
* Callback for general information relevant to lock screen.
|
||||||
*/
|
*/
|
||||||
class KeyguardUpdateMonitorCallback {
|
class KeyguardUpdateMonitorCallback {
|
||||||
|
|
||||||
|
private static final long VISIBILITY_CHANGED_COLLAPSE_MS = 1000;
|
||||||
|
private long mVisibilityChangedCalled;
|
||||||
|
private boolean mShowing;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the battery status changes, e.g. when plugged in or unplugged, charge
|
* Called when the battery status changes, e.g. when plugged in or unplugged, charge
|
||||||
* level, etc. changes.
|
* level, etc. changes.
|
||||||
@@ -70,6 +76,15 @@ class KeyguardUpdateMonitorCallback {
|
|||||||
*/
|
*/
|
||||||
void onKeyguardVisibilityChanged(boolean showing) { }
|
void onKeyguardVisibilityChanged(boolean showing) { }
|
||||||
|
|
||||||
|
void onKeyguardVisibilityChangedRaw(boolean showing) {
|
||||||
|
final long now = SystemClock.elapsedRealtime();
|
||||||
|
if (showing == mShowing
|
||||||
|
&& (now - mVisibilityChangedCalled) < VISIBILITY_CHANGED_COLLAPSE_MS) return;
|
||||||
|
onKeyguardVisibilityChanged(showing);
|
||||||
|
mVisibilityChangedCalled = now;
|
||||||
|
mShowing = showing;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when visibility of lockscreen clock changes, such as when
|
* Called when visibility of lockscreen clock changes, such as when
|
||||||
* obscured by a widget.
|
* obscured by a widget.
|
||||||
|
|||||||
Reference in New Issue
Block a user