Commit Graph

549 Commits

Author SHA1 Message Date
Suchi Amalapurapu
aaec779513 Pick up default install location 2010-02-25 14:03:34 -08:00
Dianne Hackborn
2269d1572e Re-arrange android-common so framework no longer links with it.
This is the framework part, moving classes around so the framework
no longer needs to link to android-common.  Makes some APIs public,
others that didn't need to be public are private in the framework,
some small things are copied.
2010-02-25 11:39:33 -08:00
Christopher Tate
3dda518a4f Add 'restoreAnyVersion' attr for apps that want to restore "future" data
If a backup-participating app sets android:restoreAnyVersion="true" in its
manifest <application> tag, then its agent will be invoked for restore
even if the available dataset was created by a later version of the app
than is currently installed on the device.  This will not typically be
a problem for third party applications, since for them the installation
and initial data restore are tightly coupled, but it can cause serious
problems for applications which are both preinstalled on the system
partition and overridden by later updates.  The primary difficulty
that this new attribute addresses is this:

1. User buys a Nexus One, Market self-updates, and the user installs some apps.
At this point the backup data on the server may indicate that the version of
Market which originated its bookkeeping is newer than the stock N1 Market app.
2. User loses their phone, and buys a replacement N1.  At setup time, Market
has not yet had a chance to self-update, so when the restore comes in, it's
tagged as being from "the future" and so the restore is refused.  No apps get
reinstalled.

Bug: 2442127
Change-Id: I076a9553dc613e5c3189350e778315718ed1ed2b
2010-02-24 17:23:54 -08:00
Dianne Hackborn
c3b91fd26a Fix crash in PendingIntentRecord debug output.
Add null checks to a few places to avoid crashes when dumping
debug data.

Also add some sanity checks for accessing content providers in
the activity manager.
2010-02-24 13:12:52 -08:00
Suchi Amalapurapu
cf6eaeaae9 Some framework fixes for apps on sd
change hard coded path in installd
fix tests
Work around for renaming containers.
Do forced unmount when destroying containers.
Force a gc in default container service to release handle to parsed package
and thus avoid getting killed by vold
Some cosmetic changes to PackageManager api.
Unit tests for renaming container for MountService
Remove internal size limit on app to be installed.
2010-02-24 11:31:36 -08:00
Brad Fitzpatrick
25880968cb Reduce SQLiteDatabase and ContentResolver EventLog logging thresholds.
Turns out the database is used a ton, and not particularly quickly, so
these were spamming the logs at their prior 100ms thresholds.  Setting
it to 500ms now.  (still sub-sampled, so should be ~5x less spammy...)
2010-02-22 15:17:49 -08:00
Tobias Haamel
5333288354 Manager for controlling the UI modes.
The ui modes can be controlled with the UiModeManager class, which
is can be retrieved as a system service via getSytemService(Context.UIMODE_SERVICE).

The class is necessary so that CarHome can be unbundled and other apps can
disable the car mode. Its currently a hidden class, since I'm not sure if this
is the best way to provide this functionality to the user.
2010-02-22 21:42:39 +01:00
Dianne Hackborn
21f1bd17b2 Fix issue #2438980: Implement package watcher for voice recognizer service setting
I am getting tired of writing package monitor code, realized this is missing in
a number of places, and at this point it has gotten complicated enough that I
don't think anyone actually does it 100% right so:

Introducing PackageMonitor.

Yes there are no Java docs.  I am still playing around with just what this
thing is to figure out what makes sense and how people will use it.  It is
being used to fix this bug for monitoring voice recognizers (integrating the
code from the settings provider for setting an initial value), to replace
the existing code for monitoring input methods (and fix the bug where we
wouldn't remove an input method from the enabled list when it got
uninstalled), to now monitor live wallpaper package changes (now allowing
us to avoid reverting back to the default live wallpaper when the current
one is updated!), and to monitor device admin changes.

Also includes a fix so you can't uninstall an .apk that is currently enabled
as a device admin.

Also includes a fix where the default time zone was not initialized early
enough which should fix issue #2455507 (Observed Google services frame work crash).

In addition, this finally introduces a mechanism to determine if the
"force stop" button should be enabled, with convenience in PackageMonitor
for system services to handle it.  All services have been updated to support
this.  There is also new infrastructure for reporting battery usage as an
applicatin error report.
2010-02-22 11:27:52 -08:00
Christopher Tate
1bb6906c7a Automatically restore app data at install time
When an application being installed defines a backupAgent in its manifest, we
now automatically perform a restore of the latest-known-good data for that app.
This is defined as "data backed up by this app from this handset, if available;
otherwise data for this app as it existed when the device was initially
provisioned."  If neither option exists for the app, no restore action is
taken.

