@@ -188,36 +188,59 @@ public KeyguardExternalView getLiveLockScreenView() {
188188 return mLiveLockScreenView ;
189189 }
190190
191+ private Runnable mAddNewLiveLockScreenRunnable = new Runnable () {
192+ @ Override
193+ public void run () {
194+ if (mLiveLockScreenComponentName != null ) {
195+ mLiveLockScreenView =
196+ getExternalKeyguardView (mLiveLockScreenComponentName );
197+ mLiveLockScreenView .registerKeyguardExternalViewCallback (
198+ mExternalKeyguardViewCallbacks );
199+ if (mStatusBarState != StatusBarState .SHADE ) {
200+ mPanelView .addView (mLiveLockScreenView );
201+ mLiveLockScreenView .onKeyguardShowing (true );
202+ }
203+ } else {
204+ mLiveLockScreenView = null ;
205+ }
206+ }
207+ };
208+
191209 private void updateLiveLockScreenView (final ComponentName cn ) {
192- // If mThirdPartyKeyguardViewComponent differs from cn, go ahead and update
193- if (! Objects . equals ( mLiveLockScreenComponentName , cn )) {
194- mHandler . post ( new Runnable () {
195- @ Override
196- public void run ( ) {
210+ mHandler . post ( new Runnable () {
211+ @ Override
212+ public void run () {
213+ // If mThirdPartyKeyguardViewComponent differs from cn, go ahead and update
214+ if (! Objects . equals ( mLiveLockScreenComponentName , cn ) ) {
197215 mLiveLockScreenComponentName = cn ;
198216 if (mLiveLockScreenView != null ) {
199- if (mPanelView .indexOfChild (mLiveLockScreenView ) >= 0 ) {
200- mPanelView .removeView (mLiveLockScreenView );
201- }
202217 mLiveLockScreenView .unregisterKeyguardExternalViewCallback (
203218 mExternalKeyguardViewCallbacks );
204219 // setProviderComponent(null) will unbind the existing service
205220 mLiveLockScreenView .setProviderComponent (null );
206- if (mLiveLockScreenComponentName != null ) {
207- mLiveLockScreenView =
208- getExternalKeyguardView (mLiveLockScreenComponentName );
209- mLiveLockScreenView .registerKeyguardExternalViewCallback (
210- mExternalKeyguardViewCallbacks );
211- if (mStatusBarState != StatusBarState .SHADE ) {
212- mPanelView .addView (mLiveLockScreenView );
213- mLiveLockScreenView .onKeyguardShowing (true );
214- }
221+ if (mPanelView .indexOfChild (mLiveLockScreenView ) >= 0 ) {
222+ mLiveLockScreenView .registerOnWindowAttachmentChangedListener (
223+ new KeyguardExternalView .OnWindowAttachmentChangedListener () {
224+ @ Override
225+ public void onAttachedToWindow () {
226+ }
227+
228+ @ Override
229+ public void onDetachedFromWindow () {
230+ mLiveLockScreenView
231+ .unregisterOnWindowAttachmentChangedListener (
232+ this );
233+ mHandler .post (mAddNewLiveLockScreenRunnable );
234+ }
235+ }
236+ );
237+ mPanelView .removeView (mLiveLockScreenView );
215238 } else {
216- mLiveLockScreenView = null ;
239+ mAddNewLiveLockScreenRunnable . run () ;
217240 }
218241 }
219242 }
220- });
221- }
243+ }
244+ });
222245 }
223246}
0 commit comments