15eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavpackage foo.bar.printservice2;
25eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
35eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport android.content.Intent;
45eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport android.net.Uri;
55eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport android.os.AsyncTask;
65eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport android.os.Handler;
75eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport android.os.Looper;
85eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport android.os.Message;
95eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport android.print.PrintAttributes;
105eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport android.print.PrintAttributes.Margins;
115eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport android.print.PrintAttributes.Resolution;
125eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport android.print.PrintAttributes.Tray;
135eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport android.print.PrintJobInfo;
145eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport android.print.PrinterId;
155eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport android.print.PrinterInfo;
165eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport android.printservice.PrintJob;
175eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport android.printservice.PrintService;
185eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport android.util.Log;
195eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport android.widget.Toast;
205eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
215eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport java.io.BufferedInputStream;
225eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport java.io.BufferedOutputStream;
235eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport java.io.File;
245eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport java.io.FileInputStream;
255eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport java.io.FileOutputStream;
265eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport java.io.IOException;
275eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport java.io.InputStream;
285eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport java.io.OutputStream;
295eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport java.util.ArrayList;
305eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavimport java.util.List;
315eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
325eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslavpublic class MyPrintService extends PrintService {
335eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
345eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    private static final String LOG_TAG = MyPrintService.class.getSimpleName();
355eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
365eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    private Handler mHandler;
375eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
385eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    @Override
395eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    protected void onConnected() {
405eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        mHandler = new MyHandler(getMainLooper());
415eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        Log.i(LOG_TAG, "#onConnected()");
425eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    }
435eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
445eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    @Override
455eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    protected void onDisconnected() {
465eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        Log.i(LOG_TAG, "#onDisconnected()");
475eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    }
485eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
495eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    @Override
505eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    protected void onStartPrinterDiscovery() {
515eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        Log.i(LOG_TAG, "#onStartDiscoverPrinters()");
525eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        Message message1 = mHandler.obtainMessage(MyHandler.MESSAGE_ADD_FIRST_FAKE_PRINTER);
535eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        mHandler.sendMessageDelayed(message1, 0);
545eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
555eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        Message message2 = mHandler.obtainMessage(MyHandler.MESSAGE_ADD_SECOND_FAKE_PRINTER);
565eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        mHandler.sendMessageDelayed(message2, 10000);
575eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    }
585eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
595eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    @Override
605eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    protected void onStopPrinterDiscovery() {
615eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        Log.i(LOG_TAG, "#onStopDiscoverPrinters()");
625eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    }
635eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
645eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    @Override
655eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    public void onPrintJobQueued(final PrintJob printJob) {
665eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        Log.i(LOG_TAG, "#onPrintJobPending()");
675eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        PrintJobInfo info = printJob.getInfo();
685eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        final File file = new File(getFilesDir(), info.getLabel() + ".pdf");
695eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        if (file.exists()) {
705eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav            file.delete();
715eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        }
725eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
735eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav            @Override
745eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav            protected Void doInBackground(Void... params) {
755eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                InputStream in = new BufferedInputStream(
765eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        new FileInputStream(printJob.getData()));
775eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                OutputStream out = null;
785eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                try {
795eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                    out = new BufferedOutputStream(new FileOutputStream(file));
805eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                    final byte[] buffer = new byte[8192];
815eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                    while (true) {
825eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        final int readByteCount = in.read(buffer);
835eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        if (readByteCount < 0) {
845eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                            break;
855eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        }
865eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        out.write(buffer, 0, readByteCount);
875eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                    }
885eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                } catch (IOException ioe) {
895eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                    /* ignore */
905eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                } finally {
915eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                    try {
925eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        in.close();
935eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                    } catch (IOException ioe) {
945eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                       /* ignore */
955eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                    }
965eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                    if (out != null) {
975eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        try {
985eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                            out.close();
995eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        } catch (IOException ioe) {
1005eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                           /* ignore */
1015eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        }
1025eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                    }
1035eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                }
1045eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                return null;
1055eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav            }
1065eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
1075eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav            @Override
1085eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav            protected void onPostExecute(Void result) {
1095eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                file.setExecutable(true, false);
1105eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                file.setWritable(true, false);
1115eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                file.setReadable(true, false);
1125eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
1135eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                Intent intent = new Intent(Intent.ACTION_VIEW);
1145eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                intent.setDataAndType(Uri.fromFile(file), "application/pdf");
1155eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
1165eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                startActivity(intent, null);
1175eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
1185eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                if (printJob.isQueued()) {
1195eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                    printJob.start();
1205eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                }
1215eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
1225eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                PrintJobInfo info =  printJob.getInfo();
1235eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                Toast.makeText(MyPrintService.this,
124a418a884ba18db17cd8df4b82fae60b485205406Svetoslav Ganov                        "Printer: " + info.getPrinterId().getName()
1255eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        + " copies: " + info.getAttributes().getCopies(),
1265eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        Toast.LENGTH_SHORT).show();
1275eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
1285eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                if (printJob.isStarted()) {
1295eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                    printJob.complete();
1305eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                }
1315eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav            }
1325eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        };
1335eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        task.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, (Void[]) null);
1345eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    }
1355eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
1365eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    private void addFirstFakePrinter() {
1375eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        PrinterId printerId = generatePrinterId("1");
1385eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        PrinterInfo printer = new PrinterInfo.Builder(printerId, "Printer 1")
1395eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .setStatus(PrinterInfo.STATUS_READY)
1405eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .setMinMargins(new Margins(0, 0, 0, 0), new Margins(0, 0, 0, 0))
1415eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .addMediaSize(PrintAttributes.MediaSize.ISO_A2, false)
1425eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .addMediaSize(PrintAttributes.MediaSize.ISO_A3, false)
1435eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .addMediaSize(PrintAttributes.MediaSize.ISO_A4, false)
1445eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .addMediaSize(PrintAttributes.MediaSize.ISO_A5, false)
1455eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .addMediaSize(PrintAttributes.MediaSize.ISO_A6, false)
1465eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .addMediaSize(PrintAttributes.MediaSize.NA_LETTER, true)
1475eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .addResolution(new Resolution("R1", getPackageName(),
1485eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        R.string.resolution_600x600, 600, 600), true)
1495eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .addInputTray(new Tray("FirstInputTray", getPackageName(),
1505eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        R.string.input_tray_first), false)
1515eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .addOutputTray(new Tray("FirstOutputTray", getPackageName(),
1525eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        R.string.output_tray_first), false)
1535eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .setDuplexModes(PrintAttributes.DUPLEX_MODE_NONE
1545eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        | PrintAttributes.DUPLEX_MODE_LONG_EDGE
1555eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        | PrintAttributes.DUPLEX_MODE_SHORT_EDGE,
1565eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        PrintAttributes.DUPLEX_MODE_NONE)
1575eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .setColorModes(PrintAttributes.COLOR_MODE_COLOR
1585eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        | PrintAttributes.COLOR_MODE_MONOCHROME,
1595eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        PrintAttributes.COLOR_MODE_COLOR)
1605eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .setFittingModes(PrintAttributes.FITTING_MODE_NONE
1615eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        | PrintAttributes.FITTING_MODE_FIT_TO_PAGE,
1625eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        PrintAttributes.FITTING_MODE_NONE)
1635eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .setOrientations(PrintAttributes.ORIENTATION_PORTRAIT
1645eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        | PrintAttributes.ORIENTATION_LANDSCAPE,
1655eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        PrintAttributes.ORIENTATION_PORTRAIT)
1665eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .create();
1675eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        List<PrinterInfo> printers = new ArrayList<PrinterInfo>();
1685eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        printers.add(printer);
169a418a884ba18db17cd8df4b82fae60b485205406Svetoslav Ganov        addPrinters(printers);
1705eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    }
1715eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
1725eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    private void addSecondFakePrinter() {
1735eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        PrinterId printerId = generatePrinterId("2");
1745eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        PrinterInfo printer = new PrinterInfo.Builder(printerId, "Printer 2")
1755eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .setStatus(PrinterInfo.STATUS_READY)
1765eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .setMinMargins(new Margins(0, 0, 0, 0), new Margins(0, 0, 0, 0))
1775eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .addMediaSize(PrintAttributes.MediaSize.ISO_A4, true)
1785eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .addMediaSize(PrintAttributes.MediaSize.ISO_A5, false)
1795eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .addResolution(new Resolution("R1", getPackageName(),
1805eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        R.string.resolution_200x200, 200, 200), true)
1815eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .addResolution(new Resolution("R2", getPackageName(),
1825eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        R.string.resolution_300x300, 300, 300), false)
1835eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .addInputTray(new Tray("FirstInputTray", getPackageName(),
1845eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        R.string.input_tray_first), false)
1855eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .addInputTray(new Tray("SecondInputTray", getPackageName(),
1865eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        R.string.input_tray_second), true)
1875eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .addOutputTray(new Tray("FirstOutputTray", getPackageName(),
1885eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        R.string.output_tray_first), false)
1895eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .addOutputTray(new Tray("SecondOutputTray",  getPackageName(),
1905eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        R.string.output_tray_second), true)
1915eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .setDuplexModes(PrintAttributes.DUPLEX_MODE_NONE
1925eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        | PrintAttributes.DUPLEX_MODE_LONG_EDGE
1935eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        | PrintAttributes.DUPLEX_MODE_SHORT_EDGE,
1945eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        PrintAttributes.DUPLEX_MODE_SHORT_EDGE)
1955eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .setColorModes(PrintAttributes.COLOR_MODE_COLOR
1965eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        | PrintAttributes.COLOR_MODE_MONOCHROME,
1975eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        PrintAttributes.COLOR_MODE_MONOCHROME)
1985eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .setFittingModes(PrintAttributes.FITTING_MODE_FIT_TO_PAGE
1995eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        | PrintAttributes.FITTING_MODE_NONE,
2005eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        PrintAttributes.FITTING_MODE_FIT_TO_PAGE)
2015eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .setOrientations(PrintAttributes.ORIENTATION_PORTRAIT
2025eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        | PrintAttributes.ORIENTATION_LANDSCAPE,
2035eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                        PrintAttributes.ORIENTATION_LANDSCAPE)
2045eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                .create();
2055eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        List<PrinterInfo> printers = new ArrayList<PrinterInfo>();
2065eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        printers.add(printer);
207a418a884ba18db17cd8df4b82fae60b485205406Svetoslav Ganov        addPrinters(printers);
2085eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    }
2095eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
2105eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    private final class MyHandler extends Handler {
2115eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
2125eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        public static final int MESSAGE_ADD_FIRST_FAKE_PRINTER = 1;
2135eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        public static final int MESSAGE_ADD_SECOND_FAKE_PRINTER = 2;
2145eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
2155eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        public MyHandler(Looper looper) {
2165eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav            super(looper, null, true);
2175eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        }
2185eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav
2195eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        @Override
2205eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        public void handleMessage(Message message) {
2215eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav            switch (message.what) {
2225eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                case MESSAGE_ADD_FIRST_FAKE_PRINTER: {
2235eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                    addFirstFakePrinter();
2245eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                } break;
2255eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                case MESSAGE_ADD_SECOND_FAKE_PRINTER: {
2265eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                    addSecondFakePrinter();
2275eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav                } break;
2285eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav            }
2295eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav        }
2305eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav    }
2315eb1dfdd49db31f3b9f79709ddde5957f752e562Svetoslav}
232