• Home
  • History
  • Annotate
  • only in /frameworks/base/packages/PrintSpooler/src/com/android/printspooler/model/
History log of /frameworks/base/packages/PrintSpooler/src/com/android/printspooler/model/
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
eaaf0512fcbf03b926cdbbbb7f54df474ecf861a 26-Nov-2014 Svet Ganov <svetoslavganov@google.com> Crash in print spooler when back pressed before content update complted.

We are updating the printed content asynchronously. If the user cancels
printing before the first update is complete the spooler components are
in a destroyed state but we attempt to handle the completed update resulting
in a crash. Now if printing is cancelled we ignore the update result.

bug:18525491

Change-Id: I1ef47a17de19896cba2c7a1dd2bfc205065e0a5a
ageContentRepository.java
c80814e70aea8940d0d43cd7170baae8c0c4e8e3 24-Nov-2014 Svet Ganov <svetoslavganov@google.com> Lockup in the print spooler.

A recent change modified the way we destroy the remote renderer from
asynchronous to synchronous. This caused problems since it was possible
that the remote rendering service is unbound while we are reading the
contents of a rendered page. As a result the reader was blocking on I/O
and the print spooler was getting into a locked state that required a
restart of its process. Now the remote renderer is destroyed
asynchronously.

bug:18498626

Change-Id: I1312bf808f30430728b4038dd4be43c55d2be825
ageContentRepository.java
f6cd14dbc99b38af7afe1e5f72347395603d7de2 20-Nov-2014 Svet Ganov <svetoslavganov@google.com> Print spooler crash when printing after a rotation.

1. Available printers are provided by a loader driven by the activity
lifecycle. After a rotation of an app that does not handle rotation
the print activity is destroyed in a delayed fashion. When another
print task is started the loader of the destroed activity gets two
cancellations, one when the activity is stopped and one when it is
destroyed but when the second cancellation happens the loader has a
bad state that it is loading while it is not and a NPE occurs.

2. If a rotation happens early before the print activity is fully initialized
(there are asyncrconous operations that take place) we get a NPE as
the print preview controller is not created yet.

3. A lockup of the print preview process occurs if the print print
activity is destroyed after we initiated binding to the rendering
service but before we receive the remote interface. In this case no
remote service is received as exepcted since we already unbound from
it resulting in a missed signal.

bug:18238590

Change-Id: I81817d81702f649ded97dfbab7d7bba28f22fa91
ageContentRepository.java
fce84f035c35606c5707e735f503f7bdcfd5b2a1 01-Nov-2014 Svet Ganov <svetoslavganov@google.com> Crash apps that print malformed or password protected PDFs.

If apps are writing malformed content (typically not a PDF file) or if the
PDF content they provide to the print system is password protected, are now
crashed as both of these are app bugs.

bug:17636435

Change-Id: Ifce6a3199e587448dd38f6a84290a965c24b698b
penDocumentCallback.java
ageContentRepository.java
emotePrintDocument.java
7c053c1e414c77ae28adb90390027e21ce57bc5e 29-Oct-2014 Svetoslav <svetoslavganov@google.com> Print preview disappearing if printer is changed.

This is a regression caused by my previous patch.

Change-Id: I80a0b4d880fd4e48e6a44fac303a4c8204e8ec0d
ageContentRepository.java
b32f04b785306f06d7d07b824fb8dcc1b4a61aa6 25-Oct-2014 Svet Ganov <svetoslavganov@google.com> Merge "Printing from two apps at the same time not working." into lmp-mr1-dev
99a82437ed8e0537d9a355a124d2bb30aea46ad8 25-Oct-2014 Svet Ganov <svetoslavganov@google.com> Printing from two apps at the same time not working.

When printing from two apps at the same time the second print UI is
getting stuck. There were a couple of issues here:

AdapterView was not notifying for item selection if the data changes
after scheduling a dalayed selection notification and the notification
execution. The code assumed that a layout pass will occur and posponed
the notification after the layout pass but it is not guaranteed that
such a layout pass will occur. Now we delay only if a layout pass is
being scheduled.

Also when binding to the PDF rendering service the print spooler was
using the same intent and as a result two print activites were getting
the same renderer instance while they should get separate ones. Now
we use different data in the intent to ensure we get separate renderer
instances.

