78 Commits

Author SHA1 Message Date
Svetoslav Ganov
a00271533f Refactoring of the print sub-system and API clean up.
1. Now a user state has ins own spooler since the spooler app is
   running per user. The user state registers an observer for the state
   of the spooler to get information needed to orchestrate unbinding
   from print serivces that have no work and eventually unbinding from
   the spooler when all no service has any work.

2. Abstracted a remote print service from the perspective of the system
   in a class that is transparently managing binding and unbinding to
   the remote instance.

3. Abstracted the remote print spooler to transparently manage binding
   and unbinding to the remote instance when there is work and when
   there is no work, respectively.

4. Cleaned up the print document adapter (ex-PrintAdapter) APIs to
   enable implementing the all callbacks on a thread of choice. If
   the document is really small, using the main thread makes sense.

   Now if an app that does not need the UI state to layout the printed
   content, it can schedule all the work for allocating resources, laying
   out, writing, and releasing resources on a dedicated thread.

5. Added info class for the printed document that is now propagated
   the the print services. A print service gets an instance of a
   new document class that encapsulates the document info and a method
   to access the document's data.

6. Added APIs for describing the type of a document to the new document
   info class. This allows a print service to do smarts based on the
   doc type. For now we have only photo and document types.

7. Renamed the systemReady method for system services that implement
   it with different semantics to systemRunning. Such methods assume
   the the service can run third-party code which is not the same as
   systemReady.

8. Cleaned up the print job configuration activity.

9. Sigh... code clean up here and there. Factoring out classes to
   improve readability.

Change-Id: I637ba28412793166cbf519273fdf022241159a92
2013-07-16 12:59:59 -07:00
Dianne Hackborn
8d044e8bc2 Start combining threads in system process.
This introduces four generic thread that services can
use in the system process:

- Background: part of the framework for all processes, for
work that is purely background (no timing constraint).
- UI: for time-critical display of UI.
- Foreground: normal foreground work.
- IO: performing IO operations.

I went through and moved services into these threads in the
places I felt relatively comfortable about understanding what
they are doing.  There are still a bunch more we need to look
at -- lots of networking stuff left, 3 or so different native
daemon connectors which I didn't know how much would block,
audio stuff, etc.

Also updated Watchdog to be aware of and check these new
threads, with a new API for other threads to also participate
in this checking.

Change-Id: Ie2f11061cebde5f018d7383b3a910fbbd11d5e11
2013-05-02 17:42:40 -07:00
Jim Miller
a75a883fe9 Add explicit userId to AppWidget binder calls
Keyguard currently relies on being in the system process to grab the
given user's widgets.  When we split keyguard into a new process,
it will need to have access to user-specific info to instantiate a
specific user's widgets.  In order to accomplish this, we add an
explicit userid to each binder call as well as new permission
check to allow keyguard access.

This also fixes a potential race condition of having an incorrect user id
due to an async call to change the user.  Every binder call now has a specific
user id. The user id is either the calling process user's id or an explicit
one passed by applications like keyguard. It is created once when an
AppWidgetManager is instantiated and remains for the lifetime of the object.

Fixed bug where widgets sometimes didn't show up for secondary users.

Moved permission check in AppWidgetService into getImplForUser()

Refactored to use userid from context associated AppWidgetManager instance.

Clean up AppWidgetHost to use userId from Context.

Remove redundant userId check in checkPermission since it's handled by
ActivityManager.handleIncomingUser()

Removed redundant userid check.

Upload after rebase...

Change-Id: Iae3e20f2b342c323bb58768b3d22051510f8268b
2013-02-20 15:41:14 -08:00
Amith Yamasani
c566b43d02 Fix crosstalk between users for widgets hosted in lockscreen
This was initially about the Clock widget crashing repeatedly on some
devices with multiple users. Turned out that there were race conditions
when switching users that could result in remote views of one user calling
back to the RemoteViewsAdapter in keyguard that in turn sent an incorrect widget id
to a different user's widget, resulting in a crash.

