141 Commits

Author SHA1 Message Date
Svetoslav
3c238245eb Update the "More options" button in printing.
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
2014-08-20 19:57:16 +00:00
Selim Cinek
255dd04271 Added notification color to all system notifications
Bug: 17128331
Change-Id: I81a94510ef51b99916f314c0dd65852426a1fbeb
2014-08-20 14:25:18 +02:00
Svetoslav
309f6a0e1b Update the print spooler icon.
Removed a duplicate resource also defined in the platform
resources. Added a tint to the print spooler icon.

bug:16568027

Change-Id: I1c0b9a7bd75bc59d1d86653c05d8fc2bb77056c1
2014-08-18 23:37:56 +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
Svetoslav
b59555ca74 Print to PDF putting a pring job in a wrong state.
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
2014-07-24 17:17:07 +00:00
Svetoslav
5ef522bc19 Handle wrong file format when printing.
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
2014-07-24 03:18:47 +00:00
Svetoslav
f8ffa567b5 Updating the save to PDF button icon.
Change-Id: Ie62a22d6e16d15426f10afa0512b0083c52ff507
2014-07-24 01:23:16 +00:00
Yigit Boyar
753c114d84 Update RecyclerView scroll listener to the new API
Bug: 16054949
Change-Id: I264a701e8b298a08f09bb30284099734054d518c
2014-07-18 16:13:14 +00:00
Svetoslav
cc2b210ff8 Merge "Update the promoted action background color per UX spec" into lmp-dev 2014-07-16 02:18:09 +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
38408ff5b7 Remove text selector and hide ime on print options close.
bug:16301754

Change-Id: I69bf09df9976b12c611821737eb4abb794c1df80
2014-07-15 12:56:02 -07:00
Svetoslav
41233447f9 Merge "Drop of the final UX assets for printing." into lmp-dev 2014-07-15 20:35:01 +00:00
Svetoslav
67eb5bbd53 Merge "Update the page count in the print UI to meet new UX." into lmp-dev 2014-07-15 20:33:11 +00:00
Svetoslav
5150bcba8e Merge "Remove text selector and hide ime on print options close." into lmp-dev 2014-07-15 16:05:04 +00:00
Svetoslav
17d734fee4 Page size not always adjusted
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
2014-07-14 13:31:23 -07:00
Svet Ganov
25885ecbe4 Rename historical records if printer name changed.
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
2014-07-14 17:28:01 +00:00
Svet Ganov
a4ab780877 Fix broken actions in print notifications.
The notification handling broadcast receiver was renamed but the
manifest was not updated, hence the receiver was not registered.

bug:16289408

Change-Id: I094e20e472abff1f926e1dbfbac32f422f498f74
2014-07-14 15:43:16 +00:00
Svet Ganov
6f60e56b3c Improve print options click to open behavior.
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
2014-07-14 15:25:13 +00: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
Svet Ganov
48fec5c9a3 Top printer not properly selected.
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
2014-07-14 07:15:34 +00:00
Svetoslav
39afc200f2 Remove commented out dead code
Change-Id: I3e59d0ee55fd864ea0d8bc5f99cdb74d9b0e49bb
2014-07-11 22:49:59 +00:00
Svetoslav
1710e0318d Fix print preview rendered page preloading.
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
2014-07-11 22:23:58 +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
e3bbb3d6c0 Fix NPE in PrintActivity.
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
2014-06-12 10:43:23 -07:00
Svetoslav
a798c0a984 Refactor printing
Change-Id: I19850154ef2798afff511e4490a268ce38e8cbae
2014-06-06 13:33:16 -07:00
Svetoslav
b0d97b87ba PrintSpooler crash if printer is reported to have only one color mode.
bug:11993304

Change-Id: I4932cf1b5b9b89f0cbf97011782ede037e7d814c
2014-01-06 18:00:54 -08:00
Svetoslav
2c1b177dcf Sometimes write may be called twice in a row for the same content.
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
2013-12-20 17:10:49 -08:00
Dave Langemak
c04aa87e4a Merge "Fix incorrent page range parsing when custom print options used." into klp-dev 2013-11-19 16:33:22 +00:00
Svetoslav Ganov
1a85d9fb24 Fix incorrent page range parsing when custom print options used.
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
2013-11-15 21:52:35 -08:00
Svetoslav
885810de69 Created print jobs should not be persisted until they are queued.
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
2013-11-14 18:02:31 -08:00
Svetoslav
c445b3f2cb Merge "Add missing null pointer check in PrintSpoolerService." into klp-dev 2013-11-05 03:33:37 +00:00
Svetoslav
75d28505c8 Add missing null pointer check in PrintSpoolerService.
bug:11474389

Change-Id: I80ea01ba04ab71a212c1f78af62b377110ed072a
2013-11-04 18:26:54 -08: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
d270cb9264 Cancel current work in PrintDocumentAdatper if printing is cancelled.
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
2013-10-31 14:30:58 -07: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
4d4c66dd38 Update the documentaton of the android.print package.
bug:10551786
bug:10551697
bug:10705082
bug:10741641
bug:11318976
bug:10550979
bug:10551761

Change-Id: I46ceb66a69b6d32d6b417356178f67f2e25e891a
2013-10-25 11:33:34 -07:00
Svetoslav Ganov
237575278d Merge "Hide the print dialog if the printing activity is destroyed." into klp-dev 2013-10-19 00:26:44 +00:00
Svetoslav
30d9161b8e Merge "Printer list items have wrong width." into klp-dev 2013-10-18 20:27:06 +00:00
Svetoslav Ganov
858a1850e2 Hide the print dialog if the printing activity is destroyed.
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
2013-10-18 13:12:06 -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
b196106a43 Printer list items have wrong width.
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
2013-10-16 16:45:33 -07:00
Svetoslav
2fa010cf5b Update the message for unavailable printers.
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
2013-10-14 17:36:19 -07:00
Svetoslav Ganov
2f0ec7af06 Update the print spooler action bar icon.
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
2013-10-14 13:49:17 -07:00
Svetoslav
9d843e09ca Layout may be called with invalid print attributes.
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
2013-10-14 13:15:35 -07:00
Svetoslav Ganov
7ff610ee02 The print dialog in bad state after pressing back from prnt to PDF.
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
2013-10-12 17:24:05 -07:00
Svetoslav Ganov
d91cb3ea61 The list of active print jobs in print service retunring wrong result.
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
2013-10-12 16:09:29 -07:00
Svetoslav Ganov
d3c197d972 The callbacks for tracking a printer called more than once without printer change.
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
2013-10-12 14:28:47 -07:00