Change-Id: I6aa7c7b041957804b4273549dd837a6d70064efc
ageContentRepository.java
4237c92d850b7fb0fa0be15df94e4d1689e353fc 24-Oct-2014 Svet Ganov <svetoslavganov@google.com> Crash in print spooler if printing app killed from recents.

If the printing app with the print UI on top is killed from recents we get
a crash because: 1) the remote print document was not transitioned to a
failed state if the printing app dies (this is an unrecoverable failure);
2) the print preview controller was destroyed asyncronosly during which it
also asynchronously disconnects from the rendering service which however
happens after the system has already cleaned up all connections of the print
UI activity as it is being destoryed.

bug:18109386

Change-Id: If6200b14a8aa90622228bbb659e9c4962226f561
ageContentRepository.java
rintSpoolerService.java
emotePrintDocument.java
d23bfa9d42c477970189a96d4562d627d609e604 24-Sep-2014 Svetoslav <svetoslavganov@google.com> Print spooler should not crash if fed non-PDF content.

It is possible that a buggy app breaks the contract and provides
content to be printed in format other than PDF. This was leading
to a crash in the print spooler. This change fixes the crash and
shows a user friendly error message.

bug:17642690

Change-Id: I5a4acb06080a152562655da6851467b3e71d8658
ageContentRepository.java
254361f136aa9461e16f11f0170fde05e83a1b92 24-Sep-2014 Svetoslav <svetoslavganov@google.com> Print spooler crash on back before first layout is complete.

If the user presses back before the remote print document
update has completed we get a crash. The reason is that
after the update completion we were trying to finish the
activity if we are in a cancelled state but this is not
needed as we aready handled the back key so we will finish.
Handling finish twice was creating the problem as classes
with lifecycles are not designed to be used after being
finished. In particular, we were calling doFinish() twice.

bug:17630561

Change-Id: If418f237a2def7c8e4a072ac8826283f4dd7fc85
ageContentRepository.java
cf3a86b55981313e1fdfafbef89ab5ba7276a862 22-Sep-2014 Svetoslav <svetoslavganov@google.com> Loosen the constraint for releasing a shared file.

In the spooler we have the renderer reading a file to visualize
content and the app writing a file to produce the content. Since
we have to swap the file under the renderer we have a mutex file
provider that both parties can request, use when released, and
release when required. This enables us to request the file which
closes the renderer and when the renderer is closed ask the app
to write some more pages, then open the renderer, and so on. The
mutex file provider was throwing of a thread that does not own
the file thries to relase it which is not needed, this should be
just a nop.

bug:17607134

Change-Id: Id6a2ce92d70077f57978b95315648faf02c13c68
utexFileProvider.java
9424b733c7f777fc806a751a7f00d234c11c0e7c 19-Sep-2014 Svetoslav <svetoslavganov@google.com> Fix a print spooler crash when printing.

The spooler communicates with he remote PDF renderer asynchronously.
When print is confirmed we close the renderer, destroy it, and unbind
from its service. If we unbind from the service after the print activiy
is finished we get a crash. The bug was that we did not wait until we
disconnect from the remote renderer before finishing the print activity.

bug:17583115

Change-Id: I55b0135f9c5658b3a4fda2901b8b3bdef044e211
ageContentRepository.java
0d2d9637ed4f46062d508cfa7da0e9776fc444f8 18-Sep-2014 Svetoslav <svetoslavganov@google.com> Page content sometimes missing in preview when scrolling.

Removed the restriction for the page content providers to
be singletons as the RecyclerView may hold on views with
providers and ask us to bind other views for the same page.
Note that the views that RecyclerView is holding will be
soon rebound or recycled just they are not at the time we
bind other views for the same position. We were guarding
against this but caused some pages not appearing sometimes
on scrolling. Also now keeping the media size and magins
of recycled page view (will be updated if needed on
rebinding) or avoid changes of the background to null as
setting it to not null later causes an undesired layout pass.

bug:17537922

