import typing

import android.nfc
import java
import java.chaquopy
import java.io
import java.lang

class IsoDep(TagTechnology):
    def close(self) -> None: ...
    def connect(self) -> None: ...
    @staticmethod
    def get(tag: android.nfc.Tag, /) -> IsoDep: ...
    def getHiLayerResponse(self) -> java.chaquopy.JavaArrayJByte | None: ...
    def getHistoricalBytes(self) -> java.chaquopy.JavaArrayJByte | None: ...
    def getMaxTransceiveLength(self) -> int: ...
    def getTag(self) -> android.nfc.Tag: ...
    def getTimeout(self) -> int: ...
    def isConnected(self) -> bool: ...
    def isExtendedLengthApduSupported(self) -> bool: ...
    def setTimeout(self, timeout: int | java.jint | java.lang.Integer, /) -> None: ...
    def transceive(self, data: java.chaquopy.JavaArrayJByte, /) -> java.chaquopy.JavaArrayJByte: ...

class MifareClassic(TagTechnology):
    BLOCK_SIZE: typing.ClassVar[int] = ...
    KEY_DEFAULT: typing.ClassVar[java.chaquopy.JavaArrayJByte] = ...
    KEY_MIFARE_APPLICATION_DIRECTORY: typing.ClassVar[java.chaquopy.JavaArrayJByte] = ...
    KEY_NFC_FORUM: typing.ClassVar[java.chaquopy.JavaArrayJByte] = ...
    SIZE_1K: typing.ClassVar[int] = ...
    SIZE_2K: typing.ClassVar[int] = ...
    SIZE_4K: typing.ClassVar[int] = ...
    SIZE_MINI: typing.ClassVar[int] = ...
    TYPE_CLASSIC: typing.ClassVar[int] = ...
    TYPE_PLUS: typing.ClassVar[int] = ...
    TYPE_PRO: typing.ClassVar[int] = ...
    TYPE_UNKNOWN: typing.ClassVar[int] = ...
    def authenticateSectorWithKeyA(self, sectorIndex: int | java.jint | java.lang.Integer, key: java.chaquopy.JavaArrayJByte, /) -> bool: ...
    def authenticateSectorWithKeyB(self, sectorIndex: int | java.jint | java.lang.Integer, key: java.chaquopy.JavaArrayJByte, /) -> bool: ...
    def blockToSector(self, blockIndex: int | java.jint | java.lang.Integer, /) -> int: ...
    def close(self) -> None: ...
    def connect(self) -> None: ...
    def decrement(self, blockIndex: int | java.jint | java.lang.Integer, value: int | java.jint | java.lang.Integer, /) -> None: ...
    @staticmethod
    def get(tag: android.nfc.Tag, /) -> MifareClassic: ...
    def getBlockCount(self) -> int: ...
    def getBlockCountInSector(self, sectorIndex: int | java.jint | java.lang.Integer, /) -> int: ...
    def getMaxTransceiveLength(self) -> int: ...
    def getSectorCount(self) -> int: ...
    def getSize(self) -> int: ...
    def getTag(self) -> android.nfc.Tag: ...
    def getTimeout(self) -> int: ...
    def getType(self) -> int: ...
    def increment(self, blockIndex: int | java.jint | java.lang.Integer, value: int | java.jint | java.lang.Integer, /) -> None: ...
    def isConnected(self) -> bool: ...
    def readBlock(self, blockIndex: int | java.jint | java.lang.Integer, /) -> java.chaquopy.JavaArrayJByte: ...
    def restore(self, blockIndex: int | java.jint | java.lang.Integer, /) -> None: ...
    def sectorToBlock(self, sectorIndex: int | java.jint | java.lang.Integer, /) -> int: ...
    def setTimeout(self, timeout: int | java.jint | java.lang.Integer, /) -> None: ...
    def transceive(self, data: java.chaquopy.JavaArrayJByte, /) -> java.chaquopy.JavaArrayJByte: ...
    def transfer(self, blockIndex: int | java.jint | java.lang.Integer, /) -> None: ...
    def writeBlock(self, blockIndex: int | java.jint | java.lang.Integer, data: java.chaquopy.JavaArrayJByte, /) -> None: ...

class MifareUltralight(TagTechnology):
    PAGE_SIZE: typing.ClassVar[int] = ...
    TYPE_ULTRALIGHT: typing.ClassVar[int] = ...
    TYPE_ULTRALIGHT_C: typing.ClassVar[int] = ...
    TYPE_UNKNOWN: typing.ClassVar[int] = ...
    def close(self) -> None: ...
    def connect(self) -> None: ...
    @staticmethod
    def get(tag: android.nfc.Tag, /) -> MifareUltralight: ...
    def getMaxTransceiveLength(self) -> int: ...
    def getTag(self) -> android.nfc.Tag: ...
    def getTimeout(self) -> int: ...
    def getType(self) -> int: ...
    def isConnected(self) -> bool: ...
    def readPages(self, pageOffset: int | java.jint | java.lang.Integer, /) -> java.chaquopy.JavaArrayJByte: ...
    def setTimeout(self, timeout: int | java.jint | java.lang.Integer, /) -> None: ...
    def transceive(self, data: java.chaquopy.JavaArrayJByte, /) -> java.chaquopy.JavaArrayJByte: ...
    def writePage(self, pageOffset: int | java.jint | java.lang.Integer, data: java.chaquopy.JavaArrayJByte, /) -> None: ...

