• Home
  • History
  • Annotate
  • only in /frameworks/base/core/java/android/app/backup/
History log of /frameworks/base/core/java/android/app/backup/
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
43a4a8c777fbb8f71540ac7fbe82674489ef557b 09-Jan-2015 Christopher Tate <ctate@google.com> Fix redundant file backups

We'd observed a bug in which an unchanged file was nevertheless
being redundantly transmitted for backup on every backup pass.
The underlying issue turns out to have been the FileBackupHelper
base implementation's logic for diffing the prior-state file
set against the current state, in the case when there had been
deletions of prior files. In addition, there was also a
parallel bug in which file checksums were not calculated
properly in some cases, leading to at least one additional
redundant backup of the file in question.

Bug 18694053

Change-Id: Ie0dec06486b5fef4624561737019569c85d6b2a0
ackupHelperDispatcher.java
b89e1405cf9f1da533dc0843390a1b6783abb0f4 07-Jan-2015 Christopher Tate <ctate@google.com> Support single-package backup rejection by the transport

We now cleanly handle the case of the transport blacklisting specific
packages from key/value backup. Previously we would halt the entire
backup pass and reschedule if the transport returned any error from
performBackup(pkg). Now, we recognize the TRANSPORT_PACKAGE_REJECTED
result from that invocation, and properly drop that package's work
but proceed with running the rest of the backup queue as expected.

Bug 18694053

Change-Id: Id0dd6d59492bdea9f970540d776f37db0cc5d99c
ackupTransport.java
31f25696d950dd54e8b339074b98ad6335738f2f 03-Dec-2014 Christopher Tate <ctate@google.com> Adjust wallpaper-restore acceptance criteria

Previously the dimension check had implicit orientation sensitivity.
We now make sure to compare the candidate image's width to the smallest
screen dimension for acceptance purposes; this fixes cases when we would
e.g. get a restored image of (1680x2560) but believe that we needed it
to have a max width of 2048, even though it had originated on that same
device -- due to current-orientation issues.

Bug 18448052

Change-Id: I64ca6a4ed91ce1ccc04f5a9a6851e5cfe511b7c7
allpaperBackupHelper.java
07334334aab3863408325653ceccee47f9e1788d 21-Nov-2014 Zoltan Szatmary-Ban <szatmz@google.com> Merge "Adding method to query backup manager service activity status" into lmp-mr1-dev
ac6a3a5e9d90edb533e5b377a4a14ef514be955a 18-Nov-2014 Christopher Tate <ctate@google.com> Recents backup helper

Handles backup/restore of recent tasks for the system. Currently the
thumbnails are not saved.

At restore time the historical task records are placed in a designated
separate location rather than directly in the live bookkeeping; this
avoids ID duplication issues and makes it easier to deal with lazy
adoption of the historical task state as apps are installed on the
device post-restore.

Bug 17303286
Bug 15986349

Change-Id: Ie156c1e2ab9c9a7e7ac0447b27016fdcef55dded
ecentsBackupHelper.java
201caf57f9a9699e04620eac9b1fcdaf4338d2f0 12-Nov-2014 Zoltan Szatmary-Ban <szatmz@google.com> Adding method to query backup manager service activity status

Bug: 17367491
Change-Id: I9920c07d56c4c0ccb1f3dce637c0fb390902d2ff
BackupManager.aidl
bbe23b31dcd0eec8af5b5198970de7ff2a9ef79a 30-Oct-2014 Christopher Tate <ctate@google.com> Enable runtime turndown of backup/restore services

The heavy implementation of the backup manager service is now sitting
behind a lightweight trampoline that actually provides the binder
call interface. The indirection allows us now to tear down the
implementation on the fly without breaking callers who have cached
binder references to the backup services: these callers will simply
see their future invocations failing benignly.

In addition there is now an API for suitably privileged callers such
as device policy management to effect this turndown.

Finally, there is now a static system property, "ro.backup.disable",
that a product can use to outright remove backup/restore operation
from the system's operation. The public APIs will continue to be
safely usable on such products but no data will be moved to or
from the device.

Bug 17367491

Change-Id: I8108e386ef3b5c967938fae483366d6978fe4e04
BackupManager.aidl
1133e29f22252cc36102f41204c3de35779e49d2 10-Oct-2014 Christopher Tate <ctate@google.com> Tweak wallpaper restore rejection threshold

Raise the height ratio threshold slightly in order to start accepting
restores of height=1920 images onto height=2560 devices.

Bug 17882661

Change-Id: I63b47817fdf754cda9a052bddb62aee764522c6f
allpaperBackupHelper.java
431906b34f33e23b5407fc2f72f8c085ef572816 08-Oct-2014 Christopher Tate <ctate@google.com> Turn on dimension validation in wallpaper restore

Bug 17906491

Change-Id: I4c76c3197df95b51a6e44d1fe2d522b6c05284e5
allpaperBackupHelper.java
406abd45471c523aea151f5aca84b008fee02bbe 07-Oct-2014 Christopher Tate <ctate@google.com> Accept any restored wallpaper

...and let the wallpaper service & hosts figure out what to do
with it.

Bug 17677006

Change-Id: Ie5bfa549af4da178e621ffc42a759a552897d93a
allpaperBackupHelper.java
004c16654f2f86ff3055f3c88b5498eb3254f2e1 02-Oct-2014 Christopher Tate <ctate@google.com> Tweak wallpaper restore acceptance heuristics

We now accept for restore any image that is at least wide enough to
fit the screen, and has a height within a comfortable margin of the
previously stated target.

Bug 17677006

Change-Id: I5937a82ddfbfa0bbb30d568621eb48e4b3533fac
allpaperBackupHelper.java
9e079298edd022c43a960729442a53557fd16e45 10-Sep-2014 Christopher Tate <ctate@google.com> Fix BackupManager.isBackupEnabled()

It wasn't properly lazy-initializing the service binder, so it always
thought the backend service didn't exist, and so always returned false.

Also directly validated that every usage of sService in the module is
now correctly lazy-initialized.

Bug 16661321

Change-Id: If5fbb18aef81bfa8fd70eb40a1f6af54cc96d804
ackupManager.java
cd31d5d9aee277da23365e7e0a96ad359eb68a5f 28-Aug-2014 Christopher Tate <ctate@google.com> Correct misleading javadoc for BackupHelper

Change-Id: I3865cb3bd55f04baadedb55e9f84fc516eae75b4
ackupHelper.java
8ab0865156d447fbebcc366164ca7c57108ea57c 27-Aug-2014 Christopher Tate <ctate@google.com> Briefly log wallpaper restore outcomes

Bug 17112780

Change-Id: I3e9a23d28c9df4f708eb24b4688322c21a8c8382
allpaperBackupHelper.java
ff31addb9b767496ba5c907513be172779eadfc5 18-Aug-2014 arete <arete@google.com> Expose system apis for backup transport migration