The CL involves major changes in the Backup and Package Managers...

* The Package Manager's act of installing an application has now been split
into two separate phases, with a data-restore phase optionally occurring
between these two PM actions.  First, the details of the install are performed
as usual.  Instead of immediately notifying install observers and issuing the
install-related broadcasts, the in-process install state is snapshotted and
the backup manager notified that a restore operation should be attempted.  It
does this by calling a new API on IBackupManager, passing a token by which it
identifies its in-progress install state.

The backup manager then downloads [if possible] the data for the newly-installed
application and invokes the app's backupAgent to do the restore.  After this
step, regardless of failure, it then calls back into the Package Manager to
indicate that the restore phase has been completed, supplying the token that
was passed in the original notification from the Package Manager.

The Package Manager then runs the final post-install actions: notifying install
observers and sending out all the appropriate broadcasts.  It's only at this
point that the app becomes visible to the Launcher and the rest of the OS.

... and a few other bits and pieces...

* The ApplicationInfo.backupAgentName field has been exposed to the SDK.  This
can be reverted if there's a reason to do so, but it wasn't clear that this
info needs to be hidden from 3rd party apps.

* Debug logging of restore set IDs and operation timeout tokens [used during
any asynchronous Backup Manager operation] are now consistently in hex for
readability.

* We now properly reset our binder identity before calling into the transport
during restore-set operations.  This fixes a permissions failure when a
single-app restore was attempted.

* The 'BackupTest' test app is no longer lumped onto the system partition
by default.

Change-Id: If3addefb846791f327e2a221de97c8d5d20ee7b3
2010-02-19 17:24:07 -08:00
Ken Shirriff
35abad216d Add error logging to ContentProviderOperation.
This will dump out the contents of the operation in some error cases
to make debugging easier.
2010-02-19 15:30:44 -08:00
Suchi Amalapurapu
6c81defa3d Merge "Move package from internal to external and vice versa." 2010-02-19 14:27:29 -08:00
Suchi Amalapurapu
8946dd3355 Move package from internal to external and vice versa. 2010-02-19 14:20:54 -08:00
Fred Quintana
bda8874a29 improve logging of errors when trying to resolve backrefs http://b/2371475 2010-02-19 13:13:16 -08:00
Fred Quintana
ac7c8e6cd1 Merge "- fix the AccountManager documentation. http://b/2401790 - only pass the authtoken through from the authenticator to the client for getAuthToken() and strip it out from the other calls, like addAccount(). http://b/2332762 - beef up the documentation to indicate what calls are allowed to be made from the main thread and which are not allowed. http://b/2384961 - wait a bit before retrying syncs that failed because one was already in progress. http://b/2414235" 2010-02-19 10:46:36 -08:00
Mike LeBeau
bd3f527ea0 Elaborate a little on the documentation for PackageManager's resolveActivity.
Not sure if this wording is perfectly appropriate, so comments welcome.
2010-02-18 19:27:17 -08:00
Fred Quintana
8570f74407 - fix the AccountManager documentation. http://b/2401790
- only pass the authtoken through from the authenticator to the client
  for getAuthToken() and strip it out from the other calls, like
  addAccount(). http://b/2332762
- beef up the documentation to indicate what calls are allowed to be made
  from the main thread and which are not allowed. http://b/2384961
- wait a bit before retrying syncs that failed because one was already
  in progress. http://b/2414235
2010-02-18 17:34:33 -08:00
Dianne Hackborn
e36d6e277e Work on issue #2263557: PMF3000 showing hybrid of portrait and landscape modes
This is a bunch of reworking of how configuration changes are handled:

- When orientation is changing (for whatever reason), the window manager no
  longer tries to pre-emptively compute a new configuration.  Instead, it
  just determines  change is happening and tells the window manager.
- The activity manager is now responsible for giving the window manager the
  final configuration it is using.  This is both so it knows whem the
  activity manager is done with its configuration updates, and so the window
  manager can use the "real" configuration.
- When an orientation or other configuration change is happening, freeze the
  screen and keep it frozen until the activity manager has given us the
  final configuration.
- The window manager can now send new configurations to its clients during
  its layout pass, as part of a resize, if it has determined that it has
  changed.  This allows for a new View.onConfigurationChanged() API for any
  view to easily find out when the configuration has changed.
