mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-30 23:03:00 +00:00 
			
		
		
		
	Delete some unused code
This commit is contained in:
		| @@ -1,44 +0,0 @@ | ||||
| package org.schabi.newpipe.util; | ||||
|  | ||||
| import android.graphics.Bitmap; | ||||
|  | ||||
| import androidx.annotation.Nullable; | ||||
|  | ||||
| public final class BitmapUtils { | ||||
|     private BitmapUtils() { } | ||||
|  | ||||
|     @Nullable | ||||
|     public static Bitmap centerCrop(final Bitmap inputBitmap, final int newWidth, | ||||
|                                     final int newHeight) { | ||||
|         if (inputBitmap == null || inputBitmap.isRecycled()) { | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         final float sourceWidth = inputBitmap.getWidth(); | ||||
|         final float sourceHeight = inputBitmap.getHeight(); | ||||
|  | ||||
|         final float xScale = newWidth / sourceWidth; | ||||
|         final float yScale = newHeight / sourceHeight; | ||||
|  | ||||
|         final float newXScale; | ||||
|         final float newYScale; | ||||
|  | ||||
|         if (yScale > xScale) { | ||||
|             newXScale = xScale / yScale; | ||||
|             newYScale = 1.0f; | ||||
|         } else { | ||||
|             newXScale = 1.0f; | ||||
|             newYScale = yScale / xScale; | ||||
|         } | ||||
|  | ||||
|         final float scaledWidth = newXScale * sourceWidth; | ||||
|         final float scaledHeight = newYScale * sourceHeight; | ||||
|  | ||||
|         final int left = (int) ((sourceWidth - scaledWidth) / 2); | ||||
|         final int top = (int) ((sourceHeight - scaledHeight) / 2); | ||||
|         final int width = (int) scaledWidth; | ||||
|         final int height = (int) scaledHeight; | ||||
|  | ||||
|         return Bitmap.createBitmap(inputBitmap, left, top, width, height); | ||||
|     } | ||||
| } | ||||
| @@ -1,46 +0,0 @@ | ||||
| package org.schabi.newpipe.util; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.graphics.PointF; | ||||
|  | ||||
| import androidx.recyclerview.widget.LinearLayoutManager; | ||||
| import androidx.recyclerview.widget.LinearSmoothScroller; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
|  | ||||
| public class LayoutManagerSmoothScroller extends LinearLayoutManager { | ||||
|     public LayoutManagerSmoothScroller(final Context context) { | ||||
|         super(context, VERTICAL, false); | ||||
|     } | ||||
|  | ||||
|     public LayoutManagerSmoothScroller(final Context context, final int orientation, | ||||
|                                        final boolean reverseLayout) { | ||||
|         super(context, orientation, reverseLayout); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void smoothScrollToPosition(final RecyclerView recyclerView, | ||||
|                                        final RecyclerView.State state, final int position) { | ||||
|         final RecyclerView.SmoothScroller smoothScroller | ||||
|                 = new TopSnappedSmoothScroller(recyclerView.getContext()); | ||||
|         smoothScroller.setTargetPosition(position); | ||||
|         startSmoothScroll(smoothScroller); | ||||
|     } | ||||
|  | ||||
|     private class TopSnappedSmoothScroller extends LinearSmoothScroller { | ||||
|         TopSnappedSmoothScroller(final Context context) { | ||||
|             super(context); | ||||
|  | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
|         public PointF computeScrollVectorForPosition(final int targetPosition) { | ||||
|             return LayoutManagerSmoothScroller.this | ||||
|                     .computeScrollVectorForPosition(targetPosition); | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
|         protected int getVerticalSnapPreference() { | ||||
|             return SNAP_TO_START; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -1,303 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2019 Alexander Rvachev <rvacheva@nxt.ru> | ||||
|  * FocusOverlayView.java is part of NewPipe | ||||
|  * | ||||
|  * License: GPL-3.0+ | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package org.schabi.newpipe.views; | ||||
|  | ||||
| import android.graphics.Rect; | ||||
| import android.text.Layout; | ||||
| import android.text.Selection; | ||||
| import android.text.Spannable; | ||||
| import android.text.method.LinkMovementMethod; | ||||
| import android.text.style.ClickableSpan; | ||||
| import android.view.KeyEvent; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.view.ViewParent; | ||||
| import android.widget.TextView; | ||||
|  | ||||
| public class LargeTextMovementMethod extends LinkMovementMethod { | ||||
|     private final Rect visibleRect = new Rect(); | ||||
|  | ||||
|     private int direction; | ||||
|  | ||||
|     @Override | ||||
|     public void onTakeFocus(final TextView view, final Spannable text, final int dir) { | ||||
|         Selection.removeSelection(text); | ||||
|  | ||||
|         super.onTakeFocus(view, text, dir); | ||||
|  | ||||
|         this.direction = dirToRelative(dir); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean handleMovementKey(final TextView widget, | ||||
|                                         final Spannable buffer, | ||||
|                                         final int keyCode, | ||||
|                                         final int movementMetaState, | ||||
|                                         final KeyEvent event) { | ||||
|         if (!doHandleMovement(widget, buffer, keyCode, movementMetaState, event)) { | ||||
|             // clear selection to make sure, that it does not confuse focus handling code | ||||
|             Selection.removeSelection(buffer); | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     private boolean doHandleMovement(final TextView widget, | ||||
|                                      final Spannable buffer, | ||||
|                                      final int keyCode, | ||||
|                                      final int movementMetaState, | ||||
|                                      final KeyEvent event) { | ||||
|         final int newDir = keyToDir(keyCode); | ||||
|  | ||||
|         if (direction != 0 && newDir != direction) { | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         this.direction = 0; | ||||
|  | ||||
|         final ViewGroup root = findScrollableParent(widget); | ||||
|  | ||||
|         widget.getHitRect(visibleRect); | ||||
|  | ||||
|         root.offsetDescendantRectToMyCoords((View) widget.getParent(), visibleRect); | ||||
|  | ||||
|         return super.handleMovementKey(widget, buffer, keyCode, movementMetaState, event); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean up(final TextView widget, final Spannable buffer) { | ||||
|         if (gotoPrev(widget, buffer)) { | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         return super.up(widget, buffer); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean left(final TextView widget, final Spannable buffer) { | ||||
|         if (gotoPrev(widget, buffer)) { | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         return super.left(widget, buffer); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean right(final TextView widget, final Spannable buffer) { | ||||
|         if (gotoNext(widget, buffer)) { | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         return super.right(widget, buffer); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean down(final TextView widget, final Spannable buffer) { | ||||
|         if (gotoNext(widget, buffer)) { | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         return super.down(widget, buffer); | ||||
|     } | ||||
|  | ||||
|     private boolean gotoPrev(final TextView view, final Spannable buffer) { | ||||
|         final Layout layout = view.getLayout(); | ||||
|         if (layout == null) { | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         final View root = findScrollableParent(view); | ||||
|  | ||||
|         final int rootHeight = root.getHeight(); | ||||
|  | ||||
|         if (visibleRect.top >= 0) { | ||||
|             // we fit entirely into the viewport, no need for fancy footwork | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         final int topExtra = -visibleRect.top; | ||||
|  | ||||
|         final int firstVisibleLineNumber = layout.getLineForVertical(topExtra); | ||||
|  | ||||
|         // when deciding whether to pass "focus" to span, account for one more line | ||||
|         // this ensures, that focus is never passed to spans partially outside scroll window | ||||
|         final int visibleStart = firstVisibleLineNumber == 0 | ||||
|                 ? 0 | ||||
|                 : layout.getLineStart(firstVisibleLineNumber - 1); | ||||
|  | ||||
|         final ClickableSpan[] candidates = buffer.getSpans( | ||||
|                 visibleStart, buffer.length(), ClickableSpan.class); | ||||
|  | ||||
|         if (candidates.length != 0) { | ||||
|             final int a = Selection.getSelectionStart(buffer); | ||||
|             final int b = Selection.getSelectionEnd(buffer); | ||||
|  | ||||
|             final int selStart = Math.min(a, b); | ||||
|             final int selEnd = Math.max(a, b); | ||||
|  | ||||
|             int bestStart = -1; | ||||
|             int bestEnd = -1; | ||||
|  | ||||
|             for (final ClickableSpan candidate : candidates) { | ||||
|                 final int start = buffer.getSpanStart(candidate); | ||||
|                 final int end = buffer.getSpanEnd(candidate); | ||||
|  | ||||
|                 if ((end < selEnd || selStart == selEnd) && start >= visibleStart) { | ||||
|                     if (end > bestEnd) { | ||||
|                         bestStart = buffer.getSpanStart(candidate); | ||||
|                         bestEnd = end; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             if (bestStart >= 0) { | ||||
|                 Selection.setSelection(buffer, bestEnd, bestStart); | ||||
|                 return true; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         final float fourLines = view.getTextSize() * 4; | ||||
|  | ||||
|         visibleRect.left = 0; | ||||
|         visibleRect.right = view.getWidth(); | ||||
|         visibleRect.top = Math.max(0, (int) (topExtra - fourLines)); | ||||
|         visibleRect.bottom = visibleRect.top + rootHeight; | ||||
|  | ||||
|         return view.requestRectangleOnScreen(visibleRect); | ||||
|     } | ||||
|  | ||||
|     private boolean gotoNext(final TextView view, final Spannable buffer) { | ||||
|         final Layout layout = view.getLayout(); | ||||
|         if (layout == null) { | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         final View root = findScrollableParent(view); | ||||
|  | ||||
|         final int rootHeight = root.getHeight(); | ||||
|  | ||||
|         if (visibleRect.bottom <= rootHeight) { | ||||
|             // we fit entirely into the viewport, no need for fancy footwork | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         final int bottomExtra = visibleRect.bottom - rootHeight; | ||||
|  | ||||
|         final int visibleBottomBorder = view.getHeight() - bottomExtra; | ||||
|  | ||||
|         final int lineCount = layout.getLineCount(); | ||||
|  | ||||
|         final int lastVisibleLineNumber = layout.getLineForVertical(visibleBottomBorder); | ||||
|  | ||||
|         // when deciding whether to pass "focus" to span, account for one more line | ||||
|         // this ensures, that focus is never passed to spans partially outside scroll window | ||||
|         final int visibleEnd = lastVisibleLineNumber == lineCount - 1 | ||||
|                 ? buffer.length() | ||||
|                 : layout.getLineEnd(lastVisibleLineNumber - 1); | ||||
|  | ||||
|         final ClickableSpan[] candidates = buffer.getSpans(0, visibleEnd, ClickableSpan.class); | ||||
|  | ||||
|         if (candidates.length != 0) { | ||||
|             final int a = Selection.getSelectionStart(buffer); | ||||
|             final int b = Selection.getSelectionEnd(buffer); | ||||
|  | ||||
|             final int selStart = Math.min(a, b); | ||||
|             final int selEnd = Math.max(a, b); | ||||
|  | ||||
|             int bestStart = Integer.MAX_VALUE; | ||||
|             int bestEnd = Integer.MAX_VALUE; | ||||
|  | ||||
|             for (final ClickableSpan candidate : candidates) { | ||||
|                 final int start = buffer.getSpanStart(candidate); | ||||
|                 final int end = buffer.getSpanEnd(candidate); | ||||
|  | ||||
|                 if ((start > selStart || selStart == selEnd) && end <= visibleEnd) { | ||||
|                     if (start < bestStart) { | ||||
|                         bestStart = start; | ||||
|                         bestEnd = buffer.getSpanEnd(candidate); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             if (bestEnd < Integer.MAX_VALUE) { | ||||
|                 // cool, we have managed to find next link without having to adjust self within view | ||||
|                 Selection.setSelection(buffer, bestStart, bestEnd); | ||||
|                 return true; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         // there are no links within visible area, but still some text past visible area | ||||
|         // scroll visible area further in required direction | ||||
|         final float fourLines = view.getTextSize() * 4; | ||||
|  | ||||
|         visibleRect.left = 0; | ||||
|         visibleRect.right = view.getWidth(); | ||||
|         visibleRect.bottom = Math.min((int) (visibleBottomBorder + fourLines), view.getHeight()); | ||||
|         visibleRect.top = visibleRect.bottom - rootHeight; | ||||
|  | ||||
|         return view.requestRectangleOnScreen(visibleRect); | ||||
|     } | ||||
|  | ||||
|     private ViewGroup findScrollableParent(final View view) { | ||||
|         View current = view; | ||||
|  | ||||
|         ViewParent parent; | ||||
|         do { | ||||
|             parent = current.getParent(); | ||||
|  | ||||
|             if (parent == current || !(parent instanceof View)) { | ||||
|                 return (ViewGroup) view.getRootView(); | ||||
|             } | ||||
|  | ||||
|             current = (View) parent; | ||||
|  | ||||
|             if (current.isScrollContainer()) { | ||||
|                 return (ViewGroup) current; | ||||
|             } | ||||
|         } | ||||
|         while (true); | ||||
|     } | ||||
|  | ||||
|     private static int dirToRelative(final int dir) { | ||||
|         switch (dir) { | ||||
|             case View.FOCUS_DOWN: | ||||
|             case View.FOCUS_RIGHT: | ||||
|                 return View.FOCUS_FORWARD; | ||||
|             case View.FOCUS_UP: | ||||
|             case View.FOCUS_LEFT: | ||||
|                 return View.FOCUS_BACKWARD; | ||||
|         } | ||||
|  | ||||
|         return dir; | ||||
|     } | ||||
|  | ||||
|     private int keyToDir(final int keyCode) { | ||||
|         switch (keyCode) { | ||||
|             case KeyEvent.KEYCODE_DPAD_UP: | ||||
|             case KeyEvent.KEYCODE_DPAD_LEFT: | ||||
|                 return View.FOCUS_BACKWARD; | ||||
|             case KeyEvent.KEYCODE_DPAD_DOWN: | ||||
|             case KeyEvent.KEYCODE_DPAD_RIGHT: | ||||
|                 return View.FOCUS_FORWARD; | ||||
|         } | ||||
|  | ||||
|         return View.FOCUS_FORWARD; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 TacoTheDank
					TacoTheDank