Bug: 16542048
Change-Id: I45e710028316e7b2dc4195700a1e7344afb54691
ackupDataInput.java
ackupDataOutput.java
ackupTransport.java
a63246d6daa02c6f3e4e78d0072d991387e14c87 15-Aug-2014 Christopher Tate <ctate@google.com> Tighten restore-at-install behavior

Harden the guarantee that if we're asked about a possible restore,
we always ALWAYS report back to the package manager. This involved
closing "should never happen" edge cases around provisioning/auto-restore
setting that nevertheless were happening.

Also, on the auto-restore setting front, make sure to plumb that
system API through appropriately, since going behind its back and
manipulating the secure setting directly would cause things to get
out of step.

Bug 17060654

Change-Id: I52ca9c1ffbfc0bd6b57196157500d0868bfc2989
ackupManager.java
bf1a4a81ebd340a18583f4ca9b5d562a01f55674 09-Aug-2014 Christopher Tate <ctate@google.com> Start using cancelFullBackup() when appropriate

The API was in place but the framework wasn't yet calling it.

Bug 16524520

Change-Id: Ie368758c830a7d0ad11e7dd3142a0ed896069944
ackupTransport.java
58d467a58484e51837f8bc8895b02deaa09c7418 08-Aug-2014 Christopher Tate <ctate@google.com> A little more system API in RestoreSetObserver

Bug 16542048

Change-Id: I8b773df872e3cc50c42645e3833d40a691edc4e7
estoreObserver.java
e079264b981d87c648921185528b553a86ae353d 07-Aug-2014 Christopher Tate <ctate@google.com> API to tell the transport to cancel a full backup in progress

Bug 16524520

Change-Id: If2cbffd3c8a03bf4eb7b11ff1ae784c437e27e7f
ackupTransport.java
2e5979236ccc06beec8b8f7f631f31bdedc79614 07-Aug-2014 Christopher Tate <ctate@google.com> Mark beginRestoreSession() as system API

Bug 16874911

Change-Id: Idb06ebf2d0f54bb13af1d2eeacf0d7b06fda68db
ackupManager.java
d5cf722ae62d06d1fb6a9505c6f4c403a5d14a37 30-Jul-2014 Christopher Tate <ctate@google.com> Reify the transport lookup/selection API

Introduce a stable BackupTransport interface class for transport
implementations to derive from.

Make the interface for viewing/selecting the active backup transport
part of the stable API.

Make restore-related classes (RestoreSession, RestoreSet) stable API.

Express backup manager APIs needed for transport operation as
@SystemApi methods in BackupManager.

Bug 16661321

Change-Id: I423b87ae8f45c1b77831d4f8ffd97715484c2d2b
ackupManager.java
ackupTransport.java
estoreDescription.java
estoreSession.java
estoreSet.java
c17739d112d8e7076924c7fdd98614abafd58609 29-Jul-2014 Christopher Tate <ctate@google.com> Provide outside-facing API for data management intent+label

Bug 16346320

Change-Id: I3f4c2f4b700c77880ba3d8db7c92cdb404763d0d
BackupManager.aidl
9679410db578e179c7559e7a52bb21c8082e9631 28-Jul-2014 Christopher Tate <ctate@google.com> Add data-management intent + label to BackupTransport API

Bug 16346320

Change-Id: Id9e855a1d3cebbf801c27a21e1edc3ffcccfd2e9
ackupTransport.java
2e40d115ca4332d88424d1b591fdd8d5f78d1831 15-Jul-2014 Christopher Tate <ctate@google.com> Add BackupAgent.onRestoreFinished() callback

The agent's onRestoreFinished() method is called after all available
data has been delivered to the app, whether via the key/value restore
API or the full-data file-at-a-time API. This gives the app a stable
opportunity to do any postprocessing that might be appropriate.

Also fixes a lingering bug in the framework's handling of backup
agent lifetimes. In cases where an existing agent instances was
being rebound, the framework was forgetting to notify the dependent
that the agent was available. This was causing timeouts and restore
failure.

Bug 16241004

Change-Id: I3f52b299312d30d38b0cba63a2cfaeb934991ef2
ackupAgent.java
a176d22110a1670f363ba0f745f127d2b6ca2350 16-Jul-2014 Christopher Tate <ctate@google.com> Always call finishBackup() if performFullBackup() succeeded

Even if we later get an error from sendBackupData() we need to give
the transport its teardown callback. This simplifies the transport
logic considerably.

Change-Id: Ib8c0e210d4a876ee6b083a4d619dfccc462da4e5
ackupTransport.java
a7835b6b6b00923b608a6bc3194e7840f67de7a8 12-Jul-2014 Christopher Tate <ctate@google.com> Add Context.getNoBackupFilesDir()

This is an app-private filesystem space exactly like the one
reported by Context.getFilesDir(), with one exception: files
placed here are never backed up by the full-backup infrastructure.
If an app attempts to back up any of its contents via the normal
API it's immediately ignored with a logged warning.

The restriction is also enforced on the restore side, because
apps using support libraries might wind up creating full backup
archives containing no_backup subdirs on pre-L devices (via
adb backup, Helium, &c.). We check for this before passing the
restore data to the app, and drop it if we detect the situation
so that the app never sees the bits.

Bug 16240573

Change-Id: I11216a391f1d32117ec7ce15aafc9cd93d0337de
ackupAgent.java
ullBackup.java
51fea57e06fcb1dab1d239a5fff6e75ba2b7cee7 24-Jun-2014 Christopher Tate <ctate@google.com> Refactor restore to deal with heterogeneous datasets

Transport-based restore now handles both key/value and full-data
(stream) data delivery.

Also: PMBA now holds metadata for *all* apps, not just those with
backup agents. Since we need to consult this for every restore-
at-install operation we cache this locally now, tagged per transport
and per remote dataset, to avoid having to re-download it as part
of every future restore operation.

Also fixed a bug in LocalTransport that was preventing restore of
key/value datasets, i.e. all of them that were nominally available
prior to this change.

NOTE: at present there is no automatic full-data backup; if for
testing purposes you need to create some to then use for restore,
you still need to use 'bmgr fullbackup ...' to push them.

NOTE: at present the unified transport restore uses a refactored
"engine" implementation to handle stream data that encapsulates
the existing "adb restore" implementation. However, the adb
restore code path has not yet been refactored to wrap the newly-
extracted engine version; it still contains its own copy of all
the relevant logic. This will change in a future CL, at which
point offline/USB archive restore will simply wrap the same
shared stream-restore engine implementation.

Bug 15330073
Bug 15989617

Change-Id: Ieedb18fd7836ad31ba24656ec9feaaf69e164af8
ackupTransport.java
estoreDescription.java
5a009f9008d1f18b156c142b69e173109f5e218b 19-Jun-2014 Christopher Tate <ctate@google.com> Adjust full restore API

