)]}'
{
  "log": [
    {
      "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": "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"
    },
    {
      "commit": "613989772f7d7f7317349568a4809bf08b942bd7",
      "tree": "7f77a9a8561729b6329551e5c4962e41256b5bc8",
      "parents": [
        "7944704e6c4cc10105838b78d3d8403bf66a066b"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jan 09 12:00:30 2012 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jan 09 12:00:30 2012 -0800"
      },
      "message": "Unhide Resources APIs for getting resources at specific densities.\n\nThis adds Resources.getDrawableForDensity() and\nResources.getValueForDensity().  These are needed for applications\nto correctly retrieve larger icons such as in launcher when\nrunning on a tablet.  We had already exposed the APIs to tell the\napplication which density to use for app icons on the current\ndevice, but didn\u0027t unhide these APIs that allowed you to\nactually retrieve them.\n\nThis is safe to do without introducing a new API level (as long\nas we do it soon) because we know these APIs already exist in\nAndroid 4.0, and there is no reason for anyone to be removing\nthem when building a device.\n\nChange-Id: I5138e5dc908197b66a98d20af73c5374cb5d41d3\n"
    },
    {
      "commit": "3d0edd31d8082b7b8b2cdee5efda216179f677b5",
      "tree": "b8071361f497ce57dd5a9e1ff575b2ad3fea0da4",
      "parents": [
        "c2fc52dc9ce8728bcd1c2b4d82ee573fa7f5049b"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Jan 03 16:38:46 2012 -0800"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Jan 03 17:05:38 2012 -0800"
      },
      "message": "AccessibilityService description not internationalized.\n\n1. AccessibilityServiceInfo loading the description string on\n   creation and using this value. Hence, changing the locale\n   results in reporting incorrectly localized string. Added a\n   new loadDescription method to return the localized version.\n\n2. Deprecated the old method.\n\nbug:5807616\n\nChange-Id: Id82bda3c6a90fa6681b035d20da0b8688ed68da3\n"
    },
    {
      "commit": "19644b613ef14434abe11e6cd16eb9e06057c9c6",
      "tree": "a22b8ba231079e9d7dfbababe45a5c154413aeaa",
      "parents": [
        "e4f0034226731724b67201d69fb4034ef857e2d3"
      ],
      "author": {
        "name": "Jonathan Dixon",
        "email": "joth@google.com",
        "time": "Wed Dec 21 14:21:36 2011 +0000"
      },
      "committer": {
        "name": "Jonathan Dixon",
        "email": "joth@google.com",
        "time": "Wed Dec 21 14:21:36 2011 +0000"
      },
      "message": "Make WebView.HitTestResult static\n\n- we can do this, because HitTestResult never had a published constructor\n  so the only code that can create it has always lived in this package.\n- doing this makes the class design cleaner, and smooths the way for allowing\n  the new WebView implementation to deal in these results in contexts where\n  the appropriate WebView instance is not readily available.\n\nChange-Id: I9e1f1c0faeb16436b1861aab3c2871a5851dfb54\n"
    },
    {
      "commit": "5f45cbac03aef1aaa4e6947c3a1188768343686a",
      "tree": "a8b7dee07861e44e21ccfaa3166f8d6c59cc24af",
      "parents": [
        "eca6d909f7dd990c9a3226aa2f1ed1fa0cd250a2"
      ],
      "author": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Mon Dec 19 16:51:45 2011 -0800"
      },
      "committer": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Mon Dec 19 16:51:45 2011 -0800"
      },
      "message": "Fix build break - move API change from 15.txt to 16.txt\n\nChange-Id: I3e7e2106424e00d696909c811ffe704ca8bffced\n"
    },
    {
      "commit": "eca6d909f7dd990c9a3226aa2f1ed1fa0cd250a2",
      "tree": "ffdd916d697eb26d7190508967c6678b23429737",
      "parents": [
        "01583ef715641c8a3ce68269b091e75adbe9335a",
        "a356bf1cd81614a94ef6c720998792480ade4c84"
      ],
      "author": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Mon Dec 19 15:53:10 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Dec 19 15:53:10 2011 -0800"
      },
      "message": "Merge \"Rewrite NDEF parsing in Java, clean-up API.\""
    },
    {
      "commit": "a356bf1cd81614a94ef6c720998792480ade4c84",
      "tree": "cab716f0cb6beb83cb2ecea93030d8d6b8336b3c",
      "parents": [
        "6752d0ab029a185a42e34e7a933b669e6ed19e89"
      ],
      "author": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Tue Dec 13 15:36:31 2011 -0800"
      },
      "committer": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Mon Dec 19 15:48:35 2011 -0800"
      },
      "message": "Rewrite NDEF parsing in Java, clean-up API.\n\no Lots of documentation fixes.\no Add NdefMessage(NdefRecord ... records) ctor\no Add NdefRecord.createMime()\no Add NdefRecord.createExternal()\no Add toString(), equals() and hashCode() implementations\no Deprecate NdefRecord(byte[]) and NdefRecord.toByteArray()\no Remove framework dependency on libnfc_ndef.so\no Remove NfcAdapter.getDefaultAdapter(), its been deprecated a while\n\nnext step:\no Attempt to move NdefMessage -\u003e Intent conversion into NDEF, and\n  make it CTS tested. This will ensure consistent NDEF -\u003e Intent\n  mapping across all Android devices.\n\nChange-Id: Ifed4910caa9a1d6bad32dbf0a507ab22bca35e22\n"
    },
    {
      "commit": "d47f1531d0653be33133cf05ec317a236e763646",
      "tree": "43cf3a5fe4bc5b9ef34f53f492fd5dc3e1b2fa12",
      "parents": [
        "1fd4de0adc9e93aa01dd8e1aef1a83b85b9a7579"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Dec 16 11:18:52 2011 -0800"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Dec 16 13:44:01 2011 -0800"
      },
      "message": "Make Property objects in View final\n\nThe various Properties added to View in 4.0 (ALPHA, TRANSLATION_X, etc.)\nwere not final, making it possible to assign on property to another.\nNot something that someone would want to do, but we should try to prevent\nthat kind of mess. This API change makes those properties final.\n\nChange-Id: I7d0c7f738eb2074d0781b1ba6a7c19339bac4477\n"
    },
    {
      "commit": "aaf30e370f9a1aa645039138f54246ca4cd483fa",
      "tree": "e859f2ac621a518ba36035739900bb99a8f1af5c",
      "parents": [
        "69b3d10d6670d98442a6d06fa833399a3b9f1529",
        "d5064be3b5922ee6522a33f8b729ffee2e3d7b4b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Dec 16 12:33:46 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 16 12:33:46 2011 -0800"
      },
      "message": "Merge \"Make SQLiteQuery and SQLiteProgram final.\""
    },
    {
      "commit": "d5064be3b5922ee6522a33f8b729ffee2e3d7b4b",
      "tree": "67d51b19e114b91270fe8d0710a868ae12a5d769",
      "parents": [
        "99cfc22639b0cd393d74262a58a2123a2b632a58"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Dec 14 14:25:13 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Dec 16 03:59:26 2011 -0800"
      },
      "message": "Make SQLiteQuery and SQLiteProgram final.\n\nWe can do this because the classes already cannot be subclassed\nby applications due to the fact they only have package private\nconstructors.\n\nOne very nice consequence of this observation is that we can hide or\ndelete several @deprecated protected members which are effectively\ninaccessible because applications cannot create subclasses!\n\nChange-Id: I2d3a0d2ad72b9289ebcdf907e4e4e6caf27f9076\n"
    },
    {
      "commit": "44fcb83b38b062a650ddf556fe7f5e34905df9ea",
      "tree": "f5726b3011934023b43a46eb3ce3be6742a274ba",
      "parents": [
        "3766a7a27535101e62af958b1d2d710daa166d7d"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Wed Dec 14 20:59:30 2011 -0800"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Thu Dec 15 16:16:14 2011 -0800"
      },
      "message": "Add a new ui mode for \"appliance\"\n\nThe idea is that this is a device which is more-or-less headless.  It\nmight have some limited interaction capabilities, but it\u0027s not something\nthat you want to rely on having.\n\nChange-Id: Ib92f53a120bf83de781728011721a4859def7d9f\n"
    },
    {
      "commit": "acd5f963b91f481ac0ec05c4b1517cd86eb37fe7",
      "tree": "3aa7f2454c8244dd34bdea62f959b26872c4ce28",
      "parents": [
        "df3c49ee2e00f85599348473951a208be9397829",
        "0ae6e1719b1fc0aee6e5cf690a7005e975d96df9"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Dec 12 18:01:26 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Dec 12 18:01:26 2011 -0800"
      },
      "message": "am 0ae6e171: am 359bb3b4: Final API 15.\n\n* commit \u00270ae6e1719b1fc0aee6e5cf690a7005e975d96df9\u0027:\n  Final API 15.\n"
    },
    {
      "commit": "359bb3b432b21590c12588c3ca3880ac17aadc96",
      "tree": "cb0a820bbc241fc39c9789b5780aaf52a34479bd",
      "parents": [
        "a1279586dd1a866dd58d669aa0980d71f6c589d9"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Dec 12 16:26:38 2011 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Dec 12 16:26:38 2011 -0800"
      },
      "message": "Final API 15.\n\nChange-Id: Ic356a7b4d56237e928e653c68e87b070e923d145\n"
    },
    {
      "commit": "1db7a31a45c234eb18bd788264591859bee64815",
      "tree": "6afa66dae5d2124106f824f450c690bb058ba642",
      "parents": [
        "8c9d01391cd257dce65928b462b32df24eb38b82",
        "75596b4545da36fa7592bd4a2ae680e5b336ee47"
      ],
      "author": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Fri Dec 09 14:37:05 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 09 14:37:05 2011 -0800"
      },
      "message": "Merge \"Add BluetoothAdapter.getRemoteDevice(byte[])\""
    },
    {
      "commit": "75596b4545da36fa7592bd4a2ae680e5b336ee47",
      "tree": "32325499de5525e76b15eb8a153714ff6bc11248",
      "parents": [
        "09588f64a280b98eefc22d05fd5ff7916ba9203e"
      ],
      "author": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Wed Dec 07 15:03:55 2011 -0800"
      },
      "committer": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Fri Dec 09 14:35:38 2011 -0800"
      },
      "message": "Add BluetoothAdapter.getRemoteDevice(byte[])\n\nThis is useful for NFC-\u003eBT hand-over, where we are already working with bytes.\n\nChange-Id: I2fff0b4fa0cefe9bfdf9a13f7ec6f557776a8a03\n"
    },
    {
      "commit": "d5f44204578d6b3d9c3864eaed84bf453998c7cf",
      "tree": "08a3b7f7596d0ed40ffac0103a267e83661bb4f4",
      "parents": [
        "08943f7acc118e6ae38823242d9c41a125c34ad6",
        "1113e75588782cc23074b9a9bb887de06eff8a49"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Dec 06 10:32:51 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Dec 06 10:32:51 2011 -0800"
      },
      "message": "am 1113e755: am ea25ea7e: Merge \"Adding a system preference whether to speak passwords in accessibility mode.\" into ics-mr1\n\n* commit \u00271113e75588782cc23074b9a9bb887de06eff8a49\u0027:\n  Adding a system preference whether to speak passwords in accessibility mode.\n"
    },
    {
      "commit": "ea25ea7ef30be14dd940f1667e0308bfff5b4d85",
      "tree": "d3c4203fce24db2d11b8198fd8e57e8db4f131f9",
      "parents": [
        "4079702ac27b51282a25de5f7c20f6fba6b71995",
        "55f937abe1a4fedb86c2679c66f0b5220ec3780e"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Dec 06 10:27:04 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 06 10:27:04 2011 -0800"
      },
      "message": "Merge \"Adding a system preference whether to speak passwords in accessibility mode.\" into ics-mr1"
    },
    {
      "commit": "deb86c63c33f766b1a7fd6916f56b757d40803b1",
      "tree": "b0fa805bd45446439e8bdd32e27d9b5d9519eba9",
      "parents": [
        "fc2e4f6d01af0ed17030db9e19db6335e18c8ffd",
        "ec42750e4d0e695515d078fb1f222c99a705fd93"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Dec 05 19:20:45 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Dec 05 19:20:45 2011 -0800"
      },
      "message": "am ec42750e: am 0c0120ef: Merge \"Fix issue #5714517: App shortcuts can result in bad task intents\" into ics-mr1\n\n* commit \u0027ec42750e4d0e695515d078fb1f222c99a705fd93\u0027:\n  Fix issue #5714517: App shortcuts can result in bad task intents\n"
    },
    {
      "commit": "f5b8671c340f189c50b41c53622f979b6d5e0a57",
      "tree": "fe81dca6cd70d011c62a036b3fc0f940cc71bf23",
      "parents": [
        "003c15d72ccd3856d5abfe6d66a2a40d0eca85bc"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Dec 05 17:42:41 2011 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Dec 05 17:42:41 2011 -0800"
      },
      "message": "Fix issue #5714517: App shortcuts can result in bad task intents\n\nNew API to let you build an Intent whose base configuration is correct,\nbut has an additional \"selector\" to pick out the specific app that you\nwould like launched.\n\nChange-Id: Ide9db6dc60e2844b7696cfe09b28337fe7dd63db\n"
    },
    {
      "commit": "55f937abe1a4fedb86c2679c66f0b5220ec3780e",
      "tree": "880f926d03c61252fbad516cfde201c316c10ca8",
      "parents": [
        "003c15d72ccd3856d5abfe6d66a2a40d0eca85bc"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Mon Dec 05 11:42:07 2011 -0800"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Mon Dec 05 14:54:59 2011 -0800"
      },
      "message": "Adding a system preference whether to speak passwords in accessibility mode.\n\nBy default we do not speak passwords if the user has no headset. However,\nmany users find this too restrictive and would like a way to enable\npassword announcement. While we cannot speak the passwords all the time\n,to avoid leaking them, we expose a preference so each user can choose\nthe option that best works for him/her.\n\nbug:5712607\n\nChange-Id: I6eb0c40834abe5297f7dc74be02d180a5bef0174\n"
    },
    {
      "commit": "a2a56f82a8577625003931664240246c10552867",
      "tree": "0203b8d466a3a4b50f7105b115a5a3f524a319b7",
      "parents": [
        "4d86d334e7214ccdcd689647707aa3d0ec080841",
        "48e07296800c49f8bc9b34cc57372593021f79a1"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Dec 01 18:52:27 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Dec 01 18:52:27 2011 -0800"
      },
      "message": "am 48e07296: am bfb3dec2: Merge \"More social integration.\" into ics-mr1\n\n* commit \u002748e07296800c49f8bc9b34cc57372593021f79a1\u0027:\n  More social integration.\n"
    },
    {
      "commit": "a3d487cb13983643d5024e493e4d56c96736f1eb",
      "tree": "95be4655895195ea7d23f83fb26f462ccf19d7c7",
      "parents": [
        "e9f24a43021734d28a4f65ebc804847b31ce13e8"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Dec 01 18:42:24 2011 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Dec 01 18:42:24 2011 -0800"
      },
      "message": "More social integration.\n\nChange-Id: I9be09e08bda5db6c05f5beabc380708a11ead43b\n"
    },
    {
      "commit": "0475f82c95e6e9657580820b16b0e48d814119b5",
      "tree": "2ce0fb9ad7b9b7294bcf7a1617d45b21d246141f",
      "parents": [
        "8e6115f622ee2d6ef8023357231b6663b1c091e6",
        "c339fe302bc5083f0a110569eec06676be511088"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Nov 29 13:17:42 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Nov 29 13:17:42 2011 -0800"
      },
      "message": "am c339fe30: am be6ab576: Merge \"Fix application launch shortcuts.\" into ics-mr1\n\n* commit \u0027c339fe302bc5083f0a110569eec06676be511088\u0027:\n  Fix application launch shortcuts.\n"
    },
    {
      "commit": "6651a638348c15e89e265b0a53c775cac9beafa2",
      "tree": "f42e59d99363cada07cdb6f4bff69fa51bfae2ad",
      "parents": [
        "500afb87a7a8b5928ef1a5196bdfd0bcc2b87e4a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Nov 28 12:59:11 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Nov 29 12:17:22 2011 -0800"
      },
      "message": "Fix application launch shortcuts.\n\nImproved quick launch bookmarks to support category-based shortcuts\ninstead of hardcoding package and class names for all apps.\n\nAdded a set of Intent categories for typical applications on the\nplatform.\n\nAdded support for some of the HID application launch usages to\nreduce reliance on quick launch for special purpose keys.  Some\nkeyboard vendors have hardcoded launch keys that synthesize\n\"Search + X\" type key combos.  The goal is to encourage them\nto stop doing this by implementing more of HID.\n\nBug: 5674723\nChange-Id: I79f1147c65a208efc3f67228c9f0fa5cd050c593\n"
    },
    {
      "commit": "0219af277e5e1ae483c9690cffce33f185b02246",
      "tree": "60dc92432f4b262fafda8648e18850b25a58e9ef",
      "parents": [
        "4e2ecdd8a78f25f4c234877d5321ebd4e4c0e8f7",
        "ea54d0dc0dfeef5560fea04667804413d522025f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Nov 21 21:23:49 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Nov 21 21:23:49 2011 -0800"
      },
      "message": "am ea54d0dc: am 723218b4: Merge \"Hide ManagedEGLContext until we are sure this is the correct API.\" into ics-mr1\n\n* commit \u0027ea54d0dc0dfeef5560fea04667804413d522025f\u0027:\n  Hide ManagedEGLContext until we are sure this is the correct API.\n"
    },
    {
      "commit": "dccf73a50cb2a219182e141bac1d9da82fdaf4d7",
      "tree": "9b49d3a96584d84bc8453eec54ebd4dce6f1313e",
      "parents": [
        "e7005ec9582f11744fa74d9c5c9562f9e4be04dc"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Nov 21 18:24:23 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Nov 21 18:27:21 2011 -0800"
      },
      "message": "Hide ManagedEGLContext until we are sure this is the correct API.\n\nChange-Id: If54942d342ca8ea348e10231b2aed3e5d3bd701b\n"
    },
    {
      "commit": "fa1a6eb584dde49d424fa53a995a6d0dbd45155c",
      "tree": "dd338b7c9df14f53b01e8d58209c1366eda3ceb3",
      "parents": [
        "e761f1e58f3946b01f9715e145b402db16f81367",
        "0272e60060162d2c32aec02d9cd1414dbbe14782"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Fri Nov 18 02:37:22 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Nov 18 02:37:22 2011 -0800"
      },
      "message": "am 0272e600: am a37a78e2: Merge \"GLES: add image external enums\" into ics-mr1\n\n* commit \u00270272e60060162d2c32aec02d9cd1414dbbe14782\u0027:\n  GLES: add image external enums\n"
    }
  ],
  "next": "a37a78e2efe54892a744adfc6330c2d2179dee21"
}