Since KeyguardHostView is instantiated in the same process for different users,
it needs to carry a user identity to pass along to AppWidgetService so that
remote views services were bound to the correct user and callbacks were attached and
detached properly.

Added some aidl calls that take the userId to do the binding properly. A more
complete fix might be needed in the future so that all calls from Keyguard carry
the user id.

Also, there was a problem in comparing host uid for secondary users, since Settings
for a secondary user has a different uid than keyguard. Not an issue on single-user
systems. Changed the host.uid comparison to accomodate for the secondary user.

Bug: 7450247
Change-Id: Idbc36e3c60023cac74174f6cb7f2b2130dd3052c
2012-11-30 17:28:08 -08:00
Adam Cohen
d9e5af3851 Making sure keyguard and homescreen only display eligible widgets (issue 7550090)
Change-Id: I25acb7bde2e8e5ac3185a009f5c7151b81f0ae19
2012-11-28 16:36:56 -08:00
Michael Jurka
75b5cfb4a4 Delete appWidgetId when removing lockscreen widgets
Bug: 7550012

Change-Id: Ia9f5266256016eb91bfd6a2d5a7f910c42948f1e
2012-11-16 15:22:06 -08:00
Adam Cohen
a1a2f967e2 Pushing state persistence to a background thread
Change-Id: If776bc22c48525ba91dc7e4dd0e27de92612f2f5
2012-11-15 13:44:34 -08:00
Amith Yamasani
b6c171b1af Merge "Do cleanup when Stopping users" into jb-mr1-dev 2012-10-16 21:41:28 -07:00
Amith Yamasani
756901d82b Do cleanup when Stopping users
Mark user 0 as initialized, otherwise it will show up as
uninitialized when viewed from secondary user if never switched to user 0.

Bug: 7301595

Also clean up any users that were in the process of being removed, if device
crashes at a bad time.

Change-Id: Ic16a6c9ccb6a64b7463725f6cc279335a821fcd5
2012-10-15 16:57:26 -07:00
Jeff Sharkey
52801aae89 Protect more service dump() methods.
Bug: 6406965
Change-Id: Ia45a580c1e6f403308e7e540f18f2c0505af0f29
2012-10-15 10:59:51 -07:00
Amith Yamasani
8320de8e29 Fix widget cross-talk between users due to Settings widget
Bug: 7247911
Bug: 7294899

Also did some cleanup of unused code that resulted from refactoring
the app widget service. Fixed a few more ambiguous calls that weren't
using the correct user id.
Added some logging and improved the dump() formatting.

Change-Id: I27abb5c6341458e1e50a2cc9ab67e8de573ab283
2012-10-05 17:24:37 -07:00
Amith Yamasani
8fd96ec2dc Show lockscreen widgets for the current user.
Also shows the owner info and next alarm for the current user.
AppWidgetService now assumes that any widgets running in the system process are for the
current user, so that lockscreen shows widgets for the current user

Bug: 7211754
Bug: 7212421

Change-Id: Iaf0edc60e49af0afe42625c0b2dcf100c9ecc178
2012-09-21 18:10:34 -07:00
Adam Cohen
0aa2d42e87 Adding notion of keyguard widgets
-> Persisting certain appwidget options
-> Adding ability to specify appwidget options on bind
   so as to avoid AppWidgetProvider update call with no
   options.

Change-Id: I5631039f19f1822b8e123b559b6353c880c0192e
2012-09-11 10:53:57 -07:00
Dianne Hackborn
fd8bf5c790 Fix another issue #7097984 java.lang.SecurityException: Permission Denial:
broadcast asks to run as user -1 but is calling from user 0; this requires

Dupped bug of a different problem.

Change-Id: I15f4ab08b81f5f5746ba1cd183dee4f0b1281df5
2012-09-04 18:48:37 -07:00
Dianne Hackborn
20e809870d Add registering for explicit users.
New API to register as an explicit user, which allows you to
also select ALL to see broadcasts for all users.

