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
* commit 'e1b6b6c5816b321864b6a5d72a46860fda8fa7cd':
Bring deleted files from the dead. These files were dropped by the translation pipelines because they do not contain any translated elements, but in reality they are needed.
These files were dropped by the translation
pipelines because they do not contain any
translated elements, but in reality they
are needed.
Bug: 11226380
This is a resource file cotaining the media sizes for the Catalan
locale. Without it the print spooler crashes all the time for that
locale since it cannot construct the PDF printer correctly.
bug:11226380
Change-Id: I7fa9c9bf4ed073e5f4ddf0d0fe9de4998e3467d4
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
We persist ongoing print jobs so they can be restarted if the device
dies. The data size of the printed document was not persisted to disc.
bug:11199352
Change-Id: I53ef1ee285aa4808917dd6a5c7335226aba1ef0a
When a print service is disabled we assume all print jobs for it failed as we have
no way to know what happens to them. However we are also failing created print jobs,
i.e. ones not given to the service. Such jobs are in process of construction and
the print dialog is up. We should not fail such jobs as the dialog can still modify
their state and potentially select a print from a different service. Therefore, we
leave them alone and they will be failed if when constructed are passed to a
disabled/uninstalled service.
bug:11197432
Change-Id: Ie4fe54327e3e25776b1dd572be2dfafdd700c2e5