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