New BroadcastReceiver API to find out which user the broadcast
was sent to.

Use this in app widget service to handle per-user package broadcasts
and boot completed broadcasts correctly.

Change-Id: Ibbe28993bd4aa93900c79e412026c27863019eb8
2012-09-04 10:39:21 -07:00
Dianne Hackborn
4120375d46 Remove Binder.getOrigCallingUid().
Replaced all remaining places that used it with explicit user
specification.

While doing this, I ran into stuff that was creating PendingIntent
objects (that now need to specify the explicit user they are for),
which are also posting notifications...  but have no way to specify
the user for the notification.

So the notification manager in the system process now also gets a
formal concept of a user associated with the notification, which
is passed in to all the necessary aidl calls.  I also removed the
old deprecated aidl interface for posting/cancelling notifications,
since we now always need a user supplied.

There is more work that needs to be done here, though.  For example
I think we need to be able to specify USER_ALL for a notification that
should be shown to all users (such as low storage or low battery).
Along with that, the PendingIntent creation needs to be tweaked to
be able to handle USER_CURRENT by evaluating the user at the point the
pending intent is sent.

That's for another change, however.

Change-Id: I468e14dce8def0e13e0870571e7c31ed32b6310c
2012-08-31 15:11:13 -07:00
Amith Yamasani
2a00329c6d UserHandle to UserSerialNo mapping
Use AtomicFile for usermanager files.

Added a MANAGE_USERS permission that apps (signature permission) can use
to create/query/modify/remove users.

Change-Id: I5cf232232d0539e7508df8ec9b216e29c2351cd9
2012-08-17 09:06:10 -07:00
Adam Cohen
d2097ebacf Changing app widget "extras" to "options" and another small API Review issue
-> (issue 6427146), (issue 6427861)

Change-Id: Ib69a9b3717a5b62317ec227936bc3b2fd5954043
2012-05-02 09:32:42 -07:00
Michael Jurka
61a5b0160d New API to allow third-party apps to bind widgets
Change-Id: I1a3761c1a0f557a32d4d3bdd0207567fec918ba7
2012-04-24 17:25:08 -07:00
Adam Cohen
e8724c82ab Adding callback for widget size changed, and potentially other extra info
Change-Id: I57738c92b6a0ba68ae66b19a533559470c64e6f1
2012-04-19 18:01:46 -07:00
Amith Yamasani
135936072b User management and switching
Broadcast intents that get sent out when users are added/removed/switched.

More work on generating user-specific information in package manager queries.
APIs to update user name and query a user by id.
Removed Package.mSetStopped and mSetEnabled, since they're not user specific.

User removal:
- Cleanup ActivityManager, PackageManager, WallpaperManager, AppWidgetService
  and AccountManager.
- Shutdown processes belonging to the user.

Don't show vibrate option in long-press power if there's no vibrator.

Lock the screen when switching users, to force unlocking.

Change-Id: Ib23a721cb75285eef5fd6ba8c7272462764038fa
2012-03-27 11:23:01 -07:00
Amith Yamasani
483f3b06ea Package restrictions per user
Packages can be enabled/disabled per user.
This requires maintaining stopped/launched states and
enabled / disabled components and packages per user.

Refactored pm.Settings and PackageSettingsBase to keep
track of states per user.

Migrated the stopped-packages.xml to users/<u>/package-restrictions.xml

Changed intent resolution to handle individual user restrictions.
Bunch of IPackageManager calls now have a userId argument.
Make AppWidgetService handle removals of packages.

Added some tests for pm.Settings and PackageManager.

Change-Id: Ia83b529e1df88dbcb3bd55ebfc952a6e9b20e861
2012-03-22 10:08:24 -07:00
Amith Yamasani
742a671273 Multi-user - 1st major checkin
Switching activity stacks
Cache ContentProvider per user
Long-press power to switch users (on phone)

