import typing

import android.app
import android.content
import android.graphics.drawable
import android.os
import android.print_
import java
import java.lang
import java.util

class CustomPrinterIconCallback(java.lang.Object):
    def onCustomPrinterIconLoaded(self, icon: android.graphics.drawable.Icon, /) -> bool: ...

class PrintDocument(java.lang.Object):
    def getData(self) -> android.os.ParcelFileDescriptor | None: ...
    def getInfo(self) -> android.print_.PrintDocumentInfo: ...

class PrintJob(java.lang.Object):
    def block(self, reason: str | java.lang.String, /) -> bool: ...
    def cancel(self) -> bool: ...
    def complete(self) -> bool: ...
    def equals(self, obj: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def fail(self, error: str | java.lang.String, /) -> bool: ...
    def getAdvancedIntOption(self, key: str | java.lang.String, /) -> int: ...
    def getAdvancedStringOption(self, key: str | java.lang.String, /) -> str: ...
    def getDocument(self) -> PrintDocument: ...
    def getId(self) -> android.print_.PrintJobId: ...
    def getInfo(self) -> android.print_.PrintJobInfo: ...
    def getTag(self) -> str | None: ...
    def hasAdvancedOption(self, key: str | java.lang.String, /) -> bool: ...
    def hashCode(self) -> int: ...
    def isBlocked(self) -> bool: ...
    def isCancelled(self) -> bool: ...
    def isCompleted(self) -> bool: ...
    def isFailed(self) -> bool: ...
    def isQueued(self) -> bool: ...
    def isStarted(self) -> bool: ...
    def setProgress(self, progress: float | java.jfloat | java.lang.Float, /) -> None: ...
    @typing.overload
    def setStatus(self, statusResId: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def setStatus(self, status: java.lang.CharSequence, /) -> None: ...
    def setTag(self, tag: str | java.lang.String, /) -> bool: ...
    def start(self) -> bool: ...

class PrintService(android.app.Service):
    EXTRA_CAN_SELECT_PRINTER: typing.ClassVar[str] = ...
    EXTRA_PRINTER_INFO: typing.ClassVar[str] = ...
    EXTRA_PRINT_DOCUMENT_INFO: typing.ClassVar[str] = ...
    EXTRA_PRINT_JOB_INFO: typing.ClassVar[str] = ...
    EXTRA_SELECT_PRINTER: typing.ClassVar[str] = ...
    SERVICE_INTERFACE: typing.ClassVar[str] = ...
    SERVICE_META_DATA: typing.ClassVar[str] = ...
    def __init__(self) -> None: ...
    def attachBaseContext(self, base: android.content.Context, /) -> None: ...
    def generatePrinterId(self, localId: str | java.lang.String, /) -> android.print_.PrinterId: ...
    def getActivePrintJobs(self) -> java.util.List[PrintJob]: ...
    def onBind(self, intent: android.content.Intent, /) -> android.os.IBinder: ...
    def onConnected(self) -> None: ...
    def onCreatePrinterDiscoverySession(self) -> PrinterDiscoverySession: ...
    def onDisconnected(self) -> None: ...
    def onPrintJobQueued(self, arg1: PrintJob, /) -> None: ...
    def onRequestCancelPrintJob(self, arg1: PrintJob, /) -> None: ...

class PrinterDiscoverySession(java.lang.Object):
    def __init__(self) -> None: ...
    def addPrinters(self, printers: java.util.List[android.print_.PrinterInfo], /) -> None: ...
    def getPrinters(self) -> java.util.List[android.print_.PrinterInfo]: ...
    def getTrackedPrinters(self) -> java.util.List[android.print_.PrinterId]: ...
    def isDestroyed(self) -> bool: ...
    def isPrinterDiscoveryStarted(self) -> bool: ...
    def onDestroy(self) -> None: ...
    def onRequestCustomPrinterIcon(self, printerId: android.print_.PrinterId, cancellationSignal: android.os.CancellationSignal, callback: CustomPrinterIconCallback, /) -> None: ...
    def onStartPrinterDiscovery(self, arg1: java.util.List[android.print_.PrinterId], /) -> None: ...
    def onStartPrinterStateTracking(self, arg1: android.print_.PrinterId, /) -> None: ...
    def onStopPrinterDiscovery(self) -> None: ...
    def onStopPrinterStateTracking(self, arg1: android.print_.PrinterId, /) -> None: ...
    def onValidatePrinters(self, arg1: java.util.List[android.print_.PrinterId], /) -> None: ...
    def removePrinters(self, printerIds: java.util.List[android.print_.PrinterId], /) -> None: ...
