mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-31 15:23:00 +00:00 
			
		
		
		
	Use View.isShown() to avoid focus overlay glitches
A View can become focused while being invisible, if it's parent is invisible. Use global draw listener and View.isShown() to catch such cases.
This commit is contained in:
		| @@ -74,44 +74,26 @@ public final class FocusOverlayView extends Drawable implements | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public void onGlobalFocusChanged(final View oldFocus, final View newFocus) { |     public void onGlobalFocusChanged(final View oldFocus, final View newFocus) { | ||||||
|         int l = focusRect.left; |         if (newFocus != null) { | ||||||
|         int r = focusRect.right; |  | ||||||
|         int t = focusRect.top; |  | ||||||
|         int b = focusRect.bottom; |  | ||||||
|  |  | ||||||
|         if (newFocus != null && newFocus.getWidth() > 0 && newFocus.getHeight() > 0) { |  | ||||||
|             newFocus.getGlobalVisibleRect(focusRect); |  | ||||||
|  |  | ||||||
|             focused = new WeakReference<>(newFocus); |             focused = new WeakReference<>(newFocus); | ||||||
|         } else { |         } else { | ||||||
|             focusRect.setEmpty(); |  | ||||||
|  |  | ||||||
|             focused = null; |             focused = null; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (l != focusRect.left || r != focusRect.right |         updateRect(); | ||||||
|                 || t != focusRect.top || b != focusRect.bottom) { |  | ||||||
|             invalidateSelf(); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         focused = new WeakReference<>(newFocus); |  | ||||||
|  |  | ||||||
|         animator.sendEmptyMessageDelayed(0, 1000); |         animator.sendEmptyMessageDelayed(0, 1000); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void updateRect() { |     private void updateRect() { | ||||||
|         if (focused == null) { |         View focusedView = focused == null ? null : this.focused.get(); | ||||||
|             return; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         View focusedView = this.focused.get(); |  | ||||||
|  |  | ||||||
|         int l = focusRect.left; |         int l = focusRect.left; | ||||||
|         int r = focusRect.right; |         int r = focusRect.right; | ||||||
|         int t = focusRect.top; |         int t = focusRect.top; | ||||||
|         int b = focusRect.bottom; |         int b = focusRect.bottom; | ||||||
|  |  | ||||||
|         if (focusedView != null) { |         if (focusedView != null && isShown(focusedView)) { | ||||||
|             focusedView.getGlobalVisibleRect(focusRect); |             focusedView.getGlobalVisibleRect(focusRect); | ||||||
|         } else { |         } else { | ||||||
|             focusRect.setEmpty(); |             focusRect.setEmpty(); | ||||||
| @@ -123,6 +105,10 @@ public final class FocusOverlayView extends Drawable implements | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private boolean isShown(final View view) { | ||||||
|  |         return view.getWidth() != 0 && view.getHeight() != 0 && view.isShown(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public void onDraw() { |     public void onDraw() { | ||||||
|         updateRect(); |         updateRect(); | ||||||
| @@ -223,6 +209,7 @@ public final class FocusOverlayView extends Drawable implements | |||||||
|         observer.addOnGlobalFocusChangeListener(overlay); |         observer.addOnGlobalFocusChangeListener(overlay); | ||||||
|         observer.addOnGlobalLayoutListener(overlay); |         observer.addOnGlobalLayoutListener(overlay); | ||||||
|         observer.addOnTouchModeChangeListener(overlay); |         observer.addOnTouchModeChangeListener(overlay); | ||||||
|  |         observer.addOnDrawListener(overlay); | ||||||
|  |  | ||||||
|         overlay.setCurrentFocus(decor.getFocusedChild()); |         overlay.setCurrentFocus(decor.getFocusedChild()); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Alexander--
					Alexander--