Change-Id: If029f6c413e15d4f5c1ba1ac5e4d52ad2cad5904
ageContentRepository.java
7fd5ada98aa9e035682531d9fe25633fdd24a058 16-Sep-2014 Svetoslav <svetoslavganov@google.com> Page content sometimes disappears when scrolling a long doc in print preview.

The operations of the remote renderer have to be performed in order, open,
render some pages, close. One of the tasks was executed on the wrong executor
resuling in a race and an occassional bad state.

Also fixed a NPE if the preview list is flinged and then the user presses
back.

bug:17537922

Change-Id: I5048078ba2b875a2a8335f3a4324afaa34d014a2
ageContentRepository.java
2047df6f5f6af14cdb93f220c0329f1bff7a43ff 13-Sep-2014 Svetoslav <svetoslavganov@google.com> Merge "Page content sometimes missing while scrolling." into lmp-dev
05ff998fd86eff15e91694bc205ea0af0de83284 13-Sep-2014 Svet Ganov <svetoslavganov@google.com> Fix a crash in print spooler.

A recent bug fix exposed another one where we were not updating
the internal state of the remote print document after it finishes
updating. This resulted in a crash on every print.

bug:16966145

Change-Id: I398ff7976533241e3d4cb6cd27f69cdc25e67be9
emotePrintDocument.java
e6ecba59fd618b80dd13f581b625eea420672a0a 12-Sep-2014 Svetoslav <svetoslavganov@google.com> Page content sometimes missing while scrolling.

The logic when a page view to request the content had a logical
error and it was getting in a bad state where it never requested
the content anymore. This change simplifies the logic and minimizes
the kept state.

Removed unnecessary calls to recycle for a bitmap as according
to the graphics folks we should not be calling this API anymore.

bug:16966145

Change-Id: Idda8314b43343136d3b867167261790481116fac
ageContentRepository.java
2fb64a5cb160a2615f07ed669aa5738dbb74ad6c 12-Sep-2014 Svetoslav <svetoslavganov@google.com> Fix crash in spooler if printing app dies.

bug:16966145

Change-Id: I092c489a7f1b4000a96d3f12f2996ccabf734b9a
emotePrintDocument.java
e17123dd6d3666c88b47172b8efc995523b47346 11-Sep-2014 Svetoslav <svetoslavganov@google.com> Fix back button behavior and clean up in print preview activity.

The print preview UI owns and drives the lifecycle of several objects.
These objects were torn down too late resulting in an attempt to use
the activity as a context when it was no longer valid and service unbind
resulting in causing a crash.

Fixed a bug where if the back button is pressed mutiple times when
the print UI is being initialized a crash occurs.

bug:17454041

Change-Id: Ic1455b467586f0ad65f907e2160ec5cfb2d17d05
rintSpoolerProvider.java
emotePrintDocument.java
62ce332c141cf7bc7200c4c87d63e395874fc3ec 05-Sep-2014 Svetoslav <svetoslavganov@google.com> Trim unnecessary pages when printing.

A user may request a subset of the document's pages to be printed.
In this case the expectation is that the resulting document does
not include not selected pages. While print serivices can do the
trimming themselves or the printer may do so, moving, potantually
many, redundant pages is inefficient. The real problem is when
saving to a PDF file where the saved file must not have the pages
the user did not select. This change adds shredding of undesired
pages from the PDF before saving it or passing it to a print service.
:
bug:17285994

Change-Id: I7deba535af99457bea3c118202314f0f3812e809
ageContentRepository.java
6552bf3da60159607d9266eb295ee3c448f6c3de 04-Sep-2014 Svetoslav <svetoslavganov@google.com> Print spooler UI polish and bug fixes.

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
emotePrintDocument.java
def58cbffc32d12445b60ed1a0d8bb81d8dc6625 04-Sep-2014 Svet Ganov <svetoslavganov@google.com> Merge "Switching to raw byte copy of bitmaps for print preview." into lmp-dev
8c07e8d2a370a6d59dfe5150af3b07ff031ac165 04-Sep-2014 Svetoslav <svetoslavganov@google.com> Merge "Fix some print UI issues." into lmp-dev
9e795e19c7f900fb2636c5dff3ba30098da65f1b 03-Sep-2014 Svetoslav <svetoslavganov@google.com> Unregister from the remote renderer only if bound.

