From 7eb5d04cce5617194ac117b6d8c4f14bc055001a Mon Sep 17 00:00:00 2001 From: olegivo Date: Mon, 15 Jun 2020 18:05:59 +0300 Subject: [PATCH] InterfaceUtils kotlinerization, inline isLayoutRtl function --- .../androidbase/utils/InterfaceUtils.kt | 64 +++++++++++-------- .../isoron/uhabits/utils/ViewExtensions.kt | 3 +- 2 files changed, 38 insertions(+), 29 deletions(-) diff --git a/android/android-base/src/main/java/org/isoron/androidbase/utils/InterfaceUtils.kt b/android/android-base/src/main/java/org/isoron/androidbase/utils/InterfaceUtils.kt index 33f71aebc..96fc05c90 100644 --- a/android/android-base/src/main/java/org/isoron/androidbase/utils/InterfaceUtils.kt +++ b/android/android-base/src/main/java/org/isoron/androidbase/utils/InterfaceUtils.kt @@ -20,12 +20,11 @@ package org.isoron.androidbase.utils import android.content.Context import android.graphics.Typeface +import android.util.DisplayMetrics import android.util.TypedValue -import android.view.View import android.view.ViewGroup import android.widget.TextView import android.widget.TextView.OnEditorActionListener -import androidx.core.view.ViewCompat object InterfaceUtils { private var fontAwesome: Typeface? = null @@ -44,42 +43,51 @@ object InterfaceUtils { } @JvmStatic - fun dpToPixels(context: Context, dp: Float): Float { - if (fixedResolution != null) return dp * fixedResolution!! - val resources = context.resources - val metrics = resources.displayMetrics - return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics) - } + fun dpToPixels(context: Context, dp: Float): Float = + getPixels( + context, + fixedResolutionTransform = { dp * it }, + actualResolutionTransform = { TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, it) } + ) @JvmStatic - fun spToPixels(context: Context, sp: Float): Float { - if (fixedResolution != null) return sp * fixedResolution!! - val resources = context.resources - val metrics = resources.displayMetrics - return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, metrics) - } + fun spToPixels(context: Context, sp: Float): Float = + getPixels( + context, + fixedResolutionTransform = { sp * it }, + actualResolutionTransform = { TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, it) } + ) @JvmStatic fun getDimension(context: Context, id: Int): Float { val dim = context.resources.getDimension(id) - return if (fixedResolution == null) dim else { - val dm = context.resources.displayMetrics - val actualDensity = dm.density - dim / actualDensity * fixedResolution!! - } + return fixedResolution + ?.let { fixedRes -> + val dm = context.resources.displayMetrics + val actualDensity = dm.density + dim / actualDensity * fixedRes + } + ?: dim } - fun setupEditorAction(parent: ViewGroup, - listener: OnEditorActionListener) { + fun setupEditorAction(parent: ViewGroup, listener: OnEditorActionListener) { for (i in 0 until parent.childCount) { - val child = parent.getChildAt(i) - if (child is ViewGroup) setupEditorAction(child, listener) - if (child is TextView) child.setOnEditorActionListener(listener) + when (val child = parent.getChildAt(i)) { + is ViewGroup -> setupEditorAction(child, listener) + is TextView -> child.setOnEditorActionListener(listener) + } } } - fun isLayoutRtl(view: View?): Boolean { - return ViewCompat.getLayoutDirection(view!!) == - ViewCompat.LAYOUT_DIRECTION_RTL - } + private fun getPixels( + context: Context, + fixedResolutionTransform: (Float) -> Float, + actualResolutionTransform: (DisplayMetrics) -> Float + ): Float = + fixedResolution?.let(fixedResolutionTransform) + ?: run { + val resources = context.resources + val metrics = resources.displayMetrics + return actualResolutionTransform(metrics) + } } \ No newline at end of file diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt index f2ff5e1f6..80931dc9a 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt @@ -26,6 +26,7 @@ import android.view.* import android.view.ViewGroup.LayoutParams.* import android.widget.* import android.widget.RelativeLayout.* +import androidx.core.view.ViewCompat import com.google.android.material.snackbar.Snackbar import org.isoron.androidbase.utils.* import org.isoron.uhabits.* @@ -89,7 +90,7 @@ fun Int.toMeasureSpec(mode: Int) = fun Float.toMeasureSpec(mode: Int) = View.MeasureSpec.makeMeasureSpec(toInt(), mode) -fun View.isRTL() = InterfaceUtils.isLayoutRtl(this) +fun View.isRTL() = ViewCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL fun View.getFontAwesome() = InterfaceUtils.getFontAwesome(context)!! fun View.dim(id: Int) = InterfaceUtils.getDimension(context, id) fun View.sp(value: Float) = InterfaceUtils.spToPixels(context, value)