Skip to content

Commit 82acc39

Browse files
Merge pull request #751 from HiddenRamblings/copilot/add-progress-display-single-tag
Add progress display for single NFC tag write operations
2 parents 8d586d9 + ba4db73 commit 82acc39

File tree

2 files changed

+21
-11
lines changed

2 files changed

+21
-11
lines changed

app/src/main/java/com/hiddenramblings/tagmo/nfctech/NfcActivity.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,8 @@ class NfcActivity : AppCompatActivity() {
356356
update = TagReader.readFromTag(mifare)
357357
TagWriter.writeToTagRaw(
358358
mifare, data!!, prefs.tagTypeValidation(), skipLockInfo
359-
)
359+
) { current, total -> showProgress(current, total) }
360+
hideProgress()
360361
setResult(RESULT_OK)
361362
}
362363
NFCIntent.ACTION_WRITE_TAG_FULL -> {
@@ -393,7 +394,8 @@ class NfcActivity : AppCompatActivity() {
393394
update = TagReader.readFromTag(mifare)
394395
TagWriter.writeToTagAuto(
395396
mifare, data!!, keyManager, prefs.tagTypeValidation(), skipLockInfo
396-
)
397+
) { current, total -> showProgress(current, total) }
398+
hideProgress()
397399
setResult(RESULT_OK)
398400
}
399401
}
@@ -403,7 +405,8 @@ class NfcActivity : AppCompatActivity() {
403405
)
404406
TagWriter.restoreTag(
405407
mifare, data!!, ignoreUid, keyManager, prefs.tagTypeValidation()
406-
)
408+
) { current, total -> showProgress(current, total) }
409+
hideProgress()
407410
setResult(RESULT_OK)
408411
}
409412
NFCIntent.ACTION_WRITE_ALL_TAGS -> {

app/src/main/java/com/hiddenramblings/tagmo/nfctech/TagWriter.kt

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,15 @@ object TagWriter {
3434

3535
@Throws(Exception::class)
3636
fun writeToTagRaw(
37-
mifare: NTAG215, tagData: ByteArray, validateNtag: Boolean, skipLock: Boolean = false
37+
mifare: NTAG215, tagData: ByteArray, validateNtag: Boolean, skipLock: Boolean = false,
38+
listener: ((Int, Int) -> Unit)? = null
3839
) {
3940
val context = TagMo.appContext
4041
TagArray.validateNtag(mifare, tagData, validateNtag)
4142
TagReader.validateBlankTag(mifare)
4243
try {
4344
val pages = splitPages(tagData)
44-
writePages(mifare, 3, 129, pages)
45+
writePages(mifare, 3, 129, pages, listener)
4546
Debug.verbose(TagWriter::class.java, R.string.data_write)
4647
} catch (e: Exception) {
4748
throw Exception(context.getString(R.string.error_data_write), e)
@@ -66,11 +67,14 @@ object TagWriter {
6667

6768
@Throws(IOException::class)
6869
private fun writePages(
69-
tag: NTAG215, pagestart: Int, pageend: Int, data: Array<ByteArray?>
70+
tag: NTAG215, pagestart: Int, pageend: Int, data: Array<ByteArray?>,
71+
listener: ((Int, Int) -> Unit)? = null, offset: Int = 0,
72+
total: Int = pageend - pagestart + 1
7073
) {
7174
for (i in pagestart..pageend) {
7275
tag.writePage(i, data[i]!!)
7376
Debug.info(TagWriter::class.java, R.string.write_page, i.toString())
77+
listener?.invoke(offset + i - pagestart + 1, total)
7478
}
7579
}
7680

@@ -105,7 +109,8 @@ object TagWriter {
105109

106110
@Throws(Exception::class)
107111
fun writeToTagAuto(
108-
mifare: NTAG215, tagData: ByteArray, keyManager: KeyManager, validateNtag: Boolean, skipLock: Boolean = false
112+
mifare: NTAG215, tagData: ByteArray, keyManager: KeyManager, validateNtag: Boolean,
113+
skipLock: Boolean = false, listener: ((Int, Int) -> Unit)? = null
109114
) {
110115
val idPages = mifare.readPages(0)
111116
if (null == idPages || idPages.size != NfcByte.PAGE_SIZE * 4)
@@ -155,7 +160,7 @@ object TagWriter {
155160
mifare.writePage(0x00, pages[0]!!) //UID
156161
} else {
157162
try {
158-
writePages(mifare, 3, 129, pages)
163+
writePages(mifare, 3, 129, pages, listener)
159164
Debug.verbose(TagWriter::class.java, R.string.data_write)
160165
} catch (e: Exception) {
161166
throw Exception(TagMo.appContext.getString(R.string.error_data_write), e)
@@ -180,7 +185,7 @@ object TagWriter {
180185
@Throws(Exception::class)
181186
fun restoreTag(
182187
mifare: NTAG215, tagData: ByteArray, ignoreUid: Boolean,
183-
keyManager: KeyManager, validateNtag: Boolean
188+
keyManager: KeyManager, validateNtag: Boolean, listener: ((Int, Int) -> Unit)? = null
184189
) {
185190
var restoreData = tagData.toTagArray()
186191
if (!ignoreUid) TagArray.validateNtag(mifare, restoreData, validateNtag) else {
@@ -196,8 +201,10 @@ object TagWriter {
196201
}
197202
doAuth(mifare)
198203
val pages = splitPages(restoreData)
199-
writePages(mifare, 4, 12, pages)
200-
writePages(mifare, 32, 129, pages)
204+
val firstCount = 12 - 4 + 1
205+
val total = firstCount + (129 - 32 + 1)
206+
writePages(mifare, 4, 12, pages, listener, 0, total)
207+
writePages(mifare, 32, 129, pages, listener, firstCount, total)
201208
}
202209

203210
/**

0 commit comments

Comments
 (0)