66 Commits

Author SHA1 Message Date
Philip P. Moltmann
9dcb86a48d Add the print service recommendation service
This service connects through the print manager to the print spooler:

PrintSpooler.AddPrintersActivity <-> PrintManager <-> PrintManagerService <-> UserState <-> RemotePrintServiceRecommendationService <-> PrintRecommendationService <-> PrintRecommendationServiceImpl

Hence there is a lot of mindless plumming.

The actual changes are only in the AddPrintersActivity which is extended
to show another list of services: The recommended services.

The PrintServiceRecommendationService is based on the experimenal print
service stubs provider. This provider was contributed the Android by
Mopria. As this services uses Android own network discovery service most
code from the experimental provider goes away. In fact the only logic
left over is the selections of mdns-txt fields to look at and the
printer vendor configuration.

This relies on the Android MDNS to get fixed (Bug: 27696905). This also
does not deal with how to update the recommendation service.

Bug: 24533249
Change-Id: I6edc6e25fc08a50d478b61c71bb8ea158b08624c
2016-03-30 17:21:07 -07:00
Philip P. Moltmann
30b0752ef5 Remove unnecessary strings and labels.
Bug: 27815807
Change-Id: I6388055938afbbadc954c913ce0554f9a4a313e8
2016-03-23 13:32:35 -07:00
Philip P. Moltmann
066bf81b98 Deal with print-preview renderings that do not match the correct number
of pages.

If the printing app declares more pages than the print preview pdf has
we used to throw an exception in the PDFManupulationService. This caused
the bitmap to be never written and the read-bitmap function to hang
forever. This was because read() return 0 meaning "pipe is closed" which
lead to an infinite loop. Now a read of 0 page might cause an exception
if the page is not fully read. This exception then causes the
preview_page_error to be displayed.

Bug: 27556666
Change-Id: I7b9de50dce930629e8d38efd4e2659a00b70cc4e
2016-03-18 10:57:32 -07:00
Philip P. Moltmann
66c96591e2 Add "app printer activity" and always keep the print service state
updated. Also fiddle with the UI to use more standard values.

To be sure the print service state alwasy updated I changed
PrintManager.getPrintServices to return a loader which just wraps a
registerListener/getList/removeListener combo.

I also added a new function to enabled/disable a print service to be
keep all updating logic inside the PrintManagerService->UserState.

Then I changed all code to use this new interface.

Detailed comments:

PrintServiceInfo:
- I had to add the enabled state to the PrintServiceInfo as some users
  of PrintManager.getPrintServices want all services but then display
  different data depending on the enabled state. Of course I could have
  created two PrintManager.getPrintServices-loaders to load the two
  separate list of services. I think it is much easier to add this
  property though. It is updated every time new data is returned to the
  PrintManager.getPrintServices-loader.

AddPrinterActivity:
- This is shown as a dialog-style overlay to indicate that the user will
  return to the select-printers activity. It contains of three list that
  are updated via separate loaders.
- The recommended services will be added later to keep this path set
  small.

PrintActivity:
- There are two small places where we have to update the data when we
  get a new list of print services.
  - In very, very rare conditions it can happen that the print service
    of the current printer gains or looses the "advancedOptions"
    activity
  - If we have no enabled print services we want to show "Add printer"
    instead of "All printers...".
- Also the print registry is not the only loader anymore, hence we have
  to assign loader ids to it to not conflict with the other loaders in
  this activity.
- Small bug in onPrintersChanged: If a printer is selected and the print
  service of this printer gets disabled the holder goes into "removed"
  state which disables the printer. When the print service is then
  enabled again, we forgot to re-enable the holder.

PrinterRegistry:
- The registry assumed that the FusedPrinterProvider was the only loader
  in the activity. This is not true anymore, hence it has to assign the
  appropriate loader ids.
- The FusedPrinterProvider has an internal loader, hence we have to
  forward a loader Id into it.
- The PrintRegistry is only called backed for a single loader, hence no
  need to check the loader-id.

SelectPrinterActivity:
- The AddPrinterDialog was removed as we now have the
  AddPrinterActivity.
- Added a loader for the enabled services to update the empty state.
- Added dedicated loader Id for the PrinterRegistry again.
- If we have no enabled services, the SelectPrinterActivity chainloads
  the AddPrinterActivity as this is the only thing the user can do
  anyway. "Save a click". This should only happen when the activity is
  create the first time.
- Moved the "add printer" from the menu item to the list of printers as
  suggested by UX and Zach.

