diff options
author | Adam Cohen <adamcohen@google.com> | 2012-11-08 13:01:08 -0800 |
---|---|---|
committer | Adam Cohen <adamcohen@google.com> | 2012-11-08 14:56:36 -0800 |
commit | c276e82dd070e75017192507df33958a10cadb87 (patch) | |
tree | 9aa0cbda910b32d17cde4392bed053763e0f0967 | |
parent | 9de5901bb37ad2a42d334405f41e629fa29dfd46 (diff) | |
download | frameworks_base-c276e82dd070e75017192507df33958a10cadb87.zip frameworks_base-c276e82dd070e75017192507df33958a10cadb87.tar.gz frameworks_base-c276e82dd070e75017192507df33958a10cadb87.tar.bz2 |
Deferring size callbacks until boot completed (issue 7469267)
-> Also bumping priority of the boot completed receiver
Change-Id: I7b68a29b4a8c927713bfbc1f4585f96ce0c47f35
-rw-r--r-- | policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java | 6 | ||||
-rw-r--r-- | policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java | 33 |
2 files changed, 32 insertions, 7 deletions
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java index e1007f9..1968ecd 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java @@ -348,9 +348,13 @@ public class KeyguardUpdateMonitor { filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION); filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED); filter.addAction(Intent.ACTION_USER_REMOVED); - filter.addAction(Intent.ACTION_BOOT_COMPLETED); context.registerReceiver(mBroadcastReceiver, filter); + final IntentFilter bootCompleteFilter = new IntentFilter(); + bootCompleteFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); + bootCompleteFilter.addAction(Intent.ACTION_BOOT_COMPLETED); + context.registerReceiver(mBroadcastReceiver, bootCompleteFilter); + try { ActivityManagerNative.getDefault().registerUserSwitchObserver( new IUserSwitchObserver.Stub() { diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java index 4c7ab6c..3c79206 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java @@ -69,8 +69,6 @@ public class KeyguardWidgetFrame extends FrameLayout { private float mBackgroundAlphaMultiplier = 1.0f; private Drawable mBackgroundDrawable; private Rect mBackgroundRect = new Rect(); - private int mLastMeasuredWidth = -1; - private int mLastMeasuredHeight = 1; // These variables are all needed in order to size things properly before we're actually // measured. @@ -79,6 +77,7 @@ public class KeyguardWidgetFrame extends FrameLayout { private boolean mWidgetLockedSmall = false; private int mMaxChallengeTop = -1; private int mFrameStrokeAdjustment; + private boolean mPerformAppWidgetSizeUpdateOnBootComplete; // This will hold the width value before we've actually been measured private int mFrameHeight; @@ -123,9 +122,29 @@ public class KeyguardWidgetFrame extends FrameLayout { @Override protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); cancelLongPress(); + KeyguardUpdateMonitor.getInstance(mContext).removeCallback(mUpdateMonitorCallbacks); + } + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mUpdateMonitorCallbacks); + } + + private KeyguardUpdateMonitorCallback mUpdateMonitorCallbacks = + new KeyguardUpdateMonitorCallback() { + @Override + public void onBootCompleted() { + if (mPerformAppWidgetSizeUpdateOnBootComplete) { + performAppWidgetSizeCallbacksIfNecessary(); + mPerformAppWidgetSizeUpdateOnBootComplete = false; + } + } + }; + void setIsHoveringOverDeleteDropTarget(boolean isHovering) { if (ENABLE_HOVER_OVER_DELETE_DROP_TARGET_OVERLAY) { if (mIsHoveringOverDeleteDropTarget != isHovering) { @@ -453,12 +472,14 @@ public class KeyguardWidgetFrame extends FrameLayout { View content = getContent(); if (!(content instanceof AppWidgetHostView)) return; - boolean sizeDirty = content.getMeasuredWidth() != mLastMeasuredWidth || - content.getMeasuredHeight() != mLastMeasuredHeight; - if (sizeDirty) { - + if (!KeyguardUpdateMonitor.getInstance(mContext).hasBootCompleted()) { + mPerformAppWidgetSizeUpdateOnBootComplete = true; + return; } + // TODO: there's no reason to force the AppWidgetHostView to catch duplicate size calls. + // We can do that even more cheaply here. It's not an issue right now since we're in the + // system process and hence no binder calls. AppWidgetHostView awhv = (AppWidgetHostView) content; float density = getResources().getDisplayMetrics().density; |