Added ServiceMap for separating services by user
Launch PendingIntents on the correct user's uid
Fix task switching from Recents list
AppWidgetService is mostly working.

Commands added to pm and am to allow creating and switching profiles.

Change-Id: I15810e8cfbe50a04bd3323a7ef5a8ff4230870ed
2012-02-03 12:01:47 -08:00
Winson Chung
c3f581b047 Workaround for issue where the notifyDatasetChanged call chain is broken when Launcher is killed. (Bug 5703782)
Change-Id: Ic57a7ce85f41d58cd40b7d30eef4a1bf685182e5
2011-12-06 14:21:10 -08:00
Jeff Sharkey
933decaa5e Verify AppWidget ownership during update.
Bug: 5563081
Change-Id: I528ec944d404989bb21b32ef01feb3d35e23d3ad
2011-11-03 11:26:11 -07:00
Adam Cohen
9730031f8a Fixing issue where widgets file was getting blown away, issue: 5036321
Change-Id: If40a9c79f70e11eee935b2dd2614e723423ff3bf
2011-10-12 16:22:08 -07:00
Adam Cohen
7bb9883d05 Adding logging to debug widget deletions
Change-Id: I15a943650f930fd3fb6163c60af85abc2865e684
2011-10-05 18:18:40 -07:00
Jeff Sharkey
15d161f61b Ensure appwidgets are loaded before usage.
Before accessing appwidget details, always ensure that configuration
is loaded from disk.

Change-Id: Ic71dd62fcdb1d1e5f7bae397efa8dce787434ba5
2011-09-01 22:35:19 -07:00
Adam Cohen
bac26a1205 Getting rid of the (hidden) oldName parameter for widgets
Change-Id: I191cf64ed045fd7cb53e106f337cbeab5a914336
2011-08-17 11:37:58 -07:00
Adam Cohen
324afba161 Fixing new minResizeWidth/Height API
Change-Id: I6b57cca32ed7678597e7c0d81dc483ee294537a9
2011-07-22 12:08:55 -07:00
Adam Cohen
1bfaf561b7 Adding resizeMinWidth/Height to AppWidgetProviderInfo
Change-Id: I17dc27829938a3f25a664d8255965cf9b67cb17e
2011-07-19 18:39:40 -07:00
Jeff Brown
10e8971286 Eliminate single-process mode.
Bug: 5010576

Change-Id: Id450dc83efed4897d1e4ff451530fed14457aace
2011-07-08 19:54:07 -07:00
Dianne Hackborn
4912f16087 Fix to clear calling identity when binding a widget.
Change-Id: Id66abc50ec9ee69317b9838f302c4153995664f7
2011-06-15 17:40:44 -07:00
Dianne Hackborn
50469db071 am 7322e557: am a4cfcf10: am 75d6b3c2: Merge "Fix issue #4502672: Wrong xml resources used for homescreen widgets." into honeycomb-mr2
* commit '7322e557cfe42da42779625d69ced2db74a9df90':
  Fix issue #4502672: Wrong xml resources used for homescreen widgets.
2011-06-03 13:17:00 -07:00
Dianne Hackborn
2f0b17573d Fix issue #4502672: Wrong xml resources used for homescreen widgets.
There was a race in the system process between applying the initial
configuration and executing code in higher-level system services
like the app widget service that relies on the config.  For some
reason it starting showing up more after my code changes; it should
now be completely fixed.

Also fix the activity starting window to run in compatibility mode
if its application is going to be in compatibility mode.

And some various cleanup and small fixes.

Change-Id: I0566933bf1bbb4259c1d99a60c0a3c19af1542e5
2011-05-31 18:04:14 -07:00
Adam Cohen
2625feae79 Modifying RemoteViewsFactory interface
-made onDestroy() one way
-moved uncaught exception handling to the application process

