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
Removed a duplicate resource also defined in the platform
resources. Added a tint to the print spooler icon.
bug:16568027
Change-Id: I1c0b9a7bd75bc59d1d86653c05d8fc2bb77056c1
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
When printing to a PDF file we get a Uri from the storage APIs
and write the content. Once the file is written to storage the
print job is completed and there is print service involved. Th
spooler was wrongly putting the job in a failed state instead
of a complete state.
bug:16522267
Change-Id: I4741c9b9eb763e118e7dfb2c7c502bd7fc13f7a1
PDF is the only format suppored for printing but a buggy app
can write content in another format which was crashing the
print spooler. Now we are generating an error instead of
crashing.
bug:16487161
Change-Id: Ic59d2ac6d57213f4e8f364659d8dc7df2140e61d
A user can select the pages to print by selecting a range from the
UI after which the selected pages appear in the preview list. Now
the user can further prune pages by clicking on them. If the number
of pages change to two or one the page position and size were not
adjusted. Now after the constraints of desected by clicking pages
are propafated the page size position is also computed.
bug:16297811
Change-Id: I62c0ae8ab5b1d91b120cbf9faa9653ef4ccbd97f
We keep track of previously used printers. It is possible that the name
of a previously used printer changed. In this case we want to change
this printer's name in the historical records to be able to show the
correct name in the UI when loading the history.
bug:13524346
Change-Id: I0a37bd52a564df5a84c816abfcf03db83de93b97
The notification handling broadcast receiver was renamed but the
manifest was not updated, hence the receiver was not registered.
bug:16289408
Change-Id: I094e20e472abff1f926e1dbfbac32f422f498f74
When print options are closed we show a summary and a handle to open
the options panel. Often the user instinctively clicks on the summary
and also the expand handle is a somehow small target. To improve user
experience clicking on the summary also opens the print options.
Change-Id: Ia2f3b80f5acf11b40af864729f67fa29e82729fc
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
We keep track of historically used printers and when the print dialog
is opened we load them. We were selecting the first printer before the
historical ones are loaded which led to a case where the PDF printer
is selected and then a better printer appears but we have the PDF one
selected.
Also we were asking the printer spinner for the current printer but
if the data set of the adapter changes and we ask the spinner for the
selection we get a wrong answer because the adapter and the view are
off sync since the view is updated on the next message.
Change-Id: I0c12d2d3b19227a8f6af6e421b92013ec06cc021
After the preview list is scrolled we are preloading the
pages around the ones that are shown, so now if the user
does a slight adjustment (expected after a scroll) the
pages around are rendered. There was an off by one error
and one of the bitmaps of the shown pages was reused and
as a result the wrong content was shown.
Change-Id: If04aebf46bcc637491221c6218005ecc1a7253d2
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
It is possible that the orientation is chosen before the media size.
The code handling orientation change was wrognly expecting to have
a selected media size all the time resulting in a NPE.
bug:15512333
Change-Id: I9f2786af314641144a24c1d1363c8d2590b0df57
In a rare case it is possible that on write of a print document
adapter is called twice for the same pages with nothing being
changed. This happens if while doing a write we get an update
request which correctly avoids calling layout on the adapter
but does call on write as we ignore that we are waining for the
requested pages to be written. Fun.
Change-Id: I33d7d26c7c4b083dc7b66bf762697b6dafd1ccc4
We have APIs for a print service to declare an activity with custom
print options. In this activity the service can add custom properties
as well as change the standard ones such as pages to print. The ranges
of selected pages from the custom activity was incorrectly parsed
resulting in an off by one error in what is shown to the user and as a
result getting an exception when trying to print.
bug:11719051
Change-Id: Id04c94608178895f1d47381a63133f0eba7645e1
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
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
Layout and write may take some time during which the user can
cancel printing. Currently we wait for the last operation,
being write or layout, to complete before closing the print
dialog. Now in such a scenario we request a cancellation of
the ongoing operation.
bug:11329523
Change-Id: Ia9d747163cc73509369a86c8b5afc83b7ee54859
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. For an app to print it creates a PrintDocumentAdapter implementation
which is passed to the print dialog activity. If the activity that
created the adapter is destroyed then the adapter, which may rely on
the activity state, may be in an invalid state. For example, an app
creates an adapter and calls print resuting in the app activity and
the print dialog activity being stacked. Now the user rotates the
device which triggers the recreating of the activity stack (assume the
app does not handle rotation). The recreated print dialog activity
receives the intent that originally created it with containing the
adapter that was constructed in the context of the old, now destroyed,
app activity instance.
To handle this we are limiting an app to be able to print only from
and activity and when this activity is destroyed we mark the adapter
as invalid which will result in hiding the print dialog activity. Note
that if the app process is killed we already handle this in the print
dialog activiy by registering a death recipient on the adapter binder.
2. In the PrintManager.PrintDocumentAdapterDelegate some of the state is
accessed only on the main thread and some from miltiple threads. The
code was trying to avoid locking for state that is not accessed by
multiple threads but this is error prone and the benefit does not
justify the complexity and added fragility. Now grabbing a lock all
the time.
3. The PrintJobConfigActivity waits for it to bind to the print spooler
service before instantiating its print controller and editor. However,
these can be accessed by invoking some of the activity cycle callbacks.
This change is adding null checks for the case where the activity
callbacks are called before the binding to the spooler is completed.
bug:11242661
Change-Id: Id906b3170e4f0a0553772dfa62686f06fdca0eaf
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
If a printer disappears or we do not get its capabilities, we
show the user a message that the printer is unavailable. This
message was appended after the printer name but they tend to
be very long and the user does not see that the printer is not
available due to ellipsis. Now we append the message after the
subtitle which tends to be much shorter.
bug:10983508
Change-Id: Ib3f7ad3bd82ff6decd49dc45461fb5131338e8c2
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
If a print service reports a printer with no capabilities and then
removes and adds the same printer again with no capabilities we can
call layout with invalid attributes. While the print service should
not do that we must not crash. The reason is that the print dialog
code was lacking a check whether something changed before handling
the change of the current printer. This resulted in calling layout
even though we still do not have the printer capabilities resulting
in passing bogus print attributes to the app.
bug:11216402
Change-Id: Icb9161930a70a7f9ead589a0ab0b4eb35091666f
When selecting print to PDF and then pressing back to return from the
storage UI activity, the print dialog was in a state where nothing
is selected.
bug:10983508
Change-Id: I9c14b5fa18e812104ade6a2eacd626b5f7387111
1. The getActivePrintJobs() method in print service is designed to return
the active print job i.e. ones scheduled to be processed by the print
service. Now the correct list is returned.
2. The listeners for observing the state of print jobs may be called even
after being unregistered. Ex: state change occurs and we schedule a
message on the app's main thread to make the notificaion. Now the app
unregisretes the callback and on the next loop the notification message
is handled.
bug:11200258
Change-Id: I4a497b5c9a7287a22023cafe41ce966d14300ca6
When the user selectes a printer in the UI we ask the print service to start tracking
the printer, i.e. to observe changes of the printer state and capabilities. The callback
for the initially selected printer is called twice which breaks the contract and also
may trigger potentially expensive operations on the print service side.
More precisely the printer does not change and we ask the service to start tracking,
stop tracking, and again start tracking.
bug:11199851
Change-Id: Ib761e6da03f670b3098c69b1c0927177a8e4ae6b