PrintManagerService, UserState and IPrintManagerParamtersTest:
- As the only place where the print service state is updated is now the
  userstate, we have no more sychronization problems. Whohoo.
- The users can now register for changes to the print services similar
  as they can register for changes to the print jobs.
- UserState.getPrintServices is the only function can exposes any
  knowledge of the print services to the outside world.

Change-Id: I9be2c7300431e06aaff9bdf7eb36120d869b56ac
2016-03-07 09:58:08 -08:00
Philip P. Moltmann
4959caf149 Allow the PDF Printer to "print" non-locale-default paper sizes.
The MediaSizeComparator already sorts the media sizes correctly.

Bug: 12675943
Change-Id: I6fa4b1a8885a60704bc175ec849ea483ffb4bcd8
2016-01-21 15:10:29 -08:00
Philip P. Moltmann
1f46779f5e Display toast when print services are disabled.
Change-Id: Id1ebcbbf39eb558bc15c7c69c03fe8124b9c79d7
2016-01-08 14:03:01 -08:00
Philip P. Moltmann
a1cdb4bacb Use notification grouping for print notification.
Change-Id: Ifb5bc0f233611a056db511b15379165ac6fe0edf
2016-01-07 09:19:54 -08:00
Philip P. Moltmann
bb9f686b40 Allow a print service to specify per printer icons, description and
info-activities

The icon is loaded from the discovery session only when it is displayed
to avoid having to store too many icons in memory.

Also the icons are not maintained in the historical printers. Only if
the printers are available nice icons are shown. A historical printer is
updated with the appropriate properties (including icon) once it becomes
available.

Bug: 24135005
Change-Id: Iec389bab514b024634be8fb5fc8928371cba8740
2015-12-21 09:54:57 -08:00
Philip P. Moltmann
5e54896d0b Show "select a printer" as "destination" the first the the user prints
The Spinner does not support a prompt, hence temporarily hijack the
first element and install an alternate view. Once the Spinner is touched
revert to the old behavior.

If we showed a prompt the views in the spinner cannot be recycled.

Bug: 24132864
Change-Id: Iaf97878f85388a8c6351e716117b16f34919ad84
2015-11-16 12:14:18 -08:00
Philip P. Moltmann
953639cb82 Do not disable the add printer icon and have special empty view if no
print services are enabled

The add printer icon is always visible as this is used for both adding
a printer and adding addition print services

We have three different empty views now:
1. No print services
2. No printers found (not search filter set)
3. No printers found (search filter set)

Bug: 24132367
Change-Id: Ic30812b60986f1e0f023488cefc6aa901ce20824
2015-11-12 11:48:09 -08:00
Philip P. Moltmann
853a6f564a Add a alert that allows the user to approve a print service when
we print using it the first time.

This warning used to be shown when the print settings app was used
to enable a service.

If two warning as shown for the same print service we automcatially
dismiss all dialogs once one dialog is confirmed. Please note that
we are not confirming the printjob as it is unexpeced to have a
single click to confirm multiple print jobs.

Change-Id: I8bb0a49bac2063c1c55e2f24bd34df2c44e2df89
Bug: 24135353
2015-11-09 09:49:26 -08:00
Makoto Onuki
e4bd7c9832 Improve string comment.
Bug 21685729

Change-Id: If6c79730778f399ed0dbf500ef62df3150fbaea6
2015-06-08 12:11:01 -07:00
Makoto Onuki
9f9d70b603 Change option label from "Duplex" to "Two-sided"
Bug 21640154

Change-Id: Icab4754e0aeb23fc4da178e7306f5c7a74108c22
2015-06-04 14:17:44 -07:00
Alan Viverette
7e59bb70a6 Use DeviceDefault (dark) theme for PrintActivity
Bug: 21433656
Change-Id: If90ba72fb5862f0eb583c8e64642920c49c5fea6
2015-05-27 12:17:26 -07:00
Alan Viverette
b9da280ac2 DayNight theme for framework packages
Change-Id: I745f90561c957c83540e75a2886e294633c83be1
2015-05-05 14:09:21 -07:00
Svetoslav
948c9a6393 Add duplex mode support.
This change adds support for duplex printing. The print UI now has a duplex
option which allows the user to choose one of the supported duplex options
by the currently selected printer. The chosen duplex mode is propaged to the
print service that manages this printer.

Change-Id: I807ba9da2723531535c0e1e33f2f4e1b503a54b0
2015-02-04 05:48:48 +00:00
Svetoslav
94ef9e6bc8 Allow more space for the printer spinner to avoid truncation.
The save to PDF option is truncated in Russian. While the printer
name can be arbitrarily long, the Save to PDF printer should not
be truncated.

