[Sample App] Improve input validation for trimming

Fixes #781
diff --git a/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/PlayerFragment.kt b/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/PlayerFragment.kt
index 3a3b3ed..98e1e33 100644
--- a/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/PlayerFragment.kt
+++ b/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/PlayerFragment.kt
@@ -28,6 +28,7 @@
 import com.airbnb.lottie.samples.views.BottomSheetItemView
 import com.airbnb.lottie.samples.views.BottomSheetItemViewModel_
 import com.airbnb.lottie.samples.views.ControlBarItemToggleView
+import com.airbnb.lottie.utils.MiscUtils
 import com.github.mikephil.charting.components.LimitLine
 import com.github.mikephil.charting.components.YAxis
 import com.github.mikephil.charting.data.Entry
@@ -219,10 +220,10 @@
                     .setTitle(R.string.min_frame_dialog)
                     .setView(minFrameView)
                     .setPositiveButton("Load") { _, _ ->
-                        animationView.setMinFrame(
-                                minFrameView.parseIntOrNull() ?:
-                                0
-                        )
+                        var frame = minFrameView.text.toString().toFloatOrNull() ?: 0f
+                        frame = MiscUtils.clamp(frame, composition?.startFrame ?: frame, animationView.maxFrame)
+
+                        animationView.setMinFrame(frame.toInt())
                         updateUiFromState()
                     }
                     .setNegativeButton("Cancel") { dialog, _ -> dialog.dismiss() }
@@ -236,11 +237,9 @@
                     .setTitle(R.string.max_frame_dialog)
                     .setView(maxFrameView)
                     .setPositiveButton("Load") { _, _ ->
-                        animationView.setMaxFrame(
-                                maxFrameView.parseIntOrNull() ?:
-                                composition?.endFrame?.toInt() ?:
-                                0
-                        )
+                        var frame = maxFrameView.text.toString().toFloatOrNull() ?: 0f
+                        frame = MiscUtils.clamp(frame, animationView.minFrame, composition?.endFrame ?: frame)
+                        animationView.setMaxFrame(frame.toInt())
                         updateUiFromState()
                     }
                     .setNegativeButton("Cancel") { dialog, _ -> dialog.dismiss() }
diff --git a/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/TypeExtensions.kt b/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/TypeExtensions.kt
index 90ec84e..63d19f3 100644
--- a/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/TypeExtensions.kt
+++ b/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/TypeExtensions.kt
@@ -62,14 +62,6 @@
 fun View.getText(@StringRes res: Int) = this.resources.getText(res)
 operator fun Boolean.inc() = !this
 
-fun EditText.parseIntOrNull(): Int? {
-    return try {
-        Integer.parseInt(text.toString())
-    } catch (e: NumberFormatException) {
-        null
-    }
-}
-
 fun Context.hasPermission(permission: String): Boolean {
     return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED
 }