bug:8213791

Change-Id: Ia9efa33331437c4db447acf0c510d4cb4932a593
ageContentRepository.java
df6444931b030d3cdd9769e23f16f0a16fe9c654 30-Aug-2014 Svet Ganov <svetoslavganov@google.com> Switching to raw byte copy of bitmaps for print preview.

Using compression and decompression for moving bitmap data
acorss processes is slow as compression is expensive. This
change switches to using direct streaming of the bitmap
data.

bug:15938254

Change-Id: I78bc450031ee60ada4c3b66f14586a73c72ce34f
ageContentRepository.java
6f249835a4ff9e7e7e3ca0190b7ecf72e689656d 03-Sep-2014 Svetoslav <svetoslavganov@google.com> Fix some print UI issues.

1. Fixed a crash when orientation changes and the content
is scrolled due to wrong size bitmap being requested.

2. Closed a file dscriptior that was being left open.

3. Clearing the bitmap before passing it to the renderer to
ensure it is white for pixels not touched when rendering.

4. Removed debug logs.

5. Switched to the correct layout manager for RecyclerView.

bug:16966145

Change-Id: I8ab9d22635c93cac5ff85c6f4b5d82e58cd8df5c
ageContentRepository.java
emotePrintDocument.java
13f542cabd635c55ade5442764cc4a3d2f7880ea 30-Aug-2014 Svet Ganov <svetoslavganov@google.com> Move print rendering in an isolated process.

Security review of the PDF rendering code revealed that it is
not sercure. Therefore, this code must be run in a sandbox.
This change moves the rendering code in an isolated process.

bug:16897933

Change-Id: I711ce42a56892db1837950137bfaa79e1d61a7c4
ageContentRepository.java
9c9888b8c59e35717ecfc32e9b96fb8702ceb480 27-Aug-2014 Svetoslav <svetoslavganov@google.com> Fix a crash in PrintSpooler.

If the user cancels printing we cancel the current
pring operation in the RemotePrintDocument which is
a state machine enforcing valid state transitions.
A valid transition was not allowed: finishing after
canceled.

bug:17182301

Change-Id: Iccf3a78d7dc736a64bf5c44941a8f8064dcd0ec3
emotePrintDocument.java
255dd04271088590fedc46c8e22b2fd4ab142d39 19-Aug-2014 Selim Cinek <cinek@google.com> Added notification color to all system notifications

Bug: 17128331
Change-Id: I81a94510ef51b99916f314c0dd65852426a1fbeb
otificationController.java
5ef522bc19cc9fc1af48cccd2865744228c5ec02 24-Jul-2014 Svetoslav <svetoslavganov@google.com> 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
ageContentRepository.java
a4ab780877808dbee334f7c7cc4acefa0aa313b2 14-Jul-2014 Svet Ganov <svetoslavganov@google.com> 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
otificationController.java
39afc200f299ffd7e6a2a507017c3de2a548f877 12-Jul-2014 Svetoslav <svetoslavganov@google.com> Remove commented out dead code

Change-Id: I3e59d0ee55fd864ea0d8bc5f99cdb74d9b0e49bb
ageContentRepository.java
1710e0318db5db833974e390eb4bde54ab2f3c62 12-Jul-2014 Svetoslav <svetoslavganov@google.com> 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
ageContentRepository.java
15cbc8a03250eafdf947cd8ad4e77f34444d5ba4 11-Jul-2014 Svetoslav <svetoslavganov@google.com> Addressing comments for the print preview feature.

Change-Id: Ib72140a912e22f859258d970e0d1c4ef06e807d5
ageContentRepository.java
525a66b2bb5abf844aff2109bdc9ed819566bece 15-Jun-2014 Svet Ganov <svetoslavganov@google.com> 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
utexFileProvider.java
otificationController.java
ageContentRepository.java
emotePrintDocument.java
a798c0a984f29f7180883a61839f68d2cbf0c6ce 15-May-2014 Svetoslav <svetoslavganov@google.com> Refactor printing

Change-Id: I19850154ef2798afff511e4490a268ce38e8cbae
otificationController.java
rintSpoolerProvider.java
rintSpoolerService.java
emotePrintDocument.java