Fixing widgets get deteled because of double bind

If the AppWidgetHost starts listening in the middle of bind, it rebinds
the old widgets before a new widget is bound, leading to double bind.
We should clear all pending binds, before starting a rebind. As an
extra check only rebind a view which is attached to the screen.

Bug: 73814840
Change-Id: Ie3af683dc4095b158547e700d11e4faf7999466f
This commit is contained in:
Sunny Goyal
2018-02-27 19:20:15 -08:00
parent efa671294e
commit c11fac355d
3 changed files with 6 additions and 4 deletions

View File

@@ -488,13 +488,14 @@ public class LauncherAppWidgetHostView extends AppWidgetHostView
// Only reinflate when the final configuration is same as the required configuration
if (mReinflateOnConfigChange && isSameOrientation()) {
mReinflateOnConfigChange = false;
if (isAttachedToWindow()) {
reInflate();
}
reInflate();
}
}
public void reInflate() {
if (!isAttachedToWindow()) {
return;
}
LauncherAppWidgetInfo info = (LauncherAppWidgetInfo) getTag();
// Remove and rebind the current widget (which was inflated in the wrong
// orientation), but don't delete it from the database