Introduces a new constant, BackupTransport.NO_MORE_DATA, defined to
be -1. The transport returns this constant when asked for the next
chunk of streaming full restore data to indicate that it has reached
EOF on the current restore target's archive stream.

If the transport returns TRANSPORT_PACKAGE_REJECTED from that same
method, then the OS will abort the current target's restore operation
and move on to the next package in the overall restore dataset (by
calling nextRestorePackage() on the transport).

If the transport returns zero when asked for the next chunk of
restore stream data, this will be interpreted as meaning that no data
is currently deliverable but the restore download is still running
properly; the caller will then retry until either data is delivered
or the transport reports NO_MORE_DATA (or an error).

Also sketched in the implementation of this latest API in the
test LocalTransport.

Bug 15330073

Change-Id: I81621cb322f831460133b7dced5bb88d2a4124e1
ackupTransport.java
6a49dd087f29cfca82d55dfabeb97439ef84b508 17-Jun-2014 Christopher Tate <ctate@google.com> Tweak restore API

We need the transport to tell the system not only what package it's going
to deliver data for next, but also what format that data is in.

Change-Id: I989cf78febf923a4208acb33ed80ccc7869356f5
ackupTransport.java
estoreDescription.aidl
estoreDescription.java
9ff53a7100b1a40f5d2df3eb19a2f3f2fff39a46 04-Jun-2014 Christopher Tate <ctate@google.com> Implement full data backup through transport

Currently no timed/scheduled full-data backup operations are
performed by the OS, but the plumbing is now in place and can
be tested using 'adb shell bmgr fullbackup pkg [pkg2 pkg3 ...]'.

The LocalTransport test transport implementation has been augmented
to support the new full-data backup API as well.

In addition, 'adb backup' now takes the -compress/-nocompress
command line options to control whether the resulting archive is
compressed before leaving the device. Previously the archive was
always compressed. (The default is still to compress, as it will
usually reduce the archive size considerably.)

Internally, the core implementation of gathering the full backup
data stream from the target application has been refactored into
an "engine" component that is shared by both 'adb backup' and the
transport-oriented full backup task. The archive file header
generation, encryption, and compression logic are now factored out
of the engine itself instead of being hardwired into the data
handling.

Bug 15329632

Change-Id: I4a044faa4070d684ef457bd3e11771198cdf557c
ackupTransport.java
BackupManager.aidl
c777185688d1de4f1c989b3f7630e7715fd71be3 03-Jun-2014 Christopher Tate <ctate@google.com> Finish migration of backup transport constants

...and make sure to fix a couple of lingering Javadoc references.

Bug 15329632

Change-Id: I1de7b53a58940834cd2dae2301fd5f65dbb48ba6
ackupTransport.java
4dd2635bf501ad1a1adc22a6ceb4c66cd61a1a23 03-Jun-2014 Christopher Tate <ctate@google.com> Add full-backup stream API to BackupTransport

Also started migrating the definition of transport success/failure constants
into BackupTransport to make them permanent.

The new methods are not yet plumbed in; this is just to allow forward
progress against a proposed stable API.

Bug 15329632

Change-Id: I27472e09b831350c140b9fa548ebda3af334eb1a
ackupTransport.java
74318c98a0f67e042815798f85c75eb7f14390e1 16-May-2014 Christopher Tate <ctate@google.com> Provide stable concrete wrapper for backup transport API

This initial version is a simple pass-through of the existing
IBackupTransport AIDL definition.

Change-Id: I0f6c9ffc7101f82127ab61ba6cba9f5003af6a0c
ackupTransport.java
10596fbcce710a76ffc7e917400df13af5c2ebcb 28-Apr-2014 Elliott Hughes <enh@google.com> resolved conflicts for merge of 3ce4f3d0 to master

Change-Id: Id5c5997ad8f801b32e1dbd97413ea42e38c27210
3ce4f3d0af8b20f915631ab927aafa76a6105135 28-Apr-2014 Elliott Hughes <enh@google.com> am 685a0a72: am bbd87eb9: Merge "Track libcore.os\' move to android.system."

* commit '685a0a72d445515167a2071330679cdf9b53a62d':
Track libcore.os' move to android.system.
34385d352da19805ae948215e2edbeedd16b7941 28-Apr-2014 Elliott Hughes <enh@google.com> Track libcore.os' move to android.system.

(This is partial, but should cover everything in AOSP master except
for the zygote.)

Change-Id: I1042c99245765746a744c44e714095cb2c6cb75d
ackupAgent.java
ullBackup.java
cba5941c6085dab1566bc047c1ea31f58a2dd4cf 01-Apr-2014 Christopher Tate <ctate@google.com> Rejigger the invalid-key checks at backup time

Bug 13732002

Change-Id: Ic8f71234d1bbc7420eaa8e1762b999d09f308d46
ackupAgent.java
ackupDataOutput.java
adfe8b86e9178a553b6db9722340fa4ff5201cf1 05-Feb-2014 Christopher Tate <ctate@google.com> App widget backup/restore infrastructure

Backup/restore now supports app widgets.

An application involved with app widgets, either hosting or publishing,
now has associated data in its backup dataset related to the state of
widget instantiation on the ancestral device. That data is processed
by the OS during restore so that the matching widget instances can be
"automatically" regenerated.

To take advantage of this facility, widget-using apps need to do two
things: first, implement a backup agent and store whatever widget
state they need to properly deal with them post-restore (e.g. the
widget instance size & location, for a host); and second, implement
handlers for new AppWidgetManager broadcasts that describe how to
translate ancestral-dataset widget id numbers to the post-restore
world. Note that a host or provider doesn't technically need to
store *any* data on its own via its agent; it just needs to opt in
to the backup/restore process by publishing an agent. The OS will
then store a small amount of data on behalf of each widget-savvy
app within the backup dataset, and act on that data at restore time.

The broadcasts are AppWidgetManager.ACTION_APPWIDGET_RESTORED and
ACTION_APPWIDGET_HOST_RESTORED, and have three associated extras:

EXTRA_APPWIDGET_OLD_IDS
EXTRA_APPWIDGET_IDS
EXTRA_HOST_ID [for the host-side broadcast]

The first two are same-sized arrays of integer widget IDs. The
_OLD_IDS values are the widget IDs as known to the ancestral device.
The _IDS array holds the corresponding widget IDs in the new post-
restore environment. The app should simply update the stored
widget IDs in its bookkeeping to the new values, and things are
off and running. The HOST_ID extra, as one might expect, is the
app-defined host ID value of the particular host instance which
has just been restored.

The broadcasts are sent following the conclusion of the overall
restore pass. This is because the restore might have occurred in a
tightly restricted lifecycle environment without content providers
or the package's custom Application class. The _RESTORED broadcast,
however, is always delivered into a normal application environment,
so that the app can use its content provider etc as expected.

