)]}'
{
  "log": [
    {
      "commit": "1b7ad876f1274787d7609a31e4a2a852adb94c3c",
      "tree": "f23df89036bb699bf250201e6fbb8c164b49d4d2",
      "parents": [
        "13ed5750ba515c3b4345937c7a11667a90cb1265",
        "6b51a98acbc710a4e1a1656d85bb5d3c92f82fe9"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 06 19:32:25 2009 -0400"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 06 19:32:25 2009 -0400"
      },
      "message": "Merge change I6b51a98a into eclair-mr2\n\n* changes:\n  Fixed issue #4098: Ringtone#getTitle does not close its cursor.\n"
    },
    {
      "commit": "3b49e9b52558b5c45240d098410bd5afbd29e1fe",
      "tree": "cf8854f4e90029fd3aaf6df691d770f6d9a592a7",
      "parents": [
        "968a9571a391a2dbb0512c4fb99d04ab50861753"
      ],
      "author": {
        "name": "gwang@google.com",
        "email": "gwang@google.com",
        "time": "Fri Oct 02 16:54:15 2009 -0700"
      },
      "committer": {
        "name": "cp",
        "email": "gwang@google.com",
        "time": "Tue Oct 06 14:48:09 2009 -0700"
      },
      "message": "Fix for bug 2158794. Hide MediaPlayer.invoke() and MediaPlayer.newRequest(), and Fix bad links in ToneGenerator documentation.\n"
    },
    {
      "commit": "6b51a98acbc710a4e1a1656d85bb5d3c92f82fe9",
      "tree": "4dd1a5b7a114c790d245ad58ecf33254921a826d",
      "parents": [
        "80fff7a5897a6b2045d9382da73d7df167c7891a"
      ],
      "author": {
        "name": "Josh Guilfoyle",
        "email": "jasta00@gmail.com",
        "time": "Fri Oct 02 15:39:10 2009 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Oct 06 14:32:56 2009 -0700"
      },
      "message": "Fixed issue #4098: Ringtone#getTitle does not close its cursor.\n\nhttp://code.google.com/p/android/issues/detail?id\u003d4098\n"
    },
    {
      "commit": "c39d2e3c012fb96999991e30659a474f9f30f789",
      "tree": "f3312cf6fee6b373f0e6486de4013e986eba552d",
      "parents": [
        "52cde7279bad58285704498eea57bdaf9e595b49"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Sun Sep 20 10:42:13 2009 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Oct 06 08:51:16 2009 -0700"
      },
      "message": "Music visualizer support hack.\nThis currently assumes 44k stereo (won\u0027t crash on other formats, but won\u0027t give the correct results either), and links statically with libspeex to get FFT data, increasing the size of libmedia by about 45kb.\n"
    },
    {
      "commit": "29e4a3c566f435c32f0b95e4ac8e8b33cac6faba",
      "tree": "75b4244d2616aa5513991d15f721ab3b21f0d333",
      "parents": [
        "d9b6f14a6926dce7ad3d98e6e30b503c69c904c0"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Sep 30 22:35:40 2009 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Sep 30 23:21:02 2009 -0700"
      },
      "message": "Update from API review.\n\nChange-Id: I16b1c566f91167aac9615ac59dd297a154c828ea\n"
    },
    {
      "commit": "f09edd60376f6ad755ebaaf0c1f89f561f78468c",
      "tree": "6b1b05cb2405879f228fa6dd04a01f26446bb283",
      "parents": [
        "59a2c2958d0bcc00402ebb961b02368004117e3b",
        "ef093cd6c4ab4d3c8a1c8be5ed7147d5f06d7027"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Oct 01 01:12:35 2009 -0400"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Oct 01 01:12:35 2009 -0400"
      },
      "message": "Merge change Id60fa26a into eclair\n\n* changes:\n  Fix issue 2152541\tthumbnail images stretched.\n"
    },
    {
      "commit": "ef093cd6c4ab4d3c8a1c8be5ed7147d5f06d7027",
      "tree": "154a72fa28f952ff1b0d108a0e9bf42cbcd05a30",
      "parents": [
        "7e1af37c3148112d9c801272bfa6359a005baf6d"
      ],
      "author": {
        "name": "Ray Chen",
        "email": "raychen@google.com",
        "time": "Tue Sep 29 19:38:58 2009 -0700"
      },
      "committer": {
        "name": "Ray Chen",
        "email": "raychen@google.com",
        "time": "Wed Sep 30 22:05:33 2009 -0700"
      },
      "message": "Fix issue 2152541\tthumbnail images stretched.\n"
    },
    {
      "commit": "89e74ba1419732dd5c7f939e48d4aa7989fd3a51",
      "tree": "844ca855b48ff17ece8535beda4e9d1cccb1d120",
      "parents": [
        "a33e3f79259b56b03c7912af35944f34ad190e3c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 30 18:26:36 2009 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Sep 30 18:26:36 2009 -0700"
      },
      "message": "Fix Issue 2158631: AudioService: volume control sometimes not restored after media server process crash.\n\nThe problem comes from the fact that the AudioSystem callback indicating that the media server is active again is ignored if it is received before the delayed message indicating media server death. This happens if another application or service running in the system server process makes a request to the AudioSystem in the interval between the death of the media server and the reception of the corresponding delayed message.\n\nThe fix consists in resetting mMediaServerOk flags immediately when the death callback is received and not when the delayed message is received.\n"
    },
    {
      "commit": "8bbba0e35b0dd5191c94b2aa039aa4eae0aecad0",
      "tree": "1d77709a39e088a6c048bf711bad2c39d74df053",
      "parents": [
        "277a41a771c56727ad7456dad23f964e9e3ed546",
        "f5722b3f22e016a8f21c628776cd0746ef164c19"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 29 19:52:23 2009 -0400"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 29 19:52:23 2009 -0400"
      },
      "message": "Merge change If5722b3f into eclair\n\n* changes:\n  Dont NPE if the thumbnail file cannot be opened.\n"
    },
    {
      "commit": "f5722b3f22e016a8f21c628776cd0746ef164c19",
      "tree": "4f489e8ad22da154469c6a20a266d418d91021fc",
      "parents": [
        "d35afcda674eaa0222f0adbf8d712bde3a388a39"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Tue Sep 29 16:30:30 2009 -0700"
      },
      "committer": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Tue Sep 29 16:31:16 2009 -0700"
      },
      "message": "Dont NPE if the thumbnail file cannot be opened.\n"
    },
    {
      "commit": "7d9871805beef4ea5e319f1a11ab32f610031845",
      "tree": "20b21245a39fe42200c3577ba201afb38affa272",
      "parents": [
        "b80fbd4479dccbd2f3ab9645b49e41ca4d10371f",
        "a2ef57dba9ac77d8eccacd646b2b8a8d99fe9d8b"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 29 18:12:54 2009 -0400"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 29 18:12:54 2009 -0400"
      },
      "message": "Merge change I19f2928b into eclair\n\n* changes:\n  Fix issue 2141503: Keyclick sound doesn\u0027t honor volume settings.\n"
    },
    {
      "commit": "a2ef57dba9ac77d8eccacd646b2b8a8d99fe9d8b",
      "tree": "713fa8882cb336588064692e321a32faeba08bbe",
      "parents": [
        "7db7e6a00c5a0b38bb2077d93a009581941884d3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 28 04:46:10 2009 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 29 15:00:40 2009 -0700"
      },
      "message": "Fix issue 2141503: Keyclick sound doesn\u0027t honor volume settings.\n\nUse music stream volume minus 3 dB for sound effects if volume is not explicitly requested by application.\n"
    },
    {
      "commit": "ecc97cc9491f40c507e372a30bcd58a9e08066a8",
      "tree": "501e3004cf8bff5acf1fb7895d645ce8f6e339f1",
      "parents": [
        "f36a2bb59b846545946124124d3290bd3eec44f0"
      ],
      "author": {
        "name": "Ray Chen",
        "email": "raychen@google.com",
        "time": "Mon Sep 28 16:13:13 2009 -0700"
      },
      "committer": {
        "name": "Ray Chen",
        "email": "raychen@google.com",
        "time": "Tue Sep 29 13:11:20 2009 -0700"
      },
      "message": "Unify Java NIO to read/write MiniThumbFile.\n"
    },
    {
      "commit": "7d9735142f75c3bf30b420fdd006dc356f32fede",
      "tree": "bbe8293b30a8a2fa76c9a039b99e4a8e59025168",
      "parents": [
        "c18b0ebcfb905cc5001618c78890e884a859e069",
        "1851db6804cbdf8d2c8ede0725e73be6fda0f3c0"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Sep 28 12:24:08 2009 -0400"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Sep 28 12:24:08 2009 -0400"
      },
      "message": "Merge change 27449 into eclair\n\n* changes:\n  Always consider m4a files as audio, even when they contain a video track.\n"
    },
    {
      "commit": "1851db6804cbdf8d2c8ede0725e73be6fda0f3c0",
      "tree": "6a60957cfa389329faad054e53526013aab5469d",
      "parents": [
        "d4f3586c93cd9c29056e95cd79f3cb19ac456f3b"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Sep 28 09:03:33 2009 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Sep 28 09:03:33 2009 -0700"
      },
      "message": "Always consider m4a files as audio, even when they contain a video track.\n"
    },
    {
      "commit": "dba93b68326f139f669aefa6770d50daff032746",
      "tree": "d7475c3a84d38c8182aab94db150f6c357c7a4f1",
      "parents": [
        "e883847f177665102ebc6b2369dbfbfd1e79cf62",
        "d4f3586c93cd9c29056e95cd79f3cb19ac456f3b"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sun Sep 27 22:43:05 2009 -0400"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sun Sep 27 22:43:05 2009 -0400"
      },
      "message": "Merge change 27318 into eclair\n\n* changes:\n  Check that playlist entries refer to a row in the audio table.\n"
    },
    {
      "commit": "d4f3586c93cd9c29056e95cd79f3cb19ac456f3b",
      "tree": "28c03fbafad8207cc852c63cffdf363efee5998f",
      "parents": [
        "0ddbc35dc4974fbe18a4191e579b1eda5a7ef2b1"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Sun Sep 27 15:00:26 2009 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Sun Sep 27 15:06:03 2009 -0700"
      },
      "message": "Check that playlist entries refer to a row in the audio table.\n"
    },
    {
      "commit": "cc96652c7049569c1bc7b1f93ba454a7cb891fd8",
      "tree": "32345a8d603a0dd9f2cd889e0244eafd6b2d289d",
      "parents": [
        "e7d60bfdff35ad8eace600d2a6cb81163c966bb0"
      ],
      "author": {
        "name": "Ray Chen",
        "email": "raychen@google.com",
        "time": "Fri Sep 25 11:46:59 2009 -0700"
      },
      "committer": {
        "name": "Ray Chen",
        "email": "raychen@google.com",
        "time": "Sun Sep 27 13:41:25 2009 -0700"
      },
      "message": "Remove fflush when storing thumbanil to sdcard.\n"
    },
    {
      "commit": "0ddbc35dc4974fbe18a4191e579b1eda5a7ef2b1",
      "tree": "b472f2093706d51c151b9c80d687f69353092a49",
      "parents": [
        "a0cad2f5d19d95cfe496ebb82f3227dd4ed7c169"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Sun Sep 27 11:24:41 2009 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Sun Sep 27 11:25:49 2009 -0700"
      },
      "message": "Only scan windows media files when those codecs are enabled.\n"
    },
    {
      "commit": "343449f018e255fbea1806b394151868a5174e63",
      "tree": "54b2eda5f99f5ca756f066f5cbd2b3244ccaa372",
      "parents": [
        "56024f260f993c70a65aca0081c78b21801a7c5a"
      ],
      "author": {
        "name": "Ray Chen",
        "email": "raychen@google.com",
        "time": "Thu Sep 24 20:22:37 2009 -0700"
      },
      "committer": {
        "name": "Ray Chen",
        "email": "raychen@google.com",
        "time": "Thu Sep 24 20:22:37 2009 -0700"
      },
      "message": "Fix issue 2128896 The thumbnail generated after picture capture with max zoom is overlapped with previous thumbnail.\n"
    },
    {
      "commit": "00c575a3fccb9d3065e913f1b8fcf93e18d44eaf",
      "tree": "56ca36895b1d2f9b95b3d1cf3bd673a04dbfb2f5",
      "parents": [
        "9d12fdb1b55500d69df5a1bdc2fcba57a2f1876c"
      ],
      "author": {
        "name": "Ray Chen",
        "email": "raychen@google.com",
        "time": "Fri Aug 28 14:12:15 2009 -0700"
      },
      "committer": {
        "name": "Ray Chen",
        "email": "raychen@google.com",
        "time": "Wed Sep 23 11:23:45 2009 -0700"
      },
      "message": "Add new thumbnail API.\n"
    },
    {
      "commit": "b8f4725d1bb750e3358a5b5dfcec7b1c5d3b9939",
      "tree": "c4afb958a5e92c49523de0d239f59a893ca9cf28",
      "parents": [
        "f8d8b46a2c684d51cd661a9d479dd895420a90b2"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Tue Sep 22 04:41:10 2009 +0800"
      },
      "committer": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Tue Sep 22 04:42:02 2009 +0800"
      },
      "message": "Make media scanner read the jpeg orientation tag.\n"
    },
    {
      "commit": "872a30ec723ebdd97de764406544516545d7c9d4",
      "tree": "5ba5b4b36b9aed95bfaac397b55a6020f7ddc570",
      "parents": [
        "93727454caf1b3540a352328abd0400c2242902b"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Thu Sep 17 17:58:32 2009 +0800"
      },
      "committer": {
        "name": "Ray Chen",
        "email": "raychen@google.com",
        "time": "Fri Sep 18 11:30:47 2009 -0700"
      },
      "message": "Improve ExifInterface API.\n\nChange-Id: Ic6c4df8244b51b9a0d1c73c3797847220d86604d\n"
    },
    {
      "commit": "fc5f10265fd676c14554a3c85fb665dfed5efe70",
      "tree": "121d6359a335c71460463a670d8d38ecd36933bb",
      "parents": [
        "de88c515ce3ba2ca15cfeff632ef80d01bfac4df",
        "9081aec61fede12049fa9adbad41a0b35813ed64"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 16 13:23:35 2009 -0400"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 16 13:23:35 2009 -0400"
      },
      "message": "Merge change 25291 into eclair\n\n* changes:\n  Try to fix sdk build again.\n"
    },
    {
      "commit": "9081aec61fede12049fa9adbad41a0b35813ed64",
      "tree": "5dab2a2cb4051013e2bdcae5f287367e48c1d2c7",
      "parents": [
        "7b886f9e8cc6e59643ead376a13c374a4d975568"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Thu Sep 17 01:20:05 2009 +0800"
      },
      "committer": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Thu Sep 17 01:20:05 2009 +0800"
      },
      "message": "Try to fix sdk build again.\n"
    },
    {
      "commit": "de88c515ce3ba2ca15cfeff632ef80d01bfac4df",
      "tree": "3456456c9a43326ccb60a9592e58e01ddbd2cab9",
      "parents": [
        "9f28d9008b96a1f7f3fd14634664d3991d756abf",
        "7b886f9e8cc6e59643ead376a13c374a4d975568"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 16 13:15:45 2009 -0400"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 16 13:15:45 2009 -0400"
      },
      "message": "Merge change 25286 into eclair\n\n* changes:\n  Fix sdk build.\n"
    },
    {
      "commit": "7b886f9e8cc6e59643ead376a13c374a4d975568",
      "tree": "ff48c1cb3e95557349d60566ce2f9381dcbddf36",
      "parents": [
        "017bb4ccf75375b359662932432cc61bd08fec24"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Thu Sep 17 01:09:08 2009 +0800"
      },
      "committer": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Thu Sep 17 01:09:08 2009 +0800"
      },
      "message": "Fix sdk build.\n"
    },
    {
      "commit": "d3ba4811d48e01e85b4faa57da159471022e6daa",
      "tree": "19989efcec83c4d184e2d15671bd684dd40bf4ac",
      "parents": [
        "b53eaac659f93ae41cac8963c58a12d38e33eac8",
        "017bb4ccf75375b359662932432cc61bd08fec24"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 16 12:12:03 2009 -0400"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 16 12:12:03 2009 -0400"
      },
      "message": "Merge change 25272 into eclair\n\n* changes:\n  Make ExifInterface public.\n"
    },
    {
      "commit": "b53eaac659f93ae41cac8963c58a12d38e33eac8",
      "tree": "93ab14033232cf4ab521c68b142186afb699dc67",
      "parents": [
        "57384101b9757b1c67570fae60cdb8f89c84bf32",
        "fccb25d2074358c54d4c60eb321aeaa08a5de59a"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 16 12:07:37 2009 -0400"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 16 12:07:37 2009 -0400"
      },
      "message": "Merge change 25155 into eclair\n\n* changes:\n  Fix bug 2115258 where the AudioManager javadoc doesn\u0027t warn against misuse of some of the methods that should only be used to implement the Settings and Phone apps, and the audio service.\n"
    },
    {
      "commit": "017bb4ccf75375b359662932432cc61bd08fec24",
      "tree": "147b325e2dfaf092f48e747772ff8340053f4aab",
      "parents": [
        "46ad796186bdca8bac75607340aa0fac0c34a9d8"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Wed Sep 16 23:38:34 2009 +0800"
      },
      "committer": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Wed Sep 16 23:38:34 2009 +0800"
      },
      "message": "Make ExifInterface public.\n"
    },
    {
      "commit": "700beb484624a9a34649cb6ff088468e78b758ff",
      "tree": "20adb5279c5733e90f7245e6845a51a3a90a0f2d",
      "parents": [
        "9352b9fb9e0b4023c3bba4349eb9e32dc258b80a"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Wed Sep 16 18:26:39 2009 +0800"
      },
      "committer": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Wed Sep 16 20:03:48 2009 +0800"
      },
      "message": "Clean ExifInterface. Prepare to make it public.\n\nChange-Id: Ibff719d02f525c1e8583d1892737224a0cc42c37\n"
    },
    {
      "commit": "fccb25d2074358c54d4c60eb321aeaa08a5de59a",
      "tree": "4303e89c4416ad81569bb47553419d1cce9a6219",
      "parents": [
        "f5a760f17527b91c864336ea10b52322d0667ec5"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Sep 15 16:06:10 2009 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Sep 15 16:13:59 2009 -0700"
      },
      "message": "Fix bug 2115258 where the AudioManager javadoc doesn\u0027t warn against\nmisuse of some of the methods that should only be used to implement\nthe Settings and Phone apps, and the audio service.\n"
    },
    {
      "commit": "005b228cdfb369d9b3b325884c0337ba5968bf8c",
      "tree": "d1ee610898b65acd5c472014d395748b9d950150",
      "parents": [
        "9b6911cb85a9c9a0fef145f91c9999da5a75ce21"
      ],
      "author": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Thu Sep 10 10:21:56 2009 -0700"
      },
      "committer": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Thu Sep 10 18:52:21 2009 -0700"
      },
      "message": "API_CHANGE: Cleanup, javadoc and unhide more Bluetooth API.\n\nThis is a large batch, and covers:\n\n-- Bluetooth Device Discovery --\nBluetoothAdapter.ACTION_DISCOVERY_STARTED\nBluetoothAdapter.ACTION_DISCOVERY_FINISHED\nBluetoothAdapter.startDiscovery()\nBluetoothAdapter.cancelDiscovery()\nBluetoothAdapter.isDiscovering()\n\n-- Bluetooth bonding (pairing) --\nBluetoothAdapter.getBondedDevices()\nBluetoothDevice.ACTION_BOND_STATE_CHANGED\nBluetoothDevice.EXTRA_BOND_STATE\nBluetoothDevice.EXTRA_PREVIOUS_BOND_STATE\nBluetoothDevice.BOND_NONE\nBluetoothDevice.BOND_BONDING\nBluetoothDevice.BOND_BONDED\nBluetoothDevice.getBondState()\nBluetoothDevice.createBond()\nBluetoothDevice.cancelBondProcess()\nBluetoothDevice.removeBond()\n\n-- BluetoothClass --\nBluetoothDevice.ACTION_CLASS_CHANGED\nBluetoothDevice.EXTRA_CLASS\nBluetoothDevice.getBluetoothClass()\nBluetoothClass.Service.*\nBluetoothClass.Device.Major.*\nBluetoothClass.Device.*\nBluetoothClass.getDeviceClass()\nBluetoothClass.getMajorDeviceClass()\nBluetoothClass.hasService()\n\n-- Misc BluetoothDevice --\nBluetoothDevice.ACTION_ACL_CONNECTED\nBluetoothDevice.ACTION_ACL_DISCONNECTED_REQUESTED\nBluetoothDevice.ACTION_ACL_DISCONNECTED\nBluetoothDevice.ACTION_DISCOVERED\nBluetoothDevice.ACTION_NAME_CHANGED\nBluetoothDevice.EXTRA_DEVICE\nBluetoothDevice.EXTRA_NAME\nBluetoothDevice.EXTRA_RSSI\n\n-- Misc BluetoothAdapter --\nBluetoothAdapter.ACTION_LOCAL_NAME_CHANGED\nBluetoothAdapter.EXTRA_LOCAL_NAME\nBluetoothAdapter.checkBluetoothAddress()\n\nI deprecated BluetoothIntent and moved each intent into the class it relates\nto.\n\nChange-Id: I877b1280428ab46278b2bc25668bb44cda22dc36\n"
    },
    {
      "commit": "dc1d17a1dbfc2ae01c20012133a836b62f5b6930",
      "tree": "a7b7669a7a3027f4a8c2bbd527d309e19b71223c",
      "parents": [
        "6ba23c59f24b443cd21c6289fa0aac3df8f17017"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 10 00:48:21 2009 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 10 00:48:21 2009 -0700"
      },
      "message": "Fix issue android.permission.cts.NoAudioPermissionTest:testRouting is failing.\n\nAdd audio permission checks in setSpeakerphoneOn() and setBluetoothScoOn() methods.\n"
    },
    {
      "commit": "a79da2e9b4b57ca72aa9634f80a7a975b9d7a877",
      "tree": "48b5ecd37362c3ff03f68ecef78021f8157dd576",
      "parents": [
        "cf7b5521fc4a8f87033e3bf3626e8a2cf81fccfd"
      ],
      "author": {
        "name": "James Stokebrand",
        "email": "stokebrand@pv.com",
        "time": "Wed Sep 09 11:06:20 2009 -0500"
      },
      "committer": {
        "name": "Jianhong Jiang",
        "email": "jianhong@google.com",
        "time": "Wed Sep 09 11:22:21 2009 -0700"
      },
      "message": "RIO-7461: Update media scanner to scan AAC files.\n(Change in frameworks/base git)\n"
    },
    {
      "commit": "96c08a69ea0b95d1d8a8edb67f73bd9548e09f16",
      "tree": "b3062ccac2f1bd12f33be481a957cd5b88579e16",
      "parents": [
        "948ef29ebacde30bc2f1283b5e6d86f2413698c4"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 07 08:38:38 2009 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 08 22:56:07 2009 -0700"
      },
      "message": "Fix issue 1992233: DTMF tones on Sholes is really long.\n\nAdd a parameter to ToneGenerator.startTone() allowing the caller to specify the tone duration. This is used by the phone application to have a precise control on the DTMF tone duration which was not possible with the use of delayed messaged.\nAlso modified AudioFlinger output threads so that 0s are written to the audio output stream when no more tracks are ready to mix instead of just sleeping. This avoids an issue where the end of a previous DTMF tone could stay in audio hardware buffers and be played just before the beginning of the next DTMF tone.\n"
    },
    {
      "commit": "e1da8be501e953cdf50b0ba2edf8fe68af8cf2b9",
      "tree": "e9e51868a100e469e60bf1f21b354a49b0f8ba64",
      "parents": [
        "b00fc7357f50ba0ebc1a5e48be2a1ee096bf1b67",
        "8b0466170082fdf12f78d7b70358002520e99e9b"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 03 12:27:26 2009 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 03 12:27:26 2009 -0700"
      },
      "message": "Merge change 23835 into eclair\n\n* changes:\n  When encountering a .nomedia file, notify the MediaScannerClient, so that it can erase the data column for entries that are in the folder containing the .nomedia file. This prevents us from deleting (via a delete trigger) files when somebody adds a .nomedia file after the fact.\n"
    },
    {
      "commit": "8b0466170082fdf12f78d7b70358002520e99e9b",
      "tree": "5ff6b49f1d9373e654df1a3a324883a05b6eb8a8",
      "parents": [
        "04e1faf0f030ddb360180289fb798adbb3348dd4"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Sep 03 10:49:55 2009 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Sep 03 11:22:28 2009 -0700"
      },
      "message": "When encountering a .nomedia file, notify the MediaScannerClient,\nso that it can erase the data column for entries that are in the\nfolder containing the .nomedia file. This prevents us from\ndeleting (via a delete trigger) files when somebody adds a\n.nomedia file after the fact.\n"
    },
    {
      "commit": "9d85d5adf90e7363304e2d4a22d60a2114bb7ab9",
      "tree": "65d85fd0ac688d36758ecfc17e2e486cf1743495",
      "parents": [
        "0c36a517cd01a7112460a96f9f0fa2badf8f7015"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 03 01:28:26 2009 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 03 01:28:26 2009 -0700"
      },
      "message": "Fix issue 2097083: STREAM_SYSTEM should be at max volume.\n\nChanged default volume for STREAM_SYSTEM and STREAM_SYSTEM_ENFORCED to the maximum value.\n"
    },
    {
      "commit": "a7bdedabf447a559e0b914e4e5623f3af5ac8ef1",
      "tree": "adaf94ef9bde6181fd26d432bd2e112ad1157ffd",
      "parents": [
        "33567c5f3dab39cbb8c526c919e7e526042d1acf"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Tue Sep 01 12:22:05 2009 +0800"
      },
      "committer": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Tue Sep 01 12:23:43 2009 +0800"
      },
      "message": "Fix 2081525: NPE in MediaScannerService.\n\nHandle the case where the datetime string in jpeg exif is not in the format we expect.\n\nChange-Id: I5462052c3dd723d01bce45f4924137632d081400\n"
    },
    {
      "commit": "78333dd750c7353e47163407a662ef39a3c6b24a",
      "tree": "00a6ef10d6ec1a753e6d14656bef48dadfc2bfbd",
      "parents": [
        "1b856974617cb88202cdfe28bdcf43a939fa47be"
      ],
      "author": {
        "name": "Jaikumar Ganesh",
        "email": "jaikumar@google.com",
        "time": "Wed Aug 26 19:42:09 2009 -0700"
      },
      "committer": {
        "name": "Jaikumar Ganesh",
        "email": "jaikumar@google.com",
        "time": "Thu Aug 27 11:03:00 2009 -0700"
      },
      "message": "Set Routing to A2DP only when state is Connected.\n\nWe were setting the routing to A2DP when the state was Connecting too.\nThis was incorrect and can cause problems. One such problem was when\nhandling an incoming connection we set the routing to A2DP before\nauthorization. And even if authorization succeeds we get out sync with\nAVDTP command state.\n"
    },
    {
      "commit": "6ee9952bc20be72b9419cb653c9e2e833889a3d3",
      "tree": "92da12c7de845b613681fe6456b4f216c069719b",
      "parents": [
        "d497d87650dd79f7d6a4751d79598d68ceb4b789"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 25 06:30:59 2009 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 26 05:23:20 2009 -0700"
      },
      "message": "Fix issue 2076322: AudioService, too many stream volume steps.\n\nMAX_STREAM_VOLUME[] now contains the maximum valid index instead of the number of indexes for all stream types.\n"
    },
    {
      "commit": "e1a7ad23e0cefefc1e5c762a3d88179971077dcc",
      "tree": "ae058ed422274732003b441762034d63994eaa08",
      "parents": [
        "4a51c20ce607c74914f90fd897f04080121ac13b"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Aug 24 18:26:35 2009 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Aug 24 18:27:08 2009 -0700"
      },
      "message": "Fix build.\n\nChange-Id: I7a21bc2151fb2a9a1135f676b563f40609bc997b\n"
    },
    {
      "commit": "4a51c20ce607c74914f90fd897f04080121ac13b",
      "tree": "067caf43aa752a8952061d7d8e03fb1aeb77c96e",
      "parents": [
        "cf3a08307d1599eaa91d7cc4e7c601e5fa13037f"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Aug 21 15:14:02 2009 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Aug 24 17:37:32 2009 -0700"
      },
      "message": "I am getting tired of the java doc warnings, so fix them.\n\nChange-Id: I2205eebae419eaf4a0992c9f5b7cd807eb843fe1\n"
    },
    {
      "commit": "a56d1c72190462aa9e377906583eceb58e0efcdd",
      "tree": "2ab6030776ecec07313c2fd768736caf23c84810",
      "parents": [
        "77035a31dda76200b4096db49cb58a169ab54b2c"
      ],
      "author": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Wed Aug 19 14:49:29 2009 -0700"
      },
      "committer": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Wed Aug 19 15:20:39 2009 -0700"
      },
      "message": "Fix AudioService on HFP power off due to new Bluetooth API.\n\nHEADSET_STATE_CHANGED_ACTION contains a null BluetoothDevice when the HFP\ndisconnects.\n"
    },
    {
      "commit": "bd022f423a33f0794bb53e5b0720da2d67e4631c",
      "tree": "4def583f15b783ada3d49866a8cd29bcdb1bbe00",
      "parents": [
        "82e7408be29c6c8c6ed80887ea97f48f38b3223d"
      ],
      "author": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Fri Aug 14 18:33:38 2009 -0700"
      },
      "committer": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Tue Aug 18 08:24:22 2009 -0700"
      },
      "message": "Bluetooth: API change.\n\nSplit BluetoothDevice into BluetoothDevice and BluetoothAdapter.\n\nBluetoothAdapter: Represents the local BT adapter. Operations on the local\n                  adapter (start a scan, etc).\nBluetoothDevice: Represents a remote BT device. Operations on remote devices\n                 (pair, connect, etc).\n\nIBluetoothDevice.aidl -\u003e Bluetooth.aidl\nBluetoothDeviceService.java -\u003e BluetoothDeviceService.java\n\nTODO:\nJavadoc\n"
    },
    {
      "commit": "099397cbd07c8c991f3126d0d0ac64bb6b3c0b47",
      "tree": "e882349f9b36c9a0ba4ae187af41f8cd5fc123c8",
      "parents": [
        "8af2d22552c61d8d4e09e52287f056428172ab05"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Mon Aug 17 15:54:18 2009 +0800"
      },
      "committer": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Mon Aug 17 19:43:24 2009 +0800"
      },
      "message": "Fix 1860351: Put datetime in jpeg exif to datetaken field.\n"
    },
    {
      "commit": "c9706f0262a2f399f95e0d78ba2b7616e08d0069",
      "tree": "c87ce98db0bbddfb87af8007ac7eb20a32e17f2f",
      "parents": [
        "872242948184d7b6fed8b127d8ba8386487dc826"
      ],
      "author": {
        "name": "Sahil Sachdeva",
        "email": "sahils@google.com",
        "time": "Fri Aug 14 14:52:23 2009 -0700"
      },
      "committer": {
        "name": "Sahil Sachdeva",
        "email": "sahils@google.com",
        "time": "Fri Aug 14 14:52:23 2009 -0700"
      },
      "message": "DO NOT MERGE, ALready merged to master.\n1440173 [NJ-1331] MetaData utility parse the wrong m4a meta data. Changes to Java, application side.\n"
    },
    {
      "commit": "5982013cfc8274ff0bafaba83c676b3a8890cba9",
      "tree": "cf34011c5e9867f8f1445310b4d125f6681bef04",
      "parents": [
        "455e3af1f82629d274447cd5d08d3c8dc1c58967"
      ],
      "author": {
        "name": "Jared Suttles",
        "email": "jared.suttles@motorola.com",
        "time": "Thu Aug 13 21:50:52 2009 -0500"
      },
      "committer": {
        "name": "Rebecca Schultz Zavin",
        "email": "rebecca@android.com",
        "time": "Thu Aug 13 21:27:55 2009 -0700"
      },
      "message": "Change the number of volume steps from 6 to 7 per Verizon Requirements\n\nSubmitted on behalf of Helen Tran \u003cHelen.Tran@motorola.com\u003e\nSigned-off-by: Jared Suttles \u003cjared.suttles@motorola.com\u003e\n"
    },
    {
      "commit": "2ac8c279881a6a12f979f54954cab69c98ba9d98",
      "tree": "6a1a800055533b87a63eb6483ef5168f291a0415",
      "parents": [
        "d47fddc5d73f22830a5e557a8e8707b29c28e471",
        "cb2b2378c735e687c15e2af7f908c68ffae5fe90"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Tue Aug 11 18:12:00 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Aug 11 18:12:00 2009 -0700"
      },
      "message": "am cb2b2378: Merge change 20729 into donut\n\nMerge commit \u0027cb2b2378c735e687c15e2af7f908c68ffae5fe90\u0027\n\n* commit \u0027cb2b2378c735e687c15e2af7f908c68ffae5fe90\u0027:\n  Fix the bug that EXIF attributes are always cached.\n"
    },
    {
      "commit": "b826bf9182f4636ea891d1da156e26944b784ef7",
      "tree": "304826debf671eb9c38aaa9812d0117f772e60fb",
      "parents": [
        "e6034f6cd8fc32641f31e5a3cf068b6d56309872"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Tue Aug 11 23:35:28 2009 +0800"
      },
      "committer": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Tue Aug 11 23:37:01 2009 +0800"
      },
      "message": "Fix the bug that EXIF attributes are always cached.\n\nb2039501\n"
    },
    {
      "commit": "d5603c126acdd94d9f7400bb1d04188020a425b4",
      "tree": "d1c380e8d44bcdbe31b20e49d910b979eb222033",
      "parents": [
        "44495b71345b196f17552e608ac6b251c67062ff"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Aug 06 08:49:39 2009 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 07 10:31:53 2009 -0700"
      },
      "message": "AudioService now differentiates BT headsets and car kits.\n\nThe BT headset detection now makes the difference between car kits and headsets, which can be used by audio policy manager.\nThe headset connection is also detected earlier, that is when the headset is connected and not when the SCO socket is connected as it was the case before. This allows the audio policy manager to suspend A2DP output while ringing if a SCO headset is connected.\n"
    },
    {
      "commit": "20b153bffc57711534c0f581258e06fa86afd67a",
      "tree": "70085c65c7afdcb8f7682ac1e2ae2530ed5c2570",
      "parents": [
        "7865fe38f6908750942338d13094a761452d6577",
        "5fd26775bdd14b15058521c82e34b562e0c1e327"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 03 11:54:18 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Aug 03 11:54:18 2009 -0700"
      },
      "message": "am 5fd26775: Merge change 9390 into donut\n\nMerge commit \u00275fd26775bdd14b15058521c82e34b562e0c1e327\u0027\n\n* commit \u00275fd26775bdd14b15058521c82e34b562e0c1e327\u0027:\n  Name unknown albums after the folder they\u0027re in, similar to how songs\n"
    },
    {
      "commit": "4935d05eaa306cef88cf0ab13eca386f270409ec",
      "tree": "a32743c415083ac6565997d2a62ec5432fbfe62e",
      "parents": [
        "f2beab58f34fc593fff583bfcd8143ce09fcdecd"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Aug 03 11:12:58 2009 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Aug 03 11:32:30 2009 -0700"
      },
      "message": "Untangle MediaPlayer, MediaRecorder, MediaScanner and MediaMetadataRetriever JNI\ncode, so that creating one of those doesn\u0027t initialize all the others. Shaves\na hundred milliseconds or so off music app startup time.\n"
    },
    {
      "commit": "c3c08ba5d67d836274fabdf4c1bff6f1053d95a3",
      "tree": "16f09b993f714ad7534b4def936405aeef6361e8",
      "parents": [
        "17c195c8da3470b2e69880e206342f0c2d85f938"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Jul 31 15:02:25 2009 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Jul 31 15:02:25 2009 -0700"
      },
      "message": "Name unknown albums after the folder they\u0027re in, similar to how songs\nwith no title metadata are named after the file. Only files that are\nin the root of the card will still belong to the \"Unknown Album\"\n"
    },
    {
      "commit": "ed9584068144adedfdd6d119e2f928da595a1953",
      "tree": "8aaca44af46459933faa26231ad3c059430989b6",
      "parents": [
        "106d27140bdd1acf388310807d662f08cb6292c6",
        "dccfaefd681a3895f6d4f9eedd106be817e1555d"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 31 07:15:30 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jul 31 07:15:30 2009 -0700"
      },
      "message": "am dccfaefd: Merge change 9285 into donut\n\nMerge commit \u0027dccfaefd681a3895f6d4f9eedd106be817e1555d\u0027\n\n* commit \u0027dccfaefd681a3895f6d4f9eedd106be817e1555d\u0027:\n  Clear singleton reference during JetPlayer.release()\n"
    },
    {
      "commit": "176e650931b7b03680c233368b92752f4ff3d25b",
      "tree": "cf55f47203f86202137fd29088d26beca799d9d1",
      "parents": [
        "f4fbdfa53fe0497d9b1f3b9642df357bb765e84f"
      ],
      "author": {
        "name": "Phil Dubach",
        "email": "phillipd@google.com",
        "time": "Thu Jul 30 17:59:02 2009 -0700"
      },
      "committer": {
        "name": "Phil Dubach",
        "email": "phillipd@google.com",
        "time": "Thu Jul 30 17:59:02 2009 -0700"
      },
      "message": "Clear singleton reference during JetPlayer.release()\n\nOnly one JetPlayer instance is supported at a time. A singleton reference is\ncreated and returned in JetPlayer.getInstance(). When calling release() on the\ninstance, the corresponding native player is finalized.  Therefore, release()\nmust also clear the singleton reference, so that any subsequent call to\ngetInstance() re-initializes the native player.\n"
    },
    {
      "commit": "c42ac9d4d03f62c3a1ba197a28a81fda44bd8b7f",
      "tree": "40ce2bd6c11a0b6deca079ae8e1d7797e102d53c",
      "parents": [
        "c6c18133b3969a17c79d21728578f510c8b1560e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 29 08:53:03 2009 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 29 08:53:03 2009 -0700"
      },
      "message": "Fix issue 2019031: Volume changes have no effect.\n\nSend initStreamVolume() for each stream when media server restarts.\nAlso added restoring of phone state, device connection state and forced device for communications.\n"
    },
    {
      "commit": "69f593ccb7414ee98991b1da1a4bfbd9951e3570",
      "tree": "792a5ba3b2499cc8f25cd4dba55428d729d54919",
      "parents": [
        "e8c027756cfff74fd39b76c2ef373c3edb952eb5"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Jul 28 09:55:04 2009 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Jul 28 16:06:38 2009 -0700"
      },
      "message": "Support for selection of silent ringtone from the ringtone picker.\nThis doesn\u0027t actually enable that, but adds the necessary code to make it work when enabled, and cleans up some ringtone related code.\n"
    },
    {
      "commit": "3026a023b8979b7ddcb3fe97bbc45531c89fda92",
      "tree": "02433741f7668e4255134bb9d5a9fcf1dbace0ae",
      "parents": [
        "2c3fc83ac5b267d6a551deb36b30064a2e617944"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 27 07:12:26 2009 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 27 12:21:29 2009 -0700"
      },
      "message": "Fix issue 2001517: AudioTrack compatibility issue.\n\nModified enum values in AudioFormat.java and AudioSystem.h.\nAdded code for backward compatibility in AudioTrack.java and AudioRecord.java.\n"
    },
    {
      "commit": "d25ae67ca8f003ada2881154514523d8614d4b7e",
      "tree": "cd35860794cc9591a99e81d8192ce64b12fd9b78",
      "parents": [
        "a4ce03f35458efbac5544f706202322695d1102b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 27 02:12:30 2009 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 27 02:12:30 2009 -0700"
      },
      "message": "Fix issue 2004738: Settings Backup Agent consistently throws ArrayIndexOutOfBoundsException during restore.\n\nUse stream alias when accessing VOLUME_SETTINGS array.\n"
    },
    {
      "commit": "974ff946d114610ec41172fb6076d9d8810c3680",
      "tree": "48056bbc2b534102198a0def72bf78b81a2e9b21",
      "parents": [
        "c8f361450403e0b08a9d7dc4785bb12624435c37"
      ],
      "author": {
        "name": "Ravi K Yenduri",
        "email": "yenduri@pv.com",
        "time": "Fri Jun 26 17:57:22 2009 -0500"
      },
      "committer": {
        "name": "Dave Sparks",
        "email": "davidsparks@android.com",
        "time": "Fri Jul 24 11:26:30 2009 -0700"
      },
      "message": "Add support for .aac and .asf extensions.\n"
    },
    {
      "commit": "a553c25b33c99b345cf1c8688f8df0ed8df14e5a",
      "tree": "025c461b13e66ad0ceac8d0f8d9b13fd88ae168a",
      "parents": [
        "ebd7bc54028949619bbf3fa5ed6c1188f588c230"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 17 12:17:14 2009 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 23 06:03:39 2009 -0700"
      },
      "message": "Fix issue 1795088       Improve audio routing code\n\nInitial commit for review.\nIntegrated comments after patch set 1 review.\nFixed lockup in AudioFlinger::ThreadBase::exit()\nFixed lockup when playing tone with AudioPlocyService startTone()\n"
    },
    {
      "commit": "bc7269278042e448299c2e80e4dbb16fed05791d",
      "tree": "5270299858b6a69a45c604a28208d128a0dd94d8",
      "parents": [
        "c7bebd15378d98104e6cd32666665fd60eaa8043"
      ],
      "author": {
        "name": "niko",
        "email": "niko@google.com",
        "time": "Mon Jul 20 15:07:26 2009 -0700"
      },
      "committer": {
        "name": "niko",
        "email": "niko@google.com",
        "time": "Wed Jul 22 15:03:22 2009 -0700"
      },
      "message": "Added native metadata support.\n\nMetadata.java:\nFixed typo 8k !\u003d 8092. The comment was correct though.\n\nIn Metadata.h, the new Metadata class is declared in the ns android::media\nto limit the chances of conflict with other packages.\n\nThe MetadataType in MediaPlayerInterface is gone and moved to Metadata as\nan inner typedef.\n\nSimilarly the SortedVector\u003cMetadataType\u003e instance have been replace by a\nnew type Metadata::Filter.\n\nAll the keys declared in the java counterpart are also in Metadata.h.\n\nMetadata.cpp:\nContains the implementation of the native metadata packing.\n\nThere an associated change in the opencore package that should go in\nat the same time as this one.\n"
    },
    {
      "commit": "6fa41bbb56e0756d3eac15d6314007e4a450c9d3",
      "tree": "191fafc6efd2d0a895f436faf4ff3cc06aadf13d",
      "parents": [
        "c57796d871d4ffc4282fefd7720ff8997f7e8b81"
      ],
      "author": {
        "name": "niko",
        "email": "niko@google.com",
        "time": "Mon Jul 20 13:53:29 2009 -0700"
      },
      "committer": {
        "name": "niko",
        "email": "niko@google.com",
        "time": "Mon Jul 20 13:53:29 2009 -0700"
      },
      "message": "Minor cleanup in Metadata.java\n\nUse a constant to express the size of a 32bits int.\n\nIn MediaPlayerMetadataParserTest, removed unused kTocken constant.\n"
    },
    {
      "commit": "c39173be3237be9f39d2b57bb38249126e183c53",
      "tree": "d154bd572a18c996385f0931b2128fceb7c226bc",
      "parents": [
        "0e9dd3b008536fe8a116eb6821ff84d34dba9f71"
      ],
      "author": {
        "name": "niko",
        "email": "niko@google.com",
        "time": "Mon Jul 20 13:10:01 2009 -0700"
      },
      "committer": {
        "name": "niko",
        "email": "niko@google.com",
        "time": "Mon Jul 20 13:10:01 2009 -0700"
      },
      "message": "Fixed a bug in the parser.\n\nWhen we parse the metadata we check that there is enough data in the parcel by checking\n the byte availables and the size in the header.\nSince the size is in the header has been read, we should make sure than dataAvailable() \u003e\u003d size - 4\n\nThis bug was hidden by some test code which has been removed.\n"
    },
    {
      "commit": "3e664221b6271cdc403656100187ff2420e1a107",
      "tree": "0d6db0460be8aa2ce12ce123984b53745345caa7",
      "parents": [
        "fb6aecb70392516427908c3148c0350840f6bc04",
        "716383a686b086f68533a51785ba77186359ce6b"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 20 08:26:22 2009 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 20 08:26:22 2009 -0700"
      },
      "message": "Merge change 7747\n\n* changes:\n  Added 3 metadata types for pause/seek forward/seek backward.\n"
    },
    {
      "commit": "b8b117e1e7fffdeb245afd673068924b038d08d6",
      "tree": "a4a4479597d4580d4e8ce134e39a2d77de99ed61",
      "parents": [
        "def06bcec0ebd24bea9fb21a22d8f671b6a8f16c",
        "a8d5644b548263d68e2c9bfff58958b29c3525ff"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sun Jul 19 21:14:40 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Jul 19 21:14:40 2009 -0700"
      },
      "message": "am a8d5644b: Merge change 7726 into donut\n\nMerge commit \u0027a8d5644b548263d68e2c9bfff58958b29c3525ff\u0027\n\n* commit \u0027a8d5644b548263d68e2c9bfff58958b29c3525ff\u0027:\n  Fix issue 1985479\tlots of backup NPEs.\n"
    },
    {
      "commit": "a8d5644b548263d68e2c9bfff58958b29c3525ff",
      "tree": "d66639f4954c17d90c2bf035127252dec8aaf17f",
      "parents": [
        "4b897aa99bf71f933f5b202c1531858382122d6f",
        "fd6e4820c6ee91c9c232a7598c1e45c002b868e7"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jul 18 02:12:02 2009 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jul 18 02:12:02 2009 -0700"
      },
      "message": "Merge change 7726 into donut\n\n* changes:\n  Fix issue 1985479\tlots of backup NPEs.\n"
    },
    {
      "commit": "ab6ee15f8cd2f34aa5e3f1d84dbd910ce7f49ddd",
      "tree": "37d1b57ef6ef9515355162a68953a85e6dbfaa1a",
      "parents": [
        "bc9b80750a84df79d3876871648fb94c2f2fd82c",
        "474b0f2941430b97b4f24f16f7173e5249ccc8f2"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 17 15:42:59 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jul 17 15:42:59 2009 -0700"
      },
      "message": "am 474b0f29: Merge change 7686 into donut\n\nMerge commit \u0027474b0f2941430b97b4f24f16f7173e5249ccc8f2\u0027\n\n* commit \u0027474b0f2941430b97b4f24f16f7173e5249ccc8f2\u0027:\n  MediaScanner: Add check for null object in empty title handling code.\n"
    },
    {
      "commit": "716383a686b086f68533a51785ba77186359ce6b",
      "tree": "494526534a2e455870306877775503937efc95c2",
      "parents": [
        "da3785ae9f165c2bced1f90e94f428a98c6e6ce7"
      ],
      "author": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Fri Jul 17 13:26:44 2009 -0700"
      },
      "committer": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Fri Jul 17 13:26:44 2009 -0700"
      },
      "message": "Added 3 metadata types for pause/seek forward/seek backward.\n"
    },
    {
      "commit": "fd6e4820c6ee91c9c232a7598c1e45c002b868e7",
      "tree": "85bfd4de2e924e3f1a2e94cb2f5e81598d9280f9",
      "parents": [
        "19e53f7ae506ccb294f46a36c70d7f3154b258ad"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 17 12:27:43 2009 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 17 12:27:43 2009 -0700"
      },
      "message": "Fix issue 1985479\tlots of backup NPEs.\n\nCheck that stream type is not STREAM_BLUETOOTH_SCO before writting to settings.\n"
    },
    {
      "commit": "da3785ae9f165c2bced1f90e94f428a98c6e6ce7",
      "tree": "2a3a8195eae517b78de5380560fff4282b4f0151",
      "parents": [
        "eb7a869af613d64d4623200fb1472fd71223a8b2",
        "cb2e00eedce99b30faf5f238136a00bc5448c5f2"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 17 12:00:28 2009 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 17 12:00:28 2009 -0700"
      },
      "message": "Merge change 7624\n\n* changes:\n  Impl. of the metadata getters.\n"
    },
    {
      "commit": "bdc0e82f9c075edb67da4a2583e557824c280415",
      "tree": "015f6256e63ba0f2533ed756f8c9568909343737",
      "parents": [
        "f32f746b83826303350417ff9937a6f9e5488f24"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Fri Jul 17 08:17:45 2009 -0400"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Fri Jul 17 08:17:45 2009 -0400"
      },
      "message": "MediaScanner: Add check for null object in empty title handling code.\n\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "cb2e00eedce99b30faf5f238136a00bc5448c5f2",
      "tree": "25414b5bf3279949ee7c0e2b20bb29a01751af9e",
      "parents": [
        "52e4ad89ad145fccfd3b17f49ed795aa61fda0a8"
      ],
      "author": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Thu Jul 16 10:00:12 2009 -0700"
      },
      "committer": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Thu Jul 16 18:34:53 2009 -0700"
      },
      "message": "Impl. of the metadata getters.\n\nIn Metadata, implemented the method that unmarshall the data from\na metadata parcel an return java entities.\n\nAdd 2 new types of metadata (Boolean and Date) and fixed an issue\nin TimedText: the w3c standard specify a duration as well as the\ntime to be played \u003d\u003e added a duration field.\n\nIn MetadataParserTest.java:\nMoved the util private methods at the bottom of the file.\nAdded new tests for the getters (GETTERS section)\n"
    },
    {
      "commit": "5b3f4578452647d867305dd7f7ccfec761a51b84",
      "tree": "f7a708d9f76771fc221815a032a049d5774ddcff",
      "parents": [
        "8e9bad1a3cbd0216e560b96875cd30c2fc80a02d",
        "58d19d1f6321161fdcd10140fe7b9d9053f80bd2"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jul 16 17:54:27 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jul 16 17:54:27 2009 -0700"
      },
      "message": "am 58d19d1f: Merge change 7581 into donut\n\nMerge commit \u002758d19d1f6321161fdcd10140fe7b9d9053f80bd2\u0027\n\n* commit \u002758d19d1f6321161fdcd10140fe7b9d9053f80bd2\u0027:\n  Fix bug that would cause files with blank title tags to not be shown in the music app.\n"
    },
    {
      "commit": "55973f1aade915824d2fa7ccab039bcd01a9a80a",
      "tree": "cd8acbad38363e99ed71c81889b3e85ea6423e93",
      "parents": [
        "37b939a63742c9a0cea4e6982bfb0581def45d6d"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Jul 16 14:10:19 2009 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Jul 16 14:12:11 2009 -0700"
      },
      "message": "Fix bug that would cause files with blank title tags to not be shown in the music app.\n"
    },
    {
      "commit": "a5ccb22a3ddb342fe3f7e5493095c6e6dceda60b",
      "tree": "69a60a24a489f6ec78d397cb8535f005cb36779f",
      "parents": [
        "851da848e97d9a1ec23a89ff0e200c301f32d690"
      ],
      "author": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Tue Jul 14 21:55:54 2009 -0700"
      },
      "committer": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Wed Jul 15 13:27:49 2009 -0700"
      },
      "message": "Partial implementation of the parsing of Parcel into Metadata.\n\nIn this first cut, a raw parcel is parsed to check that the overall\nformat is correct.\n\nAt the same time, we record the metadata seen and their position in\nthe parcel for later retrieval using the get* methods.\n\nThis means that the \u0027has\u0027 method to check the existence of a metadata\nshould work.\n\nRemoved size and iterator methods. Instead, I added a new method\nto give access to the set of keys. The user can make use of the set\nto call size(), empty(), iterator() etc...\n"
    },
    {
      "commit": "5d55c7119820ee9bb06fc072e416fe98ba77cd28",
      "tree": "4f461a51f26fc221f4e9c7c660c6b6680ff072d7",
      "parents": [
        "2eedb2515b733aaba0a92944def8156ef379e0da"
      ],
      "author": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Thu Jul 09 09:21:33 2009 -0700"
      },
      "committer": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Fri Jul 10 11:00:42 2009 -0700"
      },
      "message": "Basic plumbing to retrieve metadata from the native player.\n\nIMediaPlayer.h\nAdded a getMetadata method that mirrors the on in MediaPlayer.java.\n\nMediaPlayer.java\nAdded a native method to get the metadata from the native player.\nParse the parcel into a Metadata object.\n\nMetadata.java\nAdded a stub to parse the Parcel returned by the native player into\na set of metadata.\n\nandroid_media_MediaPlayer.cpp\nJNI call to forward the getMetadata call.\n\nMediaPlayerService.cpp\nMediaPlayerService::Client implements the new getMetadata method added in IMediaPlayer.h\n"
    },
    {
      "commit": "c494ba2544699e576370b35b7e94fe09e29d1226",
      "tree": "e25599ac7d57f4627f4588865ecf6bee980a1672",
      "parents": [
        "f00193ff7ac1872fc88f86b5150e023c09846df9",
        "b2c693919be966f179080a9ec70a7a82dbf57627"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jul 09 14:51:54 2009 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jul 09 14:51:54 2009 -0700"
      },
      "message": "Merge change 6636\n\n* changes:\n  Implemented the metadata changed notification filters.\n"
    },
    {
      "commit": "5e7e8da04d4a7c5bef51cbb1121f956f1496784e",
      "tree": "d27213fd71f92c7ab3a21fc2db703e8545c50449",
      "parents": [
        "c916e0616468e74a87cec71cefd26150a108edf1",
        "b799616d8f0f94e866767fa730f56d82543fb49b"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jul 09 12:49:18 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu Jul 09 12:49:18 2009 -0700"
      },
      "message": "am b799616d: Merge change 6208 into donut\n\nMerge commit \u0027b799616d8f0f94e866767fa730f56d82543fb49b\u0027\n\n* commit \u0027b799616d8f0f94e866767fa730f56d82543fb49b\u0027:\n  Move ExifInterface to android.media package so we can reference it from MediaScanner.\n"
    },
    {
      "commit": "b2c693919be966f179080a9ec70a7a82dbf57627",
      "tree": "bc67f2a85c74a41a2151950b6393e6a291aeaa5c",
      "parents": [
        "3ff23c46978adfb691507baa3d2bf04b3f5ca001"
      ],
      "author": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Wed Jul 08 08:57:42 2009 -0700"
      },
      "committer": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Thu Jul 09 11:46:02 2009 -0700"
      },
      "message": "Implemented the metadata changed notification filters.\n\nIMediaPlayer:\nnew setMetadataFilter method so set a filter (2 lists of allowed and blocked metadata type)\nserialized in a Parcel.\n\nMediaPlayer.java/android_media_MediaPlayer.cpp/mediaplayer.cpp\nnew setMetadataFilter that passes the filter down to the MediaPlayerService\u0027s binder interface.\n\nMediaPlayerService.cpp\nThe Client inner class holds the allowed and blocked metadata types.\nThese are in 2 vectors that get populated in the setMetadataFilter.\n\nA new shourldDropMetadata method returns true if a type of metadata should be dropped according\nto the filters.\n\nThe notify method in run the metadata update notifications thru the filter and possibly drop them.\n"
    },
    {
      "commit": "b799616d8f0f94e866767fa730f56d82543fb49b",
      "tree": "74b348f81119b86c4cc0131bc940a3b08e7e84be",
      "parents": [
        "fe811d8bd0da15f14702968a9c7deb02db7eec9f",
        "20b03ea70bda3c4fb34e53cdf25cf98c4adb193f"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 08 23:04:34 2009 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 08 23:04:34 2009 -0700"
      },
      "message": "Merge change 6208 into donut\n\n* changes:\n  Move ExifInterface to android.media package so we can reference it from MediaScanner. Also hide public constructor and wrap common use cases as atomic operation to avoid race condition in jhead native codes.\n"
    },
    {
      "commit": "9193e08dc1d91401fdf1846eaad4689da3911dc1",
      "tree": "1fc87918ad76a43168d086bd339546fc205f43c1",
      "parents": [
        "f751c8c2ca3b838330b0b71d43c91192dce42ca3"
      ],
      "author": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Mon Jul 06 12:43:36 2009 -0700"
      },
      "committer": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Wed Jul 08 09:47:29 2009 -0700"
      },
      "message": "New Metadata API for the MediaPlayer.\n\nMediaPlayer.java\nNew method getMetadata to fetch metadata from the player.\nNew method setMetadataFilter to filter metadata notification and fetches.\n\nMetadata.java\nAdded basic interface. Implementation incomplete.\n"
    },
    {
      "commit": "f751c8c2ca3b838330b0b71d43c91192dce42ca3",
      "tree": "f852e2699cccf6c6c808ed146befce5eb7f69e06",
      "parents": [
        "f1d0b7cd100313b51ac4143f0b19f573050f248b",
        "e9ac96f76d513d2cee50dfea7d70b14669643ba9"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 08 09:25:12 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Jul 08 09:25:12 2009 -0700"
      },
      "message": "am e9ac96f7: Merge change 6454 into donut\n\nMerge commit \u0027e9ac96f76d513d2cee50dfea7d70b14669643ba9\u0027\n\n* commit \u0027e9ac96f76d513d2cee50dfea7d70b14669643ba9\u0027:\n  Fix issue 1967295: Add a method to request reloading of audio settings by AudioService.\n"
    },
    {
      "commit": "4050c93601b3c3609b21cc1e18a29b64747e7fa9",
      "tree": "be1e79fe8fdc9aed283230945d42720aa3e01711",
      "parents": [
        "d6fe243c1c6d5e994cacede8110eef736767bd7f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 08 02:52:14 2009 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 08 06:59:50 2009 -0700"
      },
      "message": "Fix issue 1967295: Add a method to request reloading of audio settings by AudioService.\n"
    },
    {
      "commit": "20b03ea70bda3c4fb34e53cdf25cf98c4adb193f",
      "tree": "57c7866815db93c65bf9cff179e2eba8894c75ad",
      "parents": [
        "d6fe243c1c6d5e994cacede8110eef736767bd7f"
      ],
      "author": {
        "name": "repo sync",
        "email": "raychen@google.com",
        "time": "Mon Jul 06 18:13:33 2009 +0800"
      },
      "committer": {
        "name": "Ray Chen",
        "email": "raychen@google.com",
        "time": "Wed Jul 08 17:59:47 2009 +0800"
      },
      "message": "Move ExifInterface to android.media package so we can reference it from MediaScanner.\nAlso hide public constructor and wrap common use cases as atomic operation to avoid\nrace condition in jhead native codes.\n"
    },
    {
      "commit": "fcc5be99e0497f25a12e77622c27b4de30e45b3d",
      "tree": "45632e5c03a03e444aa385139e6aeed8020a73dc",
      "parents": [
        "43488fc78c927c25936e7b90030c5f10d2db94e5",
        "88e209dcf8c2ebddda5c272f46d1bd5478bc639c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 07 09:36:14 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Jul 07 09:36:14 2009 -0700"
      },
      "message": "am 88e209dc: Fix issue 1743700: AudioTrack: setPlaybackRate can not set the playback rate to twice of the ouputSR\n\nMerge commit \u002788e209dcf8c2ebddda5c272f46d1bd5478bc639c\u0027\n\n* commit \u002788e209dcf8c2ebddda5c272f46d1bd5478bc639c\u0027:\n  Fix issue 1743700: AudioTrack: setPlaybackRate can not set the playback rate to twice of the ouputSR\n"
    },
    {
      "commit": "88e209dcf8c2ebddda5c272f46d1bd5478bc639c",
      "tree": "0b4bc797c237a5179be63ee9c3716e8213fc08b6",
      "parents": [
        "37ea71122579e9e2ad1f91b3eca5e4d436b54ea9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 07 07:10:45 2009 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 07 07:10:45 2009 -0700"
      },
      "message": "Fix issue 1743700: AudioTrack: setPlaybackRate can not set the playback rate to twice of the ouputSR\n\nStore sample rate on 32 bits instead of 16 bits in audio_track_cblk_t.\nRemoved sampleRate() methods from AudioTrack and AudioRecord: replaced by getSampleRate().\nAudioTrack::setSampleRate() no returns a status.\n"
    },
    {
      "commit": "6231e3a778a4ffe61683abefa2479127f4566d4c",
      "tree": "9f1d178854d66357a315bf3ea1260023ca59feb4",
      "parents": [
        "19c9137441c7432f5b8e860f2b4f65a458f49e60",
        "ef1f21b34f5624adb7436d3da927660ed16c97c7"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 06 12:00:12 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Mon Jul 06 12:00:12 2009 -0700"
      },
      "message": "am ef1f21b3: Merge change 6231 into donut\n\nMerge commit \u0027ef1f21b34f5624adb7436d3da927660ed16c97c7\u0027\n\n* commit \u0027ef1f21b34f5624adb7436d3da927660ed16c97c7\u0027:\n  Don\u0027t trim() in the mediascanner, as that would remove the special \"sort first\" character.\n"
    },
    {
      "commit": "513d8068b4a34fa83640af924720ac4e89ab11f2",
      "tree": "a0636f27820591ec6a33b21f9515201b7e6c1188",
      "parents": [
        "ff7d0e2bcc6ff056471863ac9aee95e93f19bfed",
        "899725b05dd5c8c51f9f802d4f0a7190532ce0a5"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jul 06 12:00:02 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Mon Jul 06 12:00:02 2009 -0700"
      },
      "message": "am 899725b0: Make sure ringtones are sorted correctly.\n\nMerge commit \u0027899725b05dd5c8c51f9f802d4f0a7190532ce0a5\u0027\n\n* commit \u0027899725b05dd5c8c51f9f802d4f0a7190532ce0a5\u0027:\n  Make sure ringtones are sorted correctly.\n"
    },
    {
      "commit": "73bb511adee5444ecd041146fbbd3677fb635949",
      "tree": "315acc69c76434a2081538205ae23b960f121428",
      "parents": [
        "899725b05dd5c8c51f9f802d4f0a7190532ce0a5"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jul 06 11:07:27 2009 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jul 06 11:07:27 2009 -0700"
      },
      "message": "Don\u0027t trim() in the mediascanner, as that would remove the special \"sort first\" character.\n"
    },
    {
      "commit": "899725b05dd5c8c51f9f802d4f0a7190532ce0a5",
      "tree": "120b38f309ea59d2c8032bc3ff6c162fb073b5b6",
      "parents": [
        "816cf52abd8f45770f0ac922bbb819184ed4b90f"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jul 06 10:57:01 2009 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jul 06 10:57:01 2009 -0700"
      },
      "message": "Make sure ringtones are sorted correctly.\n"
    },
    {
      "commit": "20cb94eeb5b9672573fc86bf51e09bd66a774581",
      "tree": "138919c0c2fd32e1c0185e726be3d6b5debee065",
      "parents": [
        "5a12373277f6ce14101f08580bc4f08f9a3d7c50"
      ],
      "author": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Tue May 12 23:25:55 2009 -0700"
      },
      "committer": {
        "name": "niko",
        "email": "niko@google.com",
        "time": "Wed Jun 24 08:22:52 2009 -0700"
      },
      "message": "Direct api to the native media player.\n\nMediaPlayer.java has 3 new methods:\n* newRequest creates a Parcel that can be used to send data to the\n  native player using invoke.\n* invoke issues synchronous calls to the native player using opaque\n  parcels for the request and reply.\n\nIMediaPlayer.h has 1 new abstract method:\n* invoke\n\nThe Midi and Vorbis players have a stub for these. So far only PV\nmakes use of that new feature.\n\nTo avoid any copy overhead, the JNI interface uses Parcel as a java\nobject (no serialization/copy happens at the JNI layer).\n\nThe remote interface token is inserted when the Parcel is constructed\nin java. That way the parcel is already routable when it reaches\n IMediaPlayer.cpp (proxy). No extra copy is needed there.\n"
    },
    {
      "commit": "cf01aa3cfff321a774139c054e7cfc262ee27921",
      "tree": "619f366c12cba494aa66f1b8d45c1ad6a88da885",
      "parents": [
        "9bfd5f495bdc0d704d85fa95b67845099d9b9f48",
        "1bee98af6532eba3c6cda636eee890530c95a2a7"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 23 13:42:41 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Jun 23 13:42:41 2009 -0700"
      },
      "message": "am 1bee98af: Merge change 5100 into donut\n\nMerge commit \u00271bee98af6532eba3c6cda636eee890530c95a2a7\u0027\n\n* commit \u00271bee98af6532eba3c6cda636eee890530c95a2a7\u0027:\n  Fill in CDMA gaps and clean up ToneGenerator code\n"
    },
    {
      "commit": "b6d90ca1292ffab015d5068f9e184b1dc84b7233",
      "tree": "4713ca5d25092a8c630af7af79598ee5bb335208",
      "parents": [
        "b0ae27f4e10a9e5fe56b9ca549718051fe342bba"
      ],
      "author": {
        "name": "David Krause",
        "email": "david.krause@motorola.com",
        "time": "Wed Jun 17 15:46:13 2009 -0500"
      },
      "committer": {
        "name": "Wink Saville",
        "email": "wink@google.com",
        "time": "Tue Jun 23 12:32:12 2009 -0700"
      },
      "message": "Fill in CDMA gaps and clean up ToneGenerator code\n"
    },
    {
      "commit": "a877427e2ffdb091801cd6803bb880104c753ef6",
      "tree": "b03e9f2b9623e4e745089768f21fe747f57e9eac",
      "parents": [
        "79423590054c909cacd0012df17cc135bd26c148",
        "0e3d77af4ec6cd4961cfb144045ee9dfe479ccf6"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 16 08:37:50 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Jun 16 08:37:50 2009 -0700"
      },
      "message": "am 0e3d77af: Merge change 4324 into donut\n\nMerge commit \u00270e3d77af4ec6cd4961cfb144045ee9dfe479ccf6\u0027\n\n* commit \u00270e3d77af4ec6cd4961cfb144045ee9dfe479ccf6\u0027:\n  AudioService: Fix routing problem recently introduced in setRouting().\n"
    },
    {
      "commit": "d1f362fe144e6cbcb759fa9086a80adbfe9c7589",
      "tree": "e37ac183cc601e4cfce5ee4518437128ce20bdc9",
      "parents": [
        "8cae2daf9853cdb70826ae16cda31b9b45631c33"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Tue Jun 16 08:23:13 2009 -0400"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Tue Jun 16 08:23:13 2009 -0400"
      },
      "message": "AudioService: Fix routing problem recently introduced in setRouting().\n\nDo not disable a route unless routes is zero, to avoid accidentally disabling\nif the same route is enabled twice in a row.\n\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "cca860fa6bf35471ea71ed5e14186c81a9a41afc",
      "tree": "51e97518240e65188528d02dfa7d6e8d32f26092",
      "parents": [
        "5f80742306d6d66b1641f96b57ad819c3667b18e",
        "3d4b7065e960cdaecc8d9fd609c2e508a1f9d8f5"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 12 11:43:59 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri Jun 12 11:43:59 2009 -0700"
      },
      "message": "am 3d4b7065: Merge change 4047 into donut\n\nMerge commit \u00273d4b7065e960cdaecc8d9fd609c2e508a1f9d8f5\u0027\n\n* commit \u00273d4b7065e960cdaecc8d9fd609c2e508a1f9d8f5\u0027:\n  Fix issue #899198\tMODE_RINGER_STREAMS_AFFECTED does not restore volumes correctly\n"
    },
    {
      "commit": "5f80742306d6d66b1641f96b57ad819c3667b18e",
      "tree": "1099d5cc505cdf8f9d75b405213feb0042a34d4e",
      "parents": [
        "451a37ed2d4dca5aed13c4b10bf25590cd41a462",
        "d670b8c61ebd13324ac21bdbc08d8a02fc0a765a"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 12 11:43:55 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri Jun 12 11:43:55 2009 -0700"
      },
      "message": "am d670b8c6: Merge change 3981 into donut\n\nMerge commit \u0027d670b8c61ebd13324ac21bdbc08d8a02fc0a765a\u0027\n\n* commit \u0027d670b8c61ebd13324ac21bdbc08d8a02fc0a765a\u0027:\n  Removed trailing whitespaces.\n"
    }
  ],
  "next": "3d4b7065e960cdaecc8d9fd609c2e508a1f9d8f5"
}