bug:18546218

Change-Id: Id35bd638c505783a2288c1602960e8d74ec3b882
2014-12-02 13:46:36 -08:00
Svetoslav
e652b02d45 Accessibilty support for the print UI.
bug:15816751

Change-Id: I5dcdbdd0357843b870ddd47d7c41cfba114d194c
2014-09-10 11:54:37 -07:00
Svetoslav
6552bf3da6 Print spooler UI polish and bug fixes.
1. Added an empty state for pages that are being rendered.

2. Fixed a NPA on a binder thread when destoroying the
   remote print adapter.

3. Fixed a rare crash when the print activity gets an
   activity class callback while initializing.

4. Changed the preview pages on phone in land to four.

5. Fixed a flicker from a list of pages to an empty state
   and then back to the list of pages.

bug:15704969
bug:16966145

Change-Id: I0eea2f30a102d8fefcbf90187fa6d8612fb19434

Conflicts:
	packages/PrintSpooler/src/com/android/printspooler/widget/PageContentView.java
2014-09-05 15:21:50 -07:00
Svetoslav
e04dcca593 Update print chooser drop down width.
bug:16324744

Change-Id: I1f0b79ae5da06de97ca80a800537d815ce59bf41
2014-09-03 15:02:14 -07:00
Svetoslav
c404cacd3a Print UI polish.
1. Fixed an issue where input focus is given to the copies
   edit text every other time we expand the options UI. We
   want focus there only if the user touches the control.

   bug:16966145

2. Fixed the all printers list view to have item dividers
   reaching the left and right ends of the list view.

   bug:17288761

3. Fixed an issue where the user can deselect all pages
   which is not only an invalid state but also causes a crash.

   bug:17286198

4. Tweaked the minimal size of the preview in landscape on
   phone to better accomodate the page.

   bug:17288904

5. Fixed a regression introduced by a change from the UI folks.

Change-Id: Ida7dad7eea413295a840028060810b2619c616e8
2014-08-27 18:46:23 -07:00
Alan Viverette
a1fe772bd7 Update material colors
BUG: 17212898
Change-Id: Ic0806db57e88d5143b4241e419970ffeb2468d50
2014-08-25 16:15:06 -07:00
Svetoslav
c558220b07 Update the print spooler theme.
bug:16966145

Change-Id: Ib72642bf8f9002d8bcf9cbfce19fa364b2487876
2014-08-19 17:12:36 +00:00
Svet Ganov
38781bd2c2 Fix some minor print UX bugs.
1. The last row of print options was not visible on a phone.

2. The preview page size on a phone in landscape unusably small.

3. Updated the Save to PDF icon.

bug:16966145

Change-Id: I25ce1572758c62f34344683af2452fb045bb857e
2014-08-13 04:07:21 +00:00
Alan Viverette
ec9d464a59 Update branding colors
BUG: 16845793
BUG: 16851916
Change-Id: I79a15752b5dda8f3c9f159826c61e3d2a6c8bd48
2014-08-07 01:13:23 +00:00
Svetoslav
4bcc4a042c Update the promoted action background color per UX spec
bug:16303010

Change-Id: I54663a0be79b232a29d8fced4a772a32b4d83ae5
2014-07-15 17:33:52 -07:00
Svetoslav
e323dcc31d Drop of the final UX assets for printing.
bug:15705610

Change-Id: I82104a2c0b3d1f4e34f71357b10bed24c0583e71
2014-07-15 17:16:40 -07:00
Svetoslav
73764e347d Update the page count in the print UI to meet new UX.
bug:15912257

Change-Id: I1aa3eb4f7e28d3d9c955f60a570c2f8800fdb88d
2014-07-15 15:56:52 -07:00
Svetoslav
283203e204 Style the all printers activity in material theme.
bug:16301078

Change-Id: Ib96f1e232914802d0b5ddc874be4a4d24a74b685
2014-07-15 14:02:55 -07:00
Svetoslav
fd9369c7ae Update the color pallete of the print options UI.
The print options UI now uses the material theme with custom
branding collors that follow the rest of the system UI.

bug:16301325

Change-Id: I5fefcd95ada0172a028574550dcfdf628f9ce22d
2014-07-15 11:40:09 -07:00
Svet Ganov
9fb7b07c6c Dimming deselected preview pages
For print preview we show the pages the user selected in the range
affordance but the user can optionally further prune pages to be
printed by deselecting them in the preview. The deselected pages
change elevation and now also are dimmed.