*All* widget instances that were processed over the course of the
system restore are indicated in the _RESTORED broadcast, even if
the backing provider or host is not yet installed. The widget
participant is responsible for understanding that these are
promises that might be fulfilled later rather than necessarily
reflecting the immediate presentable widget state. (Remember
that following a cloud restore, apps may be installed piecemeal
over a lengthy period of time.) Telling the hosts up front
about all intended widget instances allows them to show placeholder
UI or similarly useful information rather than surprising the user
with piecemeal unexpected appearances.

The AppWidgetProvider helper class has been updated to add a new
callback, onRestored(...), invoked when the _RESTORED broadcast
is received. The call to onRestored() is immediately followed by
an invocation of onUpdate() for the affected widgets because
they will need to have their RemoteViews regenerated under the
new ID values.

Bug 10622506
Bug 10707117

Change-Id: Ie0007cdf809600b880d91989c00c3c3b8a4f988b
ackupDataOutput.java
BackupManager.aidl
0203d58ecf145a0b30dc33828c0f45d83fce983b 08-Jan-2014 Narayan Kamath <narayan@google.com> am db47efd3: am 651807fc: am 3f589e5d: am 2842bd02: am de8c3cf1: Merge "AArch64: Use long for pointers in App/Backup"

* commit 'db47efd3f8581c2c0d72a1b8617aeae9830f7ea4':
AArch64: Use long for pointers in App/Backup
3f589e5d1e09e17a2aaa0a52fc15e16520d1bd5a 08-Jan-2014 Narayan Kamath <narayan@google.com> am 2842bd02: am de8c3cf1: Merge "AArch64: Use long for pointers in App/Backup"

* commit '2842bd021c11274720d6a10219538b536b7d2050':
AArch64: Use long for pointers in App/Backup
58b8b24256bdc2b613b7fda9151845ed9898a4c7 02-Jan-2014 Ashok Bhat <ashok.bhat@arm.com> AArch64: Use long for pointers in App/Backup

For storing pointers, long is used, as
native pointers can be 64-bit.

In addition, some minor changes have been done
to conform with standard JNI practice (e.g. use
of jint instead of int in JNI function prototypes)

Change-Id: I7aee49dc26cf6c86af8f1d882e9cd1cc145a1977
Signed-off-by: Ashok Bhat <ashok.bhat@arm.com>
Signed-off-by: Marcus Oakland <marcus.oakland@arm.com>
Signed-off-by: Kévin PETIT <kevin.petit@arm.com>
ackupDataInput.java
ackupDataOutput.java
ileBackupHelperBase.java
6090995951c6e2e4dcf38102f01793f8a94166e1 19-Nov-2013 John Spurlock <jspurlock@google.com> Remove unused imports from frameworks/base.

Change-Id: Ia1f99bd2c1105b0b0f70aa614f1f4a67b2840906
ullBackup.java
haredPreferencesBackupHelper.java
b0183f0ae311966cff0e10e8139c56f97288d1f2 18-Nov-2013 Christopher Tate <ctate@google.com> Harden against transiently unavailable backup transports

The init & clear operations are particularly important to ensure
delivery when at all possible, so we retry those periodically
if the transport is unavailable when we first attempt them.

Now with 100% less build break.

Bug 11716868

Change-Id: I2af4e93788068cfac97c0a48d3568c561eefa23d
BackupManager.aidl
d5965cb506bde84612109bf26c3fcc6712ca91e5 19-Nov-2013 Sascha Prueter <saschap@google.com> Trying to unbreak build...

Revert "Harden against transiently unavailable backup transports"

This reverts commit 8f98252afea3fd0e68693635ec21b6004a52fa69.

Change-Id: I3aabb80f1a5932d530bce6b82d4b30c6cd1cdd5a
BackupManager.aidl
8f98252afea3fd0e68693635ec21b6004a52fa69 18-Nov-2013 Christopher Tate <ctate@google.com> Harden against transiently unavailable backup transports

The init & clear operations are particularly important to ensure
delivery when at all possible, so we retry those periodically
if the transport is unavailable when we first attempt them.

Bug 11716868

Change-Id: I4860fe3d4e99618b2cd194c83162bd7cbd5a83a9
BackupManager.aidl
f85f5b2125461ea664cf67a16d4608a5a9bf2f98 19-Apr-2013 Christopher Tate <ctate@google.com> Provide SharedPreferences coherence guarantees for BackupAgent

SharedPreferences uses deferred writes internally, and the public
API doesn't allow apps to explicitly synchronize with this, so the
backup/restore implementation needs to take a little care to make
sure that the app process isn't killed before the deferred writes
land on disk. This parallels the coherence guarantees around
SharedPreference that the Activity and Service lifecycles provide.

Bug 8659368

Change-Id: I853e54f9fb0d2d260dbe6e40d640959f998092df
ackupAgent.java
7323765bbf13d9638cf2cc1e06113bffcdac46c4 25-Mar-2013 Christopher Tate <ctate@google.com> Validate restored file paths against their nominal domain

Bug 8460775

Change-Id: Ib16d740a001adf4f9cb9ccaa31066ac7cadfb430
ackupAgent.java
294b512ecaa98a6a8ef12285ad14e7a4091b5d57 19-Feb-2013 Christopher Tate <ctate@google.com> DO NOT MERGE - Full backup/restore now handles OBBs sensibly

OBB backup/ restore is no longer handled within the target app
process. This is done to avoid having to require that OBB-using
apps have full read/write permission for external storage.

The new OBB backup service is a new component running in the
same app as the already-existing shared storage backup agent.
The backup infrastructure delegates backup/restore of apps'
OBB contents to this component (because the system process
may not itself read/write external storage).

From the command line, OBB backup is enabled by using new
-obb / -noobb flags with adb backup. The default is noobb.

Finally, a couple of nit fixes:

- buffer-size mismatch between the writer and reader of chunked
file data has been corrected; now the reading side won't be
issuing an extra pipe read per chunk.

- bu now explicitly closes the transport socket fd after
adopting it. This was benign but triggered a logged
warning about leaked fds.

(Cherrypicked)

Change-Id: I471f6348abcccb7bf1e1710b7beda9f23de53e14
ackupAgent.java
ullBackup.java
BackupManager.aidl
5cb5c337d5fe523723b8e5ceb4bdf38dff0cec70 21-Feb-2013 Christopher Tate <ctate@google.com> Be cool in backup/restore of apps that can't touch external storage

Bug: 8241337
Change-Id: I23f6eeba8448b234a7b18ce50d2ced2ba54b4ebd
ackupAgent.java
416c39e8d48048fa4a997c09460c262cca871fc4 15-Feb-2013 Christopher Tate <ctate@google.com> Full backup now saves getExternalFilesDir() content with the app data

... instead of only saving it with the enormous "shared storage" generic
data blob. In parallel, we no longer store managed app-specific files
on external storage as part of the generic shared-storage blob.

At restore time we just go ahead and apply such files, though,
because they're a priori going to be part of an archive generated by
an older version of the platform, so that's how the data is expected
to be handled in those circumstances.

Bug 6718844

Change-Id: I4410514d368b11d74b3afe6b92d363d4115a3415
ackupAgent.java
ullBackup.java
f6d6fa8cbc0251da1900e858bb0379cda5014b6f 27-Sep-2012 Christopher Tate <ctate@google.com> Full (local) restore security changes

(1) Prevent full restore from creating files/directories that are
accessible by other applications

(2) Don't restore filesets from "system" packages; i.e. any that runs
as a special uid, unless they define their own agent for handling
the restore process.

Bug 7168284

Change-Id: Id6a0cb4c113c2e4a8c4605252cffa41bea22d8a3
ullBackup.java
61f57379ca2c5b6290c8da7548fa17128f7ab24f 31-Aug-2012 Amith Yamasani <yamasani@google.com> Centralize the creation of the user system directory

Environment.getUserSystemDirectory(int userId)

Use it all relevant places that was hardcoding it.
Also, wipe out the user's system directory when user is removed, otherwise old state
might be transferred to a new user.

Change-Id: I788ce9c4cf9624229e65efa7047bc0c019ccef0a
allpaperBackupHelper.java
9be0105fbc56eb1b1813bb7c5fe258a144867a43 22-Jun-2012 Scott Main <smain@google.com> docs: fix several links

Change-Id: I89d9fd64dc22c90680bb05415cc966c255165af9
ackage.html
f5491fc1b61088843f280a6b55c1a995e2e6f939 25-May-2012 Christopher Tate <ctate@google.com> Prevent construction/use of invalid restore session proxies

Possible (rare) null return was not being handled. Fixes
bug 6554812.

Change-Id: I470e916f2156ff7ed2947d6ce21ef2816fc7f97d
ackupManager.java
37ce3a8af6faab675319d0803b288ab1dddc76be 06-Feb-2012 Amith Yamasani <yamasani@google.com> Multi-user - wallpaper service

- Allow each user to have their own wallpaper (live or static).
- Migrate old wallpaper on upgrade.
- Update SystemBackupAgent to backup/restore from primary user's
new wallpaper directory.

Reduce dependency on Binder.getOrigCallingUser() by passing the
userId for bindService.

Change-Id: I19c8c3296d3d2efa7f28f951d4b84407489e2166
allpaperBackupHelper.java
61fd1e8d8c3ccf2d6b7d4af1c19e8f0988d5a1ec 26-Oct-2011 Joe Fernandez <joefernandez@google.com> docs: add developer guide cross references, Project ACRE, round 3

Change-Id: I6125315ecdf0f78dd947c514a9944729d723e95d
ackupAgent.java
ackupAgentHelper.java
ackupManager.java
bf6ee4f509cbe7a44f4cc72f28e6150ca47c066d 07-Oct-2011 Christopher Tate <ctate@google.com> Fix wallpaper restore

Following a restore of the wallpaper data files, the settingsRestored()
method was binding the new wallpaper by passing null as the component,
because once upon a time that meant just use the configuration that had
just been loaded from the [newly restored] settings filed. However, at
some point this broke when the load from settings was made a staging
operation, not also the commitment of the changes.

This CL passes the newly-determined component configuration explicitly
to the bind, overriding the product default that may already have been
emplaced by the time the restore happens.

It also turns off the (minor) debugging that had been enabled in
WallpaperBackupHelper while digging into the issue.

Bug 5416839

Change-Id: I963893c236e24c75d10dde75836805295ea42cbb
allpaperBackupHelper.java
240c7d2d1fb2944ee6a6f1dee41c7bbd766f8f0d 04-Oct-2011 Christopher Tate <ctate@google.com> Add -nosystem flag to adb backup

This makes it easy to back up everything that belongs to 3rd party apps, but
nothing that comes with the system per se. If any system packages are
explicitly named on the command line they will be included in the backup
even if -nosystem was passed. So, for example, this will back up all 3rd
party apps as well as system settings, but nothing else belonging to
system-deployed apps:

adb backup -all -nosystem com.android.provider.settings

Bug 5361503

Change-Id: Iebe04b7d7027ca58b9f55e8eb7f219d6cca69269
BackupManager.aidl
78be158ce4b95fa537c6cb60a55dbc9161e53ef1 29-Aug-2011 Christopher Tate <ctate@google.com> Un-hide the new BackupAgent.onFullBackup() API

This is intended to be new public API for ICS, and unbundled app
development needs access to it.

Change-Id: I091b31ae9ec319850a93efc3d5860b87b68d355e
ackupAgent.java
728a1c4d5ed3b808172013a7f5bb5065d1e964f6 29-Jul-2011 Christopher Tate <ctate@google.com> Require the current backup pw in all backup/restore operations

Specifically, we now also require the current password to confirm any
restore operation.

Bug 4901637

Change-Id: I39ecce7837f70cd05778cb7e0e6390ad8f6fe3f3
BackupManager.aidl
2efd2dbbac9eac89620683696c6076463c3a1cd6 20-Jul-2011 Christopher Tate <ctate@google.com> Support full-backup encryption and global backup password

If the user has supplied a backup password in Settings, that password
is validated during the full backup process and is used as an encryption
key for encoding the backed-up data itself. This is the fundamental
mechanism whereby users can secure their data even against malicious
parties getting physical unlocked access to their device.

Technically the user-supplied password is not used as the encryption
key for the backed-up data itself. What is actually done is that a
random key is generated to use as the raw encryption key. THAT key,
in turn, is encrypted with the user-supplied password (after random
salting and key expansion with PBKDF2). The encrypted master key
and a checksum are stored in the backup header. At restore time,
the user supplies their password, which allows the system to decrypt
the master key, which in turn allows the decryption of the backup
data itself.

The checksum is part of the archive in order to permit validation
of the user-supplied password. The checksum is the result of running
the user-supplied password through PBKDF2 with a randomly selected
salt. At restore time, the proposed password is run through PBKDF2
with the salt described by the archive header. If the result does
not match the archive's stated checksum, then the user has supplied
the wrong decryption password.

Also, suppress backup consideration for a few packages whose
data is either nonexistent or inapplicable across devices or
factory reset operations.

Bug 4901637

Change-Id: Id0cc9d0fdfc046602b129f273d48e23b7a14df36
ackupAgent.java
BackupManager.aidl
7926a693c4a4f4d2a2d352343bca23e189c7420d 11-Jul-2011 Christopher Tate <ctate@google.com> Compress the backup output stream

Zlib compression, with a full flush between each application's
data. Encryption will be performed on the already-compressed data
once that's implemented.

On restore, the streamed data is similarly uncompressed on the fly.

Change-Id: I19b65c88e759a66527d10913d18fffa9df0bc011
ackupAgent.java
284f1bb4daf77f7e6b688c0936dd4a31ec2e7c74 07-Jul-2011 Christopher Tate <ctate@google.com> Can now restore a subset of apps from historical dataset