- ViewRoot now also works with the activity thread to make sure the process's
  current resources are updated to the new configuration when it receives one
  from a window.  This ensures that at the time onConfigurationChanged() and
  other view callbacks are happening, the correct configuration is in force.
- There is now a sequence number associated with Configuration, which
  ActivityThread uses to avoid using stale configurations.  This is needed now
  that it can receive configurations asynchronously from both the window
  manager and activity manager.
- The hack for keeping the locale has been removed, and underlying problem
  fixed by having Configuration initialize its locale to "unknown" instead of
  a valid default value.
2010-02-18 15:47:34 -08:00
Tobias Haamel
154f7a1cc2 Show car mode notification in status bar.
The notification is an ongoing event and can be used to get out of car mode.
2010-02-18 11:43:03 -08:00
Fred Quintana
fb6a5359e4 remove check for obsolete property ro.config.sync 2010-02-17 13:35:49 -08:00
Costin Manolache
63cfebf2db Switch from REMOTE_INTENT to the new push messaging, add the required permission. 2010-02-16 13:57:52 -08:00
Suchi Amalapurapu
5b993ce7bc Include install location preference when installing packages.
Changes include
Add new remote call in default container service to determine
install location.
Rename INSTALL_ON_SDCARD
Remove recommentAppInstall method
Add some additional flags used in remote stubs.
Move check for protected apps prior to copy.
Unit tests

DefaultContainerService first parses the file uri(if content uri is specified
it returns a default install internal only value) and returns
a recommended location. Based on which the temporary id is determined
either a file name or a container id and the file is copied there.
This is then later renamed during install.
Todo's light weight parsing of package when determining location since we
just need the install location attribute only when finding out
recomended location. This will also enable to move the check for
updated system apps(cannot be on sdcard) prior to copying.
2010-02-12 18:50:47 -08:00
Dianne Hackborn
470969346d Add APIs for mapping between new and current package names.
This will allow Market and others to find out what the "real" name
of a package is, when it is currently running under the old name of
a previously installed version.
2010-02-11 20:02:20 -08:00
Brad Fitzpatrick
d72f718c9c Measure walltime in ContentResolver and SQLiteDatabase operations logging.
Previously, SQLiteDatabase was using Debug.threadCpuTimeNanos(), which
doesn't include I/O time (user-perceived latency), and ContentResolver
was using System.currentTimeMillis(), which didn't account for deep
sleeps.

Now both are consistently using SystemClock.uptimeMillis().
2010-02-11 17:07:51 -08:00
Tobias Haamel
27b28b3f62 Introduce special UI modes for night and car usage.
The device mode is now called ui mode. Furthermore is the order of
precedence for the resources now in such a way that the ui mode needs
to be specified after the orientation and before the density.

The ui mode can be set, like it is done for the locale, as follows:

IActivityManager am = ActivityManagerNative.getDefault();
Configuration config = am.getConfiguration();
config.uiMode = Configuration.UI_MODE_TYPE_CAR | Configuration.UI_MODE_NIGHT_ANY;
am.updateConfiguration(config);

To allow users to disable the car mode and set the night mode the IUiModeManager
interface is used.

The automatic night mode switching will be added in a separate change.
2010-02-11 21:25:58 +01:00
Dianne Hackborn
6dee18c5cf New implementation of <original-package> tag.
We now have the new package retain the name of the old package.  This makes
sure that all existing references to it (shortcuts, widgets, etc) will still
work.

This does mean that your package can run under either the old or new name,
depending on whether the user got it with an update.  Buyer beware!

I have tried testing all of the paths of updating, installing another
update in /data, uninstalling the update, updating system with an even
newer update, etc.  I think they all work.  No promises though.
2010-02-11 11:04:49 -08:00
Ben Cheng
23085b781e Support per-application switch to execute the VM in safe mode.
The new attribute can be set by adding android:safeMode="true"
in AndroidManifest.xml with the SDK.

Tested with pairing locally compiled SDK with Eclipse and verified that the JIT
(the only component currently included in the safe mode) is indeed disabled
with the new attribute.

