From 83b875792f1793933b20578af21ccd2e9f40e589 Mon Sep 17 00:00:00 2001 From: KyrieCheng Date: Sun, 17 Aug 2025 22:30:02 +0800 Subject: [PATCH] fix:check input values to avoid zero million or impossible values problem: there is no check with input value. for example, user can input 00,012,00000012, like these impossible values. solution: add check when there is a change of text, if it's first two characters are match 0[0-9],the input will be rejected, means it will keep "0" instead of "00". Fixes #41 --- .../com/forz/calculator/fragments/MainFragment.kt | 12 ++++++++++++ .../calculator/fragments/land/MainLandFragment.kt | 12 ++++++++++++ .../fragments/largeLand/LargeLandFragment.kt | 12 ++++++++++++ .../forz/calculator/fragments/small/SmallFragment.kt | 12 ++++++++++++ .../fragments/smallLand/SmallLandFragment.kt | 12 ++++++++++++ .../fragments/xLargeLand/XLargeLandFragment.kt | 12 ++++++++++++ 6 files changed, 72 insertions(+) diff --git a/app/src/main/java/com/forz/calculator/fragments/MainFragment.kt b/app/src/main/java/com/forz/calculator/fragments/MainFragment.kt index 4a2e924..ccbd13b 100644 --- a/app/src/main/java/com/forz/calculator/fragments/MainFragment.kt +++ b/app/src/main/java/com/forz/calculator/fragments/MainFragment.kt @@ -4,6 +4,8 @@ import android.annotation.SuppressLint import android.content.Intent import android.os.Bundle import android.text.Editable +import android.text.InputFilter +import android.text.Spanned import android.text.TextWatcher import androidx.fragment.app.Fragment import android.view.LayoutInflater @@ -177,6 +179,16 @@ class MainFragment : Fragment(), } } + binding.expressionEditText.filters = arrayOf(object : InputFilter { + override fun filter(source: CharSequence?, start: Int, end: Int, + dest: Spanned?, dstart: Int, dend: Int + ): CharSequence? { + val result = dest.toString().substring(0, dstart) + source?.subSequence(start, end) + dest.toString().substring(dend) + val findPattern = Regex("^0[0-9]") + return if(findPattern.find(result) != null) "" else null + } + }) + binding.expressionEditText.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { } diff --git a/app/src/main/java/com/forz/calculator/fragments/land/MainLandFragment.kt b/app/src/main/java/com/forz/calculator/fragments/land/MainLandFragment.kt index eeb6a0a..7727ae0 100644 --- a/app/src/main/java/com/forz/calculator/fragments/land/MainLandFragment.kt +++ b/app/src/main/java/com/forz/calculator/fragments/land/MainLandFragment.kt @@ -4,6 +4,8 @@ import android.annotation.SuppressLint import android.content.Intent import android.os.Bundle import android.text.Editable +import android.text.InputFilter +import android.text.Spanned import android.text.TextWatcher import androidx.fragment.app.Fragment import android.view.LayoutInflater @@ -147,6 +149,16 @@ class MainLandFragment : Fragment(), } } + binding.expressionEditText.filters = arrayOf(object : InputFilter { + override fun filter(source: CharSequence?, start: Int, end: Int, + dest: Spanned?, dstart: Int, dend: Int + ): CharSequence? { + val result = dest.toString().substring(0, dstart) + source?.subSequence(start, end) + dest.toString().substring(dend) + val findPattern = Regex("^0[0-9]") + return if(findPattern.find(result) != null) "" else null + } + }) + binding.expressionEditText.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { } diff --git a/app/src/main/java/com/forz/calculator/fragments/largeLand/LargeLandFragment.kt b/app/src/main/java/com/forz/calculator/fragments/largeLand/LargeLandFragment.kt index 30967a2..ee4e9a2 100644 --- a/app/src/main/java/com/forz/calculator/fragments/largeLand/LargeLandFragment.kt +++ b/app/src/main/java/com/forz/calculator/fragments/largeLand/LargeLandFragment.kt @@ -4,6 +4,8 @@ import android.annotation.SuppressLint import android.content.Intent import android.os.Bundle import android.text.Editable +import android.text.InputFilter +import android.text.Spanned import android.text.TextWatcher import androidx.fragment.app.Fragment import android.view.LayoutInflater @@ -143,6 +145,16 @@ class LargeLandFragment : Fragment(), } } + binding.expressionEditText.filters = arrayOf(object : InputFilter { + override fun filter(source: CharSequence?, start: Int, end: Int, + dest: Spanned?, dstart: Int, dend: Int + ): CharSequence? { + val result = dest.toString().substring(0, dstart) + source?.subSequence(start, end) + dest.toString().substring(dend) + val findPattern = Regex("^0[0-9]") + return if(findPattern.find(result) != null) "" else null + } + }) + binding.expressionEditText.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { } diff --git a/app/src/main/java/com/forz/calculator/fragments/small/SmallFragment.kt b/app/src/main/java/com/forz/calculator/fragments/small/SmallFragment.kt index 3c75eea..1d50008 100644 --- a/app/src/main/java/com/forz/calculator/fragments/small/SmallFragment.kt +++ b/app/src/main/java/com/forz/calculator/fragments/small/SmallFragment.kt @@ -4,6 +4,8 @@ import android.annotation.SuppressLint import android.content.Intent import android.os.Bundle import android.text.Editable +import android.text.InputFilter +import android.text.Spanned import android.text.TextWatcher import androidx.fragment.app.Fragment import android.view.LayoutInflater @@ -181,6 +183,16 @@ class SmallFragment : Fragment(), } } + binding.expressionEditText.filters = arrayOf(object : InputFilter { + override fun filter(source: CharSequence?, start: Int, end: Int, + dest: Spanned?, dstart: Int, dend: Int + ): CharSequence? { + val result = dest.toString().substring(0, dstart) + source?.subSequence(start, end) + dest.toString().substring(dend) + val findPattern = Regex("^0[0-9]") + return if(findPattern.find(result) != null) "" else null + } + }) + binding.expressionEditText.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { } diff --git a/app/src/main/java/com/forz/calculator/fragments/smallLand/SmallLandFragment.kt b/app/src/main/java/com/forz/calculator/fragments/smallLand/SmallLandFragment.kt index 33f7c17..6c8d159 100644 --- a/app/src/main/java/com/forz/calculator/fragments/smallLand/SmallLandFragment.kt +++ b/app/src/main/java/com/forz/calculator/fragments/smallLand/SmallLandFragment.kt @@ -2,6 +2,8 @@ package com.forz.calculator.fragments.smallLand import android.os.Bundle import android.text.Editable +import android.text.InputFilter +import android.text.Spanned import android.text.TextWatcher import androidx.fragment.app.Fragment import android.view.LayoutInflater @@ -81,6 +83,16 @@ class SmallLandFragment : Fragment(), } } + binding.expressionEditText.filters = arrayOf(object : InputFilter { + override fun filter(source: CharSequence?, start: Int, end: Int, + dest: Spanned?, dstart: Int, dend: Int + ): CharSequence? { + val result = dest.toString().substring(0, dstart) + source?.subSequence(start, end) + dest.toString().substring(dend) + val findPattern = Regex("^0[0-9]") + return if(findPattern.find(result) != null) "" else null + } + }) + binding.expressionEditText.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { } diff --git a/app/src/main/java/com/forz/calculator/fragments/xLargeLand/XLargeLandFragment.kt b/app/src/main/java/com/forz/calculator/fragments/xLargeLand/XLargeLandFragment.kt index 55366f2..fb4467c 100644 --- a/app/src/main/java/com/forz/calculator/fragments/xLargeLand/XLargeLandFragment.kt +++ b/app/src/main/java/com/forz/calculator/fragments/xLargeLand/XLargeLandFragment.kt @@ -4,6 +4,8 @@ import android.annotation.SuppressLint import android.content.Intent import android.os.Bundle import android.text.Editable +import android.text.InputFilter +import android.text.Spanned import android.text.TextWatcher import androidx.fragment.app.Fragment import android.view.LayoutInflater @@ -142,6 +144,16 @@ class XLargeLandFragment : Fragment(), } } + binding.expressionEditText.filters = arrayOf(object : InputFilter { + override fun filter(source: CharSequence?, start: Int, end: Int, + dest: Spanned?, dstart: Int, dend: Int + ): CharSequence? { + val result = dest.toString().substring(0, dstart) + source?.subSequence(start, end) + dest.toString().substring(dend) + val findPattern = Regex("^0[0-9]") + return if(findPattern.find(result) != null) "" else null + } + }) + binding.expressionEditText.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { }