diff --git a/app/src/main/java/com/hiddenramblings/tagmo/amiibo/tagdata/AmiiboData.kt b/app/src/main/java/com/hiddenramblings/tagmo/amiibo/tagdata/AmiiboData.kt index 8712f8992..3a8ad060e 100644 --- a/app/src/main/java/com/hiddenramblings/tagmo/amiibo/tagdata/AmiiboData.kt +++ b/app/src/main/java/com/hiddenramblings/tagmo/amiibo/tagdata/AmiiboData.kt @@ -205,6 +205,11 @@ open class AmiiboData : Parcelable { if (value < WRITE_COUNT_MIN_VALUE || value > WRITE_COUNT_MAX_VALUE) throw NumberFormatException() } + @Throws(StringIndexOutOfBoundsException::class) + fun checkSerialNumber(value: String) { + if (value.length < 18) throw StringIndexOutOfBoundsException() + } + @set:Throws(NumberFormatException::class) var writeCount: Int get() = tagData.getShort(WRITE_COUNT_OFFSET).toInt() and 0xFFFF diff --git a/app/src/main/java/com/hiddenramblings/tagmo/amiibo/tagdata/TagDataEditor.kt b/app/src/main/java/com/hiddenramblings/tagmo/amiibo/tagdata/TagDataEditor.kt index f4d3fdb90..1c5eee6f0 100644 --- a/app/src/main/java/com/hiddenramblings/tagmo/amiibo/tagdata/TagDataEditor.kt +++ b/app/src/main/java/com/hiddenramblings/tagmo/amiibo/tagdata/TagDataEditor.kt @@ -218,7 +218,20 @@ class TagDataEditor : AppCompatActivity() { onAppDataSwitchClicked(checked) } } - txtSerialNumber = findViewById(R.id.txtSerialNumber) + txtSerialNumber = findViewById(R.id.txtSerialNumber).apply { + addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {} + override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {} + override fun afterTextChanged(editable: Editable) { + try { + amiiboData.checkSerialNumber(editable.toString()) + txtSerialNumber.error = null + } catch (e: Exception) { + txtSerialNumber.error = getString(R.string.error_serial) + } + } + }) + } generateSerial = findViewById(R.id.random_serial).apply { setOnClickListener { txtSerialNumber.setText(Foomiibo.generateRandomUID().toHex()) @@ -954,7 +967,7 @@ class TagDataEditor : AppCompatActivity() { private fun loadSerialNumber() { txtSerialNumber.tag = txtSerialNumber.keyListener - txtSerialNumber.keyListener = null + // txtSerialNumber.keyListener = null val value = amiiboData.uID txtSerialNumber.setText(value.toHex()) } @@ -1839,4 +1852,4 @@ class TagDataEditor : AppCompatActivity() { .show() setResult(RESULT_OK, Intent(NFCIntent.ACTION_FIX_BANK_DATA)) } -} \ No newline at end of file +} diff --git a/app/src/main/res/layout/activity_tag_data.xml b/app/src/main/res/layout/activity_tag_data.xml index b1de8633f..73e72d348 100644 --- a/app/src/main/res/layout/activity_tag_data.xml +++ b/app/src/main/res/layout/activity_tag_data.xml @@ -335,6 +335,8 @@ android:id="@+id/txtSerialNumber" android:importantForAutofill="no" style="@style/TagEditor.EditSerial" + android:maxLength="10" + android:maxLines="1" android:paddingLeft="6dp" android:paddingRight="6dp" tools:ignore="LabelFor,TextFields" /> @@ -438,4 +440,4 @@ android:padding="2dp" /> - \ No newline at end of file + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 97a155bd6..7bb772284 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -387,6 +387,7 @@ NTAG215 connection cannot be established! State error. Invalid action: %1$s Must be 8 characters + Must be 18 characters Invalid input Must be between %1$d and %2$d Error while writing main data (stage 1)