Adds the ability to filter a restore of an historical dataset so that it
only restores certain apps' data regardless of what is actually present
in the dataset. This is currently only used by the bmgr command-line tool,
for debugging / developer support.

Bug 2021590

Change-Id: I7685e5d609b0f5506f71d70c26410602bb387659
RestoreSession.aidl
estoreSession.java
b848b7a99c81081723077d7fb2006b2a35760259 07-Jul-2011 Christopher Tate <ctate@google.com> Remove unused object

Change-Id: I98c55432c26ccc4e8421db46c9f825cb42772508
ackupAgent.java
79ec80db70d788f35aa13346e4684ecbd401bd84 24-Jun-2011 Christopher Tate <ctate@google.com> Make full backup API available to apps

New methods for full backup/restore have been added to BackupAgent
(still hidden): onFullBackup() and onRestoreFile(). The former is the
entry point for a full app backup to adb/socket/etc: the app then writes
all of its files, entire, to the output. During restore, the latter
new callback is invoked, once for each file being restored.

The full backup/restore interface does not use the previously-defined
BackupDataInput / BackupDataOutput classes, because those classes
provide an API designed for incremental key/value data structuring.
Instead, a new FullBackupDataOutput class has been introduced, through
which we restrict apps' abilities to write data during a full backup
operation to *only* writing entire on-disk files via a new BackupAgent
method called fullBackupFile().

"FullBackupAgent" exists now solely as a concrete shell class that
can be instantiated in the case of apps that do not have their own
BackupAgent implementations.

Along with the API change, responsibility for backing up the .apk
file and OBB container has been moved into the framework rather than
have the application side of the transaction do it.

Change-Id: I12849b06b1a6e4c44d080587c1e9828a52b70dae
ackupAgent.java
ullBackup.java
ullBackupAgent.java
ullBackupDataOutput.java
b0628bfd5aac480a0d412ac96b8af1d97ac01c30 03-Jun-2011 Christopher Tate <ctate@google.com> Implement shared-storage full backup/restore

Every available shared-storage volume is backed up, tagged with its
ordinal in the set of mounted shared volumes. This is an approximation
of "internal + the external card". This lets us restore things to the
same volume [or "equivalent" volume, in the case of a cross-model
restore] as they originated on.

Also fixed a bug in the handling of files/dirs with spaces in
their names.

Change-Id: I380019da8d0bb5b3699bd7c11eeff621a88e78c3
ackupAgent.java
ullBackup.java
ullBackupAgent.java
75a99709accef8cf221fd436d646727e7c8dd1f1 19-May-2011 Christopher Tate <ctate@google.com> Restore from a previous full backup's tarfile

Usage: adb restore [tarfilename]

Restores app data [and installs the apps if necessary from the backup
file] captured in a previous invocation of 'adb backup'. The user
must explicitly acknowledge the action on-device before it is allowed
to proceed; this prevents any "invisible" pushes of content from the
host to the device.

Known issues:

* The settings databases and wallpaper are saved/restored, but lots
of other system state is not yet captured in the full backup. This
means that for practical purposes this is usable for 3rd party
apps at present but not for full-system cloning/imaging.

Change-Id: I0c748b645845e7c9178e30bf142857861a64efd3
ackupAgent.java
ullBackup.java
ullBackupAgent.java
BackupManager.aidl
4a627c71ff53a4fca1f961f4b1dcc0461df18a06 01-Apr-2011 Christopher Tate <ctate@google.com> Full local backup infrastructure

This is the basic infrastructure for pulling a full(*) backup of the
device's data over an adb(**) connection to the local device. The
basic process consists of these interacting pieces:

1. The framework's BackupManagerService, which coordinates the
collection of app data and routing to the destination.

2. A new framework-provided BackupAgent implementation called
FullBackupAgent, which is instantiated in the target applications'
processes in turn, and knows how to emit a datastream that contains
all of the app's saved data files.

3. A new shell-level program called "bu" that is used to bridge from
adb to the framework's Backup Manager.

4. adb itself, which now knows how to use 'bu' to kick off a backup
operation and pull the resulting data stream to the desktop host.

5. A system-provided application that verifies with the user that
an attempted backup/restore operation is in fact expected and to
be allowed.

The full agent implementation is not used during normal operation of
the delta-based app-customized remote backup process. Instead it's
used during user-confirmed *full* backup of applications and all their
data to a local destination, e.g. via the adb connection.

The output format is 'tar'. This makes it very easy for the end
user to examine the resulting dataset, e.g. for purpose of extracting
files for debug purposes; as well as making it easy to contemplate
adding things like a direct gzip stage to the data pipeline during
backup/restore. It also makes it convenient to construct and maintain
synthetic backup datasets for testing purposes.

Within the tar format, certain artificial conventions are used.
All files are stored within top-level directories according to
their semantic origin:

apps/pkgname/a/ : Application .apk file itself
apps/pkgname/obb/: The application's associated .obb containers
apps/pkgname/f/ : The subtree rooted at the getFilesDir() location
apps/pkgname/db/ : The subtree rooted at the getDatabasePath() parent
apps/pkgname/sp/ : The subtree rooted at the getSharedPrefsFile() parent
apps/pkgname/r/ : Files stored relative to the root of the app's file tree
apps/pkgname/c/ : Reserved for the app's getCacheDir() tree; not stored.

For each package, the first entry in the tar stream is a file called
"_manifest", nominally rooted at apps/pkgname. This file contains some
metadata about the package whose data is stored in the archive.

The contents of shared storage can optionally be included in the tar
stream. It is placed in the synthetic location:

shared/...

uid/gid are ignored; app uids are assigned at install time, and the
app's data is handled from within its own execution environment, so
will automatically have the app's correct uid.

Forward-locked .apk files are never backed up. System-partition
.apk files are not backed up unless they have been overridden by a
post-factory upgrade, in which case the current .apk *is* backed up --
i.e. the .apk that matches the on-disk data. The manifest preceding
each application's portion of the tar stream provides version numbers
and signature blocks for version checking, as well as an indication
of whether the restore logic should expect to install the .apk before
extracting the data.

System packages can designate their own full backup agents. This is
to manage things like the settings provider which (a) cannot be shut
down on the fly in order to do a clean snapshot of their file trees,
and (b) manage data that is not only irrelevant but actively hostile
to non-identical devices -- CDMA telephony settings would seriously
mess up a GSM device if emplaced there blind, for example.

When a full backup or restore is initiated from adb, the system will
present a confirmation UI that the user must explicitly respond to
within a short [~ 30 seconds] timeout. This is to avoid the
possibility of malicious desktop-side software secretly grabbing a copy
of all the user's data for nefarious purposes.

(*) The backup is not strictly a full mirror. In particular, the
settings database is not cloned; it is handled the same way that
it is in cloud backup/restore. This is because some settings
are actively destructive if cloned onto a different (or
especially a different-model) device: telephony settings and
AndroidID are good examples of this.