bug:15912256

Change-Id: I53357b8e8b592387bbc26b937eda786bb4660d85
2014-07-14 07:31:07 +00:00
Svetoslav
000f88c9e8 Adding back accidentally removed constants
Change-Id: Ib99000da8f31437e7d40eceb69779a0f4c2982e1
2014-07-11 22:54:28 +00:00
Svetoslav
15cbc8a032 Addressing comments for the print preview feature.
Change-Id: Ib72140a912e22f859258d970e0d1c4ef06e807d5
2014-07-11 16:46:46 +00:00
Svet Ganov
525a66b2bb Adding print preview.
This change adds the pring preview part of the new print UX. The
UI has two parts, the top section is the print options and the
bottom section print preview with a list of pages. The user can
interact only with one of them. When print options are expanded
they cover the preview content and a scrim is laid out on top of
the preview. Tapping the scrim collapses the print options. When
the user types in page ranges and closes the options to look at
the preview, the latter is updated to show only these pages. In
the list of pages the user can further prune pages by deselecting
them.

Change-Id: I0b23d2c598afe2a34400ccfa43e4e935af83c72f
2014-07-09 18:43:38 +00:00
Svetoslav
a798c0a984 Refactor printing
Change-Id: I19850154ef2798afff511e4490a268ce38e8cbae
2014-06-06 13:33:16 -07:00
Alan Viverette
6259933ec9 Switch framework Holo references to Quantum.Light
Change-Id: Ib545a143f1959b6104adbc9d594dd626851d90b3
2014-04-01 14:57:39 -07:00
Svetoslav
1c664b6def Add way for the user to forget previously used printers.
We keep track of historical printers but some of them may disappear
forever, say the user changes his printer. In such a case the print
system has no idea that the previous printer will never appear so
this change allows the user to remove historical printers.

In the all printers list the user can now long press on a printer
and if the printer is available he can select it from the context
menu. If the printer was used before regardless if it is active the
user may choose to forget it.

bug:11282742

Change-Id: Idc2dda70920ad045149eea1bcfc75ad1992827e9
2013-11-04 14:25:11 -08:00
Svetoslav
b4fda13476 Complete implementation of the advanced print options.
1. Implemented the advanced printer options integration. Now a print service
    may declare an advanced print options activity which may be launched by
    the user if the current printer supports advanced print options. These options
    are visible only to the print service that added them and it is the only party
    that will interpret the options.

2. Fixed a couple of bugs in the saved print jobs parsing. One was that if there
    are more than one page range, a half of the print job properties was not
    properly parsed. The other was that the media size constructor was using
    incorrect argument order, thus creating a media size with wring width.

3. Fixed and edge case where old print jobs and their docs can get stuck in
    the spooler. If the app did not write the requested pages we were not showing
    an error message, rather just finish the activity without canceling the print
    job and this print job is stuck in the spooler. Now we show an error message
    and the user may retry, cancel. If the user cancels the print job is also
    cancelled, thus no leftover in the spooler.

4. Fixed the background color of the print dialog to meet UX spec.

bug:11241800

Change-Id: I352440bc86aec824a805883fc9579d96a06d11e6
2013-10-28 11:44:07 -07:00
Svetoslav Ganov
ed513d7e4a All printers list has incorrect padding and item height.
1. We were using the layout for the printer drop down from the
   print dialog as the list item in the all printers activity.
   This layout was not high enough. Now we have a separate
   layout for the drop down and for the list. Note that they
   are almost identical but this is better that writing java
   code to lookup the height from the theme and change it
   programatically since the java code is almost half the size
   of the layout and leads to spreading the logic in both the
   layout file and the java code.

2. The padding of the printers list was not correct. Now it
   mimics the bahavior in settings where we change the padding
   based on orientation.

bug:11261157

Change-Id: I8507c4ee86e9196fe1777cf9577f1886ccfbb1ad
2013-10-17 10:33:14 -07:00
Svetoslav Ganov
caff38821a Added UI for errors during layout and write.
1. If an error happens during layout or write we show an error
   message with the string provided by the application which
   has an OK button to retry or tap outside to cancel.

2. Updated the targed and min SDK version for the PrintSpooler.

bug:11127269

Change-Id: I4301cf3716119b1e33b95347a8451fc1c128343b
2013-10-11 10:04:02 -07:00
Svetoslav Ganov
a18661d592 Coalescing multiple print job notifications.
1. We used to show a single notificaiton for every print job but
   this is against th UX guidelines. Since we have to lead by
   example, this change adds coalescing of multiple notifications.

