Loading api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -30463,9 +30463,11 @@ package android.printservice { method protected void onDisconnected(); method protected abstract void onPrintJobQueued(android.printservice.PrintJob); method protected abstract void onRequestCancelPrintJob(android.printservice.PrintJob); field public static final java.lang.String EXTRA_CAN_SELECT_PRINTER = "android.printservice.extra.CAN_SELECT_PRINTER"; field public static final java.lang.String EXTRA_PRINTER_INFO = "android.intent.extra.print.EXTRA_PRINTER_INFO"; field public static final java.lang.String EXTRA_PRINT_DOCUMENT_INFO = "android.printservice.extra.PRINT_DOCUMENT_INFO"; field public static final java.lang.String EXTRA_PRINT_JOB_INFO = "android.intent.extra.print.PRINT_JOB_INFO"; field public static final java.lang.String EXTRA_SELECT_PRINTER = "android.printservice.extra.SELECT_PRINTER"; field public static final java.lang.String SERVICE_INTERFACE = "android.printservice.PrintService"; field public static final java.lang.String SERVICE_META_DATA = "android.printservice"; } api/system-current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -33063,9 +33063,11 @@ package android.printservice { method protected void onDisconnected(); method protected abstract void onPrintJobQueued(android.printservice.PrintJob); method protected abstract void onRequestCancelPrintJob(android.printservice.PrintJob); field public static final java.lang.String EXTRA_CAN_SELECT_PRINTER = "android.printservice.extra.CAN_SELECT_PRINTER"; field public static final java.lang.String EXTRA_PRINTER_INFO = "android.intent.extra.print.EXTRA_PRINTER_INFO"; field public static final java.lang.String EXTRA_PRINT_DOCUMENT_INFO = "android.printservice.extra.PRINT_DOCUMENT_INFO"; field public static final java.lang.String EXTRA_PRINT_JOB_INFO = "android.intent.extra.print.PRINT_JOB_INFO"; field public static final java.lang.String EXTRA_SELECT_PRINTER = "android.printservice.extra.SELECT_PRINTER"; field public static final java.lang.String SERVICE_INTERFACE = "android.printservice.PrintService"; field public static final java.lang.String SERVICE_META_DATA = "android.printservice"; } api/test-current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -30541,9 +30541,11 @@ package android.printservice { method protected void onDisconnected(); method protected abstract void onPrintJobQueued(android.printservice.PrintJob); method protected abstract void onRequestCancelPrintJob(android.printservice.PrintJob); field public static final java.lang.String EXTRA_CAN_SELECT_PRINTER = "android.printservice.extra.CAN_SELECT_PRINTER"; field public static final java.lang.String EXTRA_PRINTER_INFO = "android.intent.extra.print.EXTRA_PRINTER_INFO"; field public static final java.lang.String EXTRA_PRINT_DOCUMENT_INFO = "android.printservice.extra.PRINT_DOCUMENT_INFO"; field public static final java.lang.String EXTRA_PRINT_JOB_INFO = "android.intent.extra.print.PRINT_JOB_INFO"; field public static final java.lang.String EXTRA_SELECT_PRINTER = "android.printservice.extra.SELECT_PRINTER"; field public static final java.lang.String SERVICE_INTERFACE = "android.printservice.PrintService"; field public static final java.lang.String SERVICE_META_DATA = "android.printservice"; } core/java/android/printservice/PrintService.java +23 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package android.printservice; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Activity; import android.app.PendingIntent; import android.app.Service; import android.content.ComponentName; import android.content.Context; Loading @@ -29,6 +31,7 @@ import android.os.Message; import android.os.RemoteException; import android.print.PrintJobInfo; import android.print.PrinterId; import android.print.PrinterInfo; import android.util.Log; import com.android.internal.util.Preconditions; Loading Loading @@ -247,6 +250,26 @@ public abstract class PrintService extends Service { public static final String EXTRA_PRINT_DOCUMENT_INFO = "android.printservice.extra.PRINT_DOCUMENT_INFO"; /** * When the {@link PendingIntent} declared via * {@link PrinterInfo.Builder#setInfoIntent(PendingIntent)} is called this boolean extra * will be filled in if the activity can select the printer. * * @see #EXTRA_SELECT_PRINTER */ public static final String EXTRA_CAN_SELECT_PRINTER = "android.printservice.extra.CAN_SELECT_PRINTER"; /** * If this boolean extra is set to {@code true} in the {@link Activity#setResult(int, Intent) * result data} from the activity specified in * {@link PrinterInfo.Builder#setInfoIntent(PendingIntent)} the printer will be selected. * * @see #EXTRA_CAN_SELECT_PRINTER */ public static final String EXTRA_SELECT_PRINTER = "android.printservice.extra.SELECT_PRINTER"; private Handler mHandler; private IPrintServiceClient mClient; Loading packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java +65 −9 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.printspooler.ui; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Activity; import android.app.LoaderManager; import android.content.ComponentName; Loading @@ -24,13 +25,17 @@ import android.content.Context; import android.content.Intent; import android.content.IntentSender.SendIntentException; import android.content.Loader; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.database.DataSetObserver; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; import android.print.PrintManager; import android.print.PrintServicesLoader; import android.print.PrinterId; import android.print.PrinterInfo; import android.printservice.PrintService; import android.printservice.PrintServiceInfo; import android.provider.Settings; import android.text.TextUtils; Loading Loading @@ -76,6 +81,8 @@ public final class SelectPrinterActivity extends Activity implements private static final int LOADER_ID_PRINT_REGISTRY_INT = 2; private static final int LOADER_ID_ENABLED_PRINT_SERVICES = 3; private static final int INFO_INTENT_REQUEST_CODE = 1; public static final String INTENT_EXTRA_PRINTER = "INTENT_EXTRA_PRINTER"; private static final String EXTRA_PRINTER = "EXTRA_PRINTER"; Loading @@ -83,6 +90,7 @@ public final class SelectPrinterActivity extends Activity implements private static final String KEY_NOT_FIRST_CREATE = "KEY_NOT_FIRST_CREATE"; private static final String KEY_DID_SEARCH = "DID_SEARCH"; private static final String KEY_PRINTER_FOR_INFO_INTENT = "KEY_PRINTER_FOR_INFO_INTENT"; // Constants for MetricsLogger.count and MetricsLogger.histo private static final String PRINTERS_LISTED_COUNT = "printers_listed"; Loading @@ -100,6 +108,12 @@ public final class SelectPrinterActivity extends Activity implements private boolean mDidSearch; /** * Printer we are currently in the info intent for. This is only non-null while this activity * started an info intent that has not yet returned */ private @Nullable PrinterInfo mPrinterForInfoIntent; private void startAddPrinterActivity() { MetricsLogger.action(this, MetricsEvent.ACTION_PRINT_SERVICE_ADD); startActivity(new Intent(this, AddPrinterActivity.class)); Loading Loading @@ -200,6 +214,7 @@ public final class SelectPrinterActivity extends Activity implements if (savedInstanceState != null) { mDidSearch = savedInstanceState.getBoolean(KEY_DID_SEARCH); mPrinterForInfoIntent = savedInstanceState.getParcelable(KEY_PRINTER_FOR_INFO_INTENT); } } Loading @@ -208,6 +223,7 @@ public final class SelectPrinterActivity extends Activity implements super.onSaveInstanceState(outState); outState.putBoolean(KEY_NOT_FIRST_CREATE, true); outState.putBoolean(KEY_DID_SEARCH, mDidSearch); outState.putParcelable(KEY_PRINTER_FOR_INFO_INTENT, mPrinterForInfoIntent); } @Override Loading Loading @@ -353,6 +369,24 @@ public final class SelectPrinterActivity extends Activity implements super.onDestroy(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case INFO_INTENT_REQUEST_CODE: if (resultCode == RESULT_OK && data != null && data.getBooleanExtra(PrintService.EXTRA_SELECT_PRINTER, false) && mPrinterForInfoIntent != null && mPrinterForInfoIntent.getStatus() != PrinterInfo.STATUS_UNAVAILABLE) { onPrinterSelected(mPrinterForInfoIntent); } mPrinterForInfoIntent = null; break; default: // not reached } } private void onPrinterSelected(PrinterInfo printer) { Intent intent = new Intent(); intent.putExtra(INTENT_EXTRA_PRINTER, printer); Loading Loading @@ -418,6 +452,26 @@ public final class SelectPrinterActivity extends Activity implements } } /** * Return the target SDK of the package that defined the printer. * * @param printer The printer * * @return The target SDK that defined a printer. */ private int getTargetSDKOfPrintersService(@NonNull PrinterInfo printer) { ApplicationInfo serviceAppInfo; try { serviceAppInfo = getPackageManager().getApplicationInfo( printer.getId().getServiceName().getPackageName(), 0); } catch (PackageManager.NameNotFoundException e) { Log.e(LOG_TAG, "Could not find package that defined the printer", e); return Build.VERSION_CODES.KITKAT; } return serviceAppInfo.targetSdkVersion; } private final class DestinationAdapter extends BaseAdapter implements Filterable { private final Object mLock = new Object(); Loading Loading @@ -638,16 +692,18 @@ public final class SelectPrinterActivity extends Activity implements LinearLayout moreInfoView = (LinearLayout) convertView.findViewById(R.id.more_info); if (printer.getInfoIntent() != null) { moreInfoView.setVisibility(View.VISIBLE); moreInfoView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { moreInfoView.setOnClickListener(v -> { Intent fillInIntent = new Intent(); fillInIntent.putExtra(PrintService.EXTRA_CAN_SELECT_PRINTER, true); try { startIntentSender(printer.getInfoIntent().getIntentSender(), null, 0, 0, 0); mPrinterForInfoIntent = printer; startIntentSenderForResult(printer.getInfoIntent().getIntentSender(), INFO_INTENT_REQUEST_CODE, fillInIntent, 0, 0, 0); } catch (SendIntentException e) { mPrinterForInfoIntent = null; Log.e(LOG_TAG, "Could not execute pending info intent: %s", e); } } }); } else { moreInfoView.setVisibility(View.GONE); Loading Loading
api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -30463,9 +30463,11 @@ package android.printservice { method protected void onDisconnected(); method protected abstract void onPrintJobQueued(android.printservice.PrintJob); method protected abstract void onRequestCancelPrintJob(android.printservice.PrintJob); field public static final java.lang.String EXTRA_CAN_SELECT_PRINTER = "android.printservice.extra.CAN_SELECT_PRINTER"; field public static final java.lang.String EXTRA_PRINTER_INFO = "android.intent.extra.print.EXTRA_PRINTER_INFO"; field public static final java.lang.String EXTRA_PRINT_DOCUMENT_INFO = "android.printservice.extra.PRINT_DOCUMENT_INFO"; field public static final java.lang.String EXTRA_PRINT_JOB_INFO = "android.intent.extra.print.PRINT_JOB_INFO"; field public static final java.lang.String EXTRA_SELECT_PRINTER = "android.printservice.extra.SELECT_PRINTER"; field public static final java.lang.String SERVICE_INTERFACE = "android.printservice.PrintService"; field public static final java.lang.String SERVICE_META_DATA = "android.printservice"; }
api/system-current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -33063,9 +33063,11 @@ package android.printservice { method protected void onDisconnected(); method protected abstract void onPrintJobQueued(android.printservice.PrintJob); method protected abstract void onRequestCancelPrintJob(android.printservice.PrintJob); field public static final java.lang.String EXTRA_CAN_SELECT_PRINTER = "android.printservice.extra.CAN_SELECT_PRINTER"; field public static final java.lang.String EXTRA_PRINTER_INFO = "android.intent.extra.print.EXTRA_PRINTER_INFO"; field public static final java.lang.String EXTRA_PRINT_DOCUMENT_INFO = "android.printservice.extra.PRINT_DOCUMENT_INFO"; field public static final java.lang.String EXTRA_PRINT_JOB_INFO = "android.intent.extra.print.PRINT_JOB_INFO"; field public static final java.lang.String EXTRA_SELECT_PRINTER = "android.printservice.extra.SELECT_PRINTER"; field public static final java.lang.String SERVICE_INTERFACE = "android.printservice.PrintService"; field public static final java.lang.String SERVICE_META_DATA = "android.printservice"; }
api/test-current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -30541,9 +30541,11 @@ package android.printservice { method protected void onDisconnected(); method protected abstract void onPrintJobQueued(android.printservice.PrintJob); method protected abstract void onRequestCancelPrintJob(android.printservice.PrintJob); field public static final java.lang.String EXTRA_CAN_SELECT_PRINTER = "android.printservice.extra.CAN_SELECT_PRINTER"; field public static final java.lang.String EXTRA_PRINTER_INFO = "android.intent.extra.print.EXTRA_PRINTER_INFO"; field public static final java.lang.String EXTRA_PRINT_DOCUMENT_INFO = "android.printservice.extra.PRINT_DOCUMENT_INFO"; field public static final java.lang.String EXTRA_PRINT_JOB_INFO = "android.intent.extra.print.PRINT_JOB_INFO"; field public static final java.lang.String EXTRA_SELECT_PRINTER = "android.printservice.extra.SELECT_PRINTER"; field public static final java.lang.String SERVICE_INTERFACE = "android.printservice.PrintService"; field public static final java.lang.String SERVICE_META_DATA = "android.printservice"; }
core/java/android/printservice/PrintService.java +23 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package android.printservice; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Activity; import android.app.PendingIntent; import android.app.Service; import android.content.ComponentName; import android.content.Context; Loading @@ -29,6 +31,7 @@ import android.os.Message; import android.os.RemoteException; import android.print.PrintJobInfo; import android.print.PrinterId; import android.print.PrinterInfo; import android.util.Log; import com.android.internal.util.Preconditions; Loading Loading @@ -247,6 +250,26 @@ public abstract class PrintService extends Service { public static final String EXTRA_PRINT_DOCUMENT_INFO = "android.printservice.extra.PRINT_DOCUMENT_INFO"; /** * When the {@link PendingIntent} declared via * {@link PrinterInfo.Builder#setInfoIntent(PendingIntent)} is called this boolean extra * will be filled in if the activity can select the printer. * * @see #EXTRA_SELECT_PRINTER */ public static final String EXTRA_CAN_SELECT_PRINTER = "android.printservice.extra.CAN_SELECT_PRINTER"; /** * If this boolean extra is set to {@code true} in the {@link Activity#setResult(int, Intent) * result data} from the activity specified in * {@link PrinterInfo.Builder#setInfoIntent(PendingIntent)} the printer will be selected. * * @see #EXTRA_CAN_SELECT_PRINTER */ public static final String EXTRA_SELECT_PRINTER = "android.printservice.extra.SELECT_PRINTER"; private Handler mHandler; private IPrintServiceClient mClient; Loading
packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java +65 −9 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.printspooler.ui; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Activity; import android.app.LoaderManager; import android.content.ComponentName; Loading @@ -24,13 +25,17 @@ import android.content.Context; import android.content.Intent; import android.content.IntentSender.SendIntentException; import android.content.Loader; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.database.DataSetObserver; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; import android.print.PrintManager; import android.print.PrintServicesLoader; import android.print.PrinterId; import android.print.PrinterInfo; import android.printservice.PrintService; import android.printservice.PrintServiceInfo; import android.provider.Settings; import android.text.TextUtils; Loading Loading @@ -76,6 +81,8 @@ public final class SelectPrinterActivity extends Activity implements private static final int LOADER_ID_PRINT_REGISTRY_INT = 2; private static final int LOADER_ID_ENABLED_PRINT_SERVICES = 3; private static final int INFO_INTENT_REQUEST_CODE = 1; public static final String INTENT_EXTRA_PRINTER = "INTENT_EXTRA_PRINTER"; private static final String EXTRA_PRINTER = "EXTRA_PRINTER"; Loading @@ -83,6 +90,7 @@ public final class SelectPrinterActivity extends Activity implements private static final String KEY_NOT_FIRST_CREATE = "KEY_NOT_FIRST_CREATE"; private static final String KEY_DID_SEARCH = "DID_SEARCH"; private static final String KEY_PRINTER_FOR_INFO_INTENT = "KEY_PRINTER_FOR_INFO_INTENT"; // Constants for MetricsLogger.count and MetricsLogger.histo private static final String PRINTERS_LISTED_COUNT = "printers_listed"; Loading @@ -100,6 +108,12 @@ public final class SelectPrinterActivity extends Activity implements private boolean mDidSearch; /** * Printer we are currently in the info intent for. This is only non-null while this activity * started an info intent that has not yet returned */ private @Nullable PrinterInfo mPrinterForInfoIntent; private void startAddPrinterActivity() { MetricsLogger.action(this, MetricsEvent.ACTION_PRINT_SERVICE_ADD); startActivity(new Intent(this, AddPrinterActivity.class)); Loading Loading @@ -200,6 +214,7 @@ public final class SelectPrinterActivity extends Activity implements if (savedInstanceState != null) { mDidSearch = savedInstanceState.getBoolean(KEY_DID_SEARCH); mPrinterForInfoIntent = savedInstanceState.getParcelable(KEY_PRINTER_FOR_INFO_INTENT); } } Loading @@ -208,6 +223,7 @@ public final class SelectPrinterActivity extends Activity implements super.onSaveInstanceState(outState); outState.putBoolean(KEY_NOT_FIRST_CREATE, true); outState.putBoolean(KEY_DID_SEARCH, mDidSearch); outState.putParcelable(KEY_PRINTER_FOR_INFO_INTENT, mPrinterForInfoIntent); } @Override Loading Loading @@ -353,6 +369,24 @@ public final class SelectPrinterActivity extends Activity implements super.onDestroy(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case INFO_INTENT_REQUEST_CODE: if (resultCode == RESULT_OK && data != null && data.getBooleanExtra(PrintService.EXTRA_SELECT_PRINTER, false) && mPrinterForInfoIntent != null && mPrinterForInfoIntent.getStatus() != PrinterInfo.STATUS_UNAVAILABLE) { onPrinterSelected(mPrinterForInfoIntent); } mPrinterForInfoIntent = null; break; default: // not reached } } private void onPrinterSelected(PrinterInfo printer) { Intent intent = new Intent(); intent.putExtra(INTENT_EXTRA_PRINTER, printer); Loading Loading @@ -418,6 +452,26 @@ public final class SelectPrinterActivity extends Activity implements } } /** * Return the target SDK of the package that defined the printer. * * @param printer The printer * * @return The target SDK that defined a printer. */ private int getTargetSDKOfPrintersService(@NonNull PrinterInfo printer) { ApplicationInfo serviceAppInfo; try { serviceAppInfo = getPackageManager().getApplicationInfo( printer.getId().getServiceName().getPackageName(), 0); } catch (PackageManager.NameNotFoundException e) { Log.e(LOG_TAG, "Could not find package that defined the printer", e); return Build.VERSION_CODES.KITKAT; } return serviceAppInfo.targetSdkVersion; } private final class DestinationAdapter extends BaseAdapter implements Filterable { private final Object mLock = new Object(); Loading Loading @@ -638,16 +692,18 @@ public final class SelectPrinterActivity extends Activity implements LinearLayout moreInfoView = (LinearLayout) convertView.findViewById(R.id.more_info); if (printer.getInfoIntent() != null) { moreInfoView.setVisibility(View.VISIBLE); moreInfoView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { moreInfoView.setOnClickListener(v -> { Intent fillInIntent = new Intent(); fillInIntent.putExtra(PrintService.EXTRA_CAN_SELECT_PRINTER, true); try { startIntentSender(printer.getInfoIntent().getIntentSender(), null, 0, 0, 0); mPrinterForInfoIntent = printer; startIntentSenderForResult(printer.getInfoIntent().getIntentSender(), INFO_INTENT_REQUEST_CODE, fillInIntent, 0, 0, 0); } catch (SendIntentException e) { mPrinterForInfoIntent = null; Log.e(LOG_TAG, "Could not execute pending info intent: %s", e); } } }); } else { moreInfoView.setVisibility(View.GONE); Loading