@@ -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