Skip to content

Commit 3e7e92c

Browse files
0xD34Dtemasek
authored andcommitted
LLS: Use window attachment callbacks
Change-Id: Ie25585a120638fb7254bdf43e767aae3c68623e0
1 parent 3d923ad commit 3e7e92c

File tree

1 file changed

+43
-20
lines changed

1 file changed

+43
-20
lines changed

packages/SystemUI/src/com/android/systemui/statusbar/policy/LiveLockScreenController.java

Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)