From 028405ecce72f45a024e2c7f031fc4c0d5f1376f Mon Sep 17 00:00:00 2001
From: FooIbar <118464521+FooIbar@users.noreply.github.com>
Date: Thu, 22 Jun 2023 02:40:55 +0800
Subject: [PATCH] Convert MarginItemDecoration, SimpleSmoothScroller and
WindowInsetsAnimationHelper to kotlin
---
.../ehviewer/ui/legacy/LayoutManagerUtils.kt | 4 +-
.../ui/legacy/MarginItemDecoration.kt | 71 +++++-----
.../ui/legacy/SimpleSmoothScroller.kt | 30 ++---
.../ui/legacy/WindowInsetsAnimationHelper.kt | 124 ++++++++----------
4 files changed, 112 insertions(+), 117 deletions(-)
diff --git a/app/src/main/java/com/hippo/ehviewer/ui/legacy/LayoutManagerUtils.kt b/app/src/main/java/com/hippo/ehviewer/ui/legacy/LayoutManagerUtils.kt
index d7aea84c7..9c68fb88a 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/legacy/LayoutManagerUtils.kt
+++ b/app/src/main/java/com/hippo/ehviewer/ui/legacy/LayoutManagerUtils.kt
@@ -59,7 +59,7 @@ object LayoutManagerUtils {
@JvmOverloads
fun smoothScrollToPosition(
layoutManager: RecyclerView.LayoutManager,
- context: Context?,
+ context: Context,
position: Int,
millisecondsPerInch: Int = -1,
) {
@@ -106,7 +106,7 @@ object LayoutManagerUtils {
fun scrollToPositionProperly(
layoutManager: RecyclerView.LayoutManager,
- context: Context?,
+ context: Context,
position: Int,
listener: OnScrollToPositionListener?,
) {
diff --git a/app/src/main/java/com/hippo/ehviewer/ui/legacy/MarginItemDecoration.kt b/app/src/main/java/com/hippo/ehviewer/ui/legacy/MarginItemDecoration.kt
index b3a3c15a3..16daf77b2 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/legacy/MarginItemDecoration.kt
+++ b/app/src/main/java/com/hippo/ehviewer/ui/legacy/MarginItemDecoration.kt
@@ -13,31 +13,37 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+package com.hippo.ehviewer.ui.legacy
-package com.hippo.ehviewer.ui.legacy;
+import android.graphics.Rect
+import android.view.View
+import androidx.recyclerview.widget.RecyclerView
+import androidx.recyclerview.widget.RecyclerView.ItemDecoration
-import android.graphics.Rect;
-import android.view.View;
+class MarginItemDecoration(
+ margin: Int,
+ paddingLeft: Int,
+ paddingTop: Int,
+ paddingRight: Int,
+ paddingBottom: Int,
+) : ItemDecoration() {
+ private var mMargin = 0
+ private var mPaddingLeft = 0
+ private var mPaddingTop = 0
+ private var mPaddingRight = 0
+ private var mPaddingBottom = 0
-import androidx.recyclerview.widget.RecyclerView;
-
-public class MarginItemDecoration extends RecyclerView.ItemDecoration {
-
- private int mMargin;
- private int mPaddingLeft;
- private int mPaddingTop;
- private int mPaddingRight;
- private int mPaddingBottom;
-
- public MarginItemDecoration(int margin, int paddingLeft, int paddingTop,
- int paddingRight, int paddingBottom) {
- setMargin(margin, paddingLeft, paddingTop, paddingRight, paddingBottom);
+ init {
+ setMargin(margin, paddingLeft, paddingTop, paddingRight, paddingBottom)
}
- @Override
- public void getItemOffsets(Rect outRect, View view,
- RecyclerView parent, RecyclerView.State state) {
- outRect.set(mMargin, mMargin, mMargin, mMargin);
+ override fun getItemOffsets(
+ outRect: Rect,
+ view: View,
+ parent: RecyclerView,
+ state: RecyclerView.State,
+ ) {
+ outRect[mMargin, mMargin, mMargin] = mMargin
}
/**
@@ -47,17 +53,22 @@ public class MarginItemDecoration extends RecyclerView.ItemDecoration {
* @param paddingRight gap between RecyclerView right and right item right
* @param paddingBottom gap between RecyclerView bottom and bottom item bottom
*/
- public void setMargin(int margin, int paddingLeft, int paddingTop,
- int paddingRight, int paddingBottom) {
- int halfMargin = margin / 2;
- mMargin = halfMargin;
- mPaddingLeft = paddingLeft - halfMargin;
- mPaddingTop = paddingTop - halfMargin;
- mPaddingRight = paddingRight - halfMargin;
- mPaddingBottom = paddingBottom - halfMargin;
+ fun setMargin(
+ margin: Int,
+ paddingLeft: Int,
+ paddingTop: Int,
+ paddingRight: Int,
+ paddingBottom: Int,
+ ) {
+ val halfMargin = margin / 2
+ mMargin = halfMargin
+ mPaddingLeft = paddingLeft - halfMargin
+ mPaddingTop = paddingTop - halfMargin
+ mPaddingRight = paddingRight - halfMargin
+ mPaddingBottom = paddingBottom - halfMargin
}
- public void applyPaddings(View view) {
- view.setPadding(mPaddingLeft, mPaddingTop, mPaddingRight, mPaddingBottom);
+ fun applyPaddings(view: View) {
+ view.setPadding(mPaddingLeft, mPaddingTop, mPaddingRight, mPaddingBottom)
}
}
diff --git a/app/src/main/java/com/hippo/ehviewer/ui/legacy/SimpleSmoothScroller.kt b/app/src/main/java/com/hippo/ehviewer/ui/legacy/SimpleSmoothScroller.kt
index a358fa684..8dbaf46f6 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/legacy/SimpleSmoothScroller.kt
+++ b/app/src/main/java/com/hippo/ehviewer/ui/legacy/SimpleSmoothScroller.kt
@@ -13,28 +13,26 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+package com.hippo.ehviewer.ui.legacy
-package com.hippo.ehviewer.ui.legacy;
+import android.content.Context
+import androidx.recyclerview.widget.LinearSmoothScroller
+import kotlin.math.abs
+import kotlin.math.ceil
-import android.content.Context;
+abstract class SimpleSmoothScroller(context: Context, millisecondsPerInch: Float) :
+ LinearSmoothScroller(context) {
+ private val mMillisecondsPerPx: Float
-import androidx.recyclerview.widget.LinearSmoothScroller;
-
-public abstract class SimpleSmoothScroller extends LinearSmoothScroller {
-
- private final float mMillisecondsPerPx;
-
- public SimpleSmoothScroller(Context context, float millisecondsPerInch) {
- super(context);
- mMillisecondsPerPx = millisecondsPerInch / context.getResources().getDisplayMetrics().densityDpi;
+ init {
+ mMillisecondsPerPx = millisecondsPerInch / context.resources.displayMetrics.densityDpi
}
- @Override
- protected int calculateTimeForScrolling(int dx) {
- if (mMillisecondsPerPx <= 0) {
- return super.calculateTimeForScrolling(dx);
+ override fun calculateTimeForScrolling(dx: Int): Int {
+ return if (mMillisecondsPerPx <= 0) {
+ super.calculateTimeForScrolling(dx)
} else {
- return (int) Math.ceil(Math.abs(dx) * mMillisecondsPerPx);
+ ceil((abs(dx) * mMillisecondsPerPx).toDouble()).toInt()
}
}
}
diff --git a/app/src/main/java/com/hippo/ehviewer/ui/legacy/WindowInsetsAnimationHelper.kt b/app/src/main/java/com/hippo/ehviewer/ui/legacy/WindowInsetsAnimationHelper.kt
index e352391de..04f29c67a 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/legacy/WindowInsetsAnimationHelper.kt
+++ b/app/src/main/java/com/hippo/ehviewer/ui/legacy/WindowInsetsAnimationHelper.kt
@@ -15,95 +15,81 @@
* You should have received a copy of the GNU General Public License along with EhViewer.
* If not, see .
*/
+package com.hippo.ehviewer.ui.legacy
-package com.hippo.ehviewer.ui.legacy;
+import android.view.View
+import androidx.core.view.WindowInsetsAnimationCompat
+import androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat
+import androidx.core.view.WindowInsetsCompat
+import com.google.android.material.math.MathUtils
-import android.view.View;
+class WindowInsetsAnimationHelper(dispatchMode: Int, vararg views: View) :
+ WindowInsetsAnimationCompat.Callback(dispatchMode) {
+ private val views: Array
+ private val startPaddings = HashMap()
+ private val endPaddings = HashMap()
+ var animation: WindowInsetsAnimationCompat? = null
-import androidx.annotation.NonNull;
-import androidx.core.view.WindowInsetsAnimationCompat;
-import androidx.core.view.WindowInsetsCompat;
-
-import com.google.android.material.math.MathUtils;
-
-import java.util.HashMap;
-import java.util.List;
-
-public class WindowInsetsAnimationHelper extends WindowInsetsAnimationCompat.Callback {
- private final View[] views;
- private final HashMap startPaddings = new HashMap<>();
- private final HashMap endPaddings = new HashMap<>();
- WindowInsetsAnimationCompat animation;
-
- public WindowInsetsAnimationHelper(int dispatchMode, View... views) {
- super(dispatchMode);
- this.views = views;
+ init {
+ this.views = arrayOf(*views)
}
- @Override
- public void onPrepare(@NonNull WindowInsetsAnimationCompat animation) {
- super.onPrepare(animation);
- this.animation = animation;
- for (View view : views) {
- if (view == null) {
- continue;
- }
- startPaddings.put(view, view.getPaddingBottom());
+ override fun onPrepare(animation: WindowInsetsAnimationCompat) {
+ super.onPrepare(animation)
+ this.animation = animation
+ for (view in views) {
+ startPaddings[view] = view.paddingBottom
}
}
- @NonNull
- @Override
- public WindowInsetsAnimationCompat.BoundsCompat onStart(@NonNull WindowInsetsAnimationCompat animation, @NonNull WindowInsetsAnimationCompat.BoundsCompat bounds) {
- this.animation = animation;
- for (View view : views) {
- if (view == null) {
- continue;
- }
- endPaddings.put(view, view.getPaddingBottom());
- int startPadding = startPaddings.containsKey(view) ? startPaddings.get(view) : 0;
- view.setTranslationY(-(startPadding - view.getPaddingBottom()));
+ override fun onStart(
+ animation: WindowInsetsAnimationCompat,
+ bounds: BoundsCompat,
+ ): BoundsCompat {
+ this.animation = animation
+ for (view in views) {
+ endPaddings[view] = view.paddingBottom
+ val startPadding = if (startPaddings.containsKey(view)) startPaddings[view]!! else 0
+ view.translationY = -(startPadding - view.paddingBottom).toFloat()
}
- return bounds;
+ return bounds
}
- @NonNull
- @Override
- public WindowInsetsCompat onProgress(@NonNull WindowInsetsCompat insets, @NonNull List runningAnimations) {
+ override fun onProgress(
+ insets: WindowInsetsCompat,
+ runningAnimations: List,
+ ): WindowInsetsCompat {
if (animation == null) {
- return insets;
+ return insets
}
- WindowInsetsAnimationCompat imeAnimation = null;
- for (WindowInsetsAnimationCompat animation : runningAnimations) {
- if ((animation.getTypeMask() & WindowInsetsCompat.Type.ime()) != 0) {
- imeAnimation = animation;
- break;
+ var imeAnimation: WindowInsetsAnimationCompat? = null
+ for (animation in runningAnimations) {
+ if (animation.typeMask and WindowInsetsCompat.Type.ime() != 0) {
+ imeAnimation = animation
+ break
}
}
if (imeAnimation != null) {
- for (View view : views) {
- if (view == null) {
- continue;
- }
- int startPadding = startPaddings.containsKey(view) ? startPaddings.get(view) : 0;
- int endPadding = endPaddings.containsKey(view) ? endPaddings.get(view) : 0;
- view.setTranslationY(MathUtils.lerp(endPadding - startPadding, 0, animation.getInterpolatedFraction()));
+ for (view in views) {
+ val startPadding = if (startPaddings.containsKey(view)) startPaddings[view]!! else 0
+ val endPadding = if (endPaddings.containsKey(view)) endPaddings[view]!! else 0
+ view.translationY = MathUtils.lerp(
+ (endPadding - startPadding).toFloat(),
+ 0f,
+ animation!!.interpolatedFraction,
+ )
}
}
- return insets;
+ return insets
}
- @Override
- public void onEnd(@NonNull WindowInsetsAnimationCompat animation) {
- super.onEnd(animation);
- startPaddings.clear();
- endPaddings.clear();
- this.animation = null;
- for (View view : views) {
- if (view == null) {
- continue;
- }
- view.setTranslationY(0);
+ override fun onEnd(animation: WindowInsetsAnimationCompat) {
+ super.onEnd(animation)
+ startPaddings.clear()
+ endPaddings.clear()
+ this.animation = null
+ for (view in views) {
+ view.translationY = 0f
}
}
}