Bug: 2267583
2010-02-10 14:51:31 -08:00
Fred Quintana
caa6f3860f Merge "fix an NPE in SyncManager's dump where it can get a null AuthorityInfo; instead create one if one doesn't exist yet" 2010-02-10 11:45:47 -08:00
Fred Quintana
1bbcd105a1 fix an NPE in SyncManager's dump where it can get a null AuthorityInfo; instead create one if one doesn't exist yet 2010-02-10 11:44:23 -08:00
Suchi Amalapurapu
117818e4f1 Add new manifest option for install location
Change recommendAppInstallLocation api
add code to parse new attribute.
Define flags in PackageInfo
Add new settings attributes for enabling setting and value for install location
Some tests
The policy for install location: if explicitly set in manifest as internal only we try to install the app only on internal storage. if set to preferExternal, we try to install it on sdcard if possible. If not we fall back to internal.
If the user enables setting SET_INSTALL_LOCATION(which will always
be set to false in final release builds) and sets a prefered location, we try
to honour it.
2010-02-10 08:59:08 -08:00
Brad Fitzpatrick
a63730d1f1 Log ContentProvider operations to the EventLog.
Just like with db_operation, operations over 100ms are always logged,
while operations under that are subsampled.

This will help with performance analysis, getting real-world
performance numbers from dogfooders.
2010-02-09 17:49:43 -08:00
Dianne Hackborn
e83cefcef0 New external storage APIs.
This implements the spec for external storage organization, and
properly reflects how the media scanner organizes the files it finds.

Also includes package manager support for removing app private
files from external storage when the application is uninstalled.

For the new APIs and paths, the main place to look is Environment
and Context.
2010-02-09 14:20:55 -08:00
Bjorn Bringert
8e867eb454 Merge "Fix NPE in PackageParser" 2010-02-09 12:09:28 -08:00
San Mehat
b104340496 Framework: Clean up / Refactor Mount APIs
- Move android.storage.* -> android.os.storage.* and refactor users
 - Refactor generic shares back to explicit ums enable/disable/isEnabled
 - Remove media insert/removed event callbacks (not ready for Froyo)
 - Remove 'label' from volume state change callbacks
 - Add public API functions for enabling/disabling USB mass storage (permissions enforced
   in MountSevice)
 - Remove some stray un-needed import lines
 - Move android.os.IMountService / android.os.IMountServiceListener -> android.os.storage
 - Improve code comments

Updated:
  MountService: Add dup state check and move debugging behind a conditional
  UsbStorageActivity: Fix review comments + a TODO
  StorageNotification: Add @Override tags
  StorageManager: Don't use a static Listener list
  MountService: Reduce bloat and fix == where I meant .equals()
  PackageManagerTests: Update for new API

Signed-off-by: San Mehat <san@google.com>
2010-02-09 11:03:16 -08:00
Kenny Root
ace5a3fbfb Hide resourceDirs from public API
Change-Id: I070558c0adca43c8650ac740d3cda4334d0f4a50
2010-02-09 08:47:30 -08:00
Bjorn Bringert
e04b1ad9cd Fix NPE in PackageParser
Before, PackageParser threw NPE when reading <path-permission>
android:writePermission set.

Fixes http://b/issue?id=2430967

Change-Id: I4c69f0210ab362a649ff239c5f9e927d93c2f241
2010-02-09 13:56:08 +00:00
Fred Quintana
53bd2522ca - change the SyncManager to retry MANUAL syncs that encounter a soft error
- make the sync dump handle the case where there are no accounts
- fix a bug that caused the SyncManager to burn up CPU in the system process

The following was implemented:

scheduler offers:
 - settings to disable sync
 - retries of certain errors
 - backoffs

want a way to control these when scheduling a sync
 - "ignore_settings"
 - "ignore initial backoff"
 - "manual" : ignore settings, ignore initial backoff
 - "do not retry"

- need to change the default behavior of not retrying manual syncs to retry regardless
2010-02-08 16:54:43 -08:00
Suchi Amalapurapu
b56ae20b22 Rename media resource broadcasts
Add checks for fwdlocked and updated system apps
add more tests
remove duplicate adds
2010-02-08 14:52:25 -08:00
Joe Onorato
e8d898f4ed Merge "Make ComponentName cloneable." 2010-02-08 13:10:46 -08:00
Joe Onorato
edc649aabc Make ComponentName cloneable. 2010-02-08 12:40:45 -08:00
Fred Quintana
c5d1c6db61 add sync polling
- added the ability to specify that a sync (of account/authority/extras)
  should occur at a given frequency
- the existing daily poll code was replaced with seeding each
  account/authority with a 24 hour periodic sync
- enhanced the "adb shell dumpsys content" output to show the
  periodic syncs and when they will next run