Change-Id: I958571a34eaa48b27e441e3a117c109fb2d2c644
2011-03-24 19:50:22 -07:00
Adam Cohen
c2be22cf20 Catching all Exceptions when calling through to RemoteViewsFactory
Change-Id: Ib20c880bb7626565541ab4697317fcfaa2e6b5b7
2011-03-16 16:33:53 -07:00
Adam Cohen
9611f2ea6c Small change to AppWidgetProviderInfo public field name and docs
Change-Id: Ia799cfc1824ccee1f7fd041ae8ecaa1a0395c3f6
2011-02-28 14:53:09 -08:00
Adam Cohen
54a351ed62 Merge "Adding framework support for resizable widgets" 2011-02-25 15:28:29 -08:00
Winson Chung
22bc69de50 Fixing build
Change-Id: I3d60c115190a6e478777229d4851dedc78111c39
2011-02-25 15:14:40 -08:00
Adam Cohen
d2e20de64b Adding framework support for resizable widgets
-> Added resizeMode to the widget xml
-> Fixed an unexposed bug in AppWidgetHost where
   minWidth and minHeight were never being converted
   from complex type to dp

Change-Id: Ibbc4fc6542d095623ac2a40694b6a3dbfeb279ad
2011-02-25 15:10:40 -08:00
Winson Chung
84bbb02021 Fixing issue where RemoteViewsService.onDestroy() was never being called.
Change-Id: I15ad04eee18bc3e09d4846c7f2f2d2d8d168e518
2011-02-25 14:06:47 -08:00
Winson Chung
16c8d8a558 Re-enabling queued unbinding of services after requests to the service. (3394210)
- Fix for crash when detaching from window
- Potential fix for occasional IllegalStateException when updating List based widgets

Change-Id: I3d3f2bb691552a1136111043db686c4926b510c6
2011-01-26 12:09:27 -08:00
Winson Chung
32cf193412 Disabling queued unbinding of RemoteViewsServices until we fix flashing in widgets.
Change-Id: Iee53d4930dc4007df4298a282cdd5101876215a1
2011-01-19 00:52:34 -08:00
Winson Chung
81f39eb6e7 Refactoring app widgets to address security/performance issues.
- Moving the service binding to AppWidgetService to prevent arbitrary apps from binding to widget services
- Requiring RemoteViewsServices to require android.permission.BIND_REMOTEVIEWS permission

Change-Id: Id135bafba998299eb278067712b8a5d8487cfd04
2011-01-18 22:57:09 -08:00
Joe Onorato
d070e89396 Make AppWidgetService handle components enabling and disabling.
Change-Id: Ie6b75cb90be38bbce694ccf2d5a342d7f0172fa4
2011-01-10 17:26:39 -08:00
Adam Cohen
a02fdf1ba0 Adding widget auto-advance capability
Change-Id: I058573f40a48fd7b5c2efa5f1041a1199919a51a
2010-11-10 17:18:37 -08:00
Joe Onorato
267f4d6a22 am 8f0f1b1e: am 274ad982: Merge "Just disable widgets that come from apps on sd cards, because they don\'t work anyway." into gingerbread
Merge commit '8f0f1b1e9defc61c2831e8856b18f2e00cfd789d'

* commit '8f0f1b1e9defc61c2831e8856b18f2e00cfd789d':
  Just disable widgets that come from apps on sd cards, because they don't work anyway.
2010-08-26 15:52:07 -07:00
Joe Onorato
0add80b454 am 32982c70: am cc45381e: Merge "Fix typo that makes apps on sd work better with app widgets." into gingerbread
Merge commit '32982c701cee6f73262200468419b80343a0bea7'

* commit '32982c701cee6f73262200468419b80343a0bea7':
  Fix typo that makes apps on sd work better with app widgets.
2010-08-26 15:52:01 -07:00
Joe Onorato
331fbdc7e9 Just disable widgets that come from apps on sd cards, because they don't work anyway.
Change-Id: I2d7ef4a63bcbd43547e40c01e997d813cc01e800
2010-08-24 17:02:09 -04:00