Merge pull request #3920 from chdir/invisible_focus_fix
Fix lingering focus highlight overlay
This commit is contained in:
commit
53ffc82fe2
|
@ -74,44 +74,26 @@ public final class FocusOverlayView extends Drawable implements
|
|||
|
||||
@Override
|
||||
public void onGlobalFocusChanged(final View oldFocus, final View newFocus) {
|
||||
int l = focusRect.left;
|
||||
int r = focusRect.right;
|
||||
int t = focusRect.top;
|
||||
int b = focusRect.bottom;
|
||||
|
||||
if (newFocus != null && newFocus.getWidth() > 0 && newFocus.getHeight() > 0) {
|
||||
newFocus.getGlobalVisibleRect(focusRect);
|
||||
|
||||
if (newFocus != null) {
|
||||
focused = new WeakReference<>(newFocus);
|
||||
} else {
|
||||
focusRect.setEmpty();
|
||||
|
||||
focused = null;
|
||||
}
|
||||
|
||||
if (l != focusRect.left || r != focusRect.right
|
||||
|| t != focusRect.top || b != focusRect.bottom) {
|
||||
invalidateSelf();
|
||||
}
|
||||
|
||||
focused = new WeakReference<>(newFocus);
|
||||
updateRect();
|
||||
|
||||
animator.sendEmptyMessageDelayed(0, 1000);
|
||||
}
|
||||
|
||||
private void updateRect() {
|
||||
if (focused == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
View focusedView = this.focused.get();
|
||||
View focusedView = focused == null ? null : this.focused.get();
|
||||
|
||||
int l = focusRect.left;
|
||||
int r = focusRect.right;
|
||||
int t = focusRect.top;
|
||||
int b = focusRect.bottom;
|
||||
|
||||
if (focusedView != null) {
|
||||
if (focusedView != null && isShown(focusedView)) {
|
||||
focusedView.getGlobalVisibleRect(focusRect);
|
||||
} else {
|
||||
focusRect.setEmpty();
|
||||
|
@ -123,6 +105,10 @@ public final class FocusOverlayView extends Drawable implements
|
|||
}
|
||||
}
|
||||
|
||||
private boolean isShown(@NonNull final View view) {
|
||||
return view.getWidth() != 0 && view.getHeight() != 0 && view.isShown();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDraw() {
|
||||
updateRect();
|
||||
|
@ -223,6 +209,7 @@ public final class FocusOverlayView extends Drawable implements
|
|||
observer.addOnGlobalFocusChangeListener(overlay);
|
||||
observer.addOnGlobalLayoutListener(overlay);
|
||||
observer.addOnTouchModeChangeListener(overlay);
|
||||
observer.addOnDrawListener(overlay);
|
||||
|
||||
overlay.setCurrentFocus(decor.getFocusedChild());
|
||||
|
||||
|
|
Loading…
Reference in New Issue