class Ndef(TagTechnology):
    MIFARE_CLASSIC: typing.ClassVar[str] = ...
    NFC_FORUM_TYPE_1: typing.ClassVar[str] = ...
    NFC_FORUM_TYPE_2: typing.ClassVar[str] = ...
    NFC_FORUM_TYPE_3: typing.ClassVar[str] = ...
    NFC_FORUM_TYPE_4: typing.ClassVar[str] = ...
    def canMakeReadOnly(self) -> bool: ...
    def close(self) -> None: ...
    def connect(self) -> None: ...
    @staticmethod
    def get(tag: android.nfc.Tag, /) -> Ndef: ...
    def getCachedNdefMessage(self) -> android.nfc.NdefMessage | None: ...
    def getMaxSize(self) -> int: ...
    def getNdefMessage(self) -> android.nfc.NdefMessage | None: ...
    def getTag(self) -> android.nfc.Tag: ...
    def getType(self) -> str: ...
    def isConnected(self) -> bool: ...
    def isWritable(self) -> bool: ...
    def makeReadOnly(self) -> bool: ...
    def writeNdefMessage(self, msg: android.nfc.NdefMessage, /) -> None: ...

class NdefFormatable(TagTechnology):
    def close(self) -> None: ...
    def connect(self) -> None: ...
    def format(self, firstMessage: android.nfc.NdefMessage, /) -> None: ...
    def formatReadOnly(self, firstMessage: android.nfc.NdefMessage, /) -> None: ...
    @staticmethod
    def get(tag: android.nfc.Tag, /) -> NdefFormatable: ...
    def getTag(self) -> android.nfc.Tag: ...
    def isConnected(self) -> bool: ...

class NfcA(TagTechnology):
    def close(self) -> None: ...
    def connect(self) -> None: ...
    @staticmethod
    def get(tag: android.nfc.Tag, /) -> NfcA: ...
    def getAtqa(self) -> java.chaquopy.JavaArrayJByte: ...
    def getMaxTransceiveLength(self) -> int: ...
    def getSak(self) -> int: ...
    def getTag(self) -> android.nfc.Tag: ...
    def getTimeout(self) -> int: ...
    def isConnected(self) -> bool: ...
    def setTimeout(self, timeout: int | java.jint | java.lang.Integer, /) -> None: ...
    def transceive(self, data: java.chaquopy.JavaArrayJByte, /) -> java.chaquopy.JavaArrayJByte: ...

class NfcB(TagTechnology):
    def close(self) -> None: ...
    def connect(self) -> None: ...
    @staticmethod
    def get(tag: android.nfc.Tag, /) -> NfcB: ...
    def getApplicationData(self) -> java.chaquopy.JavaArrayJByte: ...
    def getMaxTransceiveLength(self) -> int: ...
    def getProtocolInfo(self) -> java.chaquopy.JavaArrayJByte: ...
    def getTag(self) -> android.nfc.Tag: ...
    def isConnected(self) -> bool: ...
    def transceive(self, data: java.chaquopy.JavaArrayJByte, /) -> java.chaquopy.JavaArrayJByte: ...

class NfcBarcode(TagTechnology):
    TYPE_KOVIO: typing.ClassVar[int] = ...
    TYPE_UNKNOWN: typing.ClassVar[int] = ...
    def close(self) -> None: ...
    def connect(self) -> None: ...
    @staticmethod
    def get(tag: android.nfc.Tag, /) -> NfcBarcode: ...
    def getBarcode(self) -> java.chaquopy.JavaArrayJByte: ...
    def getTag(self) -> android.nfc.Tag: ...
    def getType(self) -> int: ...
    def isConnected(self) -> bool: ...

class NfcF(TagTechnology):
    def close(self) -> None: ...
    def connect(self) -> None: ...
    @staticmethod
    def get(tag: android.nfc.Tag, /) -> NfcF: ...
    def getManufacturer(self) -> java.chaquopy.JavaArrayJByte: ...
    def getMaxTransceiveLength(self) -> int: ...
    def getSystemCode(self) -> java.chaquopy.JavaArrayJByte: ...
    def getTag(self) -> android.nfc.Tag: ...
    def getTimeout(self) -> int: ...
    def isConnected(self) -> bool: ...
    def setTimeout(self, timeout: int | java.jint | java.lang.Integer, /) -> None: ...
    def transceive(self, data: java.chaquopy.JavaArrayJByte, /) -> java.chaquopy.JavaArrayJByte: ...

class NfcV(TagTechnology):
    def close(self) -> None: ...
    def connect(self) -> None: ...
    @staticmethod
    def get(tag: android.nfc.Tag, /) -> NfcV: ...
    def getDsfId(self) -> int: ...
    def getMaxTransceiveLength(self) -> int: ...
    def getResponseFlags(self) -> int: ...
    def getTag(self) -> android.nfc.Tag: ...
    def isConnected(self) -> bool: ...
    def transceive(self, data: java.chaquopy.JavaArrayJByte, /) -> java.chaquopy.JavaArrayJByte: ...

class TagTechnology(java.io.Closeable):
    def close(self) -> None: ...
    def connect(self) -> None: ...
    def getTag(self) -> android.nfc.Tag: ...
    def isConnected(self) -> bool: ...