(**) On the framework side it doesn't care that it's adb; it just
sends the tar stream to a file descriptor. This can easily be
retargeted around whatever transport we might decide to use
in the future.

KNOWN ISSUES:

* the security UI is desperately ugly; no proper designs have yet
been done for it
* restore is not yet implemented
* shared storage backup is not yet implemented
* symlinks aren't yet handled, though some infrastructure for
dealing with them has been put in place.

Change-Id: Ia8347611e23b398af36ea22c36dff0a276b1ce91
ackupAgent.java
ullBackup.java
ullBackupAgent.java
BackupManager.aidl
FullBackupRestoreObserver.aidl
44bc17c6b517aef35a390c81b5aa79c4f284f744 21-Apr-2011 Dianne Hackborn <hackbod@google.com> Rework display size access.

Applications now get the display size from the window manager. No
behavior should be changed yet, this is just prep for some real
changes.

Change-Id: I2958a6660895c1cba2b670509600014e55ee9273
allpaperBackupHelper.java
9b95a4fcdce4b1a7a418e36de2ddc4d2c3acfc69 11-Mar-2011 Christopher Tate <ctate@google.com> Broaden the filter for wallpaper restore

Tweak the filter parameters so that we now use any restored wallpaper image
that is larger than our ideal size, and will reject any smaller images only
if they are *much* smaller than our ideal size. The specific threshold used
here will just barely reject Nexus One or Droid sized wallpapers for restore
onto a Xoom, but will pass anything larger.

Bug 4070129

Change-Id: I889bdb3ef5011343b2fccb2f81c6abc2f4603ee2
allpaperBackupHelper.java
7f765cf588e37a70fa2a1d251aaa8e7b847801b6 01-Mar-2011 Christopher Tate <ctate@google.com> Make sure to properly default the screen size during wallpaper restore

The wallpaper service claims a desired width/height of (-1,-1) during
initial setup, so look to the default display's metrics if necessary.

Change-Id: I341f12fb7b0b9d6b7761c277f23fc68fa5355256
allpaperBackupHelper.java
00724cacc8292900c3be8657ea9b3b6284cf4877 17-Feb-2011 Christopher Tate <ctate@google.com> Turn on wallpaper restore debug logs

For investigation of bug 3462173 et alia

Change-Id: Id5f82a97c72d2a02f9a878029782fa698c5b124f
allpaperBackupHelper.java
f4f05b8f24183b9e0d6959fe8b71fb88543edd9b 07-Jan-2011 Scott Main <smain@google.com> Update package descriptions with editorial revisions.
Notably, this removes exessive info about resources
from the content package, because it's not a good location
and the info is avilable in the dev guide, but also
added some of the info to the Resources class description.

Change-Id: Ie78af26c9cec66314deb98e53078f48e16c08e70
ackage.html
3f64f8d8fc05189777e83b4efd3882cbc661fdeb 11-Dec-2010 Christopher Tate <ctate@google.com> Don't restore wildly wrong sized wallpapers

If the dimensions of the original are sufficiently different from the
device's preferred dimensions, just don't restore the image. This
avoids bad letterboxing / clipping on e.g. phone <-> tablet data
migration.

The expansion/shrinkage ratios used here allow restores of saved
wallpaper images among HVGA devices, among WVGA variants, and
among tablets; but skip restoring wallpapers across those
categories (where severe clipping or letterboxing would occur).

Bug 3261863

Change-Id: I75e75d6401d18f1df10d75796ee04e21d2302cfa
ileBackupHelperBase.java
allpaperBackupHelper.java
f5e1c296370b45503a6c48bdb7da8b829bc0b906 09-Dec-2010 Christopher Tate <ctate@google.com> Add a couple of transport-descriptive methods to IBackupManager

Privileged callers can now ask the transport for a string describing
its current state, and for an Intent that can be passed to startActivity()
in order to bring up its exported configuration UI. These will be used
in Settings in order to e.g. show the user the currently active account
being used for backup, and allow the user to choose an account.

The data being funnelled through IBackupManager here are the ones
already exposed by the transports in their implementation of the
IBackupTransport interface.

Bug: 2753632

Change-Id: I2227a2b111d8d0ddf221d63020e20c1316fff55b
BackupManager.aidl
44ab8453e1c4c46790f792a46d026fa1017d8cfe 17-Nov-2010 Chris Tate <ctate@google.com> Permission fix: don't require BACKUP perm for self-restores

The public API is not supposed to require the BACKUP permission in order
for an application to restore its own last-known-good backup data. However,
as currently implemented, BackupManager.requestRestore() [the public API
in question] depends on private Backup Manager methods that *do* enforce
that permission. The net result is that the method cannot be successfully
used by third party applications: it will throw an exception if attempted.
This CL restructures the permission checking involved.

First, the underlying beginRestoreSession() operation can now be passed a
'null' transport name; if this is done, then the restore session is begun
on whatever the currently-active transport is. Looking up the name of the
active transport is one of the permission-guarded actions that was required
with the initial implementation.

Second, a package name can now be passed to beginRestoreSession(). If
this is done, then the restore session can only be used to perform a
single-package restore of that one application. The BACKUP permission is
not required if the caller is tying the restore to its own package name.

In combination, these changes permit BackupManager.requestRestore() to
function without the calling app needing to hold any special permission.
The no-permission case is intentionally quite narrow: the caller must
hold the permission unless they both (a) pass 'null' for the transport
name, thereby accepting whatever the currently active transport is, and
(b) pass their own package name to restrict the restore session only
to their own app.

External bug http://code.google.com/p/android/issues/detail?id=10094
Internal bug 3197202

Change-Id: Ibc9d652323f2da03727d850f991b4096af6520d2
ackupManager.java
BackupManager.aidl
a4270e7e1e09bf5f60c65102d34e887033c5befa 21-Sep-2010 Scott Main <smain@google.com> am 73e150c8: provide link to backup guide above the fold

Merge commit '73e150c886afc6cd92e8b065a58d61e0b2a098ed' into gingerbread

* commit '73e150c886afc6cd92e8b065a58d61e0b2a098ed':
provide link to backup guide above the fold
73e150c886afc6cd92e8b065a58d61e0b2a098ed 20-Sep-2010 Scott Main <smain@google.com> provide link to backup guide above the fold

Change-Id: I84ad3fbd4c3c7793fbf330d6a2be5cab611a9b26
ackage.html
6f9d58ac62366b13a1eac00d58ebc84f03cea3f2 07-Sep-2010 Brad Fitzpatrick <bradfitz@android.com> Make SharedPreferencesBackupHelper wait for async SharedPreference writes

Fixes a potential race with backups.

Change-Id: I73492c0384091cedd7802109257312387fcd43f9
haredPreferencesBackupHelper.java
b83a283ac178ab0a72f1d811189d79b26097835e 29-Apr-2010 Scott Main <smain@google.com> docs: add dev guide for backup

