)]}'
{
  "log": [
    {
      "commit": "83c64e6b624a876436d2ef5d2f173b10407e27b4",
      "tree": "c4effc3260ab399e8fdae23baf06b076cd87a604",
      "parents": [
        "94d0024557f415b8463f085c9784a3e1d02b58c6"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Feb 20 16:58:20 2012 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Feb 20 22:38:43 2012 -0800"
      },
      "message": "frameworks/base refactoring\n\ncreate the new libandroidfw from parts of libui and libutils\n\nChange-Id: I1584995616fff5d527a2aba63921b682a6194d58\n"
    },
    {
      "commit": "b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4",
      "tree": "2b90dc39a35d8081ea47b038893624b69a01202d",
      "parents": [
        "6db0608dff408130b35e6f21abe746a635648b18"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 17 18:27:36 2012 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 17 19:01:26 2012 -0800"
      },
      "message": "frameworks/base refactoring.\n\nstep 2: move libutils headers to their new home: androidfw\n\nChange-Id: I14624ba23db92a81f2cb929f104386e1fab293ef\n"
    },
    {
      "commit": "cc84c69726507a85116f5664e20e2ebfac76edbe",
      "tree": "1f58e9d718d8694d2b22f925a7e79263991d0c74",
      "parents": [
        "89d4e2dd7888913d3eb1f4f669bd756a3b85f2c1"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Mar 29 14:54:02 2010 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Mar 29 15:48:14 2010 -0700"
      },
      "message": "API CHANGE: rename BackupHelperAgent \u003d\u003e BackupAgentHelper per API Council\n\nPart of bug #2545514\n\nChange-Id: Ic775e3b942c485252149c1b6c15c88517fa4e3e5\n"
    },
    {
      "commit": "4528186e0d65fc68ef0dd1941aa2ac8aefcd55a3",
      "tree": "3f1276aef1448aad75a0d44ad1abbbd1478a4937",
      "parents": [
        "931bf89d327ecf07301231fd86b17deac535feaa"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Mar 05 15:46:30 2010 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Mar 05 16:27:15 2010 -0800"
      },
      "message": "Refactor android.backup \u003d\u003e android.app.backup\n\nChange-Id: I0b21316ff890d7f3c7d4b82837bb60670724c2e8\n"
    },
    {
      "commit": "c882ddacc8b3085a51f8ae18d89d8fd1d055141f",
      "tree": "a0dc4328f367ebd4ff70eb150feb1e53eb924ccb",
      "parents": [
        "43242d02e931c116d7f334cda2b0d677bedfdd97"
      ],
      "author": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Fri Feb 19 18:47:49 2010 -0800"
      },
      "committer": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Tue Mar 02 09:36:33 2010 -0800"
      },
      "message": "Fix Proguard flags.\n"
    },
    {
      "commit": "1bb6906c7a903ee6427c8ff37bdc5896c386ff73",
      "tree": "bdb540e8ba002ae648456c0d1af905ac7edd3676",
      "parents": [
        "6ad5a7a7c78799ecb306cb97d979bdb98cc52d15"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Feb 19 17:02:12 2010 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Feb 19 17:24:07 2010 -0800"
      },
      "message": "Automatically restore app data at install time\n\nWhen an application being installed defines a backupAgent in its manifest, we\nnow automatically perform a restore of the latest-known-good data for that app.\nThis is defined as \"data backed up by this app from this handset, if available;\notherwise data for this app as it existed when the device was initially\nprovisioned.\"  If neither option exists for the app, no restore action is\ntaken.\n\nThe CL involves major changes in the Backup and Package Managers...\n\n* The Package Manager\u0027s act of installing an application has now been split\ninto two separate phases, with a data-restore phase optionally occurring\nbetween these two PM actions.  First, the details of the install are performed\nas usual.  Instead of immediately notifying install observers and issuing the\ninstall-related broadcasts, the in-process install state is snapshotted and\nthe backup manager notified that a restore operation should be attempted.  It\ndoes this by calling a new API on IBackupManager, passing a token by which it\nidentifies its in-progress install state.\n\nThe backup manager then downloads [if possible] the data for the newly-installed\napplication and invokes the app\u0027s backupAgent to do the restore.  After this\nstep, regardless of failure, it then calls back into the Package Manager to\nindicate that the restore phase has been completed, supplying the token that\nwas passed in the original notification from the Package Manager.\n\nThe Package Manager then runs the final post-install actions: notifying install\nobservers and sending out all the appropriate broadcasts.  It\u0027s only at this\npoint that the app becomes visible to the Launcher and the rest of the OS.\n\n... and a few other bits and pieces...\n\n* The ApplicationInfo.backupAgentName field has been exposed to the SDK.  This\ncan be reverted if there\u0027s a reason to do so, but it wasn\u0027t clear that this\ninfo needs to be hidden from 3rd party apps.\n\n* Debug logging of restore set IDs and operation timeout tokens [used during\nany asynchronous Backup Manager operation] are now consistently in hex for\nreadability.\n\n* We now properly reset our binder identity before calling into the transport\nduring restore-set operations.  This fixes a permissions failure when a\nsingle-app restore was attempted.\n\n* The \u0027BackupTest\u0027 test app is no longer lumped onto the system partition\nby default.\n\nChange-Id: If3addefb846791f327e2a221de97c8d5d20ee7b3\n"
    },
    {
      "commit": "a87240c2270e83c3e865ffa1e56f79bfa74daffc",
      "tree": "56185fa9fc74ee9a55e3a35e6f228459a0cff04d",
      "parents": [
        "7f66d6e63dc79709ea308440ec57906980046531"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Feb 12 14:12:34 2010 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Feb 12 15:49:30 2010 -0800"
      },
      "message": "Remove BACKUP_DATA permission and associated checks\n\nAny package can now participate in backup/restore, without requiring any\nmanifest-declared permission.  *Control* of the backup manager is still\nguarded by the BACKUP permission, which is signatureOrSystem.\n\nChange-Id: I116fcfcd4cd255e3c976330da1c4dea7d4faae9d\n"
    },
    {
      "commit": "aa6e73a6c850694550b59a0911727dcb23c4837d",
      "tree": "92b29b4b9f7da80f6baf509ee1d4626f75498acb",
      "parents": [
        "533a2803506cc4f196403fdfafd948bd4f8e60d9"
      ],
      "author": {
        "name": "Omari Stephens",
        "email": "xsdg@android.com",
        "time": "Wed Dec 02 17:39:27 2009 -0800"
      },
      "committer": {
        "name": "Omari Stephens",
        "email": "xsdg@android.com",
        "time": "Wed Dec 02 17:39:27 2009 -0800"
      },
      "message": "Revive backup tests\n"
    },
    {
      "commit": "1cf3229a400931805d3924702146cc0c395951df",
      "tree": "163bb15fba7de6dd657a8d07db33938527de5168",
      "parents": [
        "94272625d4486ab4dcd14ef96357008d373db51b",
        "259447bc6490f4ec7e04eb5d8bfa1b041650ed53"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 13 18:35:40 2009 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 13 18:35:40 2009 -0700"
      },
      "message": "Merge change 20918\n\n* changes:\n  Wrap up the stress test into a single script make test_restore.sh return a value signifying success or failure\n"
    },
    {
      "commit": "0749dcd19301fe4093f9cf8677c722d17bceabfb",
      "tree": "47d8c3c6a33915475b99ce1d233d398365a38f72",
      "parents": [
        "763101efcdcf306142af891f98eaaa971e6edaf0"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@android.com",
        "time": "Thu Aug 13 15:13:03 2009 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@android.com",
        "time": "Thu Aug 13 15:15:55 2009 -0700"
      },
      "message": "Backup participants must now hold the BACKUP_DATA permission\n\nPackages that do not use android.permission.BACKUP_DATA will neither be backed\nup nor restored.  That permission is currently signature-only.  In the future if\naccess to the backup/restore infrastructure is made available to arbitrary 3rd\nparty applications, the permission checks (and indeed, the permission itself)\ncan simply be removed.\n"
    },
    {
      "commit": "259447bc6490f4ec7e04eb5d8bfa1b041650ed53",
      "tree": "1be1725414d274ecfa251435ffab30ddf2b59c4b",
      "parents": [
        "064dbd076d431a7508b864aa0993cd59ef743e4e"
      ],
      "author": {
        "name": "Omari Stephens",
        "email": "xsdg@android.com",
        "time": "Wed Aug 12 00:30:59 2009 -0700"
      },
      "committer": {
        "name": "Omari Stephens",
        "email": "xsdg@android.com",
        "time": "Wed Aug 12 00:30:59 2009 -0700"
      },
      "message": "Wrap up the stress test into a single script\nmake test_restore.sh return a value signifying success or failure\n"
    },
    {
      "commit": "bf5ac2aac32cc0a2d8a7221cb0891ed1bb3a2f24",
      "tree": "48e919c19f6af1371c5b33dfd4c929230cb66bc1",
      "parents": [
        "0cfeb25707c87af285cc993967be486d9c95a176"
      ],
      "author": {
        "name": "Omari Stephens",
        "email": "xsdg@android.com",
        "time": "Tue Aug 11 22:10:52 2009 -0700"
      },
      "committer": {
        "name": "Omari Stephens",
        "email": "xsdg@android.com",
        "time": "Tue Aug 11 22:10:52 2009 -0700"
      },
      "message": "git rid of the \"x\" prefixes for test\n"
    },
    {
      "commit": "0cfeb25707c87af285cc993967be486d9c95a176",
      "tree": "61ae212b6b8c424e0b4c39d13b5f9699431a810a",
      "parents": [
        "c5ea43920919eeaec4ec0686de9fa3d034d82337"
      ],
      "author": {
        "name": "Omari Stephens",
        "email": "xsdg@android.com",
        "time": "Tue Aug 11 21:44:21 2009 -0700"
      },
      "committer": {
        "name": "Omari Stephens",
        "email": "xsdg@android.com",
        "time": "Tue Aug 11 21:51:03 2009 -0700"
      },
      "message": "The triumphant return of the shell scripts, with bugreports, less code dup, and\nenhanced readability.\n"
    },
    {
      "commit": "864ed1a9d7f7a18db7415322728f6208a0eaf9d5",
      "tree": "1ad3b2babd34f33d9a6de6e395e7ae44f021e65f",
      "parents": [
        "ead2758ce2103ab7b7c95c6aff91b239bb566099"
      ],
      "author": {
        "name": "Omari Stephens",
        "email": "xsdg@android.com",
        "time": "Thu Aug 06 15:36:34 2009 -0700"
      },
      "committer": {
        "name": "Omari Stephens",
        "email": "xsdg@android.com",
        "time": "Thu Aug 06 15:36:34 2009 -0700"
      },
      "message": "Wipe data on backend before a backup run\nAppend the date to 3.txt so that we can see if/when backup failures occurred\n  solely from the device/server state\nNote that these files will probably be deleted from the tree immediately, to\n  be replaced by the ruby versions.\n"
    },
    {
      "commit": "1f808c6f6ed893bb50c94cf5be676712e4d68b9b",
      "tree": "c9a5ecbabbf568e4449ad45a6f184000405bd1c1",
      "parents": [
        "a05f75d61aa4e779f2fdf466267b47e7df213566"
      ],
      "author": {
        "name": "Omari Stephens",
        "email": "xsdg@android.com",
        "time": "Mon Aug 03 20:23:55 2009 -0700"
      },
      "committer": {
        "name": "Omari Stephens",
        "email": "xsdg@android.com",
        "time": "Mon Aug 03 20:23:55 2009 -0700"
      },
      "message": "Make test_backup and test_restore usable again\n\n - Add copyright headers\n - Allow the user to pass options (like \u0027-s FOO\u0027) to adb\n - Restart device adb as root if needed\n - Make test_restore to infer a restore set\n"
    },
    {
      "commit": "c8daa769256b039b6bc4c5acbe6b558cd776c00a",
      "tree": "0d80f28b806f273f3efb221890aca170da731548",
      "parents": [
        "dbee95cacff9d2faf30638e64abe26fbeb128787"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Jul 06 19:04:57 2009 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Jul 07 11:40:07 2009 -0700"
      },
      "message": "BackupManager wrapper class improvements\n\n+ Now rechecks the cached IBinder each time the wrapper is used, and if it\u0027s\nstill null (i.e. the BackupManager was constructed before the system service\ncame up) it\u0027s refetched.  This lets even system code cache a single\nBackupManager instance and just keep making calls through it without worrying\nabout interactions with the life cycle of the backup service.\n\n+ Added a static dataChanged(packageName) method as a convenience for code that\nneeds to indicate that some other package needs a backup pass.  This is useful\neven for third party code in the case of multiple packages in a shared-uid\nsituation.\n"
    },
    {
      "commit": "dc355a90a3d9d34f66316928a53f61ac35ab4781",
      "tree": "7b9de72bba6ed97ff81b600073cbbed46a0cf7a1",
      "parents": [
        "aae628b44518f0886a7f33b88c1131f47d853e70"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Fri Jun 26 14:45:25 2009 -0400"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Fri Jun 26 14:45:25 2009 -0400"
      },
      "message": "Add a test for SharedPreferencesBackupHelper\n\n(which nobody had ever tested.  I like it when stuff\njust works the first time).\n"
    },
    {
      "commit": "aae628b44518f0886a7f33b88c1131f47d853e70",
      "tree": "cda1538d47201354c82116b5025c1e3dd8fddb71",
      "parents": [
        "7d619f18a277ee3114624df7301db94db83936b9"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Fri Jun 26 12:57:45 2009 -0400"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Fri Jun 26 12:57:45 2009 -0400"
      },
      "message": "Test that we correctly back up an empty file.\n\n(It turns out that we do.  It didn\u0027t used to work, I\u0027m not\nsure what changed)\n"
    },
    {
      "commit": "4a64bded06a0299785c295a975e2818308eb53e2",
      "tree": "a24057a8f82108aae7f8e6fcb5067c2ed7fe9690",
      "parents": [
        "5e8a4b842c20dd47b82e9915f1bd730ee1b0d46d"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Thu Jun 25 23:53:29 2009 -0400"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Thu Jun 25 23:53:29 2009 -0400"
      },
      "message": "Add some helpful tests scripts for backup and make bmgr restore wait until the backup is done.\n"
    },
    {
      "commit": "4ababd922eac5931e0222862ff082dc29e012816",
      "tree": "9b7ed494cd38bed3ded7c34ce93425d35d42fc04",
      "parents": [
        "5cb400bd72726c22f641f334951b35ce2ddcfeef"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Thu Jun 25 18:29:18 2009 -0400"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Thu Jun 25 20:36:09 2009 -0400"
      },
      "message": "Make the BackupHelperDispatcher properly handle multiple helpers.\n"
    },
    {
      "commit": "5cbbf5652a78902ac3382dc4a3583bc5b0351027",
      "tree": "58a0d7260ed8c441b638f6197b885d3b16656465",
      "parents": [
        "3a31a93b8a195ae2d0180e6dfbf292da2e581f50"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Jun 22 16:44:51 2009 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Jun 22 16:44:51 2009 -0700"
      },
      "message": "Pass the originating app\u0027s versionCode along with a restore set\n\nThis change amends the doRestore() / onRestore() interface to backup agents to\nprovide the integer android:versionCode of the app that stored the backup set.\nThis should help agents figure out how to handle whatever historical data set\nthey\u0027re handed at restore time.\n"
    },
    {
      "commit": "06290a4bb9b280fa14a2bbeb2d3ceb09396a78c3",
      "tree": "15fccf5ce4e9c42bba3fc7581ac2ddc0d8363dc9",
      "parents": [
        "eed76b2a8ddc41af01cd3ae87c4722f3784c975c"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Thu Jun 18 20:10:37 2009 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Mon Jun 22 13:02:24 2009 -0700"
      },
      "message": "Helper API cleanup.  Allows multiple helpers to function,\nbecause they\u0027ll always go in the same order, and this lets\nus not have to write headers to keep them paired.\n"
    },
    {
      "commit": "d2d9ceb7305d593c1b767bbb05de0082a9af4109",
      "tree": "1ba39c3c5901d65a18855286e240f177820a6ec6",
      "parents": [
        "abce4e8714bed26a2b37b20ad3f02cf619d71c9a"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Thu Jun 18 13:11:18 2009 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Thu Jun 18 18:41:11 2009 -0700"
      },
      "message": "Make RestoreHelper and friends also write out the snapshot state.\n"
    },
    {
      "commit": "83248c432ffe2e2a17abbc8e4960c26574b46bca",
      "tree": "9e8de2f1eb84d52481573c9c1d824c6be4a6fdc0",
      "parents": [
        "6ce1983a2b5e9f5e735ac09b270b400084edb7db"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Wed Jun 17 17:55:20 2009 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Wed Jun 17 17:57:30 2009 -0700"
      },
      "message": "backup fixes:\n\n- BackupTestAgent calls the DispatchHelper\n- Make BackupAgent.onRestore take a BackupDataInput, not just a\n  generic ParcelFileDescriptor.\n"
    },
    {
      "commit": "efd0fab04b96d7ab0c1d8bf3b79397c8621e31c5",
      "tree": "f4b5afd53736822e9dc9e4c0f08140cd6fac8d60",
      "parents": [
        "2cf3971ea4d22f8981ae71e6ba358f19e1628d09"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Wed Jun 17 16:20:55 2009 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Wed Jun 17 16:20:55 2009 -0700"
      },
      "message": "FileRestoreHelper and RestoreHelperDispatcher work.\n"
    },
    {
      "commit": "1cf587496fcb1d652bab9fc6792fb106b6fefaa4",
      "tree": "96e989c088b0e2fb8560d5b2e24562188a128e19",
      "parents": [
        "6599426f74371c823fcfe570f61577262eb0df44"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Fri Jun 12 11:06:24 2009 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Fri Jun 12 16:21:24 2009 -0700"
      },
      "message": "Add RestoreFileHelper, BackupDataInput, and add java wrappers for the methods on BackupDataOutput.\n"
    },
    {
      "commit": "ce88cb15b52998e16c3ba548a4ec49117a835e21",
      "tree": "dc02e85657a63858b45a5eef8f99cbf5efae6339",
      "parents": [
        "23ecae3bbb60c5af940f3a22170d75eb6ac05b69"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Thu Jun 11 11:27:16 2009 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Thu Jun 11 14:51:45 2009 -0700"
      },
      "message": "Make the file backup helper not crash if a file you requested\ncan\u0027t be stated.  This means you don\u0027t need to know if the files\nyou are backing up exist or not -- we\u0027ll figure it out for you.\n"
    },
    {
      "commit": "23ecae3bbb60c5af940f3a22170d75eb6ac05b69",
      "tree": "1138102ba856743cffd931121409a71c2bae37c3",
      "parents": [
        "0b77453076a22569f24318d194b378b68f11a63e"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Wed Jun 10 17:07:15 2009 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Thu Jun 11 11:29:57 2009 -0700"
      },
      "message": "Fix SharedPrefsBackupHelper so it doesn\u0027t hard code the paths to the files.\n\nThis took quite a bit of refactoring.\n"
    },
    {
      "commit": "8ae2335a3c93d0c00e998fdec18f64dfe43b94cb",
      "tree": "e4233d7c7c87d76cab05ebe98a6330f9b4731155",
      "parents": [
        "85dfec8c35d4e3216591bd2e534bbebd6338b969"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jun 04 13:53:57 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jun 04 13:53:57 2009 -0700"
      },
      "message": "rename a few files to camel-case, add copyright notices\n"
    },
    {
      "commit": "181fafaf48208978b8ba2022683ffa78aaeddde1",
      "tree": "7c062847d418415e28813e70aac53c8c47e4ff69",
      "parents": [
        "c01159bb00f7273f9b051dfbbe6bc10d54d3a846"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu May 14 11:12:14 2009 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Sun May 31 13:10:03 2009 -0700"
      },
      "message": "Retool the backup process to use a new \u0027BackupAgent\u0027 class\n\nBackups will be handled by launching the application in a special\nmode under which no activities or services will be started, only\nthe BackupAgent subclass named in the app\u0027s android:backupAgent\nmanifest property.  This takes the place of the BackupService class\nused earlier during development.\n\nIn the cases of *full* backup or restore, an application that does\nnot supply its own BackupAgent will be launched in a restricted\nmanner; in particular, it will be using the default Application\nclass rather than any manifest-declared one.  This ensures that the\napp is not running any code that may try to manipulate its data\nwhile the backup system reads/writes its data set.\n"
    },
    {
      "commit": "d2110dbce071a236b6176de344ca797b737542eb",
      "tree": "996e044c8c7bf49463394bc911f0277d969bde5d",
      "parents": [
        "40f5a4ea3bc90e43a442ab336f2342020bba86b3"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Tue May 19 13:41:21 2009 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Wed May 20 11:24:20 2009 -0700"
      },
      "message": "Hook up the backup data writer, and add a utility to read the backup data files.\n"
    },
    {
      "commit": "2e1da32203b7f6df76023f25a7382a31fad6b19d",
      "tree": "4595241ae1e0e2207fc2285774f6fef86320e6b6",
      "parents": [
        "4535e40544aeb957d44fad75fbe5676effe03689"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Fri May 15 18:20:19 2009 -0400"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Fri May 15 18:20:19 2009 -0400"
      },
      "message": "Add the backup data file writer C++ class.\n"
    },
    {
      "commit": "4535e40544aeb957d44fad75fbe5676effe03689",
      "tree": "6861c7e610cd7061338b361ecab09d6b19ac3ca6",
      "parents": [
        "eae850cefe7e149f396c9e8ca1f34ec02b20a3f0"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Fri May 15 09:07:06 2009 -0400"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Fri May 15 10:37:10 2009 -0400"
      },
      "message": "Implement the C++ class to write the backed up file data.\n"
    },
    {
      "commit": "290bb011c5c1a9ba1f2116810b06cf52a9c36b3e",
      "tree": "cfb9ce077d79021e86c1b8d7951f3655520f368d",
      "parents": [
        "ec2d74d40f9b7a8bf96feeb45a5d054d8b0ce0dd"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Wed May 13 18:57:29 2009 -0400"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Thu May 14 09:39:32 2009 -0400"
      },
      "message": "Get the backup calling through to the file backup helper.\n\nThis includes some cleanup to make the parameters match\nbetween BackupService.onBackup and FileBackupHelper.performBackup.\n"
    },
    {
      "commit": "8ad028117d4b99883bbc52b29f097b2fb1d9b0c2",
      "tree": "a51bb51a34be08f2e5ac408de902bb07a3f293a3",
      "parents": [
        "d39afbdc92e95e597c311e78ac32edaad27fcf0d"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Wed May 13 01:41:44 2009 -0400"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Wed May 13 01:41:44 2009 -0400"
      },
      "message": "With this, the BackupService onBackup method is called.\n\nIt took a bunch of refactoring inside BackupManagerService,\nwhich is unfortunately all temporary anyway, but it unblocks\na bunch of stuff.\n"
    },
    {
      "commit": "c825d3ebd6ca66e65e63fdc76f032e08aa2a8e22",
      "tree": "dd9eca8ae68aaab8ed8d692ccf425a76541e9972",
      "parents": [
        "1e09a72a75f5e6236acffe84f2758dd042b1c8c0"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Wed May 06 12:55:46 2009 -0400"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Fri May 08 09:33:19 2009 -0700"
      },
      "message": "fix the sim build.  disables the tests for now.\n"
    },
    {
      "commit": "b1a7ffef3a0007b6991b8338460f6aac8cbb11e8",
      "tree": "cd7745a25c1ab0d4c7c136672a8a87634d5fee4c",
      "parents": [
        "fedf566b9e00f18588fc104caafd047af069844a"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Wed May 06 18:06:21 2009 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Thu May 07 15:32:48 2009 -0700"
      },
      "message": "More backup tests\n"
    },
    {
      "commit": "f9225f89aafa13dcbc3a69a721acf9b76c34485c",
      "tree": "dd3f94bdce3db4108883517f446c3e503cb3a867",
      "parents": [
        "3ad977b41c6e4ef30c2f4f316b909b742ffc04aa"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Tue May 05 18:34:31 2009 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Tue May 05 18:34:31 2009 -0700"
      },
      "message": "Add a test app for the backup\n"
    },
    {
      "commit": "3ad977b41c6e4ef30c2f4f316b909b742ffc04aa",
      "tree": "0b3c7a5263817709bc31c19e02f9fbc19b63de82",
      "parents": [
        "06d96020c35dac2bf1651cb8bd4cfced911f1142"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Tue May 05 11:50:51 2009 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Tue May 05 13:45:25 2009 -0700"
      },
      "message": "Add some C++ code to do raw files for backup\n"
    }
  ]
}
