@hoangnh0099/react-native-sunmi-printer 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,526 @@
1
+ package com.sunmiprinter
2
+
3
+ import android.graphics.BitmapFactory
4
+ import android.util.Base64
5
+ import com.facebook.react.bridge.Promise
6
+ import com.facebook.react.bridge.ReactApplicationContext
7
+ import com.facebook.react.bridge.ReadableArray
8
+ import com.sunmi.peripheral.printer.InnerLcdCallback
9
+ import com.sunmi.peripheral.printer.InnerPrinterCallback
10
+ import com.sunmi.peripheral.printer.InnerPrinterManager
11
+ import com.sunmi.peripheral.printer.InnerResultCallback
12
+ import com.sunmi.peripheral.printer.SunmiPrinterService
13
+
14
+ class SunmiPrinterModule(reactContext: ReactApplicationContext) :
15
+ NativeSunmiPrinterSpec(reactContext) {
16
+
17
+ private var printerService: SunmiPrinterService? = null
18
+
19
+ private val printerCallback = object : InnerPrinterCallback() {
20
+ override fun onConnected(service: SunmiPrinterService) {
21
+ printerService = service
22
+ }
23
+
24
+ override fun onDisconnected() {
25
+ printerService = null
26
+ }
27
+ }
28
+
29
+ init {
30
+ InnerPrinterManager.getInstance().bindService(reactContext, printerCallback)
31
+ }
32
+
33
+ private fun getService(promise: Promise): SunmiPrinterService? {
34
+ return printerService ?: run {
35
+ promise.reject("SERVICE_NOT_CONNECTED", "Printer service is not connected")
36
+ null
37
+ }
38
+ }
39
+
40
+ private fun resultCallback(promise: Promise) = object : InnerResultCallback() {
41
+ override fun onRunResult(isSuccess: Boolean) {
42
+ if (isSuccess) promise.resolve(null)
43
+ else promise.reject("PRINTER_ERROR", "Operation failed")
44
+ }
45
+
46
+ override fun onReturnString(result: String?) {}
47
+
48
+ override fun onRaiseException(code: Int, msg: String?) {
49
+ promise.reject("PRINTER_EXCEPTION", msg ?: "Printer exception (code: $code)")
50
+ }
51
+
52
+ override fun onPrintResult(code: Int, msg: String?) {}
53
+ }
54
+
55
+ private fun stringResultCallback(promise: Promise) = object : InnerResultCallback() {
56
+ override fun onRunResult(isSuccess: Boolean) {}
57
+
58
+ override fun onReturnString(result: String?) {
59
+ promise.resolve(result)
60
+ }
61
+
62
+ override fun onRaiseException(code: Int, msg: String?) {
63
+ promise.reject("PRINTER_EXCEPTION", msg ?: "Printer exception (code: $code)")
64
+ }
65
+
66
+ override fun onPrintResult(code: Int, msg: String?) {}
67
+ }
68
+
69
+ private fun lcdCallback(promise: Promise) = object : InnerLcdCallback() {
70
+ override fun onRunResult(show: Boolean) {
71
+ promise.resolve(null)
72
+ }
73
+ }
74
+
75
+ private fun decodeBitmap(base64: String, promise: Promise): android.graphics.Bitmap? {
76
+ val bytes = Base64.decode(base64, Base64.DEFAULT)
77
+ return BitmapFactory.decodeByteArray(bytes, 0, bytes.size) ?: run {
78
+ promise.reject("DECODE_ERROR", "Failed to decode base64 image")
79
+ null
80
+ }
81
+ }
82
+
83
+ // region Printer Info
84
+
85
+ override fun getPrinterSerialNo(promise: Promise) {
86
+ val service = getService(promise) ?: return
87
+ try {
88
+ promise.resolve(service.printerSerialNo)
89
+ } catch (e: Exception) {
90
+ promise.reject("PRINTER_ERROR", e.message, e)
91
+ }
92
+ }
93
+
94
+ override fun getPrinterVersion(promise: Promise) {
95
+ val service = getService(promise) ?: return
96
+ try {
97
+ promise.resolve(service.printerVersion)
98
+ } catch (e: Exception) {
99
+ promise.reject("PRINTER_ERROR", e.message, e)
100
+ }
101
+ }
102
+
103
+ override fun getPrinterModal(promise: Promise) {
104
+ val service = getService(promise) ?: return
105
+ try {
106
+ promise.resolve(service.printerModal)
107
+ } catch (e: Exception) {
108
+ promise.reject("PRINTER_ERROR", e.message, e)
109
+ }
110
+ }
111
+
112
+ override fun getPrinterPaper(promise: Promise) {
113
+ val service = getService(promise) ?: return
114
+ try {
115
+ promise.resolve(service.printerPaper)
116
+ } catch (e: Exception) {
117
+ promise.reject("PRINTER_ERROR", e.message, e)
118
+ }
119
+ }
120
+
121
+ override fun getPrinterMode(promise: Promise) {
122
+ val service = getService(promise) ?: return
123
+ try {
124
+ promise.resolve(service.printerMode)
125
+ } catch (e: Exception) {
126
+ promise.reject("PRINTER_ERROR", e.message, e)
127
+ }
128
+ }
129
+
130
+ override fun getServiceVersion(promise: Promise) {
131
+ val service = getService(promise) ?: return
132
+ try {
133
+ promise.resolve(service.serviceVersion)
134
+ } catch (e: Exception) {
135
+ promise.reject("PRINTER_ERROR", e.message, e)
136
+ }
137
+ }
138
+
139
+ override fun getFirmwareStatus(promise: Promise) {
140
+ val service = getService(promise) ?: return
141
+ try {
142
+ promise.resolve(service.firmwareStatus)
143
+ } catch (e: Exception) {
144
+ promise.reject("PRINTER_ERROR", e.message, e)
145
+ }
146
+ }
147
+
148
+ override fun updatePrinterState(promise: Promise) {
149
+ val service = getService(promise) ?: return
150
+ try {
151
+ promise.resolve(service.updatePrinterState())
152
+ } catch (e: Exception) {
153
+ promise.reject("PRINTER_ERROR", e.message, e)
154
+ }
155
+ }
156
+
157
+ override fun getPrintedLength(promise: Promise) {
158
+ val service = getService(promise) ?: return
159
+ try {
160
+ service.getPrintedLength(stringResultCallback(promise))
161
+ } catch (e: Exception) {
162
+ promise.reject("PRINTER_ERROR", e.message, e)
163
+ }
164
+ }
165
+
166
+ override fun getPrinterFactory(promise: Promise) {
167
+ val service = getService(promise) ?: return
168
+ try {
169
+ service.getPrinterFactory(stringResultCallback(promise))
170
+ } catch (e: Exception) {
171
+ promise.reject("PRINTER_ERROR", e.message, e)
172
+ }
173
+ }
174
+
175
+ // endregion
176
+
177
+ // region Initialization
178
+
179
+ override fun printerInit(promise: Promise) {
180
+ val service = getService(promise) ?: return
181
+ try {
182
+ service.printerInit(resultCallback(promise))
183
+ } catch (e: Exception) {
184
+ promise.reject("PRINTER_ERROR", e.message, e)
185
+ }
186
+ }
187
+
188
+ override fun printerSelfChecking(promise: Promise) {
189
+ val service = getService(promise) ?: return
190
+ try {
191
+ service.printerSelfChecking(resultCallback(promise))
192
+ } catch (e: Exception) {
193
+ promise.reject("PRINTER_ERROR", e.message, e)
194
+ }
195
+ }
196
+
197
+ // endregion
198
+
199
+ // region Formatting
200
+
201
+ override fun setAlignment(alignment: Double, promise: Promise) {
202
+ val service = getService(promise) ?: return
203
+ try {
204
+ service.setAlignment(alignment.toInt(), resultCallback(promise))
205
+ } catch (e: Exception) {
206
+ promise.reject("PRINTER_ERROR", e.message, e)
207
+ }
208
+ }
209
+
210
+ override fun setFontName(typeface: String, promise: Promise) {
211
+ val service = getService(promise) ?: return
212
+ try {
213
+ service.setFontName(typeface, resultCallback(promise))
214
+ } catch (e: Exception) {
215
+ promise.reject("PRINTER_ERROR", e.message, e)
216
+ }
217
+ }
218
+
219
+ override fun setFontSize(fontsize: Double, promise: Promise) {
220
+ val service = getService(promise) ?: return
221
+ try {
222
+ service.setFontSize(fontsize.toFloat(), resultCallback(promise))
223
+ } catch (e: Exception) {
224
+ promise.reject("PRINTER_ERROR", e.message, e)
225
+ }
226
+ }
227
+
228
+ override fun setPrinterStyle(key: Double, value: Double, promise: Promise) {
229
+ val service = getService(promise) ?: return
230
+ try {
231
+ service.setPrinterStyle(key.toInt(), value.toInt())
232
+ promise.resolve(null)
233
+ } catch (e: Exception) {
234
+ promise.reject("PRINTER_ERROR", e.message, e)
235
+ }
236
+ }
237
+
238
+ // endregion
239
+
240
+ // region Text
241
+
242
+ override fun printText(text: String, promise: Promise) {
243
+ val service = getService(promise) ?: return
244
+ try {
245
+ service.printText(text, resultCallback(promise))
246
+ } catch (e: Exception) {
247
+ promise.reject("PRINTER_ERROR", e.message, e)
248
+ }
249
+ }
250
+
251
+ override fun printTextWithFont(text: String, typeface: String, fontsize: Double, promise: Promise) {
252
+ val service = getService(promise) ?: return
253
+ try {
254
+ service.printTextWithFont(text, typeface, fontsize.toFloat(), resultCallback(promise))
255
+ } catch (e: Exception) {
256
+ promise.reject("PRINTER_ERROR", e.message, e)
257
+ }
258
+ }
259
+
260
+ override fun printOriginalText(text: String, promise: Promise) {
261
+ val service = getService(promise) ?: return
262
+ try {
263
+ service.printOriginalText(text, resultCallback(promise))
264
+ } catch (e: Exception) {
265
+ promise.reject("PRINTER_ERROR", e.message, e)
266
+ }
267
+ }
268
+
269
+ // endregion
270
+
271
+ // region Image
272
+
273
+ override fun printImage(base64: String, promise: Promise) {
274
+ val service = getService(promise) ?: return
275
+ try {
276
+ val bitmap = decodeBitmap(base64, promise) ?: return
277
+ service.printBitmap(bitmap, resultCallback(promise))
278
+ } catch (e: Exception) {
279
+ promise.reject("PRINTER_ERROR", e.message, e)
280
+ }
281
+ }
282
+
283
+ override fun printBitmapCustom(base64: String, type: Double, promise: Promise) {
284
+ val service = getService(promise) ?: return
285
+ try {
286
+ val bitmap = decodeBitmap(base64, promise) ?: return
287
+ service.printBitmapCustom(bitmap, type.toInt(), resultCallback(promise))
288
+ } catch (e: Exception) {
289
+ promise.reject("PRINTER_ERROR", e.message, e)
290
+ }
291
+ }
292
+
293
+ // endregion
294
+
295
+ // region Barcode
296
+
297
+ override fun printBarCode(
298
+ data: String,
299
+ symbology: Double,
300
+ height: Double,
301
+ width: Double,
302
+ textposition: Double,
303
+ promise: Promise
304
+ ) {
305
+ val service = getService(promise) ?: return
306
+ try {
307
+ service.printBarCode(
308
+ data,
309
+ symbology.toInt(),
310
+ height.toInt(),
311
+ width.toInt(),
312
+ textposition.toInt(),
313
+ resultCallback(promise)
314
+ )
315
+ } catch (e: Exception) {
316
+ promise.reject("PRINTER_ERROR", e.message, e)
317
+ }
318
+ }
319
+
320
+ override fun printQRCode(data: String, modulesize: Double, errorlevel: Double, promise: Promise) {
321
+ val service = getService(promise) ?: return
322
+ try {
323
+ service.printQRCode(data, modulesize.toInt(), errorlevel.toInt(), resultCallback(promise))
324
+ } catch (e: Exception) {
325
+ promise.reject("PRINTER_ERROR", e.message, e)
326
+ }
327
+ }
328
+
329
+ // endregion
330
+
331
+ // region Table
332
+
333
+ override fun printColumnsText(texts: ReadableArray, widths: ReadableArray, aligns: ReadableArray, promise: Promise) {
334
+ val service = getService(promise) ?: return
335
+ try {
336
+ val textsArr = Array(texts.size()) { texts.getString(it) }
337
+ val widthsArr = IntArray(widths.size()) { widths.getInt(it) }
338
+ val alignsArr = IntArray(aligns.size()) { aligns.getInt(it) }
339
+ service.printColumnsText(textsArr, widthsArr, alignsArr, resultCallback(promise))
340
+ } catch (e: Exception) {
341
+ promise.reject("PRINTER_ERROR", e.message, e)
342
+ }
343
+ }
344
+
345
+ override fun printColumnsString(texts: ReadableArray, widths: ReadableArray, aligns: ReadableArray, promise: Promise) {
346
+ val service = getService(promise) ?: return
347
+ try {
348
+ val textsArr = Array(texts.size()) { texts.getString(it) }
349
+ val widthsArr = IntArray(widths.size()) { widths.getInt(it) }
350
+ val alignsArr = IntArray(aligns.size()) { aligns.getInt(it) }
351
+ service.printColumnsString(textsArr, widthsArr, alignsArr, resultCallback(promise))
352
+ } catch (e: Exception) {
353
+ promise.reject("PRINTER_ERROR", e.message, e)
354
+ }
355
+ }
356
+
357
+ // endregion
358
+
359
+ // region Raw
360
+
361
+ override fun sendRAWData(data: ReadableArray, promise: Promise) {
362
+ val service = getService(promise) ?: return
363
+ try {
364
+ val bytes = ByteArray(data.size()) { data.getInt(it).toByte() }
365
+ service.sendRAWData(bytes, resultCallback(promise))
366
+ } catch (e: Exception) {
367
+ promise.reject("PRINTER_ERROR", e.message, e)
368
+ }
369
+ }
370
+
371
+ // endregion
372
+
373
+ // region Paper
374
+
375
+ override fun lineWrap(lines: Double, promise: Promise) {
376
+ val service = getService(promise) ?: return
377
+ try {
378
+ service.lineWrap(lines.toInt(), resultCallback(promise))
379
+ } catch (e: Exception) {
380
+ promise.reject("PRINTER_ERROR", e.message, e)
381
+ }
382
+ }
383
+
384
+ override fun cutPaper(promise: Promise) {
385
+ val service = getService(promise) ?: return
386
+ try {
387
+ service.cutPaper(resultCallback(promise))
388
+ } catch (e: Exception) {
389
+ promise.reject("PRINTER_ERROR", e.message, e)
390
+ }
391
+ }
392
+
393
+ override fun autoOutPaper(promise: Promise) {
394
+ val service = getService(promise) ?: return
395
+ try {
396
+ service.autoOutPaper(resultCallback(promise))
397
+ } catch (e: Exception) {
398
+ promise.reject("PRINTER_ERROR", e.message, e)
399
+ }
400
+ }
401
+
402
+ // endregion
403
+
404
+ // region Cash Drawer
405
+
406
+ override fun openDrawer(promise: Promise) {
407
+ val service = getService(promise) ?: return
408
+ try {
409
+ service.openDrawer(resultCallback(promise))
410
+ } catch (e: Exception) {
411
+ promise.reject("PRINTER_ERROR", e.message, e)
412
+ }
413
+ }
414
+
415
+ // endregion
416
+
417
+ // region Label
418
+
419
+ override fun labelLocate(promise: Promise) {
420
+ val service = getService(promise) ?: return
421
+ try {
422
+ service.labelLocate()
423
+ promise.resolve(null)
424
+ } catch (e: Exception) {
425
+ promise.reject("PRINTER_ERROR", e.message, e)
426
+ }
427
+ }
428
+
429
+ override fun labelOutput(promise: Promise) {
430
+ val service = getService(promise) ?: return
431
+ try {
432
+ service.labelOutput()
433
+ promise.resolve(null)
434
+ } catch (e: Exception) {
435
+ promise.reject("PRINTER_ERROR", e.message, e)
436
+ }
437
+ }
438
+
439
+ // endregion
440
+
441
+ // region LCD
442
+
443
+ override fun sendLCDCommand(flag: Double, promise: Promise) {
444
+ val service = getService(promise) ?: return
445
+ try {
446
+ service.sendLCDCommand(flag.toInt())
447
+ promise.resolve(null)
448
+ } catch (e: Exception) {
449
+ promise.reject("PRINTER_ERROR", e.message, e)
450
+ }
451
+ }
452
+
453
+ override fun sendLCDFillString(text: String, size: Double, fill: Boolean, promise: Promise) {
454
+ val service = getService(promise) ?: return
455
+ try {
456
+ service.sendLCDFillString(text, size.toInt(), fill, lcdCallback(promise))
457
+ } catch (e: Exception) {
458
+ promise.reject("PRINTER_ERROR", e.message, e)
459
+ }
460
+ }
461
+
462
+ override fun sendLCDMultiString(texts: ReadableArray, align: ReadableArray, promise: Promise) {
463
+ val service = getService(promise) ?: return
464
+ try {
465
+ val textsArr = Array(texts.size()) { texts.getString(it) }
466
+ val alignArr = IntArray(align.size()) { align.getInt(it) }
467
+ service.sendLCDMultiString(textsArr, alignArr, lcdCallback(promise))
468
+ } catch (e: Exception) {
469
+ promise.reject("PRINTER_ERROR", e.message, e)
470
+ }
471
+ }
472
+
473
+ override fun sendLCDBitmap(base64: String, promise: Promise) {
474
+ val service = getService(promise) ?: return
475
+ try {
476
+ val bitmap = decodeBitmap(base64, promise) ?: return
477
+ service.sendLCDBitmap(bitmap, lcdCallback(promise))
478
+ } catch (e: Exception) {
479
+ promise.reject("PRINTER_ERROR", e.message, e)
480
+ }
481
+ }
482
+
483
+ // endregion
484
+
485
+ // region Transaction
486
+
487
+ override fun enterPrinterBuffer(clean: Boolean, promise: Promise) {
488
+ val service = getService(promise) ?: return
489
+ try {
490
+ service.enterPrinterBuffer(clean)
491
+ promise.resolve(null)
492
+ } catch (e: Exception) {
493
+ promise.reject("PRINTER_ERROR", e.message, e)
494
+ }
495
+ }
496
+
497
+ override fun exitPrinterBuffer(commit: Boolean, promise: Promise) {
498
+ val service = getService(promise) ?: return
499
+ try {
500
+ service.exitPrinterBufferWithCallback(commit, resultCallback(promise))
501
+ } catch (e: Exception) {
502
+ promise.reject("PRINTER_ERROR", e.message, e)
503
+ }
504
+ }
505
+
506
+ override fun commitPrinterBuffer(promise: Promise) {
507
+ val service = getService(promise) ?: return
508
+ try {
509
+ service.commitPrinterBufferWithCallback(resultCallback(promise))
510
+ } catch (e: Exception) {
511
+ promise.reject("PRINTER_ERROR", e.message, e)
512
+ }
513
+ }
514
+
515
+ // endregion
516
+
517
+ override fun invalidate() {
518
+ super.invalidate()
519
+ InnerPrinterManager.getInstance().unBindService(reactApplicationContext, printerCallback)
520
+ printerService = null
521
+ }
522
+
523
+ companion object {
524
+ const val NAME = NativeSunmiPrinterSpec.NAME
525
+ }
526
+ }
@@ -0,0 +1,31 @@
1
+ package com.sunmiprinter
2
+
3
+ import com.facebook.react.BaseReactPackage
4
+ import com.facebook.react.bridge.NativeModule
5
+ import com.facebook.react.bridge.ReactApplicationContext
6
+ import com.facebook.react.module.model.ReactModuleInfo
7
+ import com.facebook.react.module.model.ReactModuleInfoProvider
8
+ import java.util.HashMap
9
+
10
+ class SunmiPrinterPackage : BaseReactPackage() {
11
+ override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
12
+ return if (name == SunmiPrinterModule.NAME) {
13
+ SunmiPrinterModule(reactContext)
14
+ } else {
15
+ null
16
+ }
17
+ }
18
+
19
+ override fun getReactModuleInfoProvider() = ReactModuleInfoProvider {
20
+ mapOf(
21
+ SunmiPrinterModule.NAME to ReactModuleInfo(
22
+ name = SunmiPrinterModule.NAME,
23
+ className = SunmiPrinterModule.NAME,
24
+ canOverrideExistingModule = false,
25
+ needsEagerInit = false,
26
+ isCxxModule = false,
27
+ isTurboModule = true
28
+ )
29
+ )
30
+ }
31
+ }
@@ -0,0 +1,5 @@
1
+ #import <SunmiPrinterSpec/SunmiPrinterSpec.h>
2
+
3
+ @interface SunmiPrinter : NSObject <NativeSunmiPrinterSpec>
4
+
5
+ @end
@@ -0,0 +1,21 @@
1
+ #import "SunmiPrinter.h"
2
+
3
+ @implementation SunmiPrinter
4
+ - (NSNumber *)multiply:(double)a b:(double)b {
5
+ NSNumber *result = @(a * b);
6
+
7
+ return result;
8
+ }
9
+
10
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
11
+ (const facebook::react::ObjCTurboModule::InitParams &)params
12
+ {
13
+ return std::make_shared<facebook::react::NativeSunmiPrinterSpecJSI>(params);
14
+ }
15
+
16
+ + (NSString *)moduleName
17
+ {
18
+ return @"SunmiPrinter";
19
+ }
20
+
21
+ @end
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ import { TurboModuleRegistry } from 'react-native';
4
+ export default TurboModuleRegistry.getEnforcing('SunmiPrinter');
5
+ //# sourceMappingURL=NativeSunmiPrinter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeSunmiPrinter.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;AA2FpE,eAAeA,mBAAmB,CAACC,YAAY,CAAO,cAAc,CAAC","ignoreList":[]}