)]}'
{
  "log": [
    {
      "commit": "3ee7ce2be31431a940c635f5c2ca52ebbddb94ed",
      "tree": "8a544b32d5102515002036d2c6ac8576ef7836e6",
      "parents": [
        "b3ef538fe645a7888c873eaa633fa8c50de6193d",
        "4b3cdbb2cfac6a39296d1af5a48c9b07159ae09b"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Fri Mar 02 14:57:42 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 02 14:57:42 2012 -0800"
      },
      "message": "Merge \"Fixing the build for real.\""
    },
    {
      "commit": "4b3cdbb2cfac6a39296d1af5a48c9b07159ae09b",
      "tree": "b440bfc888473304fa3f3c3362b3bb0d676f2fbf",
      "parents": [
        "56232eb14a018ecf9036c20be277d5e200e9df46"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Fri Mar 02 14:56:27 2012 -0800"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Fri Mar 02 14:56:27 2012 -0800"
      },
      "message": "Fixing the build for real.\n\nChange-Id: I6400e599cdf0d2e94d3ac024b9b32de55b1e3760\n"
    },
    {
      "commit": "45e96fd28a6f0b6a6526c9af62b083be73385c95",
      "tree": "b93db30fbc2b0e86227c46500178644ff83a28a6",
      "parents": [
        "49537043da94176f1bb2b0153ed672c6c894d98d",
        "ff37505cb13f96ddec09594517ad6f4fa2fd1def"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Fri Mar 02 13:12:22 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 02 13:12:22 2012 -0800"
      },
      "message": "Merge \"Adding getter/setter for all public attributes in CalendarView.\""
    },
    {
      "commit": "e6e47f0517b98055625abc21a85eaa702374495a",
      "tree": "7b2d5c381285db0f07177c4899d1755cb3a70ccd",
      "parents": [
        "8dc3cc2e13b500e368f5ba1aacfaf0eddbce668c",
        "dc927307ec69dcda57a05b51bcab78cb994f350b"
      ],
      "author": {
        "name": "Alon Albert",
        "email": "aalbert@google.com",
        "time": "Fri Mar 02 11:25:54 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 02 11:25:54 2012 -0800"
      },
      "message": "Merge \"Add a displayColor column to view_events\""
    },
    {
      "commit": "d2cca91e92d9988898a7579e418c00b65d429d46",
      "tree": "5be2aec0058d11b2701ab6e205d403dc72c0f7af",
      "parents": [
        "db3c6b8c0d3cde8323f962bb285d7735f698a363",
        "79087e4b967d8af26c488c41b8c1a087a12da84d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Mar 02 11:15:41 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 02 11:15:41 2012 -0800"
      },
      "message": "Merge \"Add an API for deleting databases.\""
    },
    {
      "commit": "1a7dd039f189036709bc2253ba50955913f59d7a",
      "tree": "40a528c88e21f92ac0637f2a6d758f34fe8acf1c",
      "parents": [
        "c13accb265f498a3e4fa7bd258628bc605ee534c"
      ],
      "author": {
        "name": "Adam Powell",
        "email": "adamp@google.com",
        "time": "Thu Mar 01 10:50:09 2012 -0800"
      },
      "committer": {
        "name": "Adam Powell",
        "email": "adamp@google.com",
        "time": "Fri Mar 02 10:44:36 2012 -0800"
      },
      "message": "Unhide transient state APIs on View\n\nChange-Id: I0f14728c94cd3461431352e6f01311934aec9858\n"
    },
    {
      "commit": "dc927307ec69dcda57a05b51bcab78cb994f350b",
      "tree": "0203d886aa89b5adf12aa11101aa982bad002d17",
      "parents": [
        "3c90952036a5ff7ddb2946c643f1a0bf1c31d53a"
      ],
      "author": {
        "name": "Alon Albert",
        "email": "aalbert@google.com",
        "time": "Thu Mar 01 16:05:55 2012 -0800"
      },
      "committer": {
        "name": "Alon Albert",
        "email": "aalbert@google.com",
        "time": "Fri Mar 02 09:43:17 2012 -0800"
      },
      "message": "Add a displayColor column to view_events\n\nChange-Id: I0f73685ec75e56929553b01d6ede0ad11fba55f4\n"
    },
    {
      "commit": "ff37505cb13f96ddec09594517ad6f4fa2fd1def",
      "tree": "a89c2fcf878c15e900c97e5fc9947b75e761a4b7",
      "parents": [
        "d0f4e09cba152a2c6cdb14e6a5ff36e864cb5adf"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Thu Mar 01 15:57:22 2012 -0800"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Thu Mar 01 21:31:34 2012 -0800"
      },
      "message": "Adding getter/setter for all public attributes in CalendarView.\n\nbug:6094713\n\nChange-Id: Iff4a1d903d597ae8a3d74a4e4734376acca417f3\n"
    },
    {
      "commit": "79087e4b967d8af26c488c41b8c1a087a12da84d",
      "tree": "5372d32650c0da205f6c3583de0ec3c83fdeb037",
      "parents": [
        "b7f2736e789bb6f3a09970bf924c56b5bc44b69a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 01 19:52:44 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 01 19:56:53 2012 -0800"
      },
      "message": "Add an API for deleting databases.\n\nAdd SQLiteDatabase.deleteDatabase to delete a database and all\nof its auxiliary files.\n\nThis method is also used by Context.deleteDatabase and resolves issues\nwhere auxiliary files would get left behind.\n\nBug: 5972489\nChange-Id: I3633b9b4978972a1d240ac0a9861420ecf989149\n"
    },
    {
      "commit": "dd3ef2c573396271c7c3b71e30fbd10cf66d3bc0",
      "tree": "00b2a85f32de432e7fc52472d6f6d5275781e664",
      "parents": [
        "f64a6d53468fd7aabe19d4c74ce205c55f19e870"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Thu Mar 01 16:37:17 2012 -0800"
      },
      "committer": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Thu Mar 01 17:34:56 2012 -0800"
      },
      "message": "Improve RTL APIs\n\n- follow changed / reset pattern\n\nChange-Id: I1c5e9b39196029bd78add2ab13b984da124822ca\n"
    },
    {
      "commit": "ac5a3a1c123ba58ed75ed7ddaf3f82eec37606c7",
      "tree": "644fa25cbf81621cb1b20dd35f5a22f3ca63d3a6",
      "parents": [
        "fc46475f7f017032715973bcb55cb171880e4602",
        "98aec1c7efa639ac902d1200a3ac5a4a7a140129"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Thu Mar 01 16:23:29 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 01 16:23:29 2012 -0800"
      },
      "message": "Merge \"Make layoutDirection API public\""
    },
    {
      "commit": "98aec1c7efa639ac902d1200a3ac5a4a7a140129",
      "tree": "689046f0d7e15661aef04d27d99661ba0a44df98",
      "parents": [
        "62f24df57a6240135cfd27c86430e1dda6c81916"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Mon Feb 13 16:54:05 2012 -0800"
      },
      "committer": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Thu Mar 01 16:21:55 2012 -0800"
      },
      "message": "Make layoutDirection API public\n\nChange-Id: Ie125513e4ea72b33b42355dbc43f9b9b6d46d7eb\n"
    },
    {
      "commit": "7edb9a94908f41b9dc3aa13d2089efa304f12c22",
      "tree": "d1fbba11323401994e4476f912ae37ec5a1ae245",
      "parents": [
        "b08dee9d38fb73715f17183dbc57b7130796b935",
        "f73222a39e0fa294d9105fd7464943aed6e77cd7"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Thu Mar 01 15:35:39 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Mar 01 15:35:39 2012 -0800"
      },
      "message": "am f73222a3: am 964955e0: am 8a9b14d8: am 5aeb8587: Merge \"DRM framwork bug fix: add an API to release resources\"\n\n* commit \u0027f73222a39e0fa294d9105fd7464943aed6e77cd7\u0027:\n  DRM framwork bug fix: add an API to release resources\n"
    },
    {
      "commit": "43d8a95fa8dfd26ba8c56ac7489a8bc77c77034c",
      "tree": "8aed3c6b7190073512833b461e4e28aa2a9fe657",
      "parents": [
        "7084e75282d6c800a1b889eff66794a8cd62e0c5",
        "07573b32494acbabd21979d8b9584c1ed3f7a6ad"
      ],
      "author": {
        "name": "Irfan Sheriff",
        "email": "isheriff@google.com",
        "time": "Wed Feb 29 19:33:06 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 29 19:33:06 2012 -0800"
      },
      "message": "Merge \"Improve Wi-Fi hand-off\""
    },
    {
      "commit": "07573b32494acbabd21979d8b9584c1ed3f7a6ad",
      "tree": "ad3a4a15c889b4b175717cd38a28a92601ed82ae",
      "parents": [
        "6b48f088b1e0bed242118422c88fea8d714307e0"
      ],
      "author": {
        "name": "Irfan Sheriff",
        "email": "isheriff@google.com",
        "time": "Fri Jan 27 21:00:19 2012 -0800"
      },
      "committer": {
        "name": "Irfan Sheriff",
        "email": "isheriff@google.com",
        "time": "Wed Feb 29 17:33:36 2012 -0800"
      },
      "message": "Improve Wi-Fi hand-off\n\nWhen Wi-fi connects at L2 layer, the beacons reach and the device\ncan maintain a connection to the access point, but the application\nconnectivity can be flaky (due to bigger packet size exchange).\n\nWe now use Watchdog to monitor the quality of the last hop on\nWi-Fi using signal strength and ARP connectivity as indicators\nto decide if the link is good enough to switch to Wi-Fi as the uplink.\n\nARP pings are useful for link validation but can still get through\nwhen the application traffic fails to go through and thus not best indicator\nreal packet loss since they are tiny packets (28 bytes) and have\nmuch low chance of packet corruption than the regular data\npackets.\n\nSignal strength and ARP used together ends up working well in tests.\nThe goal is to switch to Wi-Fi after validating ARP transfer\nand RSSI and then switching out of Wi-Fi when we hit a low\nsignal strength threshold and waiting until the signal strength\nimproves and validating ARP transfer.\n\nChange-Id: Ica593291ec7772da892f03cf45b649635b730c47\n"
    },
    {
      "commit": "8a9b14d80530eccf801fa794bacf287813b5978f",
      "tree": "ce2ad7eb730de761e7d45c9f699b4f56d9d5bac0",
      "parents": [
        "a66be970999c5eec1c8efb46e196f19ae563fc9b",
        "5aeb85877a95cc12c0784757a9842983b04e8600"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Wed Feb 29 15:44:41 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Feb 29 15:44:41 2012 -0800"
      },
      "message": "am 5aeb8587: Merge \"DRM framwork bug fix: add an API to release resources\"\n\n* commit \u00275aeb85877a95cc12c0784757a9842983b04e8600\u0027:\n  DRM framwork bug fix: add an API to release resources\n"
    },
    {
      "commit": "8662cab5c6a01ea5c426512e6f6d2cf3e158aea0",
      "tree": "3b59cda27e624d46603427888e906e3686c00379",
      "parents": [
        "c021a119a2b2b274e3a0bc06003e389a00de9112"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Feb 23 14:59:36 2012 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed Feb 29 14:05:24 2012 -0800"
      },
      "message": "Merge: Introduce UpdateLocks\n\nAn \"UpdateLock\" works similarly to a wake lock in API: the caller is\nproviding a hint to the OS that now is not a good time to interrupt\nthe user/device in order to do intrusive work like applying OTAs.\nThis is particularly important for headless or kiosk-like products\nwhere ordinarily the update process will be automatically scheduled\nand proceed without user or administrator intervention.\n\nUpdateLocks require that the caller hold the new signatureOrSystem\npermission android.permission.UPDATE_LOCK.  acquire() and release()\nwill throw security exceptions if this is not the case.\n\nThe \"is now convenient?\" state is expressed to interested parties\nby way of a sticky broadcast sent only to registered listeners.  The\nbroadcast is protected; only the system can send it, so listeners\ncan trust it to be accurate.  The broadcast intent also includes a\ntimestamp (System.currentTimeMillis()) to help inform listeners that\nwish to implement scheduling policies based on when the device became\nidle.\n\nThe API change here is a tiny one: a dump(PrintWriter) method has been\nadded to the TokenWatcher class to facilitate getting information out\nof it for dumpsys purposes.  UpdateLock itself is still @hide.\n\nBug 5543442\n\nChange-Id: I3709c831fc1883d7cb753cd2d3ee8e10a61e7e48\n"
    },
    {
      "commit": "6225df010365d00b1d0f3b1ca13f18cea537c8e3",
      "tree": "f8ec6b625745c57b4a0dbe6aab02072cf10be8d4",
      "parents": [
        "d7fa7deef9bc0cf22bf450fdb062327697c087c4"
      ],
      "author": {
        "name": "Kei Takahashi",
        "email": "KeiA.Takahashi@jp.sony.com",
        "time": "Tue Jan 31 13:18:45 2012 +0900"
      },
      "committer": {
        "name": "Kei Takahashi",
        "email": "KeiA.Takahashi@jp.sony.com",
        "time": "Wed Feb 29 12:59:53 2012 +0900"
      },
      "message": "DRM framwork bug fix: add an API to release resources\n\nWhen DrmManagerClient object is created and released many times,\nthe process suddenly crashes.\nThe case can happen when we make many thumbnails of\nDRM-encrypted contents.\n\nThe problem is caused by shortage of file descriptors.\nDrmManagerClient releases references of file descriptors\nonly when GC runs. So file descriptors are kept long time\neven after the reference of DrmManagerClient are released.\n\nBy introducing DrmManagerClient#release() API,\nthe problem is solved. An application call this API\nwhen we no longer need to use DrmManagerClient object.\n\nChanges are made by SEMC and Sony.\n\nChange-Id: Ie0bbc29cc33872449824285a8d67b1c3cdd8082b\n"
    },
    {
      "commit": "8279570b222d46def4e541d71ef29dbfd9fbe3d7",
      "tree": "0c64808a15062ea0942f20fdd6e4c4e06e71596b",
      "parents": [
        "c1a1a4954071af55c772bd6b0b0de52edd9bf1e9"
      ],
      "author": {
        "name": "Gilles Debunne",
        "email": "debunne@google.com",
        "time": "Tue Feb 28 16:36:45 2012 -0800"
      },
      "committer": {
        "name": "Gilles Debunne",
        "email": "debunne@google.com",
        "time": "Tue Feb 28 16:36:45 2012 -0800"
      },
      "message": "Fix for broken build part 2. Update 16.txt too\n\nChange-Id: I8609dd818a6e4059f9b149a8089d681ac2972d66\n"
    },
    {
      "commit": "c1a1a4954071af55c772bd6b0b0de52edd9bf1e9",
      "tree": "549842c7214172485023774f9ba2827c06e42a52",
      "parents": [
        "c02859f6eb7ea5c3ea1719b68535f6b8ea2a4b0c"
      ],
      "author": {
        "name": "Gilles Debunne",
        "email": "debunne@google.com",
        "time": "Tue Feb 28 16:31:38 2012 -0800"
      },
      "committer": {
        "name": "Gilles Debunne",
        "email": "debunne@google.com",
        "time": "Tue Feb 28 16:31:38 2012 -0800"
      },
      "message": "Fix for broken build. update-api step missing.\n\nChange-Id: Ia8d3c92825cfdca8b8eef1c1badd1b514ceef18e\n"
    },
    {
      "commit": "e512ad5089eef76d080fc6fdd17dfb88ad8b72e9",
      "tree": "a5ab41eb26de07c303f77a31fcb221c98884b059",
      "parents": [
        "6fa13b5a02464281df56919009fa3af5a3f9026b",
        "060526f9856e52964eaf13df8db74f5fbdcb83b1"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Tue Feb 28 14:33:19 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 28 14:33:19 2012 -0800"
      },
      "message": "Merge \"Deprecate default constructor for classes that should have been meant to be interfaces\""
    },
    {
      "commit": "8fe9260bbba4a2987164323d93537a61c65d5ac2",
      "tree": "6c42860d90e4c47912e9ba7556ee22a6caf1f069",
      "parents": [
        "af2abf5adae93b263381ea70d3a0c1a6f03f795f",
        "c4a9976aa15929a73ab7c0979d8b2e1e9eeadcc7"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Tue Feb 28 11:23:26 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 28 11:23:26 2012 -0800"
      },
      "message": "Merge \"Deprecated a mis-spelled method and replaced it with a new method\""
    },
    {
      "commit": "c4a9976aa15929a73ab7c0979d8b2e1e9eeadcc7",
      "tree": "7b080af1f029f3d515f0a398baaf80849d4b2755",
      "parents": [
        "fd400f5f483d76a38a28155a7328a953ed3ec36f"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Mon Feb 27 18:13:37 2012 -0800"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Mon Feb 27 18:25:31 2012 -0800"
      },
      "message": "Deprecated a mis-spelled method and replaced it with a new method\n\nChange-Id: Id049a4effab120c3f837cde60a87efcd89a64ec6\n"
    },
    {
      "commit": "060526f9856e52964eaf13df8db74f5fbdcb83b1",
      "tree": "830d8f468d530b01ac950b83484eb789959f0f67",
      "parents": [
        "fd400f5f483d76a38a28155a7328a953ed3ec36f"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Mon Feb 27 16:41:22 2012 -0800"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Mon Feb 27 18:00:12 2012 -0800"
      },
      "message": "Deprecate default constructor for classes that should have been meant to be interfaces\n\no We should have not exposed these default constructors in the first place.\n\nChange-Id: Ia8bcfe77e9730021ad8870ece67c6d0eed8146ad\n"
    },
    {
      "commit": "5312d0805cda5f4e6c66b6c3fa84c7cb9fc72191",
      "tree": "4964d032a6b9171c840c9b42eaa18bd567caed61",
      "parents": [
        "41c31ef3fa1acf18f5fce3fcf1b2f5c6fd344fd6",
        "bd2516165e4d38f1ee7f7f0ceb038ebf7ea1b84a"
      ],
      "author": {
        "name": "Alon Albert",
        "email": "aalbert@google.com",
        "time": "Mon Feb 27 16:29:55 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 27 16:29:55 2012 -0800"
      },
      "message": "Merge \"Add new Reminder Method: Alarm\""
    },
    {
      "commit": "5265466e8a5453e738713869f61ca45482b85319",
      "tree": "f5e5b79613f7e223895cb9b66e6aa2794d1b8469",
      "parents": [
        "2abb1381524bdbbc7a09b573505abde4178be2e3",
        "e639da7baa23121e35aa06d6e182558e0e755696"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 24 18:40:37 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 24 18:40:37 2012 -0800"
      },
      "message": "Merge \"New development permissions.\""
    },
    {
      "commit": "b98a81f86ab87f1d718f329f03256111fdabd8d1",
      "tree": "0a21f893651cdcf5ebcb60839c62919b8a9cf3c1",
      "parents": [
        "8657477721f3ab2271130c50b7a66b8593496797"
      ],
      "author": {
        "name": "Adam Powell",
        "email": "adamp@google.com",
        "time": "Fri Feb 24 11:09:07 2012 -0800"
      },
      "committer": {
        "name": "Adam Powell",
        "email": "adamp@google.com",
        "time": "Fri Feb 24 16:59:03 2012 -0800"
      },
      "message": "Add support for optional titles in action modes\n\nOptional titles will only be displayed in the CAB if they entirely fit\ninstead of ellipsizing.\n\nFixes bug 5821883\n\nChange-Id: I0cfd6d4fd34a4fa9f520499d577706da30606811\n"
    },
    {
      "commit": "7b49b4bea8090bb8e5015225eb05686d3676205c",
      "tree": "7cfe655be70ea8adc3f9aed9d567cd6da768ae6c",
      "parents": [
        "6513daef5e34082d9670c4149252703d40f8d937",
        "e9d4c71f47f74ee9a4a490f62769ad010a17d19b"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 24 15:09:54 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 24 15:09:54 2012 -0800"
      },
      "message": "Merge \"deprecate L_8, LA_88 and RGB_332 in sdk\""
    },
    {
      "commit": "e9d4c71f47f74ee9a4a490f62769ad010a17d19b",
      "tree": "8227f4727eb45324bf96bb18e4290f206f19108f",
      "parents": [
        "2d77b5332ac4ef5b252fbd8f56a195e0fce03292"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 24 14:58:36 2012 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 24 14:58:36 2012 -0800"
      },
      "message": "deprecate L_8, LA_88 and RGB_332 in sdk\n\nre-add support for pixelformats L_8, LA_88 and RGB_332 in libui\nfor backward compatibility.\n\nThis may or may not fix 6058926\n\nBug: 6049685\nChange-Id: Ic1b8b4cc994522f7fe664da64c0ef76b98bc6d53\n"
    },
    {
      "commit": "3f0c58eb708ca520e84396fe764147800395812f",
      "tree": "550651c9789b6950c1e3cc8e1c90fe084ba3ca71",
      "parents": [
        "525ece4098a636818148dd5a660ebe4d7a2138af",
        "2561b0b10a55841a08e0e1d467e73e10b1bf256d"
      ],
      "author": {
        "name": "Daniel Sandler",
        "email": "dsandler@android.com",
        "time": "Fri Feb 24 10:53:42 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 24 10:53:42 2012 -0800"
      },
      "message": "Merge \"New notification priority and related APIs.\""
    },
    {
      "commit": "2561b0b10a55841a08e0e1d467e73e10b1bf256d",
      "tree": "707a5812a2d6a711838babe41fd4947b96f13649",
      "parents": [
        "c725a3705ba8646e134091981e84da99fe4076b1"
      ],
      "author": {
        "name": "Daniel Sandler",
        "email": "dsandler@android.com",
        "time": "Mon Feb 13 21:04:12 2012 -0500"
      },
      "committer": {
        "name": "Daniel Sandler",
        "email": "dsandler@android.com",
        "time": "Fri Feb 24 13:47:00 2012 -0500"
      },
      "message": "New notification priority and related APIs.\n\nThis change introduces a few new bits of data on\nNotification that will help the Notification Manager and\nSystem UI route and display them more intelligently:\n\n -\u003e priority: an integer in a predefined range that\n    indicates the app\u0027s best guess as to the relative\n    importance (to the user, right now) of that information\n\n -\u003e kind: a tag (really, set of tags) indicating the general\n    type of notification (realtime, asynchronous, etc)\n\n -\u003e extras: a Bundle of additional key/value pairs\n    associated with this notification (currently @hidden)\n\nThe notification manager takes these data into account when\nassigning to each notification a score which is passed with\nthe notification on to the system UI, where it can be used to\naffect presentation. For example:\n\n  - Spammy apps (identified explicitly by the user or by\n    some other means) will have their notifications scored\n    very negatively by the notification manager, allowing\n    the UI to suppress them\n  - Notifications of higher score might be shown larger\n    or in a different way\n  - Very important notifications (indicated by a very high\n    score) might interrupt the user during an otherwise\n    important task (videochat, game, etc)\n\nImplementation note: This replaces/extends the old internal\nnotion of \"priority\", which was mostly used to organize\nongoings and system notifications at the top of the panel.\n\nChange-Id: Ie063dc75f198a68e2b5734a3aa0cacb5aba1ac39\n"
    },
    {
      "commit": "bd2516165e4d38f1ee7f7f0ceb038ebf7ea1b84a",
      "tree": "4ebfad1a1e2f0b32a4dfeac002bcb147b6699871",
      "parents": [
        "394906170cbee383aef01acf17dfffece3de1cae"
      ],
      "author": {
        "name": "Alon Albert",
        "email": "aalbert@google.com",
        "time": "Thu Feb 23 10:30:51 2012 -0800"
      },
      "committer": {
        "name": "Alon Albert",
        "email": "aalbert@google.com",
        "time": "Fri Feb 24 09:40:27 2012 -0800"
      },
      "message": "Add new Reminder Method: Alarm\n\nChange-Id: I7c0bc3c7eb1cc3b76900a04760ace52a5535b617\n"
    },
    {
      "commit": "e639da7baa23121e35aa06d6e182558e0e755696",
      "tree": "7d956fc301eb1988a8646ff3a62786639a843da0",
      "parents": [
        "b8678d76c3e09d0d65255f3971b6112a48e19099"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 21 15:11:13 2012 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Feb 23 16:39:15 2012 -0800"
      },
      "message": "New development permissions.\n\nThese are permissions that an application can request, but won\u0027t\nnormally be granted.  To have the permission granted, the user\nmust explicitly do so through a new \"adb shell pm grant\" command.\n\nI put these permissions in the \"development tools\" permission\ngroup.  Looking at the stuff there, I think all of the permissions\nwe already had in that group should be turned to development\npermissions; I don\u0027t think any of them are protecting public APIs,\nand they are really not things normal applications should use.\n\nThe support this, the protectionLevel of a permission has been\nmodified to consist of a base protection type with additional\nflags.  The signatureOrSystem permission has thus been converted\nto a signature base type with a new \"system\" flag; you can use\n\"system\" and/or \"dangerous\" flags with signature permissions as\ndesired.\n\nThe permissions UI has been updated to understand these new types\nof permissions and know when to display them.  Along with doing\nthat, it also now shows you which permissions are new when updating\nan existing application.\n\nThis also starts laying the ground-work for \"optional\" permissions\n(which development permissions are a certain specialized form of).\nCompleting that work requires some more features in the package\nmanager to understand generic optional permissions (having a\nfacility to not apply them when installing), along with the\nappropriate UI for the app and user to manage those permissions.\n\nChange-Id: I6571785c6bb5f6b291862b7a9be584885f88f3a5\n"
    },
    {
      "commit": "88572f7a3e9d7ef85c26865a0150f3c2041561c2",
      "tree": "30627dcff98dfa4a4058054ef198301b374be82c",
      "parents": [
        "745e02ae45d97fd5672ffc22ea854f011895a4e6"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Feb 21 11:47:18 2012 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Feb 22 15:06:06 2012 -0800"
      },
      "message": "Implementation of a java media codec interface and associated tools.\n\nChange-Id: I13e54062d4de584355c5d82bb027a68aeaf2923b\n"
    },
    {
      "commit": "6d3d5057b445069e73fd06adbc11fa412e7c48c3",
      "tree": "ed57e591ab52911b368cf340574109df4d976dc0",
      "parents": [
        "e800892c4b4e05914f0d08a7928113193b39d037"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Wed Feb 15 20:22:56 2012 -0800"
      },
      "committer": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Thu Feb 16 16:42:20 2012 -0800"
      },
      "message": "Improve textDirection APIs\n\nChange-Id: I8bff30f5adb0ab4077145d83ac4a716e04f289ac\n"
    },
    {
      "commit": "ccb1562e90d955416b9096d802464e37925486ef",
      "tree": "3e5b5e9be6762aa3f325d10c387e0692ed6cd564",
      "parents": [
        "c4c0a22ae982af65a16ef93d0cd3bc72149e9bfa"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Wed Feb 15 15:52:19 2012 -0800"
      },
      "committer": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Wed Feb 15 15:52:19 2012 -0800"
      },
      "message": "Add View.onResolvePadding() as a public API\n\n- following a comment from Dianne on this CL:\n\nChange-Id: Ifa11d6ac423f205d0684297d25885eac1a89f279\nhttps://android-git.corp.google.com/g/#/c/123009/1\n"
    },
    {
      "commit": "aba0336170a856133e66f9bab509221d4934614b",
      "tree": "1ec9a372f54a7ea3419fdde2b607a89d45d107e0",
      "parents": [
        "6be163651c988736e0fd2af4bc4dc1e59753d7ee"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Wed Feb 15 15:30:37 2012 -0800"
      },
      "committer": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Wed Feb 15 15:30:37 2012 -0800"
      },
      "message": "Fix the build\n\nChange-Id: I7c6a2536e894efde951e70188597f39811e2091f\n"
    },
    {
      "commit": "54546f22fbec63f8c12e56fa7109706a1bbc4e7b",
      "tree": "d5dea25a3272b20efbbcc31056c43bbc4bfcfd13",
      "parents": [
        "308b1eaa0a97811585a71341b7c94111a55e013c"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Tue Feb 14 16:26:16 2012 -0800"
      },
      "committer": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Wed Feb 15 14:54:48 2012 -0800"
      },
      "message": "Make MarginLayoutParams startMargin and endMargin API public\n\nChange-Id: I519f8ede818b068883ee1565d28e188298af9f0e\n"
    },
    {
      "commit": "2c884826b23e5c8cd3c9497a781c631927b74819",
      "tree": "8fad36bd41fc47d494342d17a299e2d74d0923f5",
      "parents": [
        "cb1abb15a7f98a90fedb9bcce081d4a617ed82f8"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Tue Feb 14 17:05:10 2012 -0800"
      },
      "committer": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Wed Feb 15 13:57:09 2012 -0800"
      },
      "message": "Make View paddingStart and paddingEnd API public\n\nChange-Id: I39fd987c866e8bfadbaa9a29c0e38b3b7ce03f7e\n"
    },
    {
      "commit": "e7beae3f4c9c170c7c6c42cf9b572f0ee1ec9c81",
      "tree": "e2eb306b5d118d6f4b30792d6248fa3673063e4d",
      "parents": [
        "95d4c9934f27b2c7276005b0235e0da44a89aea8"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Mon Feb 13 15:23:57 2012 -0800"
      },
      "committer": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Mon Feb 13 17:21:05 2012 -0800"
      },
      "message": "Make textDirection API public\n\nChange-Id: I2d5a0e3a990b9a5b78a3bbc8df7f655702743e4b\n"
    },
    {
      "commit": "7a29d84f0150b49215726d08a69d343df74e02bc",
      "tree": "1f9ba2f40da12366b85ca74f0f8541510adef4fd",
      "parents": [
        "27b51987dd3fa7e18703aab45fa10625a56d8c98",
        "47d248eb438674ab0ca10154f3ff5e88f4ed70b7"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Mon Feb 13 14:01:28 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 13 14:01:28 2012 -0800"
      },
      "message": "Merge \"Fix bug #5904777 GridLayout should be RTL aware\""
    },
    {
      "commit": "47d248eb438674ab0ca10154f3ff5e88f4ed70b7",
      "tree": "22206a64356856a9ee53157dcd63d77e1894c96e",
      "parents": [
        "7ff3144aa6a4c5e6f0f64933ce174b424cfbfd6e"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Wed Feb 08 17:57:48 2012 -0800"
      },
      "committer": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Mon Feb 13 13:52:47 2012 -0800"
      },
      "message": "Fix bug #5904777 GridLayout should be RTL aware\n\n- update also DEBUG mode for taking care about RTL\n- one minor issue remaining: left alignment is not properly honored in RTL\n\nChange-Id: I9a4c8413cb1189a032649472016994642418637b\n"
    },
    {
      "commit": "9c1d2980f2c7c73f098d551499c4fd48cdc96b4d",
      "tree": "559c7bd47b544c5b06e4c5ba01e6a016a749490b",
      "parents": [
        "d262744b7e4fd9e01a9a0a5d70927328e9391bf9"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 10 12:36:18 2012 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 10 13:02:11 2012 -0800"
      },
      "message": "Clean up and expose LongSparseArray.\n\nChange-Id: I15ba98d65e790ba45391cc7714f60b6e7de6ebfc\n"
    },
    {
      "commit": "d262744b7e4fd9e01a9a0a5d70927328e9391bf9",
      "tree": "b986a6e15d59b9ae63fb15e25cc57cbe13a792f5",
      "parents": [
        "f59f92f1ac33e39a3cba2a060cbf360d4b681a4d",
        "21fbd1f7da53dc044737803dccddf8099f1fc1e9"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 10 11:14:39 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 10 11:14:39 2012 -0800"
      },
      "message": "Merge \"Some cruft removal.\""
    },
    {
      "commit": "21fbd1f7da53dc044737803dccddf8099f1fc1e9",
      "tree": "e8de991996e1a5df738066683f6c5124efa33a9d",
      "parents": [
        "d10035d52bcd4eed9f83cad580d606cd522dd6c7"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 10 10:38:10 2012 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 10 10:54:15 2012 -0800"
      },
      "message": "Some cruft removal.\n\nChange-Id: If4a94bfd4a033748eb13e8f3ff25e24382746778\n"
    },
    {
      "commit": "59d46b06653b5f55c2f26d3ff8d642ffda0cecd8",
      "tree": "bdd117467060579bace40958f00a5066bdaf6bff",
      "parents": [
        "55ee84154b3afe07afef6311f707928856840f89",
        "688bd47fccf1a1373e6287bc49b5b33fad12b7f3"
      ],
      "author": {
        "name": "satok",
        "email": "satok@google.com",
        "time": "Fri Feb 10 02:22:57 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 10 02:22:57 2012 -0800"
      },
      "message": "Merge \"Add an api to switch to the next IME and subtype\""
    },
    {
      "commit": "688bd47fccf1a1373e6287bc49b5b33fad12b7f3",
      "tree": "8b394c364fc55aad2d87188156a058ef52d43fd5",
      "parents": [
        "ed219c117d449304bd720fc7d7da1f361015dc58"
      ],
      "author": {
        "name": "satok",
        "email": "satok@google.com",
        "time": "Thu Feb 09 20:09:17 2012 +0900"
      },
      "committer": {
        "name": "satok",
        "email": "satok@google.com",
        "time": "Fri Feb 10 16:44:12 2012 +0900"
      },
      "message": "Add an api to switch to the next IME and subtype\n\nBug: 5975302\n\nChange-Id: I48aa4220159c65f456d61a324efcdf0a1ceec91c\n"
    },
    {
      "commit": "a0c283eac33dd2da72235751bbfa4f2d9898d5ea",
      "tree": "4a772771c79de9a0817115a49b5018397cd64add",
      "parents": [
        "f6a7e1f7cd12fbbb2e35391850aec7d7d57b8f66"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Feb 09 10:47:01 2012 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Feb 09 11:18:33 2012 -0800"
      },
      "message": "Add new feature for running services in \"isolated\" sandbox processes.\n\nThis reserves a range of uids (for each user) in which these processes\nrun.  These uids are not associated with an application, so they\neffectively run with no permissions.  When a Service requests to\nrun in such a process through android:isolatedProcess\u003d\"true\", each\ntime it is brought up a new isolated process is started with its\nown unique uid.\n\nWhat we have so far gives us the basic infrastructure; more work\nremains to further lock down what these uids have access to.\n\nChange-Id: Ibfd27c75619cba61f528f46ede9113f98dc5f45b\n"
    },
    {
      "commit": "a33de55404eb2133d1bae2add3f6e8708459f56d",
      "tree": "1d15e532f2d950bec42317d6d43d48c7ebc1ae67",
      "parents": [
        "4651c0ea80d0b64f8c689d8257b86414628daf9d"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Feb 03 16:28:24 2012 -0800"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Feb 03 16:28:24 2012 -0800"
      },
      "message": "Make the TimeAnimator class public.\n\nThis class has existed since ICS, but was hidden. This change\njust makes it public API.\nAlso, cleaned up some internal javadocs.\n\nChange-Id: Id69408446ced183e01d2b065a67397eb305d9665\n"
    },
    {
      "commit": "ec99f609cc2db862db307f7ba56a2400c58403a0",
      "tree": "6fe7103e5cf1e34819149e92d0699c299dec854e",
      "parents": [
        "c445ed701ade87e5a15f161483fb0200ff5e3e4a",
        "4c1241df8f8b7fd5ec3dff6c7e0f66271248e76e"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Feb 02 18:50:55 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 02 18:50:55 2012 -0800"
      },
      "message": "Merge \"Rename CancellationSignal using preferred spelling.\""
    },
    {
      "commit": "4c1241df8f8b7fd5ec3dff6c7e0f66271248e76e",
      "tree": "36df1bce8fe7295d0ab778ca519232a291a3294f",
      "parents": [
        "8ca8a69d5801ad4b809e7b9dbf53bd728820924b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Feb 02 17:05:00 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Feb 02 18:02:16 2012 -0800"
      },
      "message": "Rename CancellationSignal using preferred spelling.\n\nBug: 5943637\nChange-Id: I12a339f285f4db58e79acb5fd8ec2fc1acda5265\n"
    },
    {
      "commit": "96d4f4d8d80974bfff2c29cb6abc0a64e28bb800",
      "tree": "68c04b583dcb2c3f416f853f3a8cd916969f359d",
      "parents": [
        "8e195a20d87895921ca3652d41d3e02daf36ca8b",
        "874d1f1f65a989405b3c1f692014ef2072e09f5e"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Feb 02 16:15:16 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 02 16:15:16 2012 -0800"
      },
      "message": "Merge \"Unhide AAC_ADTS file format\""
    },
    {
      "commit": "874d1f1f65a989405b3c1f692014ef2072e09f5e",
      "tree": "780d3c94ea2c3409a78b00221c65c441e3abaf97",
      "parents": [
        "b2305815f04d64a2e6abf672618676bbb197dee9"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Feb 02 11:54:43 2012 -0800"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Feb 02 15:50:24 2012 -0800"
      },
      "message": "Unhide AAC_ADTS file format\n\no also actually decprecated RAW_AMR file format\n\nChange-Id: Ic8ef5b0dca6f793fddf9e79d431e79f5083f7bff\n"
    },
    {
      "commit": "895f99e9ca3500ad69e9ae8d1a8f28237075c7c7",
      "tree": "9f21628d043cc3453ce97f6522369587287702e1",
      "parents": [
        "8ca8a69d5801ad4b809e7b9dbf53bd728820924b"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Feb 02 11:49:12 2012 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Feb 02 14:13:08 2012 -0800"
      },
      "message": "New global setting for developer options.\n\nChange-Id: I3f60538e9f858858501c5b063b0da97675d445a6\n"
    },
    {
      "commit": "c38fa1f63674971f9ac6ced1a449fb81026b62f7",
      "tree": "980e021b46c606b7b5ba7a33ad2b40a55a4a3d11",
      "parents": [
        "26daa02bdb0c62f8162ad8d4d771cabce8644b4a"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Feb 01 16:37:46 2012 -0800"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu Feb 02 08:40:44 2012 -0800"
      },
      "message": "Add Developer Option setting for Animator scaling.\n\nThis new setting allows users to set a scale factor for the\nduration and startDelay of all Animator-based animations. This\nsetting is very similar to the Transition animation scale and\nWindow animation scale settings, except this one applies specifically\nto Animator animations. The property is only accessible by users\nthrough the Settings UI, not programmatically. The value applies\nsystem-wide and is picked up per-process at the time of the first\nValueAnimator construction.\n\nThis is an update to a previous CL; this approach uses the WindowManager\nto store the animator scale settings, instead of SystemProperties.\n\nChange-Id: I8295fab060aa6d597ae507ded8f9c9d6077be966\n"
    },
    {
      "commit": "88de70f3c5824acae7524a774f9d2e2a6d125eb9",
      "tree": "bbd16928e5d75317e4981c8960d9d770b66a7dbe",
      "parents": [
        "9dbfc331b42371c5bcb1d8ec7750f4cd4f914123",
        "54ee2adf1711ce34c309c65c17ed6fd4d8f0d632"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Feb 01 16:54:53 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 01 16:54:53 2012 -0800"
      },
      "message": "Merge \"Deprecate ACTION_BACKGROUND_DATA_SETTING_CHANGED.\""
    },
    {
      "commit": "9dbfc331b42371c5bcb1d8ec7750f4cd4f914123",
      "tree": "d0905b6219bfe97820477a4bee368f0d8887e6b9",
      "parents": [
        "bbf1bc8b6c3348265930ce08506efbbd3c5ab61f",
        "b19a71a20adb48c084e87d06a1e6b0dcb49170f5"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Feb 01 16:31:48 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 01 16:31:48 2012 -0800"
      },
      "message": "Merge \"Support automatic cancellation of Loaders.\""
    },
    {
      "commit": "b19a71a20adb48c084e87d06a1e6b0dcb49170f5",
      "tree": "7b44bc9ebdf25842136091c6318c29f1c16a9ecf",
      "parents": [
        "f10d69f30107f27465684630460615443783f2bc"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jan 31 11:48:39 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Feb 01 16:30:14 2012 -0800"
      },
      "message": "Support automatic cancellation of Loaders.\n\nChange-Id: I18d3f49e413f48fcdd519d15e99c238ad54d35b9\n"
    },
    {
      "commit": "f46723b41f723ebfc9ed18c7c409b319f4b5e539",
      "tree": "c422815c0dee0488d32045d82693ee825a3f1217",
      "parents": [
        "c97992b489161a47f156f03ba605273dfb5e5cc2"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Jan 26 14:19:24 2012 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed Feb 01 14:36:34 2012 -0800"
      },
      "message": "Implement background vs foreground broadcasts\n\nBefore now, receiving a broadcast would cause a process to be hoisted\nto foreground priority / cgroup.  This is no longer the case: broadcasts\nby default are handled in the background, with a suitably increased\ntimeout interval.  When a given broadcast needs to be dealt with in a\nmore timely manner, the issuer can set the new FLAG_BROADCAST_FOREGROUND\nflag on the Intent, which will produce the old foreground-priority\nbehavior.\n\nTo avoid priority inversions, foreground broadcasts are tracked on a\nseparate outgoing queue and can be in flight simultaneously with a\nbackground-priority broadcast.  If there is already a background-level\nbroadcast in flight to a given app and then a foreground-level one is\ndispatched to that app, the app [and its handling of both broadcasts]\nwill be properly hoisted to foreground priority.\n\nThis change is also essentially the first step towards refactoring the\nbroadcast-handling portions of the Activity Manager into a more\nindependent existence.  Making BroadcastQueue a top-level class and\nregularizing its operation viz the primary Activity Manager operation\nis the next step.\n\nChange-Id: If1be33156dc22dcce318edbb5846b08df8e7bed5\n"
    },
    {
      "commit": "d2726ba47ef49ff7de5cd955d702d0bb99432b4a",
      "tree": "22b3570ceeec854d61c0625e37317c2c0b14d8a8",
      "parents": [
        "6c997a9e880e08c354ffd809bd62df9e25e9c4d4"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Jan 31 14:09:29 2012 -0800"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Jan 31 15:56:40 2012 -0800"
      },
      "message": "Add tools specific annotations to the API.\n\nThose annotations are not runtime retention and have zero impact\non the device builds.\n\nChange-Id: I18d905fccfe18eb621e1411d7ae7ba97910cc727\n"
    },
    {
      "commit": "a403a2e0f0d55a709821a6310de849176dc9b426",
      "tree": "8cdc846441318890696fb20de4f5aa5d5cf721fe",
      "parents": [
        "81bf15ac36c27f068fe770d32c247673bd98a068",
        "8bd9698b66d2e1219931ca1be5f81efaba3ed95a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 31 12:12:38 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 31 12:12:38 2012 -0800"
      },
      "message": "Merge \"Add GradientDrawable.setColors(int[])\""
    },
    {
      "commit": "8bd9698b66d2e1219931ca1be5f81efaba3ed95a",
      "tree": "0fe7df8719381358142a924974bfe60eb37a4373",
      "parents": [
        "74d7ca133a6db82abba5c0abe443fb001928e72c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 31 12:11:02 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 31 12:11:02 2012 -0800"
      },
      "message": "Add GradientDrawable.setColors(int[])\n\nThis change also updates the documentation to warn the user about which properties\nrequire a call to mutate().\n\nChange-Id: I84717068bf026669e3eef1ae92db665a964fe08a\n"
    },
    {
      "commit": "c1ca665827f0c34419a55c005254c1aaa0d58b40",
      "tree": "2c2ffa84065a0d73a341edf79681454765c25654",
      "parents": [
        "ed73440416eac56f20054239d6e8480caae1b6d3"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Tue Jan 31 07:33:48 2012 -0800"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Tue Jan 31 10:50:14 2012 -0800"
      },
      "message": "Add new ViewPropertyAnimator utility methods\n\nUsers have requested the ability to sequence ViewPropertyAnimator\nanimations. it is not possible with AnimatorSet, which only takes objects\nof type Animator (which VPA does not extend). But the AnimatorSet model\nis not appropriate for VPA anyway, since it is not possible to set up\na VPA ahead of time to start later; it\u0027s just not the way that VPA is\nintended to work.\n\nInstead, there are now two new methods on VPA, onStart() and onEnd(). These\nmethods take a Runnable which is executed when the animation starts or ends.\nThese methods should allow other VPAs or other arbitrary code to execute at the\nstart or finish of any particular VPA animation, allowing simple sequencing\nwithout the overhead of creating listeners and monitoring the cancelation status\nof the VPA.\n\nAdditionally, this change adds a new method withLayer() which sets a hardware\nlayer on the VPA\u0027s target view for the duration of the animation. This\nwas already possible, but required writing boilerplate code to create a listener\nand override the start/end methods to add and remove the layer. This utility method\nmakes this common use case much simpler and less error-prone.\n\nChange-Id: I819978517e17c647ffb7028063cd0adde68ff691\n"
    },
    {
      "commit": "54ee2adf1711ce34c309c65c17ed6fd4d8f0d632",
      "tree": "ddd3f973ee4723d0b9ad9b1f2acfc0ea5d40b07e",
      "parents": [
        "4d6da8649afc43022a156bffca6cd2c9127cefe1"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jan 30 16:29:24 2012 -0800"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jan 30 16:32:54 2012 -0800"
      },
      "message": "Deprecate ACTION_BACKGROUND_DATA_SETTING_CHANGED.\n\nBroadcast is no longer sent, except during first boot after platform\nupgrade.\n\nChange-Id: I7a9c105b5783ca9f9c3aca2efff6fe5c13a4c1fd\n"
    },
    {
      "commit": "0d29936ec3b5545a415e8d032150ea987aab36e3",
      "tree": "19cdedc6152a24eeeaebd51d64bf245626623461",
      "parents": [
        "acabf488674e0f5a6d0fa6d1da5e36b417a681a0"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu Jan 26 10:51:48 2012 -0800"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Mon Jan 30 07:53:59 2012 -0800"
      },
      "message": "Fix bug in LayoutTransition for INVISIBLE views\n\nWhen a view is becoming VISIBLE or INVISIBLE in a container with a\nLayoutTransition, animations run to fade the view in and out and also\nto run \u0027changing\u0027 animations on the view\u0027s other siblings. This logic\nalso cancels any running \u0027changin\u0027 animations to account for new ones\nrunning.\n\nHowever, in the specific case of INVISIBLE changes, there will be no\nlayout changes in the container - layout has already accounted for that\nview (unlike in the case of GONE views); the visibility is just a matter of\ndrawing the view (or not). Therefore, we\u0027re canceling \u0027changing\u0027 animations\nthat should continue running and not replacing them with any other animations,\nsince new animations would only be started on layout chnages which are not\nforthcoming.\n\nOne artifact seen from this bug is that the navigation bar buttons sometimes\ndisappear when changing orientation. This is because the menu button may\ntoggle between VISIBLE and INVISIBLE, causing animations on the other\nbuttons to get canceled, which leaves those views in a completely wrong\nstate.\n\nThe right thing to do is to avoid canceling in-process \u0027changing\u0027 animations\nand to skip the logic of setting up new \u0027changing\u0027 animations which won\u0027t fire\nanyway.\n\nThere is some minor API work in here because we did not previously have the\nnecessary information in LayoutTransition to know whether a view was being\nhidden or shown to/from the INVISIBLE state.\n\nIssue #5911213: LayoutTransitions ending in an odd state\n\nChange-Id: I5c60c8583c8ea08965727b4ef17b550c40a3882c\n"
    },
    {
      "commit": "2d2d7d6f42fe22ecc2b1dc8bb96a19e503a61a20",
      "tree": "edae78645ac19facd02fd3c081e34b6444d8d81b",
      "parents": [
        "30c918ce7fbe171944b28fc91b3f22b3d631872d",
        "75ea64fc54f328d37b115cfb1ded1e45c30380ed"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jan 27 17:37:24 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 27 17:37:24 2012 -0800"
      },
      "message": "Merge \"Implement a cancelation mechanism for queries.\""
    },
    {
      "commit": "75ea64fc54f328d37b115cfb1ded1e45c30380ed",
      "tree": "4254a5d2d0662de8b606b38fea6987da17c130e3",
      "parents": [
        "ebc016c01ea9d5707287cfc19ccc59b21a486c00"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jan 25 19:37:13 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jan 27 17:33:21 2012 -0800"
      },
      "message": "Implement a cancelation mechanism for queries.\n\nAdded new API to enable cancelation of SQLite and content provider\nqueries by means of a CancelationSignal object.  The application\ncreates a CancelationSignal object and passes it as an argument\nto the query.  The cancelation signal can then be used to cancel\nthe query while it is executing.\n\nIf the cancelation signal is raised before the query is executed,\nthen it is immediately terminated.\n\nChange-Id: If2c76e9a7e56ea5e98768b6d4f225f0a1ca61c61\n"
    },
    {
      "commit": "fbc659e259816b97877f49ff6ca1bd637fd7b7b8",
      "tree": "9d7434d42aac66b28f1d67ae25a6e552ac4570ed",
      "parents": [
        "cee905be4874f6d3f112527a53b0f7ff87655c66",
        "21c136a4ec91392ffc783c2a76b2a49252eb4de3"
      ],
      "author": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Fri Jan 27 10:35:12 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 27 10:35:12 2012 -0800"
      },
      "message": "Merge \"Fix build: update current.txt\""
    },
    {
      "commit": "21c136a4ec91392ffc783c2a76b2a49252eb4de3",
      "tree": "ea29eb7c7b09ba404145c03c0703d5bf7a1dca69",
      "parents": [
        "1f5badc1cb08f10ddf4b09aaaf34060a23999a51"
      ],
      "author": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Fri Jan 27 10:34:18 2012 -0800"
      },
      "committer": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Fri Jan 27 10:34:18 2012 -0800"
      },
      "message": "Fix build: update current.txt\n\nChange-Id: Ic28314e98784ebe513bd2191d3fa6c9bd5674422\n"
    },
    {
      "commit": "ef78d96b905f7b55cef5df7f5582a249a685458f",
      "tree": "8084afe714011a9655ced963adddcfb4fb0a5a95",
      "parents": [
        "7bea65020872a9945a6938068c4922d33cef5b4e",
        "1f5badc1cb08f10ddf4b09aaaf34060a23999a51"
      ],
      "author": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Fri Jan 27 09:59:10 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 27 09:59:10 2012 -0800"
      },
      "message": "Merge \"Add NdefMessage.getByteLength(), and more minor fixes:\""
    },
    {
      "commit": "1f5badc1cb08f10ddf4b09aaaf34060a23999a51",
      "tree": "1ed4d116df4898dd11e85cd48b0d83a099cb006b",
      "parents": [
        "7e4ef61732d7de33e34f5935cfad51049f65116a"
      ],
      "author": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Tue Jan 24 13:22:58 2012 -0800"
      },
      "committer": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Thu Jan 26 14:21:19 2012 -0800"
      },
      "message": "Add NdefMessage.getByteLength(), and more minor fixes:\n\nRemove NdefMessage from dispatch(). It\u0027s already in the Tag.\n/*package*/ cleanup\nFix sitemap after removal of NFCDemo\n\nChange-Id: Ie1f6d9ea98144aa97f56bb709a33f5d0ef916e8b\n"
    },
    {
      "commit": "259c1090464b966b8019abfae848a96895ecdbcd",
      "tree": "076a20ad9138ae6e905fd17a5becd7b102a5e8db",
      "parents": [
        "7e4ef61732d7de33e34f5935cfad51049f65116a"
      ],
      "author": {
        "name": "Gilles Debunne",
        "email": "debunne@google.com",
        "time": "Wed Jan 25 17:44:00 2012 -0800"
      },
      "committer": {
        "name": "Gilles Debunne",
        "email": "debunne@google.com",
        "time": "Thu Jan 26 13:46:25 2012 -0800"
      },
      "message": "Remove @deprecate in View\u0027s fadingEdge\n\nThe comment of this field is also aggregated in the android.R.styleable#View\ndescription. As a result, the @deprecated in the comment of this field also\napplies to android.R.styleable#View which incorrectly appears deprecated.\n\nThis fixes the problem, although fadingEdge will no longer be marked as\ndeprecated in IDEs. I believe it is less important that to make View\ndeprecated.\n\nChange-Id: I96d8e868001c4c853eb1536f8401275b9b1e689b\n"
    },
    {
      "commit": "52da22f2731cf5f312be9a913295af6638e49595",
      "tree": "8c1675aaf29a956c1a1edf8b3448fe62dc2d9f8a",
      "parents": [
        "3f696b264e4a3dd28421e9e1a58fe2c6241f48e4",
        "d96e3dfa02b203b1fc826e80d6f9aa074ba9c250"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jan 25 16:15:43 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 25 16:15:43 2012 -0800"
      },
      "message": "Merge \"Add xxhdpi; fix ActivityManager.getLauncherLargeIconSize() etc.\""
    },
    {
      "commit": "d96e3dfa02b203b1fc826e80d6f9aa074ba9c250",
      "tree": "a91a318c43620b6523bd2e83be01632f223b153c",
      "parents": [
        "43ea4e10dc402d20f506cdb4b4f27e49b4dc0443"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jan 25 15:12:23 2012 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jan 25 15:14:50 2012 -0800"
      },
      "message": "Add xxhdpi; fix ActivityManager.getLauncherLargeIconSize() etc.\n\nChange-Id: I519d6cdc527a402d93b98df17a64fc1da52ad598\n"
    },
    {
      "commit": "c97a552023c3c71079b39092e80c9b44f25a789b",
      "tree": "639e700cdd538f2ebd080143182fa30bb32fdd2a",
      "parents": [
        "dc828acd5fadb266b13cce459b1cacfad8ef7aef"
      ],
      "author": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Thu Jan 05 15:13:01 2012 +1100"
      },
      "committer": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Wed Jan 25 13:17:19 2012 -0800"
      },
      "message": "Improve NDEF API\u0027s\n\no Add NdefRecord.toMimeType()\n  Maps the record to a MIME type\no Add NdefRecord.toUri()\n  Maps the record to a URI\no Add hidden NfcAdapter.dispatch()\n  Helps test the dispatch path.\no Modify createMime(), createUri() and createExternal():\n  Do not try and strictly follow RFC requirements for URI or MIME content\n  types. This just leads to heartbreak - the RFC requirements are too strict.\n  For example RFC1341 forbids the use of \u0027.\u0027 in a MIME type, however this is in\n  common use in types such as \"application/vnd.companyname\". I think the best\n  approach is to only remove \u0027obvious\u0027 whitespace issues, and to convert\n  uppercase to lowercase as per Android guidelines.\n\nChange-Id: Id686f5f3b05b2dceafad48e1cfcbdb2b3890b854\n"
    },
    {
      "commit": "dc828acd5fadb266b13cce459b1cacfad8ef7aef",
      "tree": "b455a0448edbc7f0075a5a0ab8510f070ef5b140",
      "parents": [
        "43ea4e10dc402d20f506cdb4b4f27e49b4dc0443",
        "ccae412deda8b0c165c86f395752c0667a3411a6"
      ],
      "author": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Wed Jan 25 12:55:58 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 25 12:55:58 2012 -0800"
      },
      "message": "Merge \"Add API\u0027s for normalizing MIME\u0027s and URI\u0027s.\""
    },
    {
      "commit": "43ea4e10dc402d20f506cdb4b4f27e49b4dc0443",
      "tree": "dfe0152c138c5ea28395b0244a3495b29671e305",
      "parents": [
        "56965f97b33941440ffa0fc711d5d0f68ea45170",
        "81e9276a479fd3a5ccc3129505c0fb018941934b"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jan 25 12:29:17 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 25 12:29:17 2012 -0800"
      },
      "message": "Merge \"Added JELLY_BEAN version name; update some targetSdkVersion docs.\""
    },
    {
      "commit": "81e9276a479fd3a5ccc3129505c0fb018941934b",
      "tree": "adc9f1b8b1b90d52ceb063b193610a4aa6a4629c",
      "parents": [
        "3df01599879e2bed32960911394fc9e2a8fcbc33"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Sun Oct 09 16:00:21 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jan 25 11:16:57 2012 -0800"
      },
      "message": "Added JELLY_BEAN version name; update some targetSdkVersion docs.\n\nChange-Id: Ia38ff5b9ad2b63c2cf667260881222d9ff168052\n"
    },
    {
      "commit": "ccae412deda8b0c165c86f395752c0667a3411a6",
      "tree": "3ddc03df0182a5b372c2d38e27d5a7c312cf9e31",
      "parents": [
        "07d7d5a22dbb0a8df5631c8014f4706dd1e449da"
      ],
      "author": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Mon Jan 09 14:12:58 2012 -0800"
      },
      "committer": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Tue Jan 24 20:04:13 2012 -0800"
      },
      "message": "Add API\u0027s for normalizing MIME\u0027s and URI\u0027s.\n\nHelps developers create well-behaved intents:\n- lower case MIME data type\n- strip parameters from MIME content types\n- lowercase URI scheme\n\nThe new API\u0027s are\nnormalizeAndSetType()\nnormalizeAndSetData()\nnormalizeAndSetDataAndType()\nUri.normalize()\nnormalizeMimeType()\n\nChange-Id: Ib5c907897f39b1f705bcc4c9103ba1e6f316380b\n"
    },
    {
      "commit": "3f9c9eab7b41c409c3c7b503b89ad340e408b6a0",
      "tree": "5e56e93d10668f08cb2af2b763ed0b8f5bc39c5f",
      "parents": [
        "d4e34d61d01222ff90684b9a1dc4f9c8be560e7c"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Jan 24 12:02:31 2012 -0800"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Jan 24 12:09:11 2012 -0800"
      },
      "message": "NumberPicker should not throw an exception if no enough values for wrapping.\n\n1. The selector wheel was throwing an exception if a client requires that it\n   wraps its selector wheel if the number of values is less that the number\n   of values shown in the wheel.  While wrapping makes no sense if the all\n   possible values are already shown, we should not throw an exception,\n   rather to ignore the request.\n\nbug:5911190\n\nChange-Id: Icd90cd39f66d9f39939801752bf1eb1eef8fe757\n"
    },
    {
      "commit": "d4e34d61d01222ff90684b9a1dc4f9c8be560e7c",
      "tree": "4812d10e24bcaaf6e67933ea831554e29861da2f",
      "parents": [
        "b934a82139d555c40638226852390d53bb611cd7",
        "655e66bceba7595a2b80e7a328433e6ed5dc28a9"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jan 23 17:36:06 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 23 17:36:06 2012 -0800"
      },
      "message": "Merge \"Inform ContentObservers about the changed content Uri.\""
    },
    {
      "commit": "b934a82139d555c40638226852390d53bb611cd7",
      "tree": "e8f0daba6a3b8fadd4d5efaa70835679df30fe13",
      "parents": [
        "1a54368b24a8cb88ee56ee746eae45171a43b89e",
        "86de0590b94bcce27e3038c27464bed510bb564a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jan 23 17:35:50 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 23 17:35:50 2012 -0800"
      },
      "message": "Merge \"Clean up content observer code.\""
    },
    {
      "commit": "655e66bceba7595a2b80e7a328433e6ed5dc28a9",
      "tree": "79dfc3c3008d34e4969a1c123da90ce27a207edf",
      "parents": [
        "86de0590b94bcce27e3038c27464bed510bb564a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jan 23 15:51:41 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jan 23 17:28:29 2012 -0800"
      },
      "message": "Inform ContentObservers about the changed content Uri.\n\nAdded a new method ContentObserver.onChange(boolean, Uri) that\nreceives the changed content Uri.  This can help applications make\nbetter decisions about how to interpret a change notification.\n\nChange-Id: I8e35378b6485fe22c5bc240ba07557d269af0836\n"
    },
    {
      "commit": "e575005f7c7a2ec26662862631ca1d0d1959d6bc",
      "tree": "4014e5e14e7cbabf02e2894cb9f309b605675dfc",
      "parents": [
        "eda775cc89b862e0637af132d78168e1b28820f8",
        "36d7549181af397cfaf879f46e407e762e0e8cba"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jan 23 16:27:50 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 23 16:27:50 2012 -0800"
      },
      "message": "Merge \"Update hardware acceleration doc\""
    },
    {
      "commit": "36d7549181af397cfaf879f46e407e762e0e8cba",
      "tree": "bc67c2a1fa3fcc46b0cb757a6dfc3a643a2f4a6c",
      "parents": [
        "1e878d2ff506e7e96bbdb9d06afea43561445b7a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jan 23 16:26:46 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jan 23 16:26:46 2012 -0800"
      },
      "message": "Update hardware acceleration doc\n\nChange-Id: I3bed77b3c4e1eff96fa462e4849f25f38784c415\n"
    },
    {
      "commit": "d215ddf3d95b0d009ea7fc50c0d36647ebaa1c14",
      "tree": "e3e9c80f64e54e905d72f6b5f667f51af5637a56",
      "parents": [
        "5d76def68d135a4a0cf0a99a0fba7dad3e28c51a",
        "1e878d2ff506e7e96bbdb9d06afea43561445b7a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jan 23 15:35:24 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 23 15:35:24 2012 -0800"
      },
      "message": "Merge \"Fix API typo\""
    },
    {
      "commit": "1e878d2ff506e7e96bbdb9d06afea43561445b7a",
      "tree": "8ef74e0686cef9acd18f9b65615c76afd1b15be1",
      "parents": [
        "30f1312b3cb584c14eba60e6809d4eeed5d906bf"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jan 23 15:34:25 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jan 23 15:34:25 2012 -0800"
      },
      "message": "Fix API typo\n\nChange-Id: Iac6de947b0d550cc8dd4a3b5d88baa322c21bbb8\n"
    },
    {
      "commit": "86de0590b94bcce27e3038c27464bed510bb564a",
      "tree": "0f192948c6ed5b80d4efd0219bd6c6b74b12ced9",
      "parents": [
        "bd4c9f13022e875c8b420248214482a5f5b46618"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jan 23 13:01:18 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jan 23 13:01:18 2012 -0800"
      },
      "message": "Clean up content observer code.\n\nImproved the documentation a little bit.\n\nFixed a bug in ContentService wherein if a ContentObserver was\npassed as an argument and its deliverSelfNotifications() method\nreturned true, then notifyChange would tell all observers that\nthe change was a self-change even though it was only a self-change\nfrom the perspective of the provided observer.\n\nDeprecated ContentObservable.notifyChange since it is never\nused and in general it shouldn\u0027t be because we want the notification\nto be posted to the handler.\n\nChange-Id: Idde49eb40777e011a068f2adae8a32f779dfb923\n"
    },
    {
      "commit": "d9ea468d6a9cb6018ce33d3dcf9db72f02773af1",
      "tree": "b04a38183228b5f2c8ee6706522ddd0b89697b8f",
      "parents": [
        "30f1312b3cb584c14eba60e6809d4eeed5d906bf"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jan 20 18:36:40 2012 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jan 23 12:01:00 2012 -0800"
      },
      "message": "New brightness setting to adjust auto-brightness mode.\n\nChange-Id: Icfec22be99d8c79e9ff5720b80fb9dacbba36134\n"
    },
    {
      "commit": "22d418437e44587cb0fba4353515719453269189",
      "tree": "dbebce7f76ba71031a68fd39fc7299edd862f08c",
      "parents": [
        "90bd18737a5ce16708003363683744cfd0480d83"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 19 18:33:25 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 19 18:33:25 2012 -0800"
      },
      "message": "Fix the build, for real\n\nChange-Id: I6263f7e5e3ae2f7efe045f8b464c0ed1b87fc793\n"
    },
    {
      "commit": "bad12166190a7e8087eb5db0ae8df9a4e5843fde",
      "tree": "4700ded79b115118b067b7f7415d3fcc6a0438f3",
      "parents": [
        "fa78fe0d70fe7e6a9eb19680888b617ea57eaad4",
        "f9d9c065ed75f1196316a9a31f92309f602cef76"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 19 17:34:26 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 19 17:34:26 2012 -0800"
      },
      "message": "Merge \"Deprecate unused APIs\""
    },
    {
      "commit": "f9d9c065ed75f1196316a9a31f92309f602cef76",
      "tree": "ca552893d80825f16728e613d2aa341b1cdd92d9",
      "parents": [
        "75582e889d4895483309e38364266073be6d46b8"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 19 16:53:41 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 19 17:16:38 2012 -0800"
      },
      "message": "Deprecate unused APIs\n\nChange-Id: I0107e246b632dda96b8b025217936954f1f46283\n"
    },
    {
      "commit": "96c804af0b4eef79f6d3cdb0f20682e243f1b73d",
      "tree": "103c528973689c6213f118bb9fc086a84deafe9c",
      "parents": [
        "fb9ffe02609c9c4ffca64927e72bc935cfe87768"
      ],
      "author": {
        "name": "Jean Chalard",
        "email": "jchalard@google.com",
        "time": "Mon Jun 13 17:24:43 2011 +0900"
      },
      "committer": {
        "name": "Jean Chalard",
        "email": "jchalard@google.com",
        "time": "Wed Jan 18 18:54:34 2012 +0900"
      },
      "message": "Add methods to support shortcuts in user dict.\n\nAdds the new interface to the user dictionary, which includes\na clean way of inserting words in any locale and support for\nshortcuts.\n\nChange Ib318c047 implements the provider part of this.\n\nBug: 4646172\nChange-Id: Id3ca792f2555fac46728f9d404ab0199971f6503\n"
    },
    {
      "commit": "5a5b84c3e1e6381375a9cb02ee4972e5348668a1",
      "tree": "4c99853ed954f7acd1ff619991a56f8705f2a2c4",
      "parents": [
        "cf1290271922dab2ad9fd0b155a00a5fe0597ba8",
        "c8f4183669c7cf166ced70bf60ad056482f3390b"
      ],
      "author": {
        "name": "Ken Wakasa",
        "email": "kwakasa@google.com",
        "time": "Thu Jan 12 18:15:42 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 12 18:15:42 2012 -0800"
      },
      "message": "Merge \"Bring LatinIME\u0027s privateImeOptions \"forceAscii\" to a formal public API\""
    },
    {
      "commit": "c8f4183669c7cf166ced70bf60ad056482f3390b",
      "tree": "b3d179bb4da5dc0b8db895a12e158395ce2237eb",
      "parents": [
        "e00274a5ab8d16d1050adda84412016c01a469b3"
      ],
      "author": {
        "name": "Ken Wakasa",
        "email": "kwakasa@google.com",
        "time": "Thu Jan 12 22:51:55 2012 +0900"
      },
      "committer": {
        "name": "Ken Wakasa",
        "email": "kwakasa@google.com",
        "time": "Fri Jan 13 09:45:41 2012 +0900"
      },
      "message": "Bring LatinIME\u0027s privateImeOptions \"forceAscii\" to a formal public API\n\nbug: 5850605\nChange-Id: I6ab6076909c735a3e0729b457de68d0b5301184d\n"
    },
    {
      "commit": "bd2ff3666b6e923d5df074f614f350304f2c89f2",
      "tree": "28cfdd70a714d871670e2f9205b13eda0b5bd444",
      "parents": [
        "986f00faf44b0d9ed5b1384746ca4254037fc180",
        "3d0edd31d8082b7b8b2cdee5efda216179f677b5"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Thu Jan 12 15:36:58 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 12 15:36:58 2012 -0800"
      },
      "message": "Merge \"AccessibilityService description not internationalized.\""
    },
    {
      "commit": "986f00faf44b0d9ed5b1384746ca4254037fc180",
      "tree": "ee51ba282c84cc22d2391ff307fdfda10af9b92e",
      "parents": [
        "156936975dec49022681f218b8221ef9e3d87011",
        "e5360fbf3efe85427f7e7f59afe7bbeddb4949ac"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jan 12 15:03:26 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 12 15:03:26 2012 -0800"
      },
      "message": "Merge \"Rewrite SQLite database wrappers.\""
    },
    {
      "commit": "e5360fbf3efe85427f7e7f59afe7bbeddb4949ac",
      "tree": "53d32881de72a9b4b018f01dade23373cb65cc88",
      "parents": [
        "3f11f302c7e8c4ba513f6c559f33db96319c3825"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 31 17:48:13 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jan 12 14:56:18 2012 -0800"
      },
      "message": "Rewrite SQLite database wrappers.\n\nThe main theme of this change is encapsulation.  This change\npreserves all existing functionality but the implementation\nis now much cleaner.\n\nInstead of a \"database lock\", access to the database is treated\nas a resource acquisition problem.  If a thread\u0027s owns a database\nconnection, then it can access the database; otherwise, it must\nacquire a database connection first, and potentially wait for other\nthreads to give up theirs.  The SQLiteConnectionPool encapsulates\nthe details of how connections are created, configured, acquired,\nreleased and disposed.\n\nOne new feature is that SQLiteConnectionPool can make scheduling\ndecisions about which thread should next acquire a database\nconnection when there is contention among threads.  The factors\nconsidered include wait queue ordering (fairness among peers),\nwhether the connection is needed for an interactive operation\n(unfairness on behalf of the UI), and whether the primary connection\nis needed or if any old connection will do.  Thus one goal of the\nnew SQLiteConnectionPool is to improve the utilization of\ndatabase connections.\n\nTo emulate some quirks of the old \"database lock,\" we introduce\nthe concept of the primary database connection.  The primary\ndatabase connection is the one that is typically used to perform\nwrite operations to the database.  When a thread holds the primary\ndatabase connection, it effectively prevents other threads from\nmodifying the database (although they can still read).  What\u0027s\nmore, those threads will block when they try to acquire the primary\nconnection, which provides the same kind of mutual exclusion\nfeatures that the old \"database lock\" had.  (In truth, we\nprobably don\u0027t need to be requiring use of the primary database\nconnection in as many places as we do now, but we can seek to refine\nthat behavior in future patches.)\n\nAnother significant change is that native sqlite3_stmt objects\n(prepared statements) are fully encapsulated by the SQLiteConnection\nobject that owns them.  This ensures that the connection can\nfinalize (destroy) all extant statements that belong to a database\nconnection when the connection is closed.  (In the original code,\nthis was very complicated because the sqlite3_stmt objects were\nmanaged by SQLiteCompiledSql objects which had different lifetime\nfrom the original SQLiteDatabase that created them.  Worse, the\nSQLiteCompiledSql finalizer method couldn\u0027t actually destroy the\nsqlite3_stmt objects because it ran on the finalizer thread and\ntherefore could not guarantee that it could acquire the database\nlock in order to do the work.  This resulted in some rather\ntortured logic involving a list of pending finalizable statements\nand a high change of deadlocks or leaks.)\n\nBecause sqlite3_stmt objects never escape the confines of the\nSQLiteConnection that owns them, we can also greatly simplify\nthe design of the SQLiteProgram, SQLiteQuery and SQLiteStatement\nobjects.  They no longer have to wrangle a native sqlite3_stmt\nobject pointer and manage its lifecycle.  So now all they do\nis hold bind arguments and provide a fancy API.\n\nAll of the JNI glue related to managing database connections\nand performing transactions is now bound to SQLiteConnection\n(rather than being scattered everywhere).  This makes sense because\nSQLiteConnection owns the native sqlite3 object, so it is the\nonly class in the system that can interact with the native\nSQLite database directly.  Encapsulation for the win.\n\nOne particularly tricky part of this change is managing the\nownership of SQLiteConnection objects.  At any given time,\na SQLiteConnection is either owned by a SQLiteConnectionPool\nor by a SQLiteSession.  SQLiteConnections should never be leaked,\nbut we handle that case too (and yell about it with CloseGuard).\n\nA SQLiteSession object is responsible for acquiring and releasing\na SQLiteConnection object on behalf of a single thread as needed.\nFor example, the session acquires a connection when a transaction\nbegins and releases it when finished.  If the session cannot\nacquire a connection immediately, then the requested operation\nblocks until a connection becomes available.\n\nSQLiteSessions are thread-local.  A SQLiteDatabase assigns a\ndistinct session to each thread that performs database operations.\nThis is very very important.  First, it prevents two threads\nfrom trying to use the same SQLiteConnection at the same time\n(because two threads can\u0027t share the same session).\nSecond, it prevents a single thread from trying to acquire two\nSQLiteConnections simultaneously from the same database (because\na single thread can\u0027t have two sessions for the same database which,\nin addition to being greedy, could result in a deadlock).\n\nThere is strict layering between the various database objects,\nobjects at lower layers are not aware of objects at higher layers.\nMoreover, objects at higher layers generally own objects at lower\nlayers and are responsible for ensuring they are properly disposed\nwhen no longer needed (good for the environment).\n\nAPI layer: SQLiteDatabase, SQLiteProgram, SQLiteQuery, SQLiteStatement.\nSession layer: SQLiteSession.\nConnection layer: SQLiteConnectionPool, SQLiteConnection.\nNative layer: JNI glue.\n\nBy avoiding cyclic dependencies between layers, we make the\narchitecture much more intelligible, maintainable and robust.\n\nFinally, this change adds a great deal of new debugging information.\nIt is now possible to view a list of the most recent database\noperations including how long they took to run using\n\"adb shell dumpsys dbinfo\".  (Because most of the interesting\nwork happens in SQLiteConnection, it is easy to add debugging\ninstrumentation to track all database operations in one place.)\n\nChange-Id: Iffb4ce72d8bcf20b4e087d911da6aa84d2f15297\n"
    },
    {
      "commit": "11299b1b8c49e53ed25dce916aa24282b2e15662",
      "tree": "25e30176a96cc779635c8a13995349d7868e6aa2",
      "parents": [
        "4acb784630c9ceeff1f8834751999661fdb4eab2"
      ],
      "author": {
        "name": "satok",
        "email": "satok@google.com",
        "time": "Thu Jan 12 12:43:44 2012 +0900"
      },
      "committer": {
        "name": "satok",
        "email": "satok@google.com",
        "time": "Thu Jan 12 13:54:53 2012 +0900"
      },
      "message": "Make public SpellChecker utilities\n\nBug: 5639238\nChange-Id: Id7dd2263a6305cc6ba0cf8f4d8ad8fb0d39a48ff\n"
    },
    {
      "commit": "32313b161f7c7d17841bf49b3d146fd19dd7fde1",
      "tree": "fb05cd7f89cab1cd68dd898996b94ab4b9522034",
      "parents": [
        "14f722359c87c64d864cbf237c60a18b172fcd24",
        "d476c8b8a8a6fadea7e72426d3e93c4e6b00e543"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jan 09 16:51:52 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jan 09 16:51:52 2012 -0800"
      },
      "message": "am d476c8b8: am d3be0a76: Merge \"Unhide Resources APIs for getting resources at specific densities.\" into ics-mr1\n\n* commit \u0027d476c8b8a8a6fadea7e72426d3e93c4e6b00e543\u0027:\n  Unhide Resources APIs for getting resources at specific densities.\n"
    }
  ],
  "next": "613989772f7d7f7317349568a4809bf08b942bd7"
}
