)]}'
{
  "log": [
    {
      "commit": "fd472ba92c97caad3b665b4c35c770f91d10320c",
      "tree": "bf6470ab0f985b10c66814f3f7a83e053de43a4d",
      "parents": [
        "276ed8df4fa1cafa066555753b901ea600fb0365"
      ],
      "author": {
        "name": "Jesse Wilson",
        "email": "jessewilson@google.com",
        "time": "Thu Apr 08 14:20:57 2010 -0700"
      },
      "committer": {
        "name": "Jesse Wilson",
        "email": "jessewilson@google.com",
        "time": "Fri Apr 09 13:34:15 2010 -0700"
      },
      "message": "Move the public method HttpDateTime.parse() into AndroidHttpClient.\n\nSee bug http://b/2553589\n\nChange-Id: Ide3399c7c63daf9c0b8c18669076f2f4d6e9a876\n"
    },
    {
      "commit": "66424a44c5a3f56516b2f3116d3b5410f2f5faab",
      "tree": "9ccbd852788735357b00ab9bc4f78260a23e4188",
      "parents": [
        "efdccf3ebbbed998207cd934638e8121b0508e1c"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Thu Apr 08 17:24:26 2010 -0700"
      },
      "committer": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Thu Apr 08 17:30:37 2010 -0700"
      },
      "message": "Fix OperationScheduler moratorium calculation for clock rollback case.\n\nMake the unit test exercise some clock-rollback scenarios, using\na properly injected artificial clock.\n\nBug: 2579585\nChange-Id: I6f81c32318ba27429bd30ff53b48449218e4ac64\n"
    },
    {
      "commit": "49b35b5f9c6f301b9cd880934377cf9be33fb718",
      "tree": "9e0fa3c842110e9b2295609687f7be320eae5bb8",
      "parents": [
        "8421672e2e883e0cdda00f22e4f0e8c1053312ad"
      ],
      "author": {
        "name": "Brett Chabot",
        "email": "brettchabot@android.com",
        "time": "Fri Apr 02 08:53:22 2010 -0700"
      },
      "committer": {
        "name": "Brett Chabot",
        "email": "brettchabot@android.com",
        "time": "Fri Apr 02 08:53:22 2010 -0700"
      },
      "message": "Add test annotations to frameworks common tests.\n\nChange-Id: Iaf5af2cbd49015ac8f1bf23a4d20f055ac9a000e\n"
    },
    {
      "commit": "5e7fd906f60f109684fe2bf6ffa773c7820492b8",
      "tree": "70b7bb62ed4acef7ec908c078a63ccbeeffe361b",
      "parents": [
        "7cdc0f99eb0731018a7430740ed374bf4dcf5ae8"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Mar 17 19:47:30 2010 -0700"
      },
      "committer": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Thu Mar 18 08:51:36 2010 -0700"
      },
      "message": "Add GoogleLogTags that includes event log tags used by Google apps\n\nBug: 2523742\nChange-Id: I0e61127ac58cbc954240b30c1f55c2518d833aaa\n"
    },
    {
      "commit": "7009469db87c8209e6fd8553e7a465c339c232f6",
      "tree": "6634f27514d030627c2db99634b5a3f8c7d55a13",
      "parents": [
        "2febfb8aed8c2e4832a75a8cefc8cee3f32876dd"
      ],
      "author": {
        "name": "Mike LeBeau",
        "email": "mlebeau@android.com",
        "time": "Thu Mar 11 10:14:16 2010 -0800"
      },
      "committer": {
        "name": "Mike LeBeau",
        "email": "mlebeau@android.com",
        "time": "Thu Mar 11 10:14:16 2010 -0800"
      },
      "message": "Add a voice search hint context for the launcher.\n\nChange-Id: If22471517d8ee34b750278666277d50deaf9ce47\n"
    },
    {
      "commit": "bf94f6507592cde80ebf63708f803627de355520",
      "tree": "c7777944328cc99a93d8e09803a6a62cd57fbcd4",
      "parents": [
        "72cbb9fe72c1cc731410bb29845067aaa79da9b8"
      ],
      "author": {
        "name": "Mike LeBeau",
        "email": "mlebeau@android.com",
        "time": "Tue Mar 09 10:42:35 2010 -0800"
      },
      "committer": {
        "name": "Mike LeBeau",
        "email": "mlebeau@android.com",
        "time": "Tue Mar 09 10:42:35 2010 -0800"
      },
      "message": "Add new LoggingEvents for more detailed text modification actions for voice input.\n\nChange-Id: I70df3612067f1c8c512a7bbe6c02381724f76bbf\n"
    },
    {
      "commit": "d26e9cebe7d8ce43ea4b80ff4f453b738a92443f",
      "tree": "5377f79bff9918f9e16ea67bc775d971ebbda6ee",
      "parents": [
        "6bb08bd64740661108c60969db93d3b360b45b66"
      ],
      "author": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Fri Feb 19 18:47:49 2010 -0800"
      },
      "committer": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Tue Mar 02 09:36:33 2010 -0800"
      },
      "message": "Fix Proguard flags.\n"
    },
    {
      "commit": "1dd6a04f7820871d1c4215bfd533fcf52845f227",
      "tree": "c0ada467b107c7991081db8d16037d75ea6e7945",
      "parents": [
        "8eca036d24f2e7865ab5ccb057b043e2c32b75bf"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Mar 01 21:42:15 2010 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Mar 01 21:42:15 2010 -0800"
      },
      "message": "Move the pointer location thing out of common.\n"
    },
    {
      "commit": "5dda951bcfbc600ae25efb58920586e31def1f8e",
      "tree": "5a22f0322b2d038eccd720e31e4bf093b8b5f61d",
      "parents": [
        "d49c1ced10a5019b237064b8a5061a1cd9abdce3"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Feb 24 19:54:22 2010 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Feb 25 11:39:33 2010 -0800"
      },
      "message": "Re-arrange android-common so framework no longer links with it.\n\nThis is the framework part, moving classes around so the framework\nno longer needs to link to android-common.  Makes some APIs public,\nothers that didn\u0027t need to be public are private in the framework,\nsome small things are copied.\n"
    },
    {
      "commit": "e49afd86142129947e7592aa0aa999484b338703",
      "tree": "147ea7f69487831c12ba305f3605f5fd7fa45a93",
      "parents": [
        "d2c1705ddf8a205fc26ee37967d054e3f134920f"
      ],
      "author": {
        "name": "Mike LeBeau",
        "email": "mlebeau@android.com",
        "time": "Wed Feb 24 14:08:18 2010 -0800"
      },
      "committer": {
        "name": "Mike LeBeau",
        "email": "mlebeau@android.com",
        "time": "Thu Feb 25 07:19:55 2010 -0800"
      },
      "message": "Add the API constants to support providing hint strings in the response to\nRecognizerIntent.ACTION_GET_LANGUAGE_DETAILS.\n\nThis will use the new support for ArrayList\u003cCharSequence\u003e bundles added in\nhttp://b/2468093. This and the corresponding VoiceSearch CL should not be\nsubmitted until that is.\n"
    },
    {
      "commit": "3283401e819a4915289567bb36fc0c77f692e051",
      "tree": "bccb68782e7f58de007b220f9e6939c90602f2dd",
      "parents": [
        "8e34931c685926821d9fb681371fd81f08f41f57"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Feb 17 17:07:01 2010 -0800"
      },
      "committer": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Feb 17 17:07:01 2010 -0800"
      },
      "message": "Add some useful methods to OperationScheduler to inquire into\nthe history, in case you want to second-guess its scheduling.\n"
    },
    {
      "commit": "39696474d715de575949a9cdf12e7ff339896f8d",
      "tree": "0fc63d122fa85e35689083223e5db36d2ae90eb9",
      "parents": [
        "37dd0df785b3a65c5a3cea67a05d1c3d7b5ca637",
        "9b9deb3f68a21d122784534693a68d1620d4b278"
      ],
      "author": {
        "name": "Mike LeBeau",
        "email": "mlebeau@android.com",
        "time": "Tue Feb 16 16:10:09 2010 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 16 16:10:09 2010 -0800"
      },
      "message": "Merge \"Add constant to android-common for voice search\u0027s EXTRA_CALLING_PACKAGE, and use it from SearchDialog.\""
    },
    {
      "commit": "caa155187575532693e54960ab36b5b9e1d8e5d3",
      "tree": "92f246e56ed4babd5cf3a535b220290196349365",
      "parents": [
        "8b77bd8655a0e389d591b16c5571710bcf7a4552",
        "3207e29d107273115096be9b9cc621c915e61e1d"
      ],
      "author": {
        "name": "Shimeng (Simon) Wang",
        "email": "swang@google.com",
        "time": "Tue Feb 16 10:49:37 2010 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 16 10:49:37 2010 -0800"
      },
      "message": "Merge \"Enhance URL regular expression to match more Unicode chars.\""
    },
    {
      "commit": "53fc61801e07532b7d9778dd6044f3022daa219a",
      "tree": "8aff4aea2272bdfe912b00f4da5773b83b7b5f85",
      "parents": [
        "cf920369f62a36c18251594df92a11f35d01cbae"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Sun Feb 14 15:31:27 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Sun Feb 14 15:31:27 2010 -0800"
      },
      "message": "remove Base64 from android-common\n\nThis is now available in the framework as android.util.base64.*;\n\nChange-Id: I54901d32b2b5b291cfa0b4c2479b805038ba12ac\n"
    },
    {
      "commit": "8f281cc4bc607a7784c109d6afc2a70c268ab165",
      "tree": "6c0dfff1a042bfd8cab8e6fcfed2de68ab2af55a",
      "parents": [
        "fbdd609ce8fd675051c51a455c2ded5b9c0f772e"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 12 15:52:09 2010 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 12 17:52:22 2010 -0800"
      },
      "message": "Fix MotionEvent pointer API.\n\nOoops.  The API said that the pointer down and up actions contained\nthe pointer id, but it is actually the index.  Actually it makes\nmuch more sense for it to be the index, and those ACTION_POINTER_1_DOWN\netc. constants were stupid.\n"
    },
    {
      "commit": "9b9deb3f68a21d122784534693a68d1620d4b278",
      "tree": "247e923693ac9120a2942ede1c06b6ee08e60ffc",
      "parents": [
        "fbdd609ce8fd675051c51a455c2ded5b9c0f772e"
      ],
      "author": {
        "name": "Mike LeBeau",
        "email": "mlebeau@android.com",
        "time": "Fri Feb 12 17:08:03 2010 -0800"
      },
      "committer": {
        "name": "Mike LeBeau",
        "email": "mlebeau@android.com",
        "time": "Fri Feb 12 17:51:31 2010 -0800"
      },
      "message": "Add constant to android-common for voice search\u0027s EXTRA_CALLING_PACKAGE,\nand use it from SearchDialog.\n"
    },
    {
      "commit": "864ff34522514c29186ae066ca12ffe23c981e93",
      "tree": "d3fb3f0d27908fd3185032499f11b109e76743e7",
      "parents": [
        "b946f110388cd3506bba95abccaa2393ced8c73d",
        "5996f7baa868840abc426eb3f4c12fc2bed1c4bf"
      ],
      "author": {
        "name": "Mike LeBeau",
        "email": "mlebeau@android.com",
        "time": "Fri Feb 12 15:27:12 2010 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 12 15:27:12 2010 -0800"
      },
      "message": "Merge \"Oops, unbreak the build by removing Recognition.java, not intended for submission at this time.\""
    },
    {
      "commit": "5996f7baa868840abc426eb3f4c12fc2bed1c4bf",
      "tree": "a70782e021c85bdd8eccc83b222eff40ae4b2fbc",
      "parents": [
        "0a546063134e016063a3f5768208a110aaea52c9"
      ],
      "author": {
        "name": "Mike LeBeau",
        "email": "mlebeau@android.com",
        "time": "Fri Feb 12 15:26:22 2010 -0800"
      },
      "committer": {
        "name": "Mike LeBeau",
        "email": "mlebeau@android.com",
        "time": "Fri Feb 12 15:26:22 2010 -0800"
      },
      "message": "Oops, unbreak the build by removing Recognition.java, not intended for\nsubmission at this time.\n"
    },
    {
      "commit": "4892c84a42e3714448a0f509858d7cba1156257c",
      "tree": "b63cb155a65c99bb4737ba0cfec298523d8f0041",
      "parents": [
        "053c9e928bc8aa569572aea97430a63cb8fdc109",
        "0a546063134e016063a3f5768208a110aaea52c9"
      ],
      "author": {
        "name": "Mike LeBeau",
        "email": "mlebeau@android.com",
        "time": "Fri Feb 12 14:31:00 2010 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 12 14:31:00 2010 -0800"
      },
      "message": "Merge \"Make the corresponding frameworks change to add VoiceRecognitionService to the list of SDK sample apps.\""
    },
    {
      "commit": "0a546063134e016063a3f5768208a110aaea52c9",
      "tree": "94d6d4c45937fd8b70670f568de3041e0b71424c",
      "parents": [
        "4fae0fd0c9425318094d4c0059331c2c7a996c66"
      ],
      "author": {
        "name": "Mike LeBeau",
        "email": "mlebeau@android.com",
        "time": "Fri Feb 12 14:09:55 2010 -0800"
      },
      "committer": {
        "name": "Mike LeBeau",
        "email": "mlebeau@android.com",
        "time": "Fri Feb 12 14:09:55 2010 -0800"
      },
      "message": "Make the corresponding frameworks change to add VoiceRecognitionService to\nthe list of SDK sample apps.\n"
    },
    {
      "commit": "4a455d8c3620df8532670865fbb35b077f18190f",
      "tree": "53d37d7b4ee0b3a441598389373acc62b8e92c51",
      "parents": [
        "fe7a18c4e17a179a0f26e139d3eae20393c1a8ae"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Feb 11 22:19:06 2010 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 12 13:19:06 2010 -0800"
      },
      "message": "Add Pointer Location to the window manager.\n\nThe window manager now has pointer location built into it.\nViva la touch!\n"
    },
    {
      "commit": "27a31e573fecc2d6f77cd9326571672de639532b",
      "tree": "293eabdaa124bbc8f955103071905d6a1d36ace6",
      "parents": [
        "0b3900316e63b45078f144387be05c5790f0a1ae"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Feb 11 14:37:17 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Fri Feb 12 10:53:46 2010 -0800"
      },
      "message": "add Base64InputStream\n\nChange-Id: I777b54bd6d01c86105b473a6701a06d350cee8d1\n"
    },
    {
      "commit": "3207e29d107273115096be9b9cc621c915e61e1d",
      "tree": "180d549ee144935e3d34b8a76841a9084b17ec3b",
      "parents": [
        "56811abc376e86d31ebd799b65cfa62cfaf8e16e"
      ],
      "author": {
        "name": "Shimeng (Simon) Wang",
        "email": "swang@google.com",
        "time": "Thu Feb 11 14:07:44 2010 -0800"
      },
      "committer": {
        "name": "Shimeng (Simon) Wang",
        "email": "swang@google.com",
        "time": "Thu Feb 11 14:07:44 2010 -0800"
      },
      "message": "Enhance URL regular expression to match more Unicode chars.\n\nEnhance URL regular expression to match legal one byte Unicode characters in\nInternationalized Resource Identifiers as detailed in RFC 3987.  Specifically\ntwo byte Unicode characters are not included.  Not all things in RFC 3987 is\nimplemented, this is just an enhancement for recognizing more common used one\nbyte Unicode characters.\n\nThis change helps Browser address bar identify more valid URL without scheme\ntyped in, such as 현금영수증.kr\n\nmake-iana-tld-pattern.py is modified to contain only Top Level Domain\nregular expression generation.  Other parts of WEB_URL pattern are in\nsolely in Patters.java for better consistency and maintenance.\n"
    },
    {
      "commit": "f13b12d4f04bcf11f66a30991cb9bc0066d31bc4",
      "tree": "d2946bd909ca9fcdafb7746a920453e1db4c465a",
      "parents": [
        "a32a6a428d63ae6b4b10e311be4b706df153c956"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Feb 11 13:01:09 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Feb 11 14:07:17 2010 -0800"
      },
      "message": "add NO_CLOSE flag for use by Base64OutputStream\n\nChange-Id: Ib2884e7b3853e4e4b2e329edf47c6f64c2f165a7\n"
    },
    {
      "commit": "6e00aae5c7e5bd2a6c5d68afc94268b828c08578",
      "tree": "6aa618e7e43f355a5e7cd1e48f33e4a6e0652de7",
      "parents": [
        "92d543f639e9a45301720b769ce226ca3df28ccd",
        "56811abc376e86d31ebd799b65cfa62cfaf8e16e"
      ],
      "author": {
        "name": "Shimeng (Simon) Wang",
        "email": "swang@google.com",
        "time": "Wed Feb 10 14:52:07 2010 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 10 14:52:07 2010 -0800"
      },
      "message": "Merge \"Add back lost python script.\""
    },
    {
      "commit": "92d543f639e9a45301720b769ce226ca3df28ccd",
      "tree": "5a8dd10b2ef2678061f12afd880f1996dc77f8a1",
      "parents": [
        "aa5be64fe02e4dcea56fa2f863e3ecf9f2e81f4c"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Mon Feb 08 21:56:38 2010 -0800"
      },
      "committer": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Feb 10 14:43:21 2010 -0800"
      },
      "message": "API CHANGE: Add SSLSessionCache public API to allow unbundled SSL session caching.\n\nGenerally clean up the associated SSLCertificateSocketFactory API as well,\nchange AndroidHttpClient to use this new thing, and make the android-common\nlibrary build SDK-clean (woo hoo).\n\nBug: 2362543\nBug: 2357311\n"
    },
    {
      "commit": "56811abc376e86d31ebd799b65cfa62cfaf8e16e",
      "tree": "4e6c02fcfc3fabb253a52cf7342c5def7e1687f3",
      "parents": [
        "e757f9f464f63a0ed0ca367cabb96f9f9f9e5e49"
      ],
      "author": {
        "name": "Shimeng (Simon) Wang",
        "email": "swang@google.com",
        "time": "Wed Feb 10 11:22:01 2010 -0800"
      },
      "committer": {
        "name": "Shimeng (Simon) Wang",
        "email": "swang@google.com",
        "time": "Wed Feb 10 11:22:01 2010 -0800"
      },
      "message": "Add back lost python script.\n\nThe script is used to generate top level domains\u0027 regular expressions.\nThis is enhanced and used to regenerate the new top level domains.\n\n\tnew file:   common/tools/make-iana-tld-pattern.py\n"
    },
    {
      "commit": "0ab177114681bc944d7d4a0fcf89ee48df18466c",
      "tree": "028f7baa6db6f0ca6a63b9226002d9503fde2859",
      "parents": [
        "6d65fdbed1df3cf9805c2050dc1c919806046d67"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Feb 10 11:02:23 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Feb 10 11:10:53 2010 -0800"
      },
      "message": "add Base64OutputStream to android-common\n\nBase64OutputStream is a FilterOutputStream that can encode or decode\nbase-64 data (with any of the flags supported by the Base64 class --\ncrlf, padding vs not, line wrapping vs not, etc.)\n\nWe change Base64 to have package-private decodeInternal and\nencodeInternal methods that save all their state in objects and can be\ncalled multiple times to stream data.  The existing functions for\nin-memory encoding/decoding call the internal method once; the output\nstream calls it multiple times.\n\nChange-Id: Iac661d05329bc2e6b2863088efcedc974415ec44\n"
    },
    {
      "commit": "1ce354669df8cc4d5c7377f2a476a9a7d922f700",
      "tree": "0f069b346cb6104a760902f0b38862e3e24d293e",
      "parents": [
        "1776e77c68971a72ca81b720c2074bae342d3f0a"
      ],
      "author": {
        "name": "Bjorn Bringert",
        "email": "bringert@android.com",
        "time": "Wed Feb 10 14:04:21 2010 +0000"
      },
      "committer": {
        "name": "Bjorn Bringert",
        "email": "bringert@android.com",
        "time": "Wed Feb 10 14:04:21 2010 +0000"
      },
      "message": "Add Search.SOURCE to android-common\n\nPart of http://b/issue?id\u003d2429556\n\nChange-Id: I1e37e092c8a1319d5f703b065dba8a6fbde31db5\n"
    },
    {
      "commit": "e757f9f464f63a0ed0ca367cabb96f9f9f9e5e49",
      "tree": "ed4ba9aa5576f10d11191140afa7a78a819ec327",
      "parents": [
        "7a31bae9f14a45d55d6b6cb48459c26e0635f77a"
      ],
      "author": {
        "name": "Shimeng (Simon) Wang",
        "email": "swang@google.com",
        "time": "Fri Feb 05 17:57:45 2010 -0800"
      },
      "committer": {
        "name": "Shimeng (Simon) Wang",
        "email": "swang@google.com",
        "time": "Tue Feb 09 15:13:09 2010 -0800"
      },
      "message": "Regenerate the TopLevelDomain from iana.org website.\n\nThis is to capture recently added top level domains.\n\tmodified:   common/java/com/android/common/Patterns.java\n\n\tmodified:   common/tests/src/com/android/common/PatternsTest.java\n"
    },
    {
      "commit": "34d472b7680ad74960e808834b05e61302ed2fc2",
      "tree": "45e0d99744113b2c0b8536dea8553404996a0393",
      "parents": [
        "54ad88ea69d5709b65bc59f4cfdc6b6a8634a7d8"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Mon Feb 08 09:06:41 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Mon Feb 08 11:16:20 2010 -0800"
      },
      "message": "add explicit Base64.DEFAULT flag to request default behavior\n\nAlso fix some grammar problems in the javadoc, and prevent the class\nfrom being instantiated.\n\nChange-Id: I4d83184236566a1e77d5f5cce1c4dd3776bcfca3\n"
    },
    {
      "commit": "52a0bb3857866da55ffc71fd6542891a047eddca",
      "tree": "f8c8e0020013c3713bf3780f0589b30c521ca27c",
      "parents": [
        "8e83db5f24660f8645c919a6fb0ca487c6c6f537",
        "f9d3196cc837449ca4e1e6c8a54022892e44420a"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Fri Feb 05 05:44:17 2010 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 05 05:44:17 2010 -0800"
      },
      "message": "Merge \"rename encodeString to encodeToString\""
    },
    {
      "commit": "8e83db5f24660f8645c919a6fb0ca487c6c6f537",
      "tree": "9dc4281eef120241f91a5ee1872bb9573637d4a6",
      "parents": [
        "cea135806a24d66f5c5da8e1f9e703fd166b6d7f",
        "d11052311f4361687123b4209d35f3e42ba81fe5"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Thu Feb 04 19:48:52 2010 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 04 19:48:52 2010 -0800"
      },
      "message": "Merge \"Add ability to parse HTTP-format moratorium times (since pretty much every user wants this).\""
    },
    {
      "commit": "f9d3196cc837449ca4e1e6c8a54022892e44420a",
      "tree": "7b225ac3d33a4ec87e4288fe82fbe2113d882ba1",
      "parents": [
        "b7cc1ec7234400b1077dd2dc1d8663f4573497b6"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Feb 04 17:07:59 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Feb 04 17:07:59 2010 -0800"
      },
      "message": "rename encodeString to encodeToString\n\nChange-Id: I777530b80a9e8be8c487e140574621cd9d35dc35\n"
    },
    {
      "commit": "b7cc1ec7234400b1077dd2dc1d8663f4573497b6",
      "tree": "f11e8ed5ac3534d801e9a4adcb0acfc6365a4916",
      "parents": [
        "7c482454b11943ea8a10b097740c455db958633a"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Feb 04 10:39:14 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Feb 04 15:54:00 2010 -0800"
      },
      "message": "a new java implementation of base64 for android-common\n\nA new Base64 encoder/decoder class.  Some benchmarks comparing the\ndecoder it to those from android.os.Base64Utils (a decode-only native\nimplementation not accessible to apps) and\norg.apache.commons.codec.binary.Base64, all with the JIT enabled:\n\n  1k encoded data\n  APACHE   avg:   811 us    min:   244 us    max: 13671 us\n  COMMON   avg:   263 us    min:    30 us    max:  4730 us\n  NATIVE   avg:   102 us    min:    61 us    max:  5493 us\n\n  10k encoded data\n  APACHE   avg:  3624 us    min:  2746 us    max: 23895 us\n  COMMON   avg:   979 us    min:   518 us    max:  7751 us\n  NATIVE   avg:   817 us    min:   762 us    max:  3143 us\n\n  100k encoded data\n  APACHE   avg: 33167 us    min: 31829 us    max: 140411 us\n  COMMON   avg:  6047 us    min:  5493 us    max: 45227 us\n  NATIVE   avg: 10109 us    min: 10009 us    max: 12451 us\n\nChange-Id: Ic622e3a967a62d57d30bd25b80cbe4e0dd60e764\n"
    },
    {
      "commit": "d11052311f4361687123b4209d35f3e42ba81fe5",
      "tree": "122ee2f49ff2514c649c78c1acf60122c7745724",
      "parents": [
        "12632744a5d10a72c0e0a1d60ac35ae194852332"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Feb 03 17:01:10 2010 -0800"
      },
      "committer": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Feb 03 18:28:08 2010 -0800"
      },
      "message": "Add ability to parse HTTP-format moratorium times\n(since pretty much every user wants this).\n"
    },
    {
      "commit": "b1293475be7ca23ce507cbafab8881e660d5b191",
      "tree": "76a6e60f4c1284853ca10c7aee2fd7aa96195285",
      "parents": [
        "10279c8d3fd9180d1053b963e10b6d3d30037e9e"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Feb 03 11:14:29 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Feb 03 11:14:29 2010 -0800"
      },
      "message": "move HttpDateTime from android.webkit to android-common jar\n\nSome to-be-unbundled classes want to use HttpDateTime as well.\n\nChange-Id: I40a001970682f6fbd4d9cd3546bd3f63ebfbe89b\n"
    },
    {
      "commit": "4efd5c1e6757e1d72292056fb172258923d77687",
      "tree": "53cd581b8a993cd0b9ce8659edc47282fc28968d",
      "parents": [
        "c36bd07eaec7817f27a1ea7913236d0090c00f5c"
      ],
      "author": {
        "name": "Maryam Garrett",
        "email": "mkamvar@google.com",
        "time": "Mon Feb 01 11:47:45 2010 -0500"
      },
      "committer": {
        "name": "Maryam Garrett",
        "email": "mkamvar@google.com",
        "time": "Mon Feb 01 11:47:45 2010 -0500"
      },
      "message": "Remove 2 unused imports.\n\nChange-Id: I4ada5f3dccdbb2e7ede29693f7211068808f2d75\n"
    },
    {
      "commit": "c36bd07eaec7817f27a1ea7913236d0090c00f5c",
      "tree": "3e2d7ccde00723d0c2570b298dca18e434561c9b",
      "parents": [
        "0f5bcea6f579b195a5ae3f8a7e6463353eac9669"
      ],
      "author": {
        "name": "Maryam Garrett",
        "email": "mkamvar@google.com",
        "time": "Tue Jan 26 10:41:51 2010 -0500"
      },
      "committer": {
        "name": "Maryam Garrett",
        "email": "mkamvar@google.com",
        "time": "Fri Jan 29 13:27:56 2010 -0500"
      },
      "message": "Move LoggingEvents.java to android-common \u0026 add UserHappiness\n\nThe LoggingEvents move will allow Gmail, Voice Search and other apps to\naccess the LoggingEvents needed. This file will replace\npackages/inputmethods/LatinIMEsrc/com/android/inputmethod/voice/LoggingEvents.java\nvendor/google/apps/VoiceSearch/apps/VoiceSearch/src/com/google/android/voicesearch/logging/LoggingEvents.java\n\nIn addition to moving the file, I have added 3 new fields:\nTIMESTAMP, IME_TEXT_ACCEPTED, CALLING_APP_NAME. I needed to\ncreate CALLING_APP_NAME b/c I can\u0027t re-use EXTRA_APP_NAME\nbecause that is reserved for one of two values: voice\nsearch or voice IME.\n\nI added another file to android-common: UserHappinessSignals\nThis can be imported by different applications to broadcast\nvarious user happiness metrics. It is currently used by Gmail\u0027s\nCompseActivity.java to indicate that a user \"accepted\" the IME\ntext when they pressed the send button.\n\nChange-Id: Ia859140facb7fb66a12706735d5132ba9eaa5ea0\n"
    },
    {
      "commit": "7d9549172ae31c3824d3b61110545de423758376",
      "tree": "6df4e95a0672b339274948c3ae9ba51bbf4836e8",
      "parents": [
        "a2fe2f39d9e5c39b19c32af468827b3c1c5bee7a"
      ],
      "author": {
        "name": "Paul Westbrook",
        "email": "pwestbro@google.com",
        "time": "Wed Jan 13 12:13:57 2010 -0800"
      },
      "committer": {
        "name": "Paul Westbrook",
        "email": "pwestbro@google.com",
        "time": "Thu Jan 21 16:56:57 2010 -0800"
      },
      "message": "Bug 2330111\n\nMake NumberPicker public\n\nMade setCurrent() more robust, as the value needs to be within the range\nspecified earlier. setCurrent() will now throw an exception\nif the specified doesn\u0027t fall in the range\n"
    },
    {
      "commit": "eac7055b4090608fb8d57dfe8534a8f188ac637a",
      "tree": "186db2cdf7928c3bbe4ed867ee2889d540079a0b",
      "parents": [
        "73b2c3c505dfb709cc644b8423301cde27d9a9e3"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Wed Jan 20 09:56:01 2010 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Wed Jan 20 09:58:42 2010 -0800"
      },
      "message": "DomainNameValiator: Remove workaround\n\nRemove the workaround introduced in CL 68137-p9.\nValidation should fail when a certification can\u0027t be parsed.\n\nBug: 2369689\n"
    },
    {
      "commit": "1b925b09981692a23f7a956a1f89feacdbdc1768",
      "tree": "4fca990974dd809b920132bc83778408996e1c30",
      "parents": [
        "46b6bc7c21641f51f8372b496facf443e035171e"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue Jan 12 14:00:07 2010 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue Jan 19 15:03:10 2010 -0800"
      },
      "message": "Addign more tests for DomainNameValidator.\n\nAdded tests that use actual certificates.\n\nSee bug:2369689 for background.\n"
    },
    {
      "commit": "ca99444c988d69c14a711dbf7a1132254f1fc5fa",
      "tree": "46cffcd989e5919e7bb790ed478fcb6cc199c984",
      "parents": [
        "345f8a1fe81aed0bb0eb6356472fb3b854f659d0"
      ],
      "author": {
        "name": "Fred Quintana",
        "email": "fredq@google.com",
        "time": "Thu Jan 14 12:16:20 2010 -0800"
      },
      "committer": {
        "name": "Fred Quintana",
        "email": "fredq@google.com",
        "time": "Thu Jan 14 14:57:20 2010 -0800"
      },
      "message": "allow + in usernames\n"
    },
    {
      "commit": "831f258fd91a1e85fc59aea88a3e26e57d6c40d9",
      "tree": "3870e77f24d875c74f6db4d5de77cf63be37e04c",
      "parents": [
        "40d851cc47e140fada6a69f4506e42f747dec802"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Fri Jan 08 13:34:57 2010 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue Jan 12 10:27:13 2010 -0800"
      },
      "message": "Moved DomainNameChecker to android common.\n\n- Moved DomainNameChecker from android.net.http to android common, and renamed to DomainNameValidator.\n- Added a simplified version of DNParser, which DomainNameValidator uses instead of X509Name in order to extract Subject Name from a certificate.\n- Added unit tests for DomainNameChecker and DNParser.\n\nThere\u0027s a suspicious comment in DomainNameChecker saying something like \"X509Certificate fails to parse a certificate when a subject alt name begins with \u0027*\u0027\".  I think we should fix it if it\u0027s really the case -- otherwise certificates with the wildcard wouldn\u0027t work.  I\u0027ll see if it\u0027s true after submitting this patch.\n"
    },
    {
      "commit": "cf504c40b24f1d51cd4a751d55eb441a3aefc172",
      "tree": "3b491dd64a4b8e2b87a788ddf30ff5f7f8c5d88d",
      "parents": [
        "072ba687d6b152d9c74a40e856e7d2c213a68ea2"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Jan 07 13:51:16 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Jan 07 15:00:37 2010 -0800"
      },
      "message": "change remaining frameworks/base Gservices to Secure settings\n\nChange-Id: I61bdb05a2526523700c2833154d5a4133881ef10\n"
    },
    {
      "commit": "466d65e3c1dd9bf8d956121e981c35e464021fe3",
      "tree": "ff33930d0c0310efc521fd202ac96371afc2076f",
      "parents": [
        "02a5abc3628afdda94d9a53973c4ae5f34d37e1d"
      ],
      "author": {
        "name": "Tom Taylor",
        "email": "tomtaylor@google.com",
        "time": "Fri Dec 18 10:08:35 2009 -0800"
      },
      "committer": {
        "name": "Tom Taylor",
        "email": "tomtaylor@google.com",
        "time": "Fri Dec 18 10:08:35 2009 -0800"
      },
      "message": "Move various utility classes to android-common\n\nIn the process of making Mms unbundled, copy a few non-public-API\nclasses into the android-common library. The Mms app now uses this\nlibrary. The next step is to update the other apps that use these classes\nand then delete the classes from their original location.\n"
    },
    {
      "commit": "8bf1ad00e731c42fffd49e2a8c32e2b00a51c679",
      "tree": "cb190124d3261e7ac5c40a8402c5f0dfe88759a8",
      "parents": [
        "c417b68c3ace9639a4d747b8a306625d6754fc0b"
      ],
      "author": {
        "name": "Paul Westbrook",
        "email": "pwestbro@google.com",
        "time": "Fri Dec 11 14:13:48 2009 -0800"
      },
      "committer": {
        "name": "Paul Westbrook",
        "email": "pwestbro@google.com",
        "time": "Mon Dec 14 09:24:09 2009 -0800"
      },
      "message": "Unbundling work\n\nMoved AndroidHttpClient, Rfc822InputFilter, Rfc822Validator\nNumberPicker, NumberPickerButton to android-common\n---\n"
    },
    {
      "commit": "a649612e6839b36635c18d782816f31a509a6ba0",
      "tree": "efceddbd6f3b62324fee1b4b8c0ed698fc715435",
      "parents": [
        "e63efc88884efd8585456ed23a2dccdc463ea512"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Fri Nov 20 18:31:33 2009 -0800"
      },
      "committer": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Sat Nov 21 10:09:46 2009 -0800"
      },
      "message": "Add OperationScheduler (and test) to the common static library;\nincludes new string parsing function (and test).\n"
    },
    {
      "commit": "a2d89234c16ac0951260f2b2a35b4ef90cc9e255",
      "tree": "92ac8bea77e5e8245e1f963b4a45e236575ab178",
      "parents": [
        "6c8d6bcdc508d851393fd8da5756150661e45730"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Nov 18 14:41:14 2009 -0800"
      },
      "committer": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Nov 18 15:08:18 2009 -0800"
      },
      "message": "Solve the mutual interdependency problem between common and framework:\nHave framework include the common source files directly when building,\nthen build common as a static library separately (depending on\nframework, like everything else).\n\nGoes with a companion change to build/core/pathmap.mk.\n"
    },
    {
      "commit": "b31ecb20de2673efcc06eb1b707e5fc0c8fc1741",
      "tree": "1ff3abf8691f90b93e3283d1b99d9b065a160633",
      "parents": [
        "93c0b5cb9b64bf1cffea1f5b8d0ecb1c69ab358f"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Nov 18 14:14:10 2009 -0800"
      },
      "committer": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Nov 18 14:14:10 2009 -0800"
      },
      "message": "Attempt to fix the build server build: make the common library\nnot depend on the framework library (for now, at least).\n"
    },
    {
      "commit": "a6f46982893c49f2ebe9709d745959f8613d61b2",
      "tree": "869cc209a508d8d45655bb1940bf8ad6f4d97767",
      "parents": [
        "526b33cda2d953230275796ff2b1db7f89ff3e94"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Nov 18 11:23:45 2009 -0800"
      },
      "committer": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Nov 18 12:05:04 2009 -0800"
      },
      "message": "Create android-common static library which gets included in frameworks.jar,\nbut can also be used by unbundled apps.  Move android.text.util.Regex there as\na starting example, renamed to a more sensible (?) com.android.common.Patterns.\nSet up a corresponding test package, and move RegexTest (to PatternsTest).\nUpdate clients.\n"
    }
  ]
}
