Sympton:
If Play Store (com.android.vending) is not installed, printer
recommendation function which guides a user to Play Store is useless.
Root-cause:
Even if Play Store is not installed,
PrintSpooler tries to start an activity for market:// with package
names in Play Store.
Solution:
Hide printer recommendation UI and show "No print services enabled"
if there is no printer service.
Change-Id: I0b2eabbd57bc47c6382f53e610e33252ea359390
The full screen "number" keyboard strips all non-numeric letters
out of the text field.
Bug: 29004437
Change-Id: Ic7e79106a7fcf0716a28061592221557b9d62f52
- Make remove icon more visible by removing the translucency in icon
- Replace remove and check icon by vectors
- unselected pages are now not faded out by being 50% translucent to the
page shadow anymore, they are explcityly faded out by being 50% translucent
to a defined background color
- No need for our own animations as the recyclerview does all the
animations for us
Fixes: 28885729
Change-Id: I70d2db89c4124bf5ef528c65b5f79d189da43857
- Support unbounded ranges, e.g. 4- == 4-pageCount and -2 == 1-2
- Do not allow reverse ranges, i.e. 7-3 is not allowed anymore
- restrict characters that can be typed into field
- force numeric keyboard
- Fix bug that we update the selected pages even if the page ranges are
invalid
Fixes: 13126748
Change-Id: I515d9346ceb152a41b7260792c5dd9bd91b27cab
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
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
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
- gray out printer icons of unavailable printers
- Increase touch target of more into button
- Use same info icon as in the Settings
- Align text correctly in destination drop down
- In general use same layout as generic list-item (as much as possible)
- remove unnecesary color file
Change-Id: I8b0339df0cb6a5130b5530f21c4ef86cb75a683b
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
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
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
If the user input in the print UI is invalid we show an error icon
next to it. The design requires no error message being shown in a
popup but TextView does show the popup all the time.
bug:16966145
Change-Id: I7aa1ec8093bc76e2f440bcb243609e92e049786b
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
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
The "More options" button needed changes to match the
new UX spec. Also fixed some identation issues as well
as a missing marging in the erorr UI.
bug:16301066
Change-Id: I29f0d41915d1816d754f2c6288a7387aafeba2c2
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
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
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
Print jobs in a created state should not be persisted. However,
if a print service sets the tag to a print job that is queued,
we were persisting even print jobs in a created state. This
change adds a simple check while persisting to avoid storing
created print jobs.
bug:11696785
Change-Id: Idf28f3634b91fd5bf345f376114af4ed478ed3c6
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
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
1. There was leftover code in the printers adapter that was
hard coding the item width with no reason to do so.
2. Changed the icon view visibility to invisible to allow
the text of all list items including save to PDF and all
printers to be left aligned.
bug:11225340
Change-Id: I5b51d0d30577699f5cd73c7c58521358653d135b
1. Updated the print spooler icon shown in the action bar
when searching for printers in the all printers activity.
2. If the current printer's capabilities are not immediately
available the page count label in the dialog contained the
argument placeholders.
bug:10983508
Change-Id: Id4f78d6cc31647f043f8e3044ab54f30584d1ebe