Change-Id: I168f6b15d3441c9cbea2cd9699612476c7244530
ackupAgent.java
ackage.html
d17da43c82c4edb97514d6138bc208eeba321636 30-Apr-2010 Scott Main <smain@google.com> docs: revise and add documentation for backup APIs

Change-Id: I0b015a6de16da07ccd31756b8d2329dc2785c2f7
ackupAgent.java
ackupAgentHelper.java
ackupDataInput.java
ackupDataInputStream.java
ackupDataOutput.java
ackupHelper.java
ackupManager.java
ileBackupHelper.java
haredPreferencesBackupHelper.java
ackage.html
7cc088232d20a63d24dd1f79f529ddad1b792cde 13-Apr-2010 Christopher Tate <ctate@google.com> SDK: last of the backup/restore docs content

There is probably still some editing and cleanup to do, but this takes care
of the last of the "need this documented by the time we ship!" material.

Bug #2465360

Change-Id: Ic4ce9e5a07c79aa2b584a18012a2e8fe199c19fd
ackupAgentHelper.java
ackupDataInputStream.java
ackupHelper.java
4e14a829129feee14ebe453f61a124784c870610 08-Apr-2010 Christopher Tate <ctate@google.com> SDK: more backup/restore documentation work

Still not complete, but here's a lot more of the necessary documentation.
Submitting a checkpoint seems prudent.

Bug #2465360

Change-Id: Ifff60d57e4b24cee21f3a34f5f50e290d377c386
ackupAgent.java
ackupAgentHelper.java
ackupDataInput.java
ackupDataOutput.java
ackupHelper.java
ackupManager.java
ileBackupHelper.java
haredPreferencesBackupHelper.java
fc922f115325371aaadd4e423472476303039a72 09-Apr-2010 Christopher Tate <ctate@google.com> API CHANGE: remove obsolete constants and hide some methods

This change removes some unused constants from BackupDataOutput
and hides a few methods that do not actually need to be exposed.

Change-Id: I47a9a107a5b58f4d53b5a2fcf9b73a765b1c5dd8
ackupDataOutput.java
27a63583bfb8b4668911a819f3c7827ef0cc2ec8 30-Mar-2010 Christopher Tate <ctate@google.com> API CHANGE: @hide AbsoluteFileBackupHelper

We don't want to publish this, but for risk mitigation we are hiding it
rather than rewriting/expanding the FileBackupHelper to accomodate the
absolute-path use cases that the system uses internally.

Change-Id: I513c97ec54de8dd7d28b10868d447d94b82d4ec3
bsoluteFileBackupHelper.java
2d449afe3d075020bdd1115bcc15c9383cbce122 30-Mar-2010 Christopher Tate <ctate@google.com> Make RestoreSession.getAvailableRestoreSets() asynchronous

This transaction can involve the transport having to query a remote backend
over the wire, so it can take a Long Time(tm). Make it main-thread-safe by
making it asynchronous, with the results passed as a callback to the invoker's
RestoreObserver. We also make the IRestoreObserver callback interface
properly oneway.

Bug #2550665
Bug #2549422

Change-Id: If18a233a0a3d54c7b55101715c9e6195b762c5a0
RestoreObserver.aidl
RestoreSession.aidl
estoreObserver.java
estoreSession.java
03aa34f50d7e8deefeb5e29f96425469c07c281d 30-Mar-2010 Amith Yamasani <yamasani@google.com> Fix preloaded classes for API rename of BackupAgentHelper

Change-Id: Ica6301b2aac6879702b98edfcf67fc7bc62002db
ackage.html
cc84c69726507a85116f5664e20e2ebfac76edbe 29-Mar-2010 Christopher Tate <ctate@google.com> API CHANGE: rename BackupHelperAgent => BackupAgentHelper per API Council

Part of bug #2545514

Change-Id: Ic775e3b942c485252149c1b6c15c88517fa4e3e5
ackupAgent.java
ackupAgentHelper.java
ackupHelper.java
ackupHelperAgent.java
ackupManager.java
ileBackupHelper.java
haredPreferencesBackupHelper.java
9c3cee9824026764275e4d84ba9b5d9fdc5da690 26-Mar-2010 Christopher Tate <ctate@google.com> API CHANGE: Backup/restore API changes requested by the API Council

* @hide the android.app.backup.RestoreSession class and functionality

* Provide a public method on android.app.backup.BackupManager that apps
can use to request a restore pass of their last-known-good dataset.
The new method is called requestRestore().

* Provide the name of the package being restored, not just its ordinal,
in the RestoreObserver's onUpdate() callback.

Part of bug #2545514

Change-Id: I9689bf8d6e2b808b4ee412424a36a835be0a5ca8
ackupManager.java
RestoreObserver.aidl
estoreObserver.java
estoreSession.java
3de55bcd34afd5871816526294f9514d1adf3fe5 13-Mar-2010 Christopher Tate <ctate@google.com> API CHANGE: expose the backup-related ApplicationInfo flag masks

Fixes bug #2507582 by doing the following:

- Un-@hide the FLAG_ALLOW_BACKUP, FLAG_KILL_AFTER_RESTORE, and
FLAG_RESTORE_ANY_VERSION mask constants in ApplicationInfo. These
correspond, respectively, to the <application> manifest tag's
android:allowBackup, android:killAfterRestore, and
android:restoreAnyVersion attributes.

- Remove the android:restoreNeedsApplication attribute and the
corresponding FLAG_RESTORE_NEEDS_APPLICATION constant [which was still
marked @hide]. We now always use the application's own Application
class when performing a normal restore. In the future when we support
an externalized full-filesystem backup/restore operation, we will use
an OS-defined agent class with a base-class Application instance, but
this will not happen until a future release.

Also expands real documentation on the above ApplicationInfo constants;
that work is part of bug #2465360

Change-Id: I735d07a963ae80a01343637d83bef84e4c23fdcc
ackupManager.java
f49501eec5c5c51487e3ec271d5c0dbe1ca9a639 06-Mar-2010 Christopher Tate <ctate@google.com> Fix doc references to "android.backup" to the new "android.app.backup"

Change-Id: Ia347590a374f7e0b8928b0673dc10d55fe785e73
ackage.html
4528186e0d65fc68ef0dd1941aa2ac8aefcd55a3 06-Mar-2010 Christopher Tate <ctate@google.com> Refactor android.backup => android.app.backup

Change-Id: I0b21316ff890d7f3c7d4b82837bb60670724c2e8
bsoluteFileBackupHelper.java
ackupAgent.java
ackupDataInput.java
ackupDataInputStream.java
ackupDataOutput.java
ackupHelper.java
ackupHelperAgent.java
ackupHelperDispatcher.java
ackupManager.java
ileBackupHelper.java
ileBackupHelperBase.java
BackupManager.aidl
RestoreObserver.aidl
RestoreSession.aidl
estoreObserver.java
estoreSession.java
estoreSet.aidl
estoreSet.java
haredPreferencesBackupHelper.java
ackage.html