Printing 3.64 KB
package com.printer.sdk.usb

import android.bluetooth.BluetoothDevice
import android.content.Context
import android.hardware.usb.UsbDevice
import android.os.Handler
import android.os.Looper
import etelligens.com.foodsafety.PrintLabel.PrintClasses.*
import java.io.File

class Printing(private var printer: Printer, val context: Context) {
    private lateinit var printables: List<Printable>
    private var usbPort = UsbPort(context);
    var printingCallback: PrintingCallback? = null
    var extraLinesAtEnd: Byte = 0

    init {
        initUSBCallback()
        initDeviceCallback()
    }

    private fun initUSBCallback() {
        usbPort.setUsbPortCallback(object : USBCallback {
            override fun onUSBTurningOn() {
                TODO("Not yet implemented")
            }

            override fun onUSBOn() {
                usbPort.connectToAddress();
            }

            override fun onUSBTurningOff() {
                TODO("Not yet implemented")
            }

            override fun onUSBOff() {
                TODO("Not yet implemented")
            }

            override fun onUserDeniedActivation() {
                TODO("Not yet implemented")
            }

        });
    }

    private fun initDeviceCallback() {
        usbPort.setDeviceCallback(object : DeviceCallback {
            override fun onDeviceConnected(device: BluetoothDevice) {

            }

            override fun onDeviceDisconnected(device: BluetoothDevice, message: String) {}

            override fun onMessage(message: String) {
            }

            override fun onError(message: String) {
            }

            override fun onConnectError(device: BluetoothDevice, message: String) {
            }

            override fun onSerialDeviceConnected(device: File) {

            }

            override fun onSerialDeviceDisconnected(device: File, message: String) {
                TODO("Not yet implemented")
            }

            override fun onSerialMessage(message: String) {
            }

            override fun onSerialError(message: String) {
            }

            override fun onSerialConnectError(device: File, message: String) {
            }

            override fun onUsbDeviceConnected(device: UsbDevice) {
                printPrintables()
                printingCallback?.printingOrderSentSuccessfully()
            }

            override fun onUsbDeviceDisconnected(device: UsbDevice, message: String) {
                TODO("Not yet implemented")
            }

            override fun onUsbMessage(message: String) {
                printingCallback?.onMessage(message)
            }

            override fun onUsbError(message: String) {
                printingCallback?.onError(message)
            }

            override fun onUsbConnectError(device: UsbDevice, message: String) {
                printingCallback?.connectionFailed(message)
            }
        })
    }

    private fun printPrintables() {
        usbPort.send(printer.initPrinterCommand) // init printer
        this.printables.forEach {
            it.getPrintableByteArray(printer).forEach { ops ->
                usbPort.send(ops)
            }
        }

        //Feed 2 lines to cut the paper
        if (extraLinesAtEnd > 0) {
            usbPort.send(printer.feedLineCommand.plus(extraLinesAtEnd))
        }

        Handler(Looper.getMainLooper()).postDelayed({
            usbPort.disconnect()
        }, 2000)
    }

    fun print(printables: ArrayList<Printable>) {
        this.printables = printables
        printingCallback?.connectingWithPrinter()
      //  usbPort.onStart()
        if (!usbPort.isEnabled) usbPort.enable() else usbPort.connectToAddress();
    }
}