bug:11155212

2. Print job state callback in the PrintManager now correctly
   invoked on the main thread.

bug:10983508

Change-Id: I906e9e62198fa37cb4d2f71fce07ed475d61e1bd
2013-10-09 23:43:11 -07:00
Svetoslav Ganov
b20d63a671 Make the print dialog floating.
The print dialog was full-screen which was not really needed and was
causing the dialog to jump instead of animate up/down when the IME
shows/hides.

bug:11116648

Change-Id: Ifb46fd80a90948270a1fa9c875258b8d0cdfc111
2013-10-07 18:21:59 -07:00
Svetoslav Ganov
56ddf1ffa5 Polish print dialog accessibility.
bug:10983508

Change-Id: I7391e06b661caac18d04ae279639ff447701f151
2013-10-05 19:56:19 -07:00
Svetoslav Ganov
24c686b8b5 Update all printers activity's empty state and avoid selected printer flicker.
1. Updated the empty state of the all printers activity to show no printers message
   if the user is searching and there are no matches and a searching for printers
   message if the user is not filtering the printers list.

2. Adding the fake PDF printer after the historical printers are loaded to avoid the case
   where we select the PDF printer and immediately after that the most used printer is
   selected resulting in an undesirable UI flicker.

3. Fixed a bug where if the most used printer which is initially considered unavailable
   is reported by the print service as available but the UI is not properly updated
   leaving the user in no way to click on the print button.

bug: 10983508

Change-Id: I60fdb7761332850fd5b9ffc0cb572a6213024dba
2013-10-05 19:18:08 -07:00
Svetoslav Ganov
264c566a7f Update the empty state for the "all printers activity"
The empty state is now showing searching for printers hint if
the user is not searching, otherwise the empty state's hint is
a searching for printers message.

bug:10983508

Change-Id: I3df79c167546998c8055d9ff85efa8b460a15e48
2013-10-05 12:58:22 -07:00
Svetoslav
5ab717f21a Print UI tweaks.
1. The refresh button in a print notification was using
   wrong asset.

2. If the page count is unknown, just not show the page
   count instead unknown.

bug:10983508

Change-Id: I15f1fcbff60fe1f30d37868864da41550bb14487
2013-10-04 17:50:31 -07:00
Svetoslav Ganov
7be27acac9 Print attributes hint not honored.
1. Initially we have a single printer, the fake PDF printer, and
   wait for printers to be discovered. This printer was handling
   only a couple of media sizes. Hence, if the app provides a
   media size hint and the PDF printer does not support it, we
   were essentially ignoring the suggested media size since it
   was not supported by the selected printer and we fell back to
   the default paper size for that printer. The fake PDF printer
   should support all predefined media sizes.

2. The list of available paper sizes was shown in the order they
   are added ignoring the current locale. It is much better user
   experience if the media sizes used in the current locale are
   shown at the top and all others after that. Also the media
   sizes for the current locale should be alphabetically ordered
   so the user can quickly find the desired one.

3. The orientation was reset on media size or printer change.

bug:10564537

Change-Id: Iaa0d42242730ce69cea3effd4d0f4bc087068804
2013-10-04 11:45:15 -07:00
Svetoslav
39e71de6b4 Print UI tweaks as per UX request.
1. Limit the width of the dropdown of the printers list.

2. Add icons the the list in the all pritners activity.

3. Update the empty state view for the all printers activity.

bug:10983508

Change-Id: I19effcf32770fdda278009a060b5170a3f29988e
2013-10-02 19:30:43 -07:00
Svetoslav
976b4e6312 Adding an empty state UI for the printer search activity in the spooler.
The user can select all printers from the print dropdown to get to
a search for printers activity where one can filter out the list
of a available printers. We did not have an empty state UI for the
case when the query yields no printers.

bug:11009053

Change-Id: I6b45517b8a7b319992019a1bf65858319a19a0de
2013-10-01 15:32:57 -07:00
Svetoslav Ganov
6be4c76441 Adding a timeout for waiting to get the selected printer's capabilities.
A print service may choose to provide only the printer info and then when
it is requested to start tracking the state of the printer, the service
should provide the printer capabilities. If the capabilities are not
received within ten seconds we mark the printer as unavailable and stop
tracking it.

bug:10748639

Change-Id: I9171cb5dc116fd321c23a8e4ab55109448e2fc6a
2013-09-27 09:43:32 -07:00