2010-02-05 15:16:20 -08:00
Dianne Hackborn
b858dfda50 Implement system data migration support.
This adds three new features:

- <original-package android:name="com.foo" /> manifest tag.
  This allows an .apk to specify another package it originally came from,
  propagating all state and data from the old to new package.

- <adopt-permissions android:name="com.foo" /> manifest tag.
  In some more complicated cases, a new .apk may be a combination
  of multiple older .apks that each declared their own permissions.
  This allows you to propagate the permissions from these other
  .apks into the new one.

- A new system/etc/updatecmds directory.
  You can place files here which describe data files to move from
  one package to another.  (See below for details.)

Also in this change: we now clean up the data directories of
.apks that disappear from the system image, and some improvements
to logging and reporting error messages.

A typical file in the updatecmds directory looks like this:

-------
com.google.android.gsf:com.google.android.providers.talk
    databases/talk.db
com.google.android.gsf:com.google.android.googleapps
    databases/gls.db
-------

This says that for com.google.android.sfs, there are two packages to
move files from:

From com.google.android.providers.talk, the file databases/talk.db.
From com.google.android.googleapps, the file databases/gls.db

As part of moving the file, its owner will be changed from the old
package to whoever is the owner of the new package's data directory.

If those two files had existed, after booting you would now have the
files:

/data/data/com.google.android.gsf/databases/talk.db
/data/data/com.google.android.gsf/databases/gls.db

Note that all three of these facilities assume that the older .apk
is completely removed from the newer system.  The WILL NOT work
correctly if the older .apk still remains.
2010-02-03 15:42:02 -08:00
Suchi Amalapurapu
08675a3376 Apps on sdcard: Add new broadcasts
Add new broadcasts ACTION_MEDIA_RESOURCES_AVAILABLE and
ACTION_MEDIA_RESOURCES_UNAVAILABLE that get broadcast by
PackageManagerService when sdcard gets mounted/unmounted
by MountService so that packages on sdcard get recognized by
various system services as being installed/available or
removed/unavailable by the system.
The broadcasts are sent before the actual package cleanup which includes
mounting/unmounting the packages and we force a gc right after so
that any lingering file references to resources on sdcard get
released.
2010-02-02 18:33:29 -08:00
San Mehat
556d350a4d StorageManager: API_CHANGE: Move StorageManager into android.storage
Signed-off-by: San Mehat <san@google.com>
2010-02-02 12:56:45 -08:00
Oscar Montemayor
9ec33186c9 Merge "Apps on SD project. Javadoc fixes for new method in PackageManager class." 2010-02-02 12:15:26 -08:00
San Mehat
c9d8175f40 Context: API_CHANGE: Add support for retrieving StorageManager
Signed-off-by: San Mehat <san@google.com>
2010-02-02 11:17:47 -08:00
Oscar Montemayor
cdc428bdb7 Apps on SD project.
Javadoc fixes for new method in PackageManager class.
2010-02-01 11:36:04 -08:00
Oscar Montemayor
539d3c475f Apps on SD card project.
Refactored recommendAppInstallLocation(..) method in PackageManager by making it an instance method.
Since PackageManager has only abstarct instance methods, moved implementation to ApplicationContext.ApplicationPackageManager class, in line with the rest of the method
implementations. Tah way, chage is consistent with best coding practices.
Also MockPackageManager received the additional method.
2010-01-29 15:28:42 -08:00
Oscar Montemayor
1228d0a1dd Apps on SD card project.
This class implements heuristics to determine best app install location, without looking at the package flags (pre-parsing stage).
2010-01-28 21:03:16 -08:00
Fred Quintana
a322dfa47e am 6f3e1e27: am 9a400fa4: Merge "initialize sync adapters that get installed while the system is running bug http://b/issue?id=2360782" into eclair
Merge commit '6f3e1e27a697d3e64bf73792c1007135319ff0d5'

* commit '6f3e1e27a697d3e64bf73792c1007135319ff0d5':
  initialize sync adapters that get installed while the system is running
2010-01-27 18:40:11 -08:00
Dianne Hackborn
8aa2e8939c More device admin work: description, policy control.
There is now a description attribute associated with all components,
that can supply user-visible information about what the component does.
We use this to show such information about device admins, and wallpapers
are also updated to be able to show this in addition to the existing
description in their meta-data.

This also defines security control for admins, requiring that they
declare the policies they will touch, and enforcing that they do
so to be able to use various APIs.
2010-01-26 12:28:15 -08:00