163 Commits

Author SHA1 Message Date
Svetoslav
02dded1a63 Adding timeout if the current printer or its capabilities disappear.
If the current printer becomes unavailable or its capabilities
go away we are scheduling a timeout to declare the printer as
unavailable.

bug:10983508

Change-Id: Iab85cfd35fc0cecc3dd4abac6232347f9da18fb0
2013-10-11 14:02:49 -07:00
Svetoslav
54adee86af Print spooler not starting.
1. In my previous change I fixed a typo in the Java constant with
   intent action to launch the print dialog but failed to updated
   the print spooler manifest.

2. Removed dead code - the user id is no longer needed since the
   spooler is an app that runs per user. Every user has its spooler.
   This code was not referenced from anywhere.

3. Added a default icon to the print spooler.

4. Fixed a bug where if the print history is empty the UI goes
   to the all pritners activity.

bug:11059554

Change-Id: If74c23b418a8c67620ba14435ee7f3b2c4527099
2013-10-11 12:39:47 -07:00
Svetoslav Ganov
f22a767e87 Merge "Added UI for errors during layout and write." into klp-dev 2013-10-11 17:06:12 +00: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
8f34715b94 Merge "Refactor how the print dialog activity is started." into klp-dev 2013-10-11 17:01:15 +00:00
Svetoslav
7bfbbcb04b Refactor how the print dialog activity is started.
1. Before the print job activity was started asyncronously with
   respect to the print call on to the print manager. This was
   creating a situation where the starting activity may finish
   before the print dialog appears which may lead to an orphaned
   print document adapter with no data to print (as the UI is
   is gone), or strange behaviors where the print dialog starts
   on as a separate task.

   To address this the pending intent for starting the print
   dialog is not started by the print spooler since we cannot
   call into it synchronously as we have to start its process
   and bind to the spooler service which leads to jankyness in
   the client app. Now the pending intent is created by the
   print manager service in the synchronous print call so
   from an app's perspective calling print starts the activity.

   The side effect of this design is that the print dialog
   activity may start before the system is bound to the spooler
   service. In such a case the print activity cannot start
   poking the print spooler state as the system registers
   callback to observe the spooler state. To address this
   the print spooler activity disables the UI and also binds
   to the spooler service which happenes immediately after it
   is started. As soon as the print dialog binds to the
   service it starts the UI.

2. Fixed an bug in the printer adapter of the print dialog that
   was leading to a crash if the only item in the adater is the
   all pritners option and it is selected.

3. Piping the package name that started the printing so we can
   pass it to the storage UI as a hint to open the last location
   the app used.

bug:11127269

Change-Id: Ia93820bdae0b0e7600a0930b1f10d9708bd86b68
2013-10-11 09:11:24 -07:00
Baligh Uddin
d32e9b7ffb Merge "Import translations. DO NOT MERGE" into klp-dev 2013-10-11 15:08:10 +00:00
Svetoslav
466c046f20 Merge "Fixing jank when transition from print dialog to generating one." into klp-dev 2013-10-11 01:39:09 +00:00
Baligh Uddin
454d33ad89 Import translations. DO NOT MERGE
Change-Id: I902ff15c7df70eef8986dc2dcfbac59551f085fa
Auto-generated-cl: translation import
2013-10-10 17:47:20 -07:00
Svetoslav
3aa2e2b3ab Fixing jank when transition from print dialog to generating one.
Initially we show the print dialog and when the user presses print
we show a generating dialog with an indefinite spinner and a cancel
button. The transition between the two UIs which are really different
layouts show in the print activity is animated. In the middle of
the animation from print to generating UI there was a jump of the
content and an undesired window animation kicking in. This is a
side effect of changing the activity to floating so now changing the
container size was causing window resize and hence animation. Fun!

bug:10983508

Change-Id: I7d88e073c55863b945cdb50822401592f32d44c3
2013-10-10 16:52:54 -07:00
Svetoslav Ganov
896a9b1726 Merge "Adding missing resourcs for the defaul PDF printer media sizes." into klp-dev 2013-10-10 23:52:07 +00:00
Svetoslav Ganov
4ba9254824 Adding missing resourcs for the defaul PDF printer media sizes.
Some regions have different media size standards and the fake PDF
printer shows the media sizes for the current locale. Interestingly,
these files were skipped in my previous change while I remember
adding them - maybe did not upload the patch.

bug:11147920

Change-Id: I819ab08fbef08305be89e3acf297328b1a0ded11
2013-10-10 00:52:42 -07:00
Svetoslav
ebec46847d Sometimes the print button not enabled and an accessibility fix.
1. Sometimes the print button is not enabled after selecting a printer
   from the all printers activity. This was happening after a printer
   was selected, we had to do a layout due to changed print attributes
   (because of the new printer's capabilities), and the content did not
   change. In this case we did not call the updateUi function which
   enables the print button after layout is completed.

2. The accessibility code in the all printers activity was not checking
   whether accessibility is on and doing some unnecessary work - not sending
   events though but still. Further, the delayed runnable that was
   doing the accessibilty announcements was not removed when the activity
   was paused.

bug:10983508

Change-Id: Ib263116a3e21e4c75a25aa051cecbd9194417319
2013-10-10 07:33:02 +00: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
53e8a26d61 Fix a crash in the select printers activity.
When the search view is attached and detached we announce that
 for accessibility. The trouble is that if the activity is being
 torn down we are trying to access resources from a fragment that
 is detached and the qcrash occurs. This change does not try to
 access resources if the activity is finishing and also we do not
 load resource strings if accessibility is not enabled.

bug:11127814

Change-Id: I4a47a8ed3b6a13544cf17b4395560246a33f0e2d
2013-10-08 12:05:24 -07:00
Svetoslav Ganov
c2242aac0c Merge "Show unavailable printers disabled and grayed out." into klp-dev 2013-10-08 16:34:59 +00:00
Svetoslav Ganov
92f8648ebd Merge "Make the print dialog floating." into klp-dev 2013-10-08 16:32:52 +00:00
Svetoslav Ganov
69b91e0ecb Show unavailable printers disabled and grayed out.
1. If a printer is not available it has to disabled and grayed out.

2. Cancle a print job if the app does not provide the requested pages.

3. Fix current printer selection flicker when the print dialog is
   showing up. Often the current printer is initially set to the user's
   favorite and then it is changed back to the PDF one.

bug:10983508

Change-Id: I8d53eb992cf1c92675ec09f61b2ec272b962fa68
2013-10-08 09:08:19 -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
Baligh Uddin
a44c31bda0 Import translations. DO NOT MERGE
Change-Id: I107cb20c67c52a5d2c6d82cb31f5ac41a75cdf4d
Auto-generated-cl: translation import
2013-10-07 09:20:44 -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 Ganov
0ea7d1e869 Update the "add print service" dialog as per UX spec.
The dialog button is now the last item in the adapter if the
search for print service settings is not empty and resolves
to an intent.

bug:10983508

Change-Id: I348e1ede1097d6f3b78c72e871bf3097b99004b6
2013-10-05 11:56:01 -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
331f9e79ad Merge "Print attributes hint not honored." into klp-dev 2013-10-04 22:08:25 +00: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
Baligh Uddin
3eb6b8d626 Import translations. DO NOT MERGE
Change-Id: Id91951dbb1084dd04fd93aa1cd26b6b558ff33ef
Auto-generated-cl: translation import
2013-10-04 11:02:34 -07:00
Svetoslav Ganov
6bf1029900 Merge "Deleting print job files when we do not have to." into klp-dev 2013-10-04 16:50:53 +00:00
Svetoslav
5c126892ec Merge "Print UI tweaks as per UX request." into klp-dev 2013-10-04 15:58:10 +00:00
Svetoslav Ganov
2b40c83ae1 Deleting print job files when we do not have to.
The print job file name was not properly parsed. This resulted
in incorrect mapping from file to print job, thus deleting the
file when we do not have to.

bug:11069354

Change-Id: I7b8a7a7f98dd77b34119f2a9cd16a6ec3c22b63b
2013-10-04 08:49:32 -07:00
Baligh Uddin
a6b90f39f1 Merge "Import translations. DO NOT MERGE" into klp-dev 2013-10-03 03:40:55 +00: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
913f87ef63 Merge "IndexOutOfBoundsException in the PrintSpoolerService dump." into klp-dev 2013-10-02 22:00:50 +00:00
Svetoslav
b67a637e60 IndexOutOfBoundsException in the PrintSpoolerService dump.
The dump code in PrintSpoolerService was relying on being
called only as a result of "adb shell dumpsys print" which
is apparently wrong. As a result the code was making wrong
assumption about the input arguments.

bug:11046234

Change-Id: Ie38f3cc5f17cac98b808fef6d6bbeaca22a62ef0
2013-10-02 12:40:18 -07:00
Svetoslav
228a7d2a15 Merge "Sometimes printer selection from all printers activity does not work." into klp-dev 2013-10-02 19:15:10 +00:00
Baligh Uddin
82b8c8c73c Import translations. DO NOT MERGE
Change-Id: I4aa7e1ed8ccce520518231a116608bc8e013bb4c
Auto-generated-cl: translation import
2013-10-02 11:12:53 -07:00
Svetoslav
4e4874bb71 Sometimes printer selection from all printers activity does not work.
1. Sometimes selecting a printer from the full printer list does not
   work if the selected printer was not in the initial drop down list
   of the print dialog.

   The reason was that there is a race. We use loaders in the print
   dialog activity and the all printers one. When these loaders are
   stopped we stop printer discovery since we do not want to keep this
   potentially expensive process on going if the activity is paused
   because say the user decide to press home and start playing his
   favorite game while the printers dialog is up. As a result the
   loader does not get printer updates until it is started.

   The loader of the print dialog activity is stopped while the user is
   selecting a printer from the all printers activity whose loader is
   getting discovered recent printers. Now when the user selects a printer
   the loader of the print dialog activity is started but may not get
   the latest printers by the time onActivityResult is called with the
   selected printer. Now we cache the selected printer id and if the
   loader reports it we select that printer.

2. In the print dialog we show only a few of the discovered printers.
   If the user selects a printer from the all printers activity that
   is not in the initial list we shuffle the adapter data to make sure
   the selected printer is in the shown subset. Now if the printers
   change, i.e. the printers loader reports new result we were not
   respecting the reshuffling made before so the short list of
   printers changes yet again.

bug:11034216

Change-Id: I54fe3619e3328b65839d9f4b02309699eae7f8eb
2013-10-01 19:12:27 -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
Baligh Uddin
dd4ce7119f Import translations. DO NOT MERGE
Change-Id: Ie40b704529f71e71f5c384450a79923c68354bb9
Auto-generated-cl: translation import
2013-09-30 09:28:55 -07:00
Svetoslav
d8dbc13b47 Ignore historical printer records for installed services
When loading historical records for previously used printers we
now ignore the ones whose target print service is not installed.

bug:10955652

Change-Id: Ib295e7d88ed3c308ef6d8a11bdc1792ebbb6d526
2013-09-27 18:46:24 -07:00
Svetoslav Ganov
b415525a16 Merge "Print job files and print job records not always cleaned up." into klp-dev 2013-09-28 01:06:51 +00:00
Svetoslav Ganov
c783f6738f Merge "Adding a timeout for waiting to get the selected printer's capabilities." into klp-dev 2013-09-28 00:28:08 +00:00
Svetoslav Ganov
dd68da2741 Print job files and print job records not always cleaned up.
1. We want the files for a print job to be removed as early as possible
   typically because the print job was cancelled, completed, the app
   or the spooler crashed during print job construction. We were keeping
   around in the spooler and hence to disc infos for jobs that are in
   final state since the app that created them may hold a reference to
   a local print job objec whose info it can access to get the latest
   print job state potentially after the job reached final state. The
   issue was that we were persisting to disc created print jobs which
   were during construction which requires careful handling for the
   various cases above. This is tricky and error prone.

   We used to tell the spooler to forget the print jobs infos when the
   app that created them died. The implementation to forget a print
   job was not careful and was nuking currently running print jobs in
   addition to the ones in a terminal state. Further, if the app dies
   before a print job is completed we were left with a stale print
   job in the spooler since we missed the signal to forget it (assuming
   we forget only inactive jobs). These issues suggest that the approach
   is problematic.

   Now we have a cache of print job infos for the jobs an app created.
   This cache is updated when the state of a print jobs changes using
   the new print job state observation code. When the app dies we
   remove the cached jobs for that app. Now if the app calls to get
   the print jobs it gets the cached ones, i.e. the print jobs it
   created during its lifetime, plus the print jobs that are still
   active fetched from the spooler. Note that transient state cannot
   be kept in the spooler since we unbind from it if there is no
   work and it may get killed.

2. Improved the print sub-system logging code to show the cached
   print job infos for apps and also dump the print job PDF file
   names.

bug:10958357

Change-Id: I6f7c1968b6b7ba5be182a10df044ff7ea1fc3a61
2013-09-27 17:26:44 -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
Svetoslav
c335eb4115 Printers in the list of printers change position.
1. The printers in the printers list of settings change position if
   they are updated. The settings app is using hidden platform APIs
   the this change fixes.

2. Enable ProGuard for the PrintSpooler.

3. Added icons on the list of printers so the user knows which
   print service used the printer. Now the user can know when
   he is using cloud print and maybe incurring data costs vs
   local printer discovered by a vendor plug in.

bug:10955751

Change-Id: I292f48b424cb561218fdb424d0388f4d786d8339
2013-09-26 18:49:10 -07:00
Svetoslav Ganov
0ce3e8743c Choosing default paper size for the "Save to PDF" fake printer
Change-Id: I1e2eb73fd1eb3b1e9812155b69b94cba261243c2
2013-09-26 13:54:49 -07:00
Svetoslav Ganov
5cab967bf2 Merge "Adding hidden APIs for observing the print jobs state." into klp-dev 2013-09-26 19:22:20 +00:00
Svetoslav Ganov
3adc49c678 Merge "Disallow range selection if the document has unknown page count." into klp-dev 2013-09-26 19:21:06 +00:00
Svetoslav Ganov
c9cfd605a2 Merge "Missed signal in FusedPrintersLoader." into klp-dev 2013-09-26 19:20:28 +00:00