)]}'
{
  "log": [
    {
      "commit": "05dc66ada6b61a6bdf806ffaa62617ac5394695d",
      "tree": "a7e395476241706de31498185a5c2ccb979bcb54",
      "parents": [
        "e43111fad31ad8e36a66df52a8c6002799996413"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 02 14:41:58 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 02 15:37:57 2011 -0800"
      },
      "message": "Fade out the mouse pointer after inactivity or other events.\n\nFades out the mouse pointer:\n- after 15 seconds of inactivity normally\n- after 3 seconds of inactivity in lights out mode\n- after a non-modifier key down\n- after a touch down\n\nExtended the native Looper to support enqueuing time delayed\nmessages.  This is used by the PointerController to control\npointer fade timing.\n\nChange-Id: I87792fea7dbe2d9376c78cf354fe3189a484d9da\n"
    },
    {
      "commit": "32a55cf66e12e5e56d2e05b73c6bef453477c2bb",
      "tree": "e5709c24f92bc304bfc32f75b8f23911092c5f40",
      "parents": [
        "d752c3b3e6c576ed1f18e86a7b18c33dc7c65791"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 25 16:11:44 2011 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 25 16:20:52 2011 -0800"
      },
      "message": "Fix sp\u003c\u003e conversion operator / constructor\n\nsome of the conversion operators were not using the proper\npointer type when calling incStrong/decStrong, usually it\nhas no bad consequences, but for some implementation\nof the ref-counted object it could lead to recording the wrong\nowner id.\n\nChange-Id: If574b9069b8a4cf6e0911a992c8f095aba799995\n"
    },
    {
      "commit": "5af3d0100524ac16fb7a7fba2a83a8d135009565",
      "tree": "d11d01f4f98d928b6ce886bc66bac6808ab055af",
      "parents": [
        "66d16910a84c9a67d854cf1d2d78cee94641be1f",
        "49862c3630632303c40ca37f1791ed4b092ce063"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Feb 24 18:27:40 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 24 18:27:40 2011 -0800"
      },
      "message": "Merge \"Fix a wp\u003c\u003e bug where the owner ID would be wrong\""
    },
    {
      "commit": "49862c3630632303c40ca37f1791ed4b092ce063",
      "tree": "cb7d2a8d7d615664a206243557f82abb7c03f3c3",
      "parents": [
        "ec122eb46b6ce8f6e8bb3e08c34e575de666cd3e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Feb 24 18:12:34 2011 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Feb 24 18:12:34 2011 -0800"
      },
      "message": "Fix a wp\u003c\u003e bug where the owner ID would be wrong\n\nthis was introduced recently. we make sure to use\nthe correct owner id (the sp) instead of the wp.\n\nChange-Id: I78fdc6ec0c2d3e687278b70442d74d1924b512a2\n"
    },
    {
      "commit": "ffbe826804e150013acbf3ab25bd405bbbd186fc",
      "tree": "51fae9c95265246e6de2100556cb7d68746f9614",
      "parents": [
        "a28f6f11f22963e3679537e83f243edeaa5ee17c",
        "ec122eb46b6ce8f6e8bb3e08c34e575de666cd3e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Feb 24 16:23:51 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 24 16:23:51 2011 -0800"
      },
      "message": "Merge \"Fix some issues with RefBase debugging.\""
    },
    {
      "commit": "6152bbc65016e526f25d24a66b92d6aa822f6ee0",
      "tree": "c889b96609acef1ddde26a338e1b4a0e5a802074",
      "parents": [
        "7b76c8d3fc25aedea6edfed9638b008faa2f6ae8",
        "c2b3cda097d2f8ac9211360aa82995d693e0764c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 24 10:01:31 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 24 10:01:31 2011 -0800"
      },
      "message": "Merge \"Bug 3362814 Fix SMP race in access to mRequestExit\""
    },
    {
      "commit": "ec122eb46b6ce8f6e8bb3e08c34e575de666cd3e",
      "tree": "c5d6d30e2802f8e9671731cc16095c6040358f09",
      "parents": [
        "47b8adec3904535c8d8ce2b6e42ecd736f2d90ce"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 16 20:23:43 2011 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 23 22:21:41 2011 -0800"
      },
      "message": "Fix some issues with RefBase debugging.\n\nFirst slipt sp\u003c\u003e out of RefBase into StrongPointer.h so it can be reused\nmore easily and to make it clear that it doesn\u0027t require RefBase.\n\nNote: the rest of the change only affects the system when DEBUG_REFS is enabled.\n\nThe main problem we fix here is that the owner id associated with each\nreference could get out of date when a sp\u003c\u003e or wp\u003c\u003e was moved, for\ninstance when they\u0027re used in a Vector\u003c \u003e.\n\nWe fix this issue by calling into RefBase::moveReferences from\na template specialization for sp\u003cTYPE\u003e and wp\u003cTYPE\u003e of the\ntype helpers. RefBase::moveReferences() has then a chance to\nupdate the owner ids.\n\nThere is a little bit of trickery to implement this generically in\nRefBase, where we need to use a templatized functor that can turn\na sp\u003cTYPE\u003e* casted to a void* into a RefBase*.\n\nIntroduced a new debug option DEBUG_REFS_FATAL_SANITY_CHECKS\ncurrently set to 0 by default as there seem to be an issue\nwith sp\u003cANativeWindow\u003e which trips the sanity checks.\n\nChange-Id: I4825b21c8ec47d4a0ef35d760760ae0c9cdfbd7f\n"
    },
    {
      "commit": "c2b3cda097d2f8ac9211360aa82995d693e0764c",
      "tree": "8a6baf03da30391ff32d3a269df42dda278f701b",
      "parents": [
        "282ff9ae3f798dec325ce6b868f053649b596a8c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 01 11:32:29 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 23 17:49:59 2011 -0800"
      },
      "message": "Bug 3362814 Fix SMP race in access to mRequestExit\n\nAlso fix an unlikely SMP race in access to mHoldSelf on entry to _threadLoop.\n\nChange-Id: I6cbc0b94739c7dd5e77e8a5ba0da22cdc0b1a4db\n"
    },
    {
      "commit": "a688b574d294faae5f56224908b40856c5045aac",
      "tree": "2af92697194f007d9e0beb044c005a863ac40a85",
      "parents": [
        "5fb008e3800032be18c6d5f1e7ace4d7c2661e26"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 16 15:23:08 2011 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Feb 22 18:08:58 2011 -0800"
      },
      "message": "Remove RefBase.h dependency on TextOutput.h\n\nChange-Id: I72cd6b98ef82b4868fe1c8ec87862cf43fb4ee73\n"
    },
    {
      "commit": "c6c3e77d4d5cd8de3b1a56bdffdfd42774849512",
      "tree": "3703fb371090adee31f311d8ac5f95f60a31418a",
      "parents": [
        "592989b3b7c088114de6ee59d609449de749fd78",
        "b66b7a2c183a1423ea629d4f73ed95f9b87d54b7"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Feb 10 15:08:33 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Feb 10 15:08:33 2011 -0800"
      },
      "message": "am b66b7a2c: Merge \"fix [3408713] Dialog window invisible sometimes\" into honeycomb\n\n* commit \u0027b66b7a2c183a1423ea629d4f73ed95f9b87d54b7\u0027:\n  fix [3408713] Dialog window invisible sometimes\n"
    },
    {
      "commit": "37c2a3750138a5f9cb34d4f644642da677d435c6",
      "tree": "6cb616594c9d6eea4174c1e4c88f97145903c978",
      "parents": [
        "cc24170dc653ea5fc9fe7b9b8c596700c4d6dc99"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 09 18:38:55 2011 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 09 18:38:55 2011 -0800"
      },
      "message": "fix [3408713] Dialog window invisible sometimes\n\nweak pointer comparison operators were implemented wrong,\nthey were using the internal \"unsafe\" pointer. We could end up\nwith two \"equal\" weak pointer pointing to different objects.\n\nthis caused KeyedVector keyed by weak pointer to work incorrectly, in\nturn causing a window that just got added to a list to be immediately\nremoved.\n\nChange-Id: Ib191010c39aafa9229109e4211f6c3b2b2f9696d\n"
    },
    {
      "commit": "371de9695508073fbbde8181eb230e99cb045206",
      "tree": "8b725299fe6b9638dad8cc3dc538a23ae86377ac",
      "parents": [
        "bda99568d84530c6442af0602e9c12e6cb897780",
        "a1f5e82f37c77af7b1d630b5bca715d1742f1234"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@android.com",
        "time": "Sat Jan 29 23:07:48 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Jan 29 23:07:48 2011 -0800"
      },
      "message": "am a1f5e82f: am a30063d8: am 25eb0464: Merge \"Normalize output from aapt d\"\n\n* commit \u0027a1f5e82f37c77af7b1d630b5bca715d1742f1234\u0027:\n  Normalize output from aapt d\n"
    },
    {
      "commit": "daf98e941e140e8739458126640183b9f296a2ab",
      "tree": "e338ad021139d706004b70a38fbbe539ccfbbacf",
      "parents": [
        "57ffc00239edcfe733832771e1429fca20182207"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Mon Jan 10 14:10:36 2011 -0800"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Mon Jan 24 08:43:20 2011 -0800"
      },
      "message": "Use optimized display lists for all hwaccelerated rendering\n\nPreviously, display lists were used only if hardware acceleration\nwas enabled for an application (hardwareAccelerated\u003dtrue) *and* if\nsetDrawingCacheEnabled(true) was called. This change makes the framework\nuse display lists for all views in an application if hardware acceleration\nis enabled.\n\nIn addition, display list renderering has been optimized so that\nany view\u0027s recreation of its own display list (which is necessary whenever\nthe visuals of that view change) will not cause any other display list\nin its parent hierarchy to change. Instead, when there are any visual\nchanges in the hierarchy, only those views which need to have new\ndisplay list content will recreate their display lists.\n\nThis optimization works by caching display list references in each\nparent display list (so the container of some child will refer to its\nchild\u0027s display list by a reference to the child\u0027s display list). Then when\na view needs to recreate its display list, it will do so inside the same\ndisplay list object. This will cause the content to get refreshed, but not\nthe reference to that content. Then when the view hierarchy is redrawn,\nit will automatically pick up the new content from the old reference.\n\nThis optimization will not necessarily improve performance when applications\nneed to update the entire view hierarchy or redraw the entire screen, but it does\nshow significant improvements when redrawing only a portion of the screen,\nespecially when the regions that are not refreshed are complex and time-\nconsuming to redraw.\n\nChange-Id: I68d21cac6a224a05703070ec85253220cb001eb4\n"
    },
    {
      "commit": "9872bf4a2d4ae1e7ded170c8e74d400fe6be9bfb",
      "tree": "4040c675a82cdab2888c72e56188d8cd91ae547b",
      "parents": [
        "69ebb984f230a523dc316bdb2c9e9c28111364fd"
      ],
      "author": {
        "name": "Shachar Shemesh",
        "email": "lingnu@gmail.com",
        "time": "Mon Dec 20 17:38:33 2010 +0200"
      },
      "committer": {
        "name": "Shachar Shemesh",
        "email": "lingnu@gmail.com",
        "time": "Tue Jan 04 20:52:08 2011 +0200"
      },
      "message": "Normalize output from aapt d\n\nMake the output from aapt dump --values resources and aapt dump xmltree normalized, so that it is unambigously displayed\nregardless of the content of the strings.\n\nChange-Id: Ia3bff36c4ee1e9a44f474534e154830948beabdf\n"
    },
    {
      "commit": "83c09685f2e62bc3cf7e71bc61d903f4b9ccaeb4",
      "tree": "c8bc2824e0d2e2b353b3d16ecf5836ab8fd9e67c",
      "parents": [
        "dd830c21149c336139b28560c0e6fba9f3d0e0fc"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Dec 23 17:50:18 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Dec 29 13:19:53 2010 -0800"
      },
      "message": "Add initial support for cursor-based pointing devices.\n\nSome parts stubbed out but you can plug in a mouse and move\na green cursor around to interact with the UI.\n\nChange-Id: I80d597a7f11d3bd92041890f74b3c77326975e6e\n"
    },
    {
      "commit": "f7d63cf2cbab403b14778ec45839107078e20824",
      "tree": "b476d75af36e5a6fbbd0e1a7161a4fe3598114b0",
      "parents": [
        "957d85ec046651a8b0549b62021079ddcc0b8f53"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Dec 10 15:37:48 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Dec 10 15:37:48 2010 -0800"
      },
      "message": "dump callstack on Surface use error\n\nChange-Id: I38e260dd47349b9af3a999dda683a083a94be16d\n"
    },
    {
      "commit": "ddb76c4644756b31be948d70aaa8ee541dd94999",
      "tree": "782d260d2da982941148be7c1a0a0780749cdfdc",
      "parents": [
        "8028a951c3aa74990907efb9376d1093d84084af"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 24 12:56:06 2010 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Dec 08 11:21:30 2010 -0800"
      },
      "message": "Change assets to use 64-bit API\n\nThe asset system and supporting libraries were using off_t instead of\noff64_t to access files larger than 2GB (32-bit signed). This change\nreplaces all off_t with off64_t and lseek64.\n\nThere is a new utils/Compat.h added for Mac OS compatibility.\n\nAlso fixed some size-related compiler warnings.\n\nBug: 3205336\nChange-Id: I9097b3cb7a602e811fe52f245939d8975da55e9e\n"
    },
    {
      "commit": "9065504a63d6bf37bf621191fda1d1fe4da76ee3",
      "tree": "500948db3ef54c52fc65f52f4ab4a220e4504009",
      "parents": [
        "d6a46103bfbed17451abf0fb608d7b778597846c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Dec 02 13:50:46 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Dec 02 16:01:32 2010 -0800"
      },
      "message": "Improve support for external keyboards.\n\nUse Vendor ID, Product ID and optionally the Version to\nlocate keymaps and configuration files for external devices.\n\nMoved virtual key definition parsing to native code so that\nEventHub can identify touch screens with virtual keys and load\nthe appropriate key layout file.\n\nCleaned up a lot of old code in EventHub.\n\nFixed a regression in ViewRoot\u0027s fallback event handling.\n\nFixed a minor bug in FileMap that caused it to try to munmap\nor close invalid handled when released if the attempt to map\nthe file failed.\n\nAdded a couple of new String8 conveniences for formatting strings.\n\nModified Tokenizer to fall back to open+read when mmap fails since\nwe can\u0027t mmap sysfs files as needed to open the virtual key\ndefinition files in /sys/board_properties/.\n\nChange-Id: I6ca5e5f9547619fd082ddac47e87ce185da69ee6\n"
    },
    {
      "commit": "47e6b1b5eef8ee99872f278f66bc498c4fcca0d8",
      "tree": "ef5a7c87b8dca433ea9707c1289ae7c8d2ba3787",
      "parents": [
        "735206f121cb2a11b3397870e6565178627e0aa3"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Nov 29 17:37:49 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Nov 30 17:15:49 2010 -0800"
      },
      "message": "Support non-orientation aware keyboards and other devices.\n\nFixed a bug with dpad keys on external keyboards being rotated\naccording to the display orientation by adding a new input device\nconfiguration property called \"keyboard.orientationAware\".\n\nAdded a mechanism for overriding the key layout and key character\nmap in the input device configuration file using the new\n\"keyboard.layout\" and \"keyboard.characterMap\" properties.\n\nAlso added \"trackball.orientationAware\", \"touch.orientationAware\" and\n\"touch.deviceType\" configuration properties.\n\nRewrote the configuration property reading code in native code\nso that it can be used by EventHub and other components.\n\nAdded basic support for installable idc, kl, and kcm files\nin /data/system/devices.  However, there is no provision for\ncopying files there yet.\n\nDisabled long-press character pickers on full keyboards so that\nkey repeating works as expected.\n\nChange-Id: I1bd9f0c3d344421db444e7d271eb09bc8bab4791\n"
    },
    {
      "commit": "a6210d061bb79e5c10ed88c99111df51e52e4472",
      "tree": "c789bd306c908846fcfa1e8b6b74435daddc9974",
      "parents": [
        "7ffd0871e6b8d7ab9443bef6e8b2a31674d1f623"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Nov 19 13:13:07 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Nov 19 13:52:19 2010 -0800"
      },
      "message": "Fix SDK build on Windows due to use of mmap.\n\nChange-Id: Id4bd9a6f932285c93c5853e540efc20b99876564\n"
    },
    {
      "commit": "6b53e8daa69cba1a2a5a7c95a01e37ce9c53226c",
      "tree": "db912c6cdf230ef7f2cf406c545b3bbae3f09ea2",
      "parents": [
        "a914f340ae5b267dc3ab36c1156c795b8fa18f5d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Nov 10 16:03:06 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Nov 18 09:49:03 2010 -0800"
      },
      "message": "Added support for full PC-style keyboards.\n\nBREAKING CHANGE: Redesigned the key character map format to\naccomodate full keyboards with more comprehensive suite of modifiers.\nOld key character maps will not work anymore and must be updated.\nThe new format is plain text only and it not compiled to a binary\nfile (so the \"kcm\" tool will be removed in a subsequent check-in).\n\nAdded FULL keyboard type to support full PC-style keyboards.\n\nAdded SPECIAL_FUNCTION keyboard type to support special function\nkeypads that do not have any printable keys suitable for typing\nand only have keys like HOME and POWER\n\nAdded a special VIRTUAL_KEYBOARD device id convention that maps\nto a virtual keyboard with a fixed known layout.  This is designed\nto work around issues injecting input events on devices whose\nbuilt-in keyboard does not have a useful key character map (ie.\nwhen the built-in keyboard is a special function keyboard only.)\n\nModified several places where events were being synthesized\nto use the virtual keyboard.\n\nRemoved support for the \"qwerty\" default layout.\nThe new default layout is \"Generic\".  For the most part \"qwerty\"\nwas being used as a backstop in case the built-in keyboard did\nnot have a key character map (probably because it was a special\nfunction keypad) and the framework needed to be able to inject\nkey events anyways.  The latter issue is resolved by using the\nspecial VIRTUAL_KEYBOARD device instead of BUILT_IN_KEYBOARD.\n\nAdded the concept of a key modifier behavior so that\nMetaKeyKeyListener can distinguish between keyboards that use\nchorded vs. toggled modifiers.\n\nWrote more robust key layout and key character map parsers\nto enable support for new keyboard features and user installable\nkey maps.\n\nFixed a bug in InputReader generating key ups when keys\nare released out of sequence.\n\nUpdated tons of documentation.\n\nCurrently QwertyKeyListener is being used for full keyboards\nwith autotext and capitalization disabled.  This mostly works\nbut causes some problems with character pickers, etc.\nThese issues will be resolved in subsequent changes.\n\nChange-Id: Ica48f6097a551141c215bc0d2c6f7b3fb634d354\n"
    },
    {
      "commit": "300ba6846949f5b21c6d93d7698dbc39716cf832",
      "tree": "f00aed47d06332a09aa6909a6605b0743661c981",
      "parents": [
        "d781089731127bd9199d47f53b170895868b8750"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Nov 09 14:37:23 2010 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Nov 12 15:53:40 2010 -0800"
      },
      "message": "Split UTF functions from String8/16\n\nSplit out all the UTF-8/16/32 handling code from String8/16 to its own\nfile to allow better reuse of code.\n\nChange-Id: If9ce63920edc75472c38da4adce0d13cda9ad2f7\n"
    },
    {
      "commit": "55fc850cf992cdcb0993cb109d2f716613c0dbdd",
      "tree": "2277f806e14fb8a6b422dde687ac9779176ae83b",
      "parents": [
        "490d7c5deda8d602f916942d7002757082274b9b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Oct 28 14:47:01 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Oct 29 12:47:07 2010 -0700"
      },
      "message": "Add path to get different DPI drawables\n\nAllow a caller to request a different density than their current display\nallows. This can mean a device displaying mdpi can get a resource that\u0027s\nin hdpi and have it pretend to be in mdpi resolution. If a drawable\nthat\u0027s returned is not in the requested density, it will set it at the\nappropriate density to be scaled up later on.\n\nThe API for this is hidden currently.\n\nBug: 3134688\nChange-Id: I6c3908cbdef4907b8d3f1576df9e3b0e7af1755a\n"
    },
    {
      "commit": "cf8918874dc446f34bbc2a93a6b20235c30a7645",
      "tree": "6267c828bc01149954e37b827a75ae2c8f0f99e6",
      "parents": [
        "6913c6176b6d239f833ea21120b93547aa5f93f7"
      ],
      "author": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@android.com",
        "time": "Wed Oct 20 17:06:28 2010 -0700"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@android.com",
        "time": "Wed Oct 20 17:06:28 2010 -0700"
      },
      "message": "Revert \"Add length-equality test in String operator\u003d\u003d checks.\"\n\nThis reverts commit e28210d401ae4ed1258b84c9b17a172a757190e8.\n"
    },
    {
      "commit": "e28210d401ae4ed1258b84c9b17a172a757190e8",
      "tree": "33fbac2552b71234b6872bd067e256555d4acae7",
      "parents": [
        "4f5f7c968339a83b6af98ac8893a1ac33c7aa7bc"
      ],
      "author": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@android.com",
        "time": "Wed Oct 20 13:24:58 2010 -0700"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@android.com",
        "time": "Wed Oct 20 15:03:49 2010 -0700"
      },
      "message": "Add length-equality test in String operator\u003d\u003d checks.\n\nChange-Id: I6ebc6ef85aac4539269f137c1f29f95b9828d4f9\n"
    },
    {
      "commit": "3ee1e7b5ab852a246b45ed903a72409a19645a1b",
      "tree": "be04fd9c88a81ee73bfd1da2188957e29e68ebe4",
      "parents": [
        "e1baa9c79ffd9240a20bab88c865afae5ce53e59",
        "dc3ad87c04348c925aa86863ed6d25f18a8c6c36"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sat Oct 16 09:12:43 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Oct 16 09:12:43 2010 -0700"
      },
      "message": "am dc3ad87c: am 78a76fea: Merge \"Revert to using epoll_wait().\" into gingerbread\n\nMerge commit \u0027dc3ad87c04348c925aa86863ed6d25f18a8c6c36\u0027\n\n* commit \u0027dc3ad87c04348c925aa86863ed6d25f18a8c6c36\u0027:\n  Revert to using epoll_wait().\n"
    },
    {
      "commit": "497a92cc5ba2176b8a8484b0a7da040eac0e887b",
      "tree": "2d9bd7a2ef24754fa83a36f440ee45fd8a32b9fb",
      "parents": [
        "cd9afc3722a1edebf0e6f7172627930052c81ce4"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Sep 12 17:55:08 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 15 16:00:07 2010 -0700"
      },
      "message": "Add keycodes and meta-key modifiers to support external keyboards.\n\nAdded new key maps for external keyboards.  These maps are intended to\nbe shared across devices by inheriting the \"keyboards.mk\" product\nmakefile as part of the device\u0027s product definition.\n\nOne of the trickier changes here was to unwind some code in\nMetaKeyKeyListener that assumed that only the low 8 bits of the meta key\nstate were actually used.  The new code abandons bitshifts in favor\nof simple conditionals that are probably easier to read anyways.\nThe special meta key state constants used by MetaKeyKeyListener\nare now (@hide) defined in KeyEvent now so as to make it clearer that they\nshare the same code space even if those codes are not valid for KeyEvents.\n\nThe EventHub now takes care of detecting the appropriate key layout\nmap and key character map when the device is added and sets system\nproperties accordingly.  This avoids having duplicate code in\nKeyCharacterMap to probe for the appropriate key character map\nalthough the current probing mechanism has been preserved for legacy\nreasons just in case.\n\nAdded support for tracking caps lock, num lock and scroll lock and\nturning their corresponding LEDs on and off as needed.\n\nThe key character map format will need to be updated to correctly support\nPC style external keyboard semantics related to modifier keys.\nThat will come in a later change so caps lock doesn\u0027t actually do\nanything right now except turn the shiny LEDs on and off...\n\nAdded a list of symbolic key names to KeyEvent and improved the toString()\noutput for debug diagnosis.  Having this list in a central place in the\nframework also allows us to remove it from Monkey so there is one less\nthing to maintain when we add new keycodes.\n\nBug: 2912307\nChange-Id: If8c25e8d50a7c29bbf5d663c94284f5f86de5da4\n"
    },
    {
      "commit": "fcab0f5502410b975afe045354bbae31ccba68a5",
      "tree": "184b37e57a998580c15fdaa98d7d8bf0c9155a90",
      "parents": [
        "10aca41e51934822dc492cb69b69cef37f42ad42",
        "8fda1636e3e35f060b9046294efd3c062a1fdb84"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Oct 15 14:00:58 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 15 14:00:58 2010 -0700"
      },
      "message": "am 8fda1636: am bdf8034c: Merge \"OBB: use PBKDF2 for key generation.\" into gingerbread\n\nMerge commit \u00278fda1636e3e35f060b9046294efd3c062a1fdb84\u0027\n\n* commit \u00278fda1636e3e35f060b9046294efd3c062a1fdb84\u0027:\n  OBB: use PBKDF2 for key generation.\n"
    },
    {
      "commit": "78a76fea28b8101c1860a2f1115329e3e63abda3",
      "tree": "c4e75c2b58ff80abd29db1527e45d8d034d13d8c",
      "parents": [
        "3fbfee2febf13bcc46c389ebecbf91465ef211b7",
        "a97e50f20d39d2abf0fab77090dd82bdef4bce7a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Oct 14 22:18:43 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Oct 14 22:18:43 2010 -0700"
      },
      "message": "Merge \"Revert to using epoll_wait().\" into gingerbread"
    },
    {
      "commit": "3b1abba6bbc895d63da3e82e9b158c01bd12eddd",
      "tree": "1296e8c25a2927c94783eda83100c061fc9fe379",
      "parents": [
        "dfc07279fc6205c38f5f39cb5ba4f0aef6b593a4"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Oct 13 15:00:07 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Oct 13 18:25:33 2010 -0700"
      },
      "message": "OBB: use PBKDF2 for key generation.\n\nSwitch to using PBKDF2 for the key generation for OBBs. Any previously\ngenerated OBBs will stop being read correctly. A small pbkdf2gen program\nis available to allow generation of appropriate keys with the salts.\n\nBug: 3059950\nChange-Id: If4305c989fd692fd1150eb270dbf751e09c37295\n"
    },
    {
      "commit": "d5da367024c36b317b101fc066a7a4cf992c7d58",
      "tree": "87cf98a6514557be5427c462349a0ee9deb9a9dd",
      "parents": [
        "bcf74accafcdac6c7a940ce28982fc0ef08e111b",
        "22cb4ef8ce9c4d5536ac5cee5c40b82bfa56ccc5"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Oct 10 12:52:40 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Oct 10 12:52:40 2010 -0700"
      },
      "message": "am 22cb4ef8: am d577cfd7: Merge \"Switch Looper back to using poll() instead of epoll().\" into gingerbread\n\nMerge commit \u002722cb4ef8ce9c4d5536ac5cee5c40b82bfa56ccc5\u0027\n\n* commit \u002722cb4ef8ce9c4d5536ac5cee5c40b82bfa56ccc5\u0027:\n  Switch Looper back to using poll() instead of epoll().\n"
    },
    {
      "commit": "a97e50f20d39d2abf0fab77090dd82bdef4bce7a",
      "tree": "27e8025752321b42eccd5611a827bf075395b14f",
      "parents": [
        "d577cfd73a223279f9a5af698f55edd38a3fe4db"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Oct 07 16:17:57 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Oct 07 16:17:57 2010 -0700"
      },
      "message": "Revert to using epoll_wait().\n\nThis change depends on the kernel having been patched to use hrtimers\ninstead of jiffies for scheduling epoll timeouts.\n\nChange-Id: I216bc1c4f565e67ebcb3d2ba4280cb615932bb9e\n"
    },
    {
      "commit": "415d8c38199e258dfce92cdb0c69e056b3b51ef8",
      "tree": "5bf6d167a19b272f2a153df6010a7dd6f58a274f",
      "parents": [
        "930d6c3cd5ad387489eb1d35a38beeafe54166b6"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Oct 05 15:35:37 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Oct 07 13:26:39 2010 -0700"
      },
      "message": "Switch Looper back to using poll() instead of epoll().\n\nAdded a couple of micro-optimizations to avoid calling wake() unnecessarily\nand reduce JNI overhead slightly.\n\nFixed a minor issue where we were not clearing the \"next\" field of Messages\nreturned by the MessageQueue so the Message would hold on to its successor\nand potentially prevent the GC from collecting it if the message were leaked\nsomehow.\n\nChange-Id: I488d29417ce0cdd7d0e447cda76ec978ef7f811c\n"
    },
    {
      "commit": "4f65ea60555ef01e6ca0cd64acc0ef698640c853",
      "tree": "b3078773f7d362251cab92b32ac8c12f25adb690",
      "parents": [
        "0f935ebfffee769c3c707813bf9db7d50996d785",
        "bfa33b9484e2c0a019ab81f30261b9696df23a9b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Oct 05 17:02:42 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 05 17:02:42 2010 -0700"
      },
      "message": "am bfa33b94: am f84a5918: Merge \"Use pread() in ZipFileRO for Linux\" into gingerbread\n\nMerge commit \u0027bfa33b9484e2c0a019ab81f30261b9696df23a9b\u0027\n\n* commit \u0027bfa33b9484e2c0a019ab81f30261b9696df23a9b\u0027:\n  Use pread() in ZipFileRO for Linux\n"
    },
    {
      "commit": "259ec46e8e80a9f1d0b5c7a3865a498110a7f11b",
      "tree": "c2987b5a006425d41438227011f5b9b5a6febb15",
      "parents": [
        "106950f20bd352ed72ddf4490b2e19d305e36a74"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Oct 04 14:20:14 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Oct 04 15:17:19 2010 -0700"
      },
      "message": "Use pread() in ZipFileRO for Linux\n\nAssetManager instances are created by zygote and passed to all its\nchildren so that they don\u0027t have to individually open\nframeworks-res.apk. This creates a problem for determining the current\nfile offset when using lseek() on those files, because you can\u0027t\nguarantee the cross-process locking of a mutex. Luckily, Linux\nimplements pread() to get around this suckiness.\n\nThe problem is that only Linux implements this, so we have to keep the\nold locking for use on host builds with aapt and friends. aapt doesn\u0027t\nhave this same problem of sharing file descriptors across forked\nprocesses, so we can keep the local AutoMutex to protect accesses of\nthose files.\n\nChange-Id: Ibe9f11499a53fe345f50fbaea438815ec0fd363e\n"
    },
    {
      "commit": "6d95c0d941fa0d9ea50b74e60baf82956a4d4452",
      "tree": "89b9d1f34e4ccbba4ef98dfea8f3f8911dcc8b3d",
      "parents": [
        "51d2adab83837425dae8062b7ff2a5bd1e732dd9",
        "ac7540733cafcca5bdb1842e1ebcb396ba064583"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Oct 04 07:54:06 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Oct 04 07:54:06 2010 -0700"
      },
      "message": "am ac754073: am b58b2714: Merge \"ZipFileRO: moar logging and wrap close\" into gingerbread\n\nMerge commit \u0027ac7540733cafcca5bdb1842e1ebcb396ba064583\u0027\n\n* commit \u0027ac7540733cafcca5bdb1842e1ebcb396ba064583\u0027:\n  ZipFileRO: moar logging and wrap close\n"
    },
    {
      "commit": "6cb241f9024c6923715cf4e9eeaf803a7d258750",
      "tree": "455507c53e8e0d20dee11d1888cebd67ff947523",
      "parents": [
        "306137d97f40a4f807c54a75210343c9262360d1"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Oct 01 18:28:28 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Oct 01 18:30:59 2010 -0700"
      },
      "message": "ZipFileRO: moar logging and wrap close\n\nThere is apparently still a race upon reading the entry Local File\nHeader that can\u0027t be tracked down, so move the LFH check inside the\nmutex-protected block so we can call lseek again to see where we are\nwhen we log an error.\n\nAlso, close() can fail so use TEMP_FAILURE_RETRY on it so we don\u0027t\nunwittingly leak file descriptors when Mean Mr. EINTR comes a-knocking.\n\nChange-Id: I753abad0bd882fe28f7281c406fa76f64393ef4c\n"
    },
    {
      "commit": "464fb74e28b6d76d5e741abcdbb714eea2d9b4d1",
      "tree": "806828fef18870b8c0a5cde7a6e679dce8b5a122",
      "parents": [
        "6d3ed72bf2fb9d958245c9d34443291a26128c59",
        "9785bf0f2b6b8758aed7ded3b996a2ef0be89919"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Sep 27 14:40:38 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Sep 27 14:40:38 2010 -0700"
      },
      "message": "am 9785bf0f: am 14a288da: Merge \"Add suuport for splitting touch events across windows.\" into gingerbread\n\nMerge commit \u00279785bf0f2b6b8758aed7ded3b996a2ef0be89919\u0027\n\n* commit \u00279785bf0f2b6b8758aed7ded3b996a2ef0be89919\u0027:\n  Add suuport for splitting touch events across windows.\n"
    },
    {
      "commit": "14a288da6a372230d9af41da12241fe500eec837",
      "tree": "2a15d375323bce1a89d48279ef228650550e8414",
      "parents": [
        "524ae7dd149c6b10814282dc3e2e55a4f755ad29",
        "01ce2e9eee41cc0c24b0d16465710a28ea337d5d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Sep 27 12:33:14 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Sep 27 12:33:14 2010 -0700"
      },
      "message": "Merge \"Add suuport for splitting touch events across windows.\" into gingerbread"
    },
    {
      "commit": "01ce2e9eee41cc0c24b0d16465710a28ea337d5d",
      "tree": "08e45a8ec47e63760655a1770dac367258511538",
      "parents": [
        "37cedce14bc0e68e8bf27c2cecb181728226e6ed"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Sep 26 22:20:12 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Sep 26 22:20:12 2010 -0700"
      },
      "message": "Add suuport for splitting touch events across windows.\n\nThis feature is currently used to enable dragging the start and end\nselection handles of a TextView at the same time.  Could be used for\nother things later.\n\nDeleted some dead code in ArrowKeyMovementMethod and CursorControllers.\n\nChange-Id: I930accd97ca1ca1917aab8a807db2c950fc7b409\n"
    },
    {
      "commit": "dcdab6aef1a4e24234982698908a24a9925ce9ab",
      "tree": "c660ca1552cbff42aaa76b329111875b75ea0706",
      "parents": [
        "0b783bc2e4ea2454fda4107d559eefee36b19623",
        "3e07c0007b10fbda945516acaf6b2a8787a6ca06"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Sep 24 15:22:38 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 24 15:22:38 2010 -0700"
      },
      "message": "am 3e07c000: am 74865ef6: Merge \"Add locking around ZIP seeking\" into gingerbread\n\nMerge commit \u00273e07c0007b10fbda945516acaf6b2a8787a6ca06\u0027\n\n* commit \u00273e07c0007b10fbda945516acaf6b2a8787a6ca06\u0027:\n  Add locking around ZIP seeking\n"
    },
    {
      "commit": "6458fa0fce4bce7f3f9cccbacf9116f6f08abdf1",
      "tree": "e0ffbaae8f45022b61189e96f99faffc36cca3b4",
      "parents": [
        "7f459df9f94bc52e53d42894dea4702394fbad5c"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Sep 24 07:57:37 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Sep 24 08:05:51 2010 -0700"
      },
      "message": "Add locking around ZIP seeking\n\nSince we switched to seeking to the LFH to verify its existence instead\nof a huge mmap of the file, we have to guarantee that another seek\ndoesn\u0027t happen before we finish our read on the LFH.\n\nChange-Id: If8135d9cb6f2f5cc4db734eafa4f6b5f6269c62a\n"
    },
    {
      "commit": "fdc85679cc300e9f7ee75040c25bef1826372ff0",
      "tree": "d3e00874739e423061101bc7e630408104bf337f",
      "parents": [
        "862d6c2cc97acb86bb5fe577b8b923d4638dd944",
        "4ec134cdba52b663506562c6406b07915820b007"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Sep 21 15:57:13 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 21 15:57:13 2010 -0700"
      },
      "message": "am 4ec134cd: am cce0cd13: Merge \"Looper: use pthread_once for TLS key initialization.\" into gingerbread\n\nMerge commit \u00274ec134cdba52b663506562c6406b07915820b007\u0027\n\n* commit \u00274ec134cdba52b663506562c6406b07915820b007\u0027:\n  Looper: use pthread_once for TLS key initialization.\n"
    },
    {
      "commit": "134b4ae90103a7b205cd84d0491a4868cb102a7c",
      "tree": "3f6a8d6cef9954bcabc05cedda8fc33596d084f7",
      "parents": [
        "34d3aeaf7f5dd744f46220f7730913468256ae9c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Sep 21 15:11:18 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Sep 21 15:26:51 2010 -0700"
      },
      "message": "Looper: use pthread_once for TLS key initialization.\n\nAlso fix a Valgrind complaint by zeroing out the entire epoll event\nstruct since otherwise the data field union would be partly\nuninitialized (but not in a harmful way).\n\nChange-Id: I2091ce517e87fcad7c9caf90e2c5e4854a7ca465\n"
    },
    {
      "commit": "f1ec1ddd5072fa4f75c15be0ee1d82c17646500a",
      "tree": "ac476bd4e62cbb69eeaa01b741541f2fe291afc8",
      "parents": [
        "aca11c0cf401147a075f72f110e0e27336066127",
        "bc9599d48c79c18d306a13f51af9ef2aac92cdca"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Sep 17 16:10:01 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 17 16:10:01 2010 -0700"
      },
      "message": "am bc9599d4: am 838e93ed: Merge \"Looper: Drop default parameters in favor of a safer overload.\" into gingerbread\n\nMerge commit \u0027bc9599d48c79c18d306a13f51af9ef2aac92cdca\u0027\n\n* commit \u0027bc9599d48c79c18d306a13f51af9ef2aac92cdca\u0027:\n  Looper: Drop default parameters in favor of a safer overload.\n"
    },
    {
      "commit": "a1361e48fa5ac353b70f90eef8c1ca63f66ded19",
      "tree": "54704d13b404313142c1af2df2624ff500aac975",
      "parents": [
        "0f5843069bd419fba4fb253986645dfbca0784b7"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Sep 16 18:28:12 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Sep 16 18:51:15 2010 -0700"
      },
      "message": "Looper: Drop default parameters in favor of a safer overload.\n\nThe idea is that if you\u0027re writing code that wants fd/events/data on\nreturn from pollOnce() / pollAll() you should really pass in all of those\narguments.  When I changed the Looper API earlier, it was difficult\nto ensure that all callers were passing the right parameters since they\nwere relying on default parameters to some degree so usage mistakes\nwould not have been caught by the compiler.\n\nChange-Id: I1f2812894270aaf1515017ac1616b6b312d9b565\n"
    },
    {
      "commit": "49478536b6b8b28f33398393bed5e939085af7af",
      "tree": "a83f41bc6da9dd267005ad23b0b32c6f40f860d0",
      "parents": [
        "a5ab8ce602ecfd897805e185c89a6eff0c78aabe",
        "14bc6b5d0677e5c454a67775c852f90389bb4567"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 15 12:32:29 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Sep 15 12:32:29 2010 -0700"
      },
      "message": "am 14bc6b5d: am 09340a4b: Merge \"Replace epoll() with poll() and rename PollLoop to Looper.\" into gingerbread\n\nMerge commit \u002714bc6b5d0677e5c454a67775c852f90389bb4567\u0027\n\n* commit \u002714bc6b5d0677e5c454a67775c852f90389bb4567\u0027:\n  Replace epoll() with poll() and rename PollLoop to Looper.\n"
    },
    {
      "commit": "4fe6c3e51be77e35f40872cdbca6c80f8f8b7ecb",
      "tree": "5cbcfad147ad1bf26deb384e41d27f4e6bfcdb80",
      "parents": [
        "c891d2b3529b9cf24ef4781a585cd4784815e711"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Sep 13 23:17:30 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Sep 14 01:59:45 2010 -0700"
      },
      "message": "Replace epoll() with poll() and rename PollLoop to Looper.\n\nAs part of this change, consolidated and cleaned up the Looper API so\nthat there are fewer distinctions between the NDK and non-NDK declarations\n(no need for two callback types, etc.).\n\nRemoved the dependence on specific constants from sys/poll.h such as\nPOLLIN.  Instead looper.h defines events like LOOPER_EVENT_INPUT for\nthe events that it supports.  That should help make any future\nunder-the-hood implementation changes easier.\n\nFixed a couple of compiler warnings along the way.\n\nChange-Id: I449a7ec780bf061bdd325452f823673e2b39b6ae\n"
    },
    {
      "commit": "b3787d57fffbb898f4767f7a94031cafe974a0b0",
      "tree": "305041731ad251326cd7e6c2a98500253ada83f9",
      "parents": [
        "2f761760459fe27c8e9f96569bb7f28fc5b58bab",
        "0f0541e40cfef51eb5c3769e53c1aa853b53aaf6"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Sep 12 17:15:19 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Sep 12 17:15:19 2010 -0700"
      },
      "message": "am 0f0541e4: am b88102f5: Input dispatcher ANR handling enhancements.\n\nMerge commit \u00270f0541e40cfef51eb5c3769e53c1aa853b53aaf6\u0027\n\n* commit \u00270f0541e40cfef51eb5c3769e53c1aa853b53aaf6\u0027:\n  Input dispatcher ANR handling enhancements.\n"
    },
    {
      "commit": "b88102f5b7e51552a3576cf197b4c8cf96f193d1",
      "tree": "c714dce33893a048f42a36e78b25dc0bc971b1c3",
      "parents": [
        "11fe181e16501103d7c0f70344661ea2ef5d3df9"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 08 11:49:43 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Sep 12 16:52:03 2010 -0700"
      },
      "message": "Input dispatcher ANR handling enhancements.\n\nThis change is essentially a rewrite of the main input dispatcher loop\nwith the target identification folded in.  Since the input dispatcher now\nhas all of the window state, it can make better decisions about\nwhen to ANR.\n\nAdded a .5 second deadline for processing app switch keys.  This behavior\npredates Gingerbread but had not previously been ported.\n\nFixed some timing inaccuracies in the ANR accounting that could cause\napplications to ANR sooner than they should have.\n\nAdded a mechanism for tracking key and motion events that have been\ndispatched to a window so that appropriate cancelation events can be\nsynthesized when recovering from ANR.  This change helps to keep\napplications in sync so they don\u0027t end up with stuck buttons upon\nrecovery from ANRs.\n\nAdded more comments to describe the tricky parts of PollLoop.\n\nChange-Id: I13dffca27acb436fc383980db536abc4d8b9e6f1\n"
    },
    {
      "commit": "9584a542e345fa18fc62eb0b5947f250226f211d",
      "tree": "d4b34b8882f317dfa718067407ed03e07d9b685f",
      "parents": [
        "e3aa6aa77014b5798f95f6c5817df85910ecaac3",
        "a2341a9f6addcd79723965ec5b1a1c5ae0f8bd65"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Sep 08 18:06:11 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 08 18:06:11 2010 -0700"
      },
      "message": "Merge \"Purge Skia objects from GL caches as needed.\""
    },
    {
      "commit": "a2341a9f6addcd79723965ec5b1a1c5ae0f8bd65",
      "tree": "ce61e01a0719f9fc52e48be002fe1d57d3af9c68",
      "parents": [
        "9aaa8269a3e7291aab84d01c3fc9c744d8f2d2f4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Sep 08 18:04:33 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Sep 08 18:04:33 2010 -0700"
      },
      "message": "Purge Skia objects from GL caches as needed.\n\nChange-Id: I754c671cf790ad5ae8bf047ad328034217da4ecc\n"
    },
    {
      "commit": "42c03e579aade011b451e2a13ea3f44a2ef0056a",
      "tree": "1716fbd88e2beb816d303c3d3fa0ca1785b8db61",
      "parents": [
        "6e86915e8f5dfffa60ae5d1a4ca9aa74912fd026"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Sep 07 15:28:30 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Sep 07 15:46:55 2010 -0700"
      },
      "message": "Modify native ALooper to take an explicit ident.\n\nThe ALooper API now uses an explicit \"identifier\" for the integer\nthat is returned rather than implicitly using the fd.  This allows\nthe APIs that had the fd to be a little more sane.\n\nChange-Id: I8507f535ad484c0bdc4a1bd016d87bb09acd7ff0\n"
    },
    {
      "commit": "02ca31fbae9f35dd30f79de6927fae11b549391a",
      "tree": "dc037f02f42db20ba1f086e707fd53a71ea4c4c5",
      "parents": [
        "baf3869b88ab4e31f792dbe08f61725bc3619ea8"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Aug 12 07:36:02 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Aug 18 09:34:58 2010 -0700"
      },
      "message": "Add OBB flags to support overlays\n\n* Add flags field in OBB footer to support overlays.\n\n* Remove unused \u0027crypto\u0027 and \u0027filesystem\u0027 fields in obbtool (could\n  later be supported in the \"flags\" field of the OBB footer).\n\n* Add notes to document OBB classes before shipping.\n\nChange-Id: I386b43c32c5edef55210acb5d3322639c08010ba\n"
    },
    {
      "commit": "95af0c14a64ef264d2b362ded4ca2b5a169d1066",
      "tree": "fba4bb178de08e99f4c71f882809bab315cec33a",
      "parents": [
        "bd1c082cf90d07e3ccb017b72e59b5ccad81dd07",
        "a41ca77fabe1c7ad12ebb9b69b9e786c07d49fa0"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Aug 11 16:15:48 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Aug 11 16:15:48 2010 -0700"
      },
      "message": "Merge \"Add support for the PointerLocation overlay.\" into gingerbread"
    },
    {
      "commit": "a41ca77fabe1c7ad12ebb9b69b9e786c07d49fa0",
      "tree": "65d87a9c55c869843540884f0fbced6a69841895",
      "parents": [
        "c3fc2d03d58a258c53c9265a70143d4af076b764"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Aug 11 14:46:32 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Aug 11 14:46:32 2010 -0700"
      },
      "message": "Add support for the PointerLocation overlay.\n\nThis change involves adding a new method to IWindowManager,\nmonitorInput() that returns an InputChannel to receive a copy of all\ninput that is dispatched to applications.  The caller must have\nthe READ_INPUT_STATE permission to make this request (similar to\nother window manager methods such as getKeycodeState).\n\nChange-Id: Icd14d810174a5b2928671ef16de73af88302aea0\n"
    },
    {
      "commit": "6e7ac5f0bceddf51947fbf3b376e278df0735603",
      "tree": "36772b5b1e134baddbc24b73bb59ee701c3acc58",
      "parents": [
        "a02b8b05dd1e8b8cf169e1f89542ef835b11fc13"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Jul 19 10:31:34 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Aug 11 11:24:41 2010 -0700"
      },
      "message": "Initial tool for OBB manipulation\n\nAdd \"obbtool\" host command for adding, removing, and querying Opaque\nBinary Blob (OBB) information from a file.\n\nChange-Id: Id2ac41e687ad2a500c362616d6738a8ae7e8f5c3\n"
    },
    {
      "commit": "08d5b8fad8d46ccb64db2fdcb4d66972ec87bf48",
      "tree": "7e2e67603ec8a2ca164548301b65a2b733df76a0",
      "parents": [
        "091c5238a00ca51dc69b8b09459e6ac88e1eb077"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Aug 04 11:12:40 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Aug 11 00:29:59 2010 -0700"
      },
      "message": "More native work.\n\nImplement save/restore of state, and add native APIs for\nconfiguration information.\n\nChange-Id: I2a3ddc2ba605db58d7c8b2b31b9215fb323f90b5\n"
    },
    {
      "commit": "818490ab2abe36dfc6c13d01fea5220bd64cca8c",
      "tree": "6d4cb2b5e7c04d620b3c5d52b349a600129c3e44",
      "parents": [
        "5723dfe8c87d0887b8926f43637ed300466890d2"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Aug 05 16:21:23 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Aug 06 09:00:10 2010 -0700"
      },
      "message": "Fix String8::operator+\n\nThe LHS was ignored when using:\n  String8 + String8\n  String8 + (const char*)\n\nAdd unit tests for above.\n\nBug: 2898473\nChange-Id: Ic8fe7be668b665c36aaaa3fc3c3ffdfff0fbba25\n"
    },
    {
      "commit": "b100cbf178e91d6652ebbad3ed36684cacb9d10e",
      "tree": "acb386c8adee2d0390193fc631f841f8d76ea5d7",
      "parents": [
        "0c39b6c65bcb96ed6438c7d792a67708409d8f0f"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Jul 26 11:24:18 2010 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed Jul 28 15:33:28 2010 -0700"
      },
      "message": "Support streaming of compressed assets \u003e 1 megabyte\n\nCompressed assets larger than one megabyte are now decompressed on demand\nrather than being decompressed in their entirety and held in memory.  Reading\nthe data in order is relatively efficient, as is seeking forward in the stream.\nSeeking backwards is supported, but requires reprocessing the compressed data\nfrom the beginning, so is very inefficient.\n\nIn addition, the size limit on compressed assets has been eliminated.\n\nChange-Id: I6e68247957e6c53e7e8ba70d12764695f1723bad\n"
    },
    {
      "commit": "e33348ba54cd68d6936cffd4507037c14d4b10c2",
      "tree": "1429dd836a48b3f49ee2a27623ff47b5c272c827",
      "parents": [
        "bd623daff1f261a0e794f059d90ba5907eb5a89a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jul 15 23:54:05 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 16 00:02:48 2010 -0700"
      },
      "message": "Fix bug with phantom input windows.\n\nAdd dumpsys integration for the native input dispatcher.\nAdd some InputDevice API stubs.\nAdd an appendFormat helper method to String8 for printf style\nstring formatting mainly for debugging purposes.\nUse generic ArrayList\u003cWindowState\u003e everywhere in WindowManagerService\nto eliminate unnecessary casts all over.\n\nChange-Id: I9d1e3bd90eb7222d10620200477f11b7bfd25e44\n"
    },
    {
      "commit": "6cce32b6adbb3a9725fc730ba0e0068a74657e60",
      "tree": "659b099eb08109f3e4e51e184d929f392928e722",
      "parents": [
        "d6343c26b8580f61a257a3045bfa124049201116"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Jul 12 18:21:36 2010 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Jul 15 14:28:21 2010 -0700"
      },
      "message": "Add native C APIs for working with the Asset Manager\n\nChange-Id: I493b142c4b35e5cc1a1e85283bb5dfb306a6d261\n"
    },
    {
      "commit": "85448bbecd4e0909eecfab15b7c3605f114d0427",
      "tree": "3380a9a85e321dc7ee4397dc1b4f22564af117d8",
      "parents": [
        "f7d2b4a2e096ae1f8ac3a2ed8b2f0e30a237f732"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jul 07 14:27:31 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jul 08 11:06:59 2010 -0700"
      },
      "message": "Add new glue code for writing native apps.\n\nThis factors out the boiler-plate code from the sample\napp to a common glue code that can be used for everyone\nwriting this style of app: a dedicated app thread that\ntakes care of waiting for events and processing them.\n\nAs part of doing this, ALooper has a new facility to allow\nregistration of fds that cause ALooper_pollOnce() to return\nthe fd that has data, allowing the app to drive the loop\nwithout callbacks.  Hopefully this makes some people feel better. :)\n\nAlso do some other cleanup of the ALooper API, plus some\nactual documentation.\n\nChange-Id: Ic53bd56bdf627e3ba28a3c093faa06a92be522b8\n"
    },
    {
      "commit": "7cee34a051eb0087322c8b965e498f88b1aa52d3",
      "tree": "08bb1d6c8850bb688b4eddf7e1a24888719b5e52",
      "parents": [
        "2e6aff8e19ce8292a36fe211f8051dccf1fb9670"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jun 01 10:34:29 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Jul 07 09:57:50 2010 -0700"
      },
      "message": "Add OBB file helper class\n\nObbFile is a binary blob that will be used in packaging large files\nwith smaller APKs.\n\nChange-Id: Ib1594346cfa2f49113de6565af77c24efbd89d63\n"
    },
    {
      "commit": "682674154e3fe88f6061245145f934f25f1a2eb8",
      "tree": "a105ce9f0ae4d88732bfc8fb1a52d4474f17bc86",
      "parents": [
        "8ecfb60a8e74dfcd51bbf3f236d5f414a4d5ac7d"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jul 02 18:52:01 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jul 02 18:57:02 2010 -0700"
      },
      "message": "Add new native Looper API.\n\nThis allows us to avoid exposing the file descriptor of\nthe event queue; instead, you attach an event queue to\na looper.  This will also should allow native apps to be\nwritten without the need for a separate thread, by attaching\nthe event queue to the main thread\u0027s looper and scheduling\ntheir own messages there.\n\nChange-Id: I38489282635895ae2cbfacb88599c1b1cad9b239\n"
    },
    {
      "commit": "51a6aef53c2421fe9ad157e7d4b0158f496abf26",
      "tree": "cb0995620a549cb62cb1b090e3dc01446546a032",
      "parents": [
        "081bc5c47d8a980e6eafa70ddafcd89981586391"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jun 24 21:49:02 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jun 24 21:49:02 2010 -0700"
      },
      "message": "Fix a bug in sp\u003c\u003e and wp\u003c\u003e which could cause memory corruptions\n\nwhen assigning a smart pointer to another one, we need to make\nsure to read all the data we need from the right-hand-side\nreference (the assignee) before we decRef the assigned.\n\nThis bug would cause linked-list of smart-pointers to fail\nmiserably.\n\nChange-Id: Ibb554c15fddf909f7737c632b7c80322e80ea93f\n"
    },
    {
      "commit": "5c225b1680e696ae8bbf505a1997d6f720672f74",
      "tree": "932326fd02ee91d8a64adfcc9415027646c56563",
      "parents": [
        "3a0146cd29fae3c5bc29d8d535d67826284f8cc9"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jun 16 01:53:36 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jun 17 13:27:16 2010 -0700"
      },
      "message": "Even more native input dispatch work in progress.\n\nAdded more tests.\nFixed a regression in Vector.\nFixed bugs in pointer tracking.\nFixed a starvation issue in PollLoop when setting or removing callbacks.\nFixed a couple of policy nits.\n\nModified the internal representation of MotionEvent to be more\nefficient and more consistent.\n\nAdded code to skip/cancel virtual key processing when there are multiple\npointers down.  This helps to better disambiguate virtual key presses\nfrom stray touches (such as cheek presses).\n\nChange-Id: I2a7d2cce0195afb9125b23378baa94fd2fc6671c\n"
    },
    {
      "commit": "43a9527c54b71cb17515591af37eeeef6c22e3ff",
      "tree": "9a14a3a9ba426fabd07a761a5cf0e0a4714428cb",
      "parents": [
        "46b9ac0ae2162309774a7478cd9d4e578747bfc2"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jun 13 19:35:19 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jun 13 19:35:19 2010 -0700"
      },
      "message": "Fix include paths.\n\nChange-Id: Ifda45688f9f02710a74d5d7a7d902bacf1441e2e\n"
    },
    {
      "commit": "46b9ac0ae2162309774a7478cd9d4e578747bfc2",
      "tree": "46ad021a41e25ca9f1250b709a29b724dc6b504d",
      "parents": [
        "f62c57d684b83df7d2817db976c0afdb500ae92a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Apr 22 18:58:52 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jun 13 17:42:16 2010 -0700"
      },
      "message": "Native input dispatch rewrite work in progress.\n\nThe old dispatch mechanism has been left in place and continues to\nbe used by default for now.  To enable native input dispatch,\nedit the ENABLE_NATIVE_DISPATCH constant in WindowManagerPolicy.\n\nIncludes part of the new input event NDK API.  Some details TBD.\n\nTo wire up input dispatch, as the ViewRoot adds a window to the\nwindow session it receives an InputChannel object as an output\nargument.  The InputChannel encapsulates the file descriptors for a\nshared memory region and two pipe end-points.  The ViewRoot then\nprovides the InputChannel to the InputQueue.  Behind the\nscenes, InputQueue simply attaches handlers to the native PollLoop object\nthat underlies the MessageQueue.  This way MessageQueue doesn\u0027t need\nto know anything about input dispatch per-se, it just exposes (in native\ncode) a PollLoop that other components can use to monitor file descriptor\nstate changes.\n\nThere can be zero or more targets for any given input event.  Each\ninput target is specified by its input channel and some parameters\nincluding flags, an X/Y coordinate offset, and the dispatch timeout.\nAn input target can request either synchronous dispatch (for foreground apps)\nor asynchronous dispatch (fire-and-forget for wallpapers and \"outside\"\ntargets).  Currently, finding the appropriate input targets for an event\nrequires a call back into the WindowManagerServer from native code.\nIn the future this will be refactored to avoid most of these callbacks\nexcept as required to handle pending focus transitions.\n\nEnd-to-end event dispatch mostly works!\n\nTo do: event injection, rate limiting, ANRs, testing, optimization, etc.\n\nChange-Id: I8c36b2b9e0a2d27392040ecda0f51b636456de25\n"
    },
    {
      "commit": "cdfd5fe2c89a30a31f9de5a5481e8997f014a89b",
      "tree": "0c5bbe8bed876618e46e057b44649f0715fcf56f",
      "parents": [
        "009668bf8a51a3d6e8ee2827691c9b0285503ba1"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 28 15:13:30 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 28 15:13:30 2010 -0700"
      },
      "message": "Fix a typo in Singleton\u003c\u003e\n\nit could cause the sLock field to be emitted several times\nin different compilation unit. it also prevented to\nhave 2 Singleton\u003c\u003e in the same file."
    },
    {
      "commit": "66c46a6bd15422fe898d533d1350d6df748dd95b",
      "tree": "35958474462ea6ecbe3bbc6e0478646f236a6634",
      "parents": [
        "4414b9ad5427a2ac5dcb279e138e0ca9a6816140"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 19 15:11:00 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 19 15:12:59 2010 -0700"
      },
      "message": "added RWLock C++ wrapper\n\nChange-Id: Ia736bf7f6e2c49915a9ab5669551cf89dafa7961\n"
    },
    {
      "commit": "68246dcec17c245a434dad70b778960dc5c84af1",
      "tree": "00aaacdfd3147c87c0d0d4761817a797e7af346a",
      "parents": [
        "dc3e26071399789c5966b9cd67180437f44eb9dd"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Apr 22 18:28:29 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed May 12 05:07:48 2010 -0700"
      },
      "message": "ZipUtilsRO rewrite based on Dalvik Zip rewrite\n\nChange the way zip archives are handled.  This is necessary to deal with\nvery large (~1GB) APK files, for which our current approach of mapping\nthe entire file falls over.\n\nWe now do the classic scavenger hunt for the End Of Central Directory\nmagic on a buffer of data read from the file, instead of a memory-mapped\nsection.  We use what we find to create a map that covers the Central\nDirectory only.\n\nIf the caller is interested in unpacking the file contents, we have to\ndo an additional file read to discover the size of the Local File Header\nsection so we can skip past it.\n\nThis is based on Change I745fb15abb in the dalvik tree. Both\nimplementations share a common ancestry, but the cost of unifying them\noutweighs the benefits of wrapping C calls.\n\nChange-Id: Iddacb50fe913917c2845708a530872d65fdbe620\n"
    },
    {
      "commit": "14cee9f688c32d63d8521188e7422811629bb7c2",
      "tree": "16c2f2356519a2552bb3b7e2b1de6735793c4b1a",
      "parents": [
        "3fd6419fe542c4ecb8e838d1754a83ce8591b288"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Apr 23 17:51:26 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Apr 28 16:51:52 2010 -0700"
      },
      "message": "New xlarge screen size.\n\nNot complete, only for experimentation at this point.\n\nThis includes a reworking of how screen size configurations are matched,\nso that if you are on a larger screen we can select configurations for\nsmaller screens if there aren\u0027t any exactly matching the current screen.\n\nThe screen size at which we switch to xlarge has been arbitrarily\nchosen; the compatibility behavior has not yet been defined.\n\nChange-Id: I1a33b3818eeb51a68fb72397568c39ab040a07f5\n"
    },
    {
      "commit": "a729f97e8bfba67a94b1cde26d0d78d84528de85",
      "tree": "348c44f823825856df69b8b8e640bc86146a438f",
      "parents": [
        "078fd47e91d495175927d1a4a8b9aad039a7ba4e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Mar 19 16:14:13 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Mar 19 16:16:43 2010 -0700"
      },
      "message": "libutils Condition are now PRIVATE by default\n\nCondition must be initialized with SHARED for the old behavior, where\nthey can be used accross processes.\n\nUpdated the two places android that require SHARED conditions.\n\nPRIVATE conditions (and mutexes) use more efficient syscalls.\n\nChange-Id: I9a281a4b88206e92ac559c66554e886b9c62db3a\n"
    },
    {
      "commit": "cf244ada58539ce857ec041d7288d0271204fbb6",
      "tree": "ec16084d19a3b0c0e43e11dd276fbe7c6a6813c5",
      "parents": [
        "ae58f6d7473c67d76b6c6373794fd1a77543ddb4"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Mar 09 15:00:30 2010 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Mar 09 17:18:05 2010 -0800"
      },
      "message": "Add ability for some manifest attributes to reference resources.\n\nThis loosens our restriction on many manifest attributes requiring\nliteral string values, to allow various ones to use values from\nresources.  This is only allowed if the resource value does not change\nfrom configuration changes, and the restriction is still in place\nfor attributes that are core to security (requesting permissions) or\nmarket operation (used libraries and features etc).\n\nChange-Id: I4da02f6a5196cb6a7dbcff9ac25403904c42c2c8\n"
    },
    {
      "commit": "7299c41630935a2b106e73e5603579a7747f7535",
      "tree": "933c4bc5c991c8d9334b7b78fbc71ad73e93d077",
      "parents": [
        "6d141b0a9beb71e59ba850b7be13c4f0344ddc77"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Mar 04 18:41:49 2010 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Mar 05 10:57:47 2010 -0800"
      },
      "message": "Refactor car mode.\n\nExtract all UI behavior from dock observer and ACTION_DOCK_EVENT.\n\nAlso introduce a desk type to go along with the car type all through\nthe resource system, since we now need to have corresponding high-level\nbroadcasts for desk dock mode.  As part of that I also reworked some\nof the logic for switching modes to all funnel through a single\nupdate() call that looks all of the current state to decide what to\ndo next, and fixed various locking issues.\n\nIn addition I found there were bugs in the configuration change\nhandling causing us to only switch into the car mode config and\nthen never get out of it.  Unfortunately now that we are actually\nchanging the configuration for each mode change, the transitions\nbetween them are really crummy as we restart all kinds of\nactivities. :(\n"
    },
    {
      "commit": "ef05e076ced1a32c5c0aaee28403779834adb2ba",
      "tree": "20dcf607adf508481d57610937ceab6ef2c6aee2",
      "parents": [
        "883dbacb12a003f8f46c3faab26b744fdef649a1"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Mar 01 17:43:39 2010 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Mar 01 20:42:14 2010 -0800"
      },
      "message": "Fix issue #2448075: aapt doesn\u0027t fix up activity-alias android:targetActivity links\n\nAnd related:\n\n- The aapt tool now sets a resource configurations sdk level to match any configs\n  that have been set (for example if you specify density your sdk level will be\n  at least 4).\n- New option to modify the targetPackage attribute of instrumentation.\n- Clean up of aapt options help.\n- Fix of UI type values to leave 0 for \"unspecified\".\n- Make the UI mode config APIs public.\n"
    },
    {
      "commit": "780d2a1b714724d85227141c76b3c64f543f00b4",
      "tree": "3bd5411acce1ae663e4509c812b3aaa6100c6a41",
      "parents": [
        "cfe79e9220c996ed9f60fbc00eebb23e7faba2f0"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Feb 22 22:36:26 2010 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Feb 23 10:02:20 2010 -0800"
      },
      "message": "Use UTF-8 strings to avoid duplicate caching, part 1\n\nStringBlock instances containing UTF-8 strings use a cache to convert\ninto UTF-16, but using that cache and then using a JNI call to NewString\ncauses the UTF-8 string as well as two copies of the UTF-16 string to\nbe held in memory. Getting the UTF-8 string directly from the StringPool\neliminates one copy of the UTF-16 string being held in memory.\n\nThis is part 1. Part 2 will include ResXMLParser optimizations.\n\nChange-Id: Ibd4509a485db746d59cd4b9501f544877139276c\n"
    },
    {
      "commit": "c86727f5805f28fbd25da141c50fb6843f364f3a",
      "tree": "395806614f40b9aac7306a9e951305167fb8abe1",
      "parents": [
        "08d13c3cbb0b250b84ca861edb462060556aead9"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Feb 11 17:30:52 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun Feb 21 23:27:25 2010 -0800"
      },
      "message": "remove a dependency of GraphicBuffer (libui) on Parcel (libbinder).\n\nAdd a Flattenable interface to libutils which can be used to flatten\nan object into bytestream + filedescriptor stream.\nParcel is modified to handle Flattenable. And GraphicBuffer implements\nFlattenable.\n\nExcept for the overlay classes libui is now independent of libbinder.\n"
    },
    {
      "commit": "a9886c580b299984e62303a995bf7b13276b5bc8",
      "tree": "f481a1e98fc053de7e8d3ce8c0ec6534890dd3fb",
      "parents": [
        "7f66d6e63dc79709ea308440ec57906980046531"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Feb 12 14:09:24 2010 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Feb 12 14:37:42 2010 -0800"
      },
      "message": "Totally remove Unicode.cpp and rely on ICU\n\nUnicode.cpp used a packed data table for character data that essentially\nduplicated ICU\u0027s functionality.\n\nChange-Id: Ia68fe4ac94e89dc68d9a3f45f33f6e648a5500b7\n"
    },
    {
      "commit": "564bfc27f253694183f5972cdda6357c66bd7bbd",
      "tree": "b9af3f503d7183a8f9f1cf5fe99fcf391eaa0c89",
      "parents": [
        "965e37ec88609c36a3c5461ece459a96abb6f7ca"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Feb 12 13:01:16 2010 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Feb 12 13:01:16 2010 -0800"
      },
      "message": "Excise code from Unicode.cpp that was dead\n\nRemove some utility functions for discovering character data\nthat ICU probably took over a while ago.\n\nChange-Id: I97abe4de2f51eb2bf48679941258bc501184c3dc\n"
    },
    {
      "commit": "27b28b3f62bd3b54fa13acd5d035940b9be464f3",
      "tree": "d1f44096f7071bbc53e5bc979117be8e0f4aa55c",
      "parents": [
        "d5663a108760de672b130ffabd4f6632982f75e5"
      ],
      "author": {
        "name": "Tobias Haamel",
        "email": "haamel@google.com",
        "time": "Tue Feb 09 23:09:17 2010 +0100"
      },
      "committer": {
        "name": "Tobias Haamel",
        "email": "haamel@google.com",
        "time": "Thu Feb 11 21:25:58 2010 +0100"
      },
      "message": "Introduce special UI modes for night and car usage.\n\nThe device mode is now called ui mode. Furthermore is the order of\nprecedence for the resources now in such a way that the ui mode needs\nto be specified after the orientation and before the density.\n\nThe ui mode can be set, like it is done for the locale, as follows:\n\nIActivityManager am \u003d ActivityManagerNative.getDefault();\nConfiguration config \u003d am.getConfiguration();\nconfig.uiMode \u003d Configuration.UI_MODE_TYPE_CAR | Configuration.UI_MODE_NIGHT_ANY;\nam.updateConfiguration(config);\n\nTo allow users to disable the car mode and set the night mode the IUiModeManager\ninterface is used.\n\nThe automatic night mode switching will be added in a separate change.\n"
    },
    {
      "commit": "bb79f64b89bd7be7019035a0347c681e6f39fe6b",
      "tree": "d938e21a91d0d71dba49f89e36920f6654284536",
      "parents": [
        "159f0015418955501d8cf2744b0393db2e73f394"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Dec 10 14:20:15 2009 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Dec 10 14:22:08 2009 -0800"
      },
      "message": "Add string resource type inspection\n\nAllows \"aapt dump --values resource\" to print out whether a string in a\nResStringPool is in UTF-8 or UTF-16 encoding.\n\nChange-Id: I6478884a70a3b46fee862dece6cb33454fc34843\n"
    },
    {
      "commit": "e6c0e99334bc2f47e5d36db253ac8f166047c03b",
      "tree": "67a2ab651f0bb32587d2b074e45a7095630fb07d",
      "parents": [
        "1270e2e22b0b3f0705cee2b82788d8dc3fb03cdb",
        "19138468caf7050d482dc15f35a344eab11bb756"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 08 13:41:38 2009 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 08 13:41:38 2009 -0800"
      },
      "message": "Merge change I129483f8 into eclair-mr2\n\n* changes:\n  Optional use of UTF-8 strings in resource bundles\n"
    },
    {
      "commit": "887f355f99ff83d568ef2885a4fdcaae475583df",
      "tree": "c4788aa9ac8f37c6a02fc6b3a6874b71efb0f759",
      "parents": [
        "259e3384face72ea8e30696d7bae492d37d44e8b"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Dec 07 17:59:37 2009 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Dec 07 19:11:14 2009 -0800"
      },
      "message": "Propagate background scheduling class across processes.\n\nThis is a very simply implementation: upon receiving an IPC, if the handling\nthread is at a background priority (the driver will have taken care of\npropagating this from the calling thread), then stick it in to the background\nscheduling group.  Plus an API to turn this off for the process, which is\nused by the system process.\n\nThis also pulls some of the code for managing scheduling classes out of\nthe Process JNI wrappers and in to some convenience methods in thread.h.\n"
    },
    {
      "commit": "19138468caf7050d482dc15f35a344eab11bb756",
      "tree": "ea1f96c5bcab356355ab05d315abfa66a7f888c4",
      "parents": [
        "6be01bf207077ffbdcd3879250171a26ec805835"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Dec 04 09:38:48 2009 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Dec 07 15:14:15 2009 -0800"
      },
      "message": "Optional use of UTF-8 strings in resource bundles\n\nAllows the use of UTF-8 for packing resources instead of the\ndefault of UTF-16 for Java. When strings are extracted from the\nResStringPool, they are converted to UTF-16 and the result is\ncached for subsequent calls.\n\nWhen using aapt to package, add in the \"-8\" switch to pack the\nresources using UTF-8. This will result in the value, key, and\ntype strings as well as the compiled XML string values taking\nsignificantly less space in the final application package in\nmost scenarios.\n\nChange-Id: I129483f8b3d3b1c5869dced05cb525e494a6c83a\n"
    },
    {
      "commit": "553399518f39cd9f31f2bb6f502866c3c9d6d1a5",
      "tree": "0142f759466336e32bccab5ba2fe7c7341ef5318",
      "parents": [
        "824838d74eb0316f6987a1d98d2d9e9fa8d4e15b"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Sun Nov 01 21:16:59 2009 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Sun Nov 01 21:16:59 2009 -0800"
      },
      "message": "Fix issue #2226370: Resource versions match with equality\n\nAlso fixed turned-around increment of version number for resources. :(\n\nChange-Id: I604137272da984bcd69cee4f174e6b7f2c786e46\n"
    },
    {
      "commit": "93e462b79d6896da10e15e74c5aec6beb098dddf",
      "tree": "1f5f178b544a49ba5a80e74269b083775ff97854",
      "parents": [
        "6cf05f1c3d6f4585573c8663a62848a09f6a08ff"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Sep 15 22:50:40 2009 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Sep 15 22:50:40 2009 -0700"
      },
      "message": "Implement issue #1780928: Need support hiding nav keys.\n\nThis implements support for devices whose hardware can hide\ntheir navigation keys.  It works much like the existing keyboardHidden\nconfiguration, and for compatibility uses the same configuration\nchange bit.\n\nAlso add FLAG_TURN_ON_SCREEN for windows, which has the system\ncause the screen to be turned on when the window is displayed.\nGreat fun when used with FLAG_SHOW_WHEN_LOCKED!\n\nChange-Id: I0b867f19af85cfd8786a14cea194b34f7bdd9b7a\n"
    },
    {
      "commit": "242d65bf9faf1d2bc3468490e510551140e23462",
      "tree": "1486035602564a0657ecf0d915d4a2d4f15f9cba",
      "parents": [
        "9a0bf14c4f715a8ffa645c77c4c183dcfa3e31c8"
      ],
      "author": {
        "name": "San Mehat",
        "email": "san@google.com",
        "time": "Sat Sep 12 10:10:37 2009 -0700"
      },
      "committer": {
        "name": "San Mehat",
        "email": "san@google.com",
        "time": "Sat Sep 12 10:48:03 2009 -0700"
      },
      "message": "process: Switch to common cutils sched_policy api\n\nSigned-off-by: San Mehat \u003csan@google.com\u003e\n"
    },
    {
      "commit": "181b31a0d87d525ea64102a965210331e0c6885b",
      "tree": "25fc3710ab2195bb6010fa0b8217e6b14b32ed29",
      "parents": [
        "c06307ccde2cc8e92fcb07d29ef5a69803d0c0b3"
      ],
      "author": {
        "name": "San Mehat",
        "email": "san@google.com",
        "time": "Tue Sep 08 20:28:35 2009 -0700"
      },
      "committer": {
        "name": "San Mehat",
        "email": "san@google.com",
        "time": "Thu Sep 10 15:09:38 2009 -0700"
      },
      "message": "Process: Add support for using scheduler policies instead of cgroups.\nPreference is given to cgroups if available.\n\nSigned-off-by: San Mehat \u003csan@google.com\u003e\n"
    },
    {
      "commit": "d42bd87f23974164d2539ea85c7b5e6329faf2c2",
      "tree": "9ab3713baa90ff2f06d9937d86900fbf43825c39",
      "parents": [
        "a280496bd2ce04d6beff4536f2115a9a4d7568e4"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 09 02:38:13 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 09 02:45:26 2009 -0700"
      },
      "message": "use broadcast() instead of signal() when signaling the condition-variable Thread::RequestExitAndWait() is waiting for\n\nwe could have several thread waiting on the condition and they all need to wake-up.\nalso added a debug \"mTid\" field in the class, which contains the tid of the thread (as opposed to pthread_t), this\nis useful when debugging under gdb for instance.\n"
    },
    {
      "commit": "9779b221e999583ff89e0dfc40e56398737adbb3",
      "tree": "76b185d252b95b05e8d74e7a1644b843f8839725",
      "parents": [
        "a4eb91da03bd785bc91bed0d25a9efaa9baba1c1"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Sep 07 16:32:45 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Sep 07 16:32:45 2009 -0700"
      },
      "message": "fix [2068105] implement queueBuffer/lockBuffer/dequeueBuffer properly\n\nRewrote SurfaceFlinger\u0027s buffer management from the ground-up.\nThe design now support an arbitrary number of buffers per surface, however the current implementation is limited to four. Currently only 2 buffers are used in practice.\n\nThe main new feature is to be able to dequeue all buffers at once (very important when there are only two). \n\nA client can dequeue all buffers until there are none available, it can lock all buffers except the last one that is used for composition. The client will block then, until a new buffer is enqueued.\n\nThe current implementation requires that buffers are locked in the same order they are dequeued and enqueued in the same order they are locked. Only one buffer can be locked at a time.\n\neg. Allowed sequence:   DQ, DQ, LOCK, Q, LOCK, Q\neg. Forbidden sequence: DQ, DQ, LOCK, LOCK, Q, Q\n\n"
    },
    {
      "commit": "2f10ae08d435b12e1798d93e0b90605717c66081",
      "tree": "30d50a2897e1f0a1835e72c8fa7b057c98ad8c2e",
      "parents": [
        "01f750d6fa03f16ef93802618a6ccf8b353ae8e2"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Aug 17 13:33:27 2009 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Aug 17 15:31:25 2009 -0700"
      },
      "message": "Support for marshalling pointers / intptr_t in Parcel.\n\nSome refactoring to eliminate code duplication in Parcel implementation.\n"
    },
    {
      "commit": "90f77218a24ac66bea52faef79c30d45420ce135",
      "tree": "d2925354575662d31307cb4affd52f5d5c97ee80",
      "parents": [
        "0914e0c1015e0331467d50622c1fe3d2557473bf",
        "b8546001701405a76dad7e6235046e592296fac2"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Aug 12 12:36:12 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Aug 12 12:36:12 2009 -0700"
      },
      "message": "am b8546001: Merge change 20878 into donut\n\nMerge commit \u0027b8546001701405a76dad7e6235046e592296fac2\u0027\n\n* commit \u0027b8546001701405a76dad7e6235046e592296fac2\u0027:\n  Fix issue #2048263: More debugging information\n"
    },
    {
      "commit": "82e1ee93eece8fb0aec6acc3ef4ee7b1c86feec7",
      "tree": "b7b376fc569f6d6fde7c69c8f832f3c52152f408",
      "parents": [
        "b3fa1084ba31698fa5c58150a713d7abbadb1cd2"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 11 18:56:41 2009 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 11 18:56:41 2009 -0700"
      },
      "message": "Fix issue #2048263: More debugging information\n\nWe now hopefully do better about generating the anr reports, and include\ninformation about the malloc loaded assets in meminfo.\n"
    },
    {
      "commit": "afcf686cb070313ae5ce6c54ac381a3a86a60ed2",
      "tree": "4a7c1fa186ad4b1a7d37ea4d97aa0b0411b50d85",
      "parents": [
        "8845ea0592e3bffc726febb66de48646b0398e70",
        "25dff70f153529b87f5ad4a92f4de21e8950b1de"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jul 30 16:05:27 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jul 30 16:05:27 2009 -0700"
      },
      "message": "am 25dff70f: Merge change 9039 into donut\n\nMerge commit \u002725dff70f153529b87f5ad4a92f4de21e8950b1de\u0027\n\n* commit \u002725dff70f153529b87f5ad4a92f4de21e8950b1de\u0027:\n  Fix #2018814: System cannot correctly render assets with \"wrap_content\" attribute in QVGA\n"
    },
    {
      "commit": "0d221012ff5fd314711c00ed30e9b807b9c454c1",
      "tree": "328d42900c9765e3bde9ad98a936a9122c679e5e",
      "parents": [
        "c6eb5ac988518f41938c4f021003d6c202d84819"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jul 29 15:41:19 2009 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jul 29 19:44:01 2009 -0700"
      },
      "message": "Fix #2018814: System cannot correctly render assets with \"wrap_content\" attribute in QVGA\n\nIt turns out we were not returning the density for anything retrieved from a\nTypedArray...  which basically means any bitmap references from a layout or style...!!!\n\nThis is now fixed.\n\nAlso fiddle with the density compatibility mode to turn on smoothing in certain situations,\nhelping the look of things when they need to scale and we couldn\u0027t do the scaling at\nload time.\n"
    },
    {
      "commit": "a8339dfec9d1b2c6d6fd2f8268f8075d184f64c0",
      "tree": "40345158a2aa1084b21de121e5eb8b0d8f8f36a3",
      "parents": [
        "9822d2b27330793ea4ba9c3316ef35f402f35fb4",
        "9fc20b0e381b5fe00b7049ef357c839cd05a33bf"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 21 19:03:53 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jul 21 19:03:53 2009 -0700"
      },
      "message": "am 9fc20b0e: Merge change 8126 into donut\n\nMerge commit \u00279fc20b0e381b5fe00b7049ef357c839cd05a33bf\u0027\n\n* commit \u00279fc20b0e381b5fe00b7049ef357c839cd05a33bf\u0027:\n  First pass at reworking screen density/size APIs.\n"
    },
    {
      "commit": "c4db95c077f826585d20be2f3db4043c53d30cf5",
      "tree": "9176baa673f97b27150f862485fd492cb3ec7e88",
      "parents": [
        "fe6f45c81463d2d28e11ac6083f2653e1286c5ef"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jul 21 17:46:02 2009 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jul 21 18:28:42 2009 -0700"
      },
      "message": "First pass at reworking screen density/size APIs.\n\nThis changes the names of the directories in aapt, to what you see\nin the list of DpiTest resources.  Also adds a new \"long\" configuration\nfor wide screens, which the platform sets appropriate, and introduces\na new kind of resizeability for not large but significantly larger\nthan normal screens which may have compatibility issues.\n"
    },
    {
      "commit": "469b4c67adc77a87eb2c9ed9217edf1778002828",
      "tree": "f6ca01c85c85a27ecd6f54ae1193f30e1cc67501",
      "parents": [
        "b933dc7f47ec9a9609d0775fc469849f066bfcd7",
        "aad0fcc9619eb72c18a6afff48ebc9d4011f0f54"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sun Jul 19 20:28:49 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Jul 19 20:28:49 2009 -0700"
      },
      "message": "am aad0fcc9: Merge change 7783 into donut\n\nMerge commit \u0027aad0fcc9619eb72c18a6afff48ebc9d4011f0f54\u0027\n\n* commit \u0027aad0fcc9619eb72c18a6afff48ebc9d4011f0f54\u0027:\n  Add \"nodpi\" density, and expose a bunch of density-related APIs.\n"
    }
  ],
  "next": "a53b828635fce8b6b2d3e3377d74d72070056623"
}
