)]}'
{
  "log": [
    {
      "commit": "334d9aebc28f7d5213b1671997488b3e3f118e29",
      "tree": "b6fc253e257b391ac5055162c042bd90711444ed",
      "parents": [
        "d0d209ed4d6280b6e1203eebe823f04f9db766c0"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 26 15:02:06 2013 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 26 16:16:14 2013 -0800"
      },
      "message": "New ContentProvider initialization for testing.\n\nUsing this turns off app ops checks.\n\nChange-Id: If29d4ca2fe9ddf1a1663d3a824b2f0afe7375862\n"
    },
    {
      "commit": "a75a883fe9ea1790803148f0a561473073e3f264",
      "tree": "a76a69d684a9643db3e22b72155aeb849c85a7f5",
      "parents": [
        "7a60c43d874bd047ea4b93b94c9b8771ea5739cc"
      ],
      "author": {
        "name": "Jim Miller",
        "email": "jaggies@google.com",
        "time": "Thu Feb 07 16:53:32 2013 -0800"
      },
      "committer": {
        "name": "Jim Miller",
        "email": "jaggies@google.com",
        "time": "Wed Feb 20 15:41:14 2013 -0800"
      },
      "message": "Add explicit userId to AppWidget binder calls\n\nKeyguard currently relies on being in the system process to grab the\ngiven user\u0027s widgets.  When we split keyguard into a new process,\nit will need to have access to user-specific info to instantiate a\nspecific user\u0027s widgets.  In order to accomplish this, we add an\nexplicit userid to each binder call as well as new permission\ncheck to allow keyguard access.\n\nThis also fixes a potential race condition of having an incorrect user id\ndue to an async call to change the user.  Every binder call now has a specific\nuser id. The user id is either the calling process user\u0027s id or an explicit\none passed by applications like keyguard. It is created once when an\nAppWidgetManager is instantiated and remains for the lifetime of the object.\n\nFixed bug where widgets sometimes didn\u0027t show up for secondary users.\n\nMoved permission check in AppWidgetService into getImplForUser()\n\nRefactored to use userid from context associated AppWidgetManager instance.\n\nClean up AppWidgetHost to use userId from Context.\n\nRemove redundant userId check in checkPermission since it\u0027s handled by\nActivityManager.handleIncomingUser()\n\nRemoved redundant userid check.\n\nUpload after rebase...\n\nChange-Id: Iae3e20f2b342c323bb58768b3d22051510f8268b\n"
    },
    {
      "commit": "f51f61269aacdfcf737b2c32b6b216c48ab61e65",
      "tree": "33839b315b97323df81f9638c8bb085241f017cc",
      "parents": [
        "b86147910877f1aae0733f05a9a93b91101e67e2"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Feb 04 18:23:34 2013 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 05 11:56:12 2013 -0800"
      },
      "message": "App ops: new operations for SMS.\n\nImplementation required a new framework feature\nto associate an app op with a broadcast.\n\nChange-Id: I4ff41a52f7ad4ee8fd80cbf7b394f04d6c4315b3\n"
    },
    {
      "commit": "3a34d17412a5a304e39be1966a16627677d2136f",
      "tree": "6f4cb2c0fab6282f1c0318b05200487191cc1021",
      "parents": [
        "91488eed1745ea0426a73306f133e02d62580f1a"
      ],
      "author": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Mon Jan 28 19:55:35 2013 -0800"
      },
      "committer": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Mon Jan 28 19:55:35 2013 -0800"
      },
      "message": "Fixing the build\n\nChange-Id: Ief7654775307c829a60e65217ae821aa6801303c\n"
    },
    {
      "commit": "80943d8daa6ab31ab5c486d57aea406aa0730d58",
      "tree": "cb7738eff465941484aac3eb6ba15ba365aea576",
      "parents": [
        "64cae1a608c196c2bd1d9e7cfd2a1632fd0e5b83"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Wed Jan 02 10:25:37 2013 -0800"
      },
      "committer": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Tue Jan 22 17:56:53 2013 -0800"
      },
      "message": "Adding UI test automation APIs.\n\nThis change adds APIs support for implementing UI tests. Such tests do\nnot rely on internal application structure and can span across application\nboundaries. UI automation APIs are encapsulated in the UiAutomation object\nthat is provided by an Instrumentation object. It is initialized by the\nsystem and can be used for both introspecting the screen and performing\ninteractions simulating a user. UI test are normal instrumentation tests\nand are executed on the device.\n\nUiAutomation uses the accessibility APIs to introspect the screen and\na special delegate object to perform privileged operations such as\ninjecting input events. Since instrumentation tests are invoked by a shell\ncommand, the shell program launching the tests creates a delegate object and\npasses it as an argument to started instrumentation. This delegate\nallows the APK that runs the tests to access some privileged operations\nprotected by a signature level permissions which are explicitly granted\nto the shell user.\n\nThe UiAutomation object also supports running tests in the legacy way\nwhere the tests are run as a Java shell program. This enables existing\nUiAutomator tests to keep working while the new ones should be implemented\nusing the new APIs. The UiAutomation object exposes lower level APIs which\nallow simulation of arbitrary user interactions and writing complete UI test\ncases. Clients, such as UiAutomator, are encouraged to implement higher-\nlevel APIs which minimize development effort and can be used as a helper\nlibrary by the test developer.\n\nThe benefit of this change is decoupling UiAutomator from the system\nsince the former was calling hidden APIs which required that it is\nbundled in the system image. This prevented UiAutomator from being\nevolved separately from the system. Also UiAutomator was creating\nadditional API surface in the system image. Another benefit of the new\ndesign is that now test cases have access to a context and can use\npublic platform APIs in addition to the UiAutomator ones. Further,\nthird-parties can develop their own higher level test APIs on top\nof the lower level ones exposes by UiAutomation.\n\nbug:8028258\n\nAlso this change adds the fully qualified resource name of the view\u0027s\nid in the emitted AccessibilityNodeInfo if a special flag is set while\nconfiguring the accessibility service. Also added is API for looking\nup node infos by this id. The id resource name is relatively more stable\ncompared to the generaed id number which may change from one build to\nanother. This API facilitate reuing the already defined ids for UI\nautomation.\n\nbug:7678973\n\nChange-Id: I589ad14790320dec8a33095953926c2a2dd0228b\n"
    },
    {
      "commit": "d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaac",
      "tree": "5f6d8b2c0e66c99289ae085cb6a6a3be168eb000",
      "parents": [
        "f25febf01453733e8bdd1ac241ecd9d3bcbef475"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jan 17 17:47:37 2013 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jan 18 13:02:26 2013 -0800"
      },
      "message": "Rework ParceledListSlice to be much easier to use.\n\nTake advantage of this to return better information about\npackages filtered by permissions -- include the permissions\nthey have in the requested array.\n\nAlso fix issue #8026793 (Contact picture shows default pic\nwhile searching for a contact in qsb) by using the base\npackage name of the Context when reporting the app name\nof an operation.  Otherwise you could make a resource-only\ncontext for another application and do calls through that\nand get reported as the wrong app.\n\nChange-Id: I5e0488bf773acea5a3d22f245641828e1a106fb8\n"
    },
    {
      "commit": "66a017b63461a22842b3678c9520f803d5ddadfc",
      "tree": "07a0d63d0b362628ecbf6083aadf726d0ae02636",
      "parents": [
        "54781207d31fd0fb33c6038b6999ba649fc488b2"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jan 17 18:18:22 2013 -0800"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jan 17 18:25:47 2013 -0800"
      },
      "message": "Always give ContentResolver a valid Context.\n\nAlso add MockContentResolver constructor to provide a Context, and\nmove to singleton ActivityThread, since there is only one inside\neach process.  This makes ActivityThread accessible from threads like\nInstrumentationThread.\n\nChange-Id: Ib8b18f1b9bba8820ff412d782a43511066eabf24\n"
    },
    {
      "commit": "2125dd57cc3c1c43da9793a2ee4bb8a7bf19f083",
      "tree": "fbe39f761d3b18199de133332bbabdaacc766f49",
      "parents": [
        "b2efa40bc37bc83410ef38652f708ea7ef6ab845",
        "e799175b6ba3aadd972f4b861758d675d1f93987"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jan 17 02:51:09 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 17 02:51:11 2013 +0000"
      },
      "message": "Merge \"AppOps: fix nested op tracking, new API to get apps using permissions.\""
    },
    {
      "commit": "e799175b6ba3aadd972f4b861758d675d1f93987",
      "tree": "2468fd79769eecff660a7c2d2163fb8ae0a11fca",
      "parents": [
        "35654b61e8fe7bc85afcb076ddbb590d51c5865f"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jan 16 17:56:46 2013 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jan 16 18:10:40 2013 -0800"
      },
      "message": "AppOps: fix nested op tracking, new API to get apps using\npermissions.\n\nChange-Id: I20c7bd58febc01d6911a90440867eaacd133c464\n"
    },
    {
      "commit": "d4fe37bee7c7433f32c23cee100c6e05ba0f3b2b",
      "tree": "76ea7e540dfa63062ae6fa6e4920dccb40c0aa14",
      "parents": [
        "d05efe727b61e321a6c2720166988d52629c050c",
        "27b89e6658a0d233a53f5d7ca20dc57fec82d955"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Jan 16 23:26:30 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 16 23:26:30 2013 +0000"
      },
      "message": "Merge \"Rename bindService to bindServiceAsUser to follow convention.\""
    },
    {
      "commit": "27b89e6658a0d233a53f5d7ca20dc57fec82d955",
      "tree": "3bc24a15905546e7ea38fb37994d67414349b3db",
      "parents": [
        "57b59e025bc10056daf42cd741b626843ff344f5"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Jan 16 12:30:11 2013 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Jan 16 12:30:11 2013 -0800"
      },
      "message": "Rename bindService to bindServiceAsUser to follow convention.\n\nThis is for the multi-user version of bindService, not the original.\n\nChange-Id: Ib2de35941196accf387b1a276a77e6f9af805ec0\n"
    },
    {
      "commit": "35654b61e8fe7bc85afcb076ddbb590d51c5865f",
      "tree": "0f42a90b4deaa0156d84df5d79b78cd6f2ac8807",
      "parents": [
        "8a8b047f2d28f6b2d728731a7e71eeaf16f89700"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jan 14 17:38:02 2013 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jan 16 12:11:01 2013 -0800"
      },
      "message": "More work on App Ops service.\n\nImplemented reading and writing state to retain information\nacross boots, API to retrieve state from it, improved location\nmanager interaction to monitor both coarse and fine access\nand only note operations when location data is being delivered\nback to app (not when it is just registering to get the data at\nsome time in the future).\n\nAlso implement tracking of read/write ops on contacts and the\ncall log.  This involved tweaking the content provider protocol\nto pass over the name of the calling package, and some\ninfrastructure in the ContentProvider transport to note incoming\ncalls with the app ops service.  The contacts provider and call\nlog provider turn this on for themselves.\n\nThis also implements some of the mechanics of being able to ignore\nincoming provider calls...  all that is left are some new APIs for\nthe real content provider implementation to be involved with\nproviding the correct behavior for query() (return an empty\ncursor with the right columns) and insert() (need to figure out\nwhat URI to return).\n\nChange-Id: I36ebbcd63dee58264a480f3d3786891ca7cbdb4c\n"
    },
    {
      "commit": "a06de0f29b58df9246779cc4bfd8f06f7205ddb6",
      "tree": "c8ecd3323c1112dd46a9470600eab5df022ca85c",
      "parents": [
        "2e9f65f978397d112dbfb134d374588515bb644a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Dec 11 16:34:47 2012 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jan 09 12:47:47 2013 -0800"
      },
      "message": "New \"app ops\" service.\n\nInitial implementation, tracking use of the vibrator, GPS,\nand location reports.\n\nAlso includes an update to battery stats to also keep track of\nvibrator usage (since I had to be in the vibrator code anyway\nto instrument it).\n\nThe service itself is only half-done.  Currently no API to\nretrieve the data (which once there will allow us to show you\nwhich apps are currently causing the GPS to run and who has\nrecently accessed your location), it doesn\u0027t persist its data\nlike it should, and no way to tell it to reject app requests\nfor various operations.\n\nBut hey, it\u0027s a start!\n\nChange-Id: I05b8d76cc4a4f7f37bc758c1701f51f9e0550e15\n"
    },
    {
      "commit": "7b172a49a90ea6784dbfe0002474f9d4fd4ace1a",
      "tree": "05db15b0b2b922fa644199d48d8769624bacbe34",
      "parents": [
        "e4d08f11c49ff4c554df80c12fa2b5b04831e2f5",
        "58ed5d748c0b9b64845975ef5844ad313de7c3f6"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 07 13:08:25 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 07 13:08:25 2012 -0800"
      },
      "message": "am 58ed5d74: am 768d9e1a: Merge \"Correct executable bit for source files\"\n\n* commit \u002758ed5d748c0b9b64845975ef5844ad313de7c3f6\u0027:\n  Correct executable bit for source files\n"
    },
    {
      "commit": "58ed5d748c0b9b64845975ef5844ad313de7c3f6",
      "tree": "507af3879bc894eb854712a1fe6c0953805a895c",
      "parents": [
        "9197d170b770f2b87abd0cd0e13dcf71e5a181c2",
        "768d9e1a72ceee7d4a5f608776b87b62d6ce4a04"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 07 11:52:12 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 07 11:52:12 2012 -0800"
      },
      "message": "am 768d9e1a: Merge \"Correct executable bit for source files\"\n\n* commit \u0027768d9e1a72ceee7d4a5f608776b87b62d6ce4a04\u0027:\n  Correct executable bit for source files\n"
    },
    {
      "commit": "3a084af2e90849aaa8beb3a610189e3399c63ea0",
      "tree": "ba4b87d227674fd68f9ea395649fde32778620f0",
      "parents": [
        "9d547d6934f64189e368c0b190fb4cf49c95a557"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 07 10:19:47 2012 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 07 10:27:31 2012 -0800"
      },
      "message": "Correct executable bit for source files\n\nMany media files and source code files were marked as executable in Git.\nRemove those.\n\nAlso a shell script and python script were not marked as executable.\n\nChange-Id: Ieb51bafb46c895a21d2e83696f5a901ba752b2c5\n"
    },
    {
      "commit": "41e173d4cb19a0eca95fe0d79dd05f501333b786",
      "tree": "0d99b2134eeebd10569e59f78ff900cb277f8225",
      "parents": [
        "f2e005aa240ce888735af1988932004660cbee71"
      ],
      "author": {
        "name": "Brett Chabot",
        "email": "brettchabot@google.com",
        "time": "Wed Oct 24 14:34:07 2012 -0700"
      },
      "committer": {
        "name": "Brett Chabot",
        "email": "brettchabot@google.com",
        "time": "Wed Oct 24 14:51:21 2012 -0700"
      },
      "message": "Remove erroneous override of package-private method.\n\nChange-Id: I8d473c1eb32f2513d01b3f7f14f0001286a6a9ca\n"
    },
    {
      "commit": "98edc951712823dbf5db2b7e9c203a0e98fc616b",
      "tree": "4f0e85972328438729323ab5c032d4b36ff90904",
      "parents": [
        "b1c4ab5c2afea1f0797ee397df6512366128d980"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Sep 25 14:09:27 2012 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Sep 25 15:45:27 2012 -0700"
      },
      "message": "Load resources for the correct user\n\nFor apps that are only installed on secondary users, the SystemUI is\nunable to see them by default. Added some methods to explicitly pass the\nuserId of the user the resources are requested for by the StatusBarIcon\n\nBug: 7214384\n\nAlso fix binding to remote views\n\nBug: 7192802\n\nChange-Id: I5d6c5f624aa37fb231f3467f9764c8d99077a91d\n"
    },
    {
      "commit": "11820f7386ce86fd89e9e6b49d9231dce6e1ed07",
      "tree": "9437ce9ba5b311f4b95c05121a9df6ec7f062379",
      "parents": [
        "b939e35274334d1f5e71a526efe8d235eb6d7387",
        "6d51571835737c7502a2e111ee9dc2527ebad984"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Sep 23 13:22:26 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sun Sep 23 13:22:27 2012 -0700"
      },
      "message": "Merge \"Allow acquiring ContentProviders across users.\" into jb-mr1-dev"
    },
    {
      "commit": "6d51571835737c7502a2e111ee9dc2527ebad984",
      "tree": "8298f3a36bdfbdb95a4fdd52681f82e7f396d31b",
      "parents": [
        "08681adda06f4699f85838861170fbb062c9fdfe"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 20 16:06:08 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Sep 21 19:49:43 2012 -0700"
      },
      "message": "Allow acquiring ContentProviders across users.\n\nOtherwise services like SystemUI will always open content://-style\nUris as USER_OWNER.  Surfaces through createPackageContextAsUser()\nwhich points all ContentResolver operations towards a given user.\n\nStart using in RemoteViews, so that Notifications correctly resolve\nimage Uris to the sending user.  Also add user support for \"content\"\nshell tool.\n\nBug: 7202982\nChange-Id: I8cb7fb8a812e825bb0b5833799dba87055ff8699\n"
    },
    {
      "commit": "58d37b55bd228032355360ea3303e46a804e0516",
      "tree": "7a931f0e6054ef5835f2935dd8d2faa52a93ff53",
      "parents": [
        "059aedf808c8b9b3da1457eef52f3d477878d50b"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Sep 18 12:04:19 2012 -0700"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Fri Sep 21 16:48:07 2012 -0700"
      },
      "message": "Multi-user support for the accessibility layer.\n\n1. This change converts the accessibility manager service to\n   maintain a state per user. When the user changes the services\n   for the user that is going away are disconnected, the local\n   accessibility managers in the processes for this user are\n   disabled, the state is swapped with the new user\u0027s one, and\n   the new user state is refreshed.\n\n   This change updates all calls into the system to use their\n   user specific versions when applicable. For example, regisetring\n   content observers, package monitors, calls into other system\n   services, etc.\n\n   There are some components that are shared across users such\n   as UI created by the system process and the SystemUI package.\n   Such components are managed as a global state shared across\n   all users and are updated accordingly on a user switch. Since\n   the SystemUI is running in a normal app process this change\n   adds hidden APIs on the local window manager to allow the\n   SystemUI to notify the accessibility layer that it will run\n   accross users.\n\n   Calls to AccessibiltyManager\u0027s isEnabled(), isTouchExplorationEnabled()\n   and sendAccessibilityEvent return false or a are a nop for a\n   background user sice he should not send accessibility events,\n   and should not perform touch exploration.\n\n   Update the internal accessibility tests due to changes in the\n   AccessibilityManager.\n\n   This change also fixes several issues that were encountered\n   such as calling out the accessibility manager service with a\n   lock held.\n\n   Removed some incorrect debugging code from the TouchExplorer\n   that was leading to a system crash.\n\nbug:6967373\n\nChange-Id: I2cf32ffdee1d827a8197ae4ce717dc0ff798b259\n"
    },
    {
      "commit": "151ec4c9f8ca34625733730a4551a23eb97cda23",
      "tree": "9a0ab8bed19904dce51ae3d23f5ff72c0581b7e2",
      "parents": [
        "4aacf93d40b4be82aa35bf164d6fd6536c8b2a50"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Sep 07 19:25:16 2012 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sat Sep 08 19:14:00 2012 -0700"
      },
      "message": "More multi-user methods in PM\n\npm can list installed packages by user now.\n\nBug: 6926465\n\nChange-Id: I822311bfd6e7e2d6fb315fc484739fbf953c9bb6\n"
    },
    {
      "commit": "20e809870d8ac1e5b848f2daf51b2272ef89bdfc",
      "tree": "c863b6c684d1d3b21752880bc9f52bd749545d01",
      "parents": [
        "2701f325a6d4acd920637d2ff6fd6972a9cf836b"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Aug 31 19:00:44 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Sep 04 10:39:21 2012 -0700"
      },
      "message": "Add registering for explicit users.\n\nNew API to register as an explicit user, which allows you to\nalso select ALL to see broadcasts for all users.\n\nNew BroadcastReceiver API to find out which user the broadcast\nwas sent to.\n\nUse this in app widget service to handle per-user package broadcasts\nand boot completed broadcasts correctly.\n\nChange-Id: Ibbe28993bd4aa93900c79e412026c27863019eb8\n"
    },
    {
      "commit": "a492c3a7b2c18426fd0cb4d017eacbc368195dc5",
      "tree": "67744a8d91519d997cb761a697600041d74165fa",
      "parents": [
        "00453e7a0182b50cf01e65c97650b526284fe084"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Aug 23 19:48:44 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Aug 31 15:42:45 2012 -0700"
      },
      "message": "Initial draft of high-level multi-display APIs.\n\nThis patch introduces the ability to create a Context that\nis bound to a Display.  The context gets its configuration and\nmetrics from that display and is able to provide a WindowManager\nthat is bound to the display.\n\nTo make it easier to use, we also add a new kind of Dialog\ncalled a Presentation.  Presentation takes care of setting\nup the context as needed and watches for significant changes\nin the display configuration.  If the display is removed,\nthen the presentation simply dismisses itself.\n\nChange-Id: Idc54b4ec84b1ff91505cfb78910cf8cd09696d7d\n"
    },
    {
      "commit": "f203aeef993b0f4ce65c9630d06bbd50a504e89f",
      "tree": "f1624ae664c7f882e9f320dadbab4eea52b6a4ad",
      "parents": [
        "b2dd4e87ae8ac6a0402b7a0ed37201f27bcb1b9c"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Aug 29 18:41:53 2012 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Aug 30 16:08:23 2012 -0700"
      },
      "message": "Enforce permissions for calls with specified userId\n\nFix a couple of places where incorrect userIds were being passed in.\n\nChange-Id: I398c676e0488ff7e584be96e96c8b32652134238\n"
    },
    {
      "commit": "5ac72a29593ab9a20337a2225df52bdf4754be02",
      "tree": "dc5310e556b3662cb5f097b30e700a26d50a4db5",
      "parents": [
        "e217ee4d7a8223289a1af7363627c69956c46d41"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Aug 29 18:32:08 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 30 14:33:22 2012 -0700"
      },
      "message": "Improve multi-user broadcasts.\n\nYou can now use ALL and CURRENT when sending broadcasts, to specify\nwhere the broadcast goes.\n\nSticky broadcasts are now correctly separated per user, and registered\nreceivers are filtered based on the requested target user.\n\nNew Context APIs for more kinds of sending broadcasts as users.\n\nUpdating a bunch of system code that sends broadcasts to explicitly\nspecify which user the broadcast goes to.\n\nMade a single version of the code for interpreting the requested\ntarget user ID that all entries to activity manager (start activity,\nsend broadcast, start service) use.\n\nChange-Id: Ie29f02dd5242ef8c8fa56c54593a315cd2574e1c\n"
    },
    {
      "commit": "7767eac3232ba2fb9828766813cdb481d6a97584",
      "tree": "41cc717fb9f11190e9da3dc12d61faf23a22861d",
      "parents": [
        "1552586283f329253edc4786a6cf40c5bb69ea36"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 23 18:25:40 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Aug 24 13:53:13 2012 -0700"
      },
      "message": "Keep track of whether an app is installed for each user.\n\nThis add a new per-user state for an app, indicating whether\nit is installed for that user.\n\nAll system apps are always installed for all users (we still\nuse disable to \"uninstall\" them).\n\nNow when you call into the package manager to install an app,\nit will only install the app for that user unless you supply\na flag saying to install for all users.  Only being installed\nfor the user is just the normal install state, but all other\nusers have marked in their state for that app that it is not\ninstalled.\n\nWhen you call the package manager APIs for information about\napps, uninstalled apps are treated as really being not visible\n(somewhat more-so than disabled apps), unless you use the\nGET_UNINSTALLED_PACKAGES flag.\n\nIf another user calls to install an app that is already installed,\njust not for them, then the normal install process takes place\nbut in addition that user\u0027s installed state is toggled on.\n\nThe package manager will not send PACKAGE_ADDED, PACKAGE_REMOVED,\nPACKAGE_REPLACED etc broadcasts to users who don\u0027t have a package\ninstalled or not being involved in a change in the install state.\nThere are a few things that are not quite right with this -- for\nexample if you go through a full install (with a new apk) of an\napp for one user who doesn\u0027t have it already installed, you will\nstill get the PACKAGED_REPLACED messages even though this is\ntechnically the first install for your user.  I\u0027m not sure how\nmuch of an issue this is.\n\nWhen you call the existing API to uninstall an app, this toggles\nthe installed state of the app for that user to be off.  Only if\nthat is the last user user that has the app uinstalled will it\nactually be removed from the device.  Again there is a new flag\nyou can pass in to force the app to be uninstalled for all users.\n\nAlso fixed issues with cleaning external storage of apps, which\nwas not dealing with multiple users.  We now keep track of cleaning\neach user for each package.\n\nChange-Id: I00e66452b149defc08c5e0183fa673f532465ed5\n"
    },
    {
      "commit": "d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0c",
      "tree": "9b78fc4eb2e237ee7ad49eb70cc558f871ff9a48",
      "parents": [
        "bb121d569cd6bc7bf4018ef12756247009988863"
      ],
      "author": {
        "name": "rich cannings",
        "email": "richc@google.com",
        "time": "Wed Aug 22 14:28:05 2012 -0700"
      },
      "committer": {
        "name": "rich cannings",
        "email": "richc@google.com",
        "time": "Thu Aug 23 15:39:02 2012 -0700"
      },
      "message": "Allow verifiers to extend timeout\n\nCreate a new verifier API to extend the timeout for a giving package,\nincluding the resulting action (allow or deny) upon the timeout occuring.\n\nBug: 6901038\nChange-Id: I351f7944327f863aff1d7dd1227be74652fa1511\n"
    },
    {
      "commit": "0c3804950236fe170ebf6cc7a5f1e3e305b8f315",
      "tree": "832ea4ab2c17fe568df894aa3ed7438a01d97533",
      "parents": [
        "a5d5d608ccd885d8328879dde782a8cc93b7cf4f"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Aug 20 17:23:30 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 21 10:34:20 2012 -0700"
      },
      "message": "Improve multi-user app management.\n\nIntroduce API to get per-user storage information, keep track\nof services associated with users, and various small cleanup.\n\nChange-Id: I5d4e784e7ff3cccfed627d66a090d2f464202634\n"
    },
    {
      "commit": "706e8ba26bf0de19ad5f736516dae40c4c88c2d7",
      "tree": "2c45b61e1420f9a7442de8517b1eca6802d507c0",
      "parents": [
        "99de2459e200e0c86d55d5eee7ea000fd030990f"
      ],
      "author": {
        "name": "rich cannings",
        "email": "richc@google.com",
        "time": "Mon Aug 20 13:20:14 2012 -0700"
      },
      "committer": {
        "name": "rich cannings",
        "email": "richc@google.com",
        "time": "Mon Aug 20 13:20:14 2012 -0700"
      },
      "message": "Pass URLs to package verifiers\n\nThis change passes the originating URL and accompanied referrer to\npackage verifiers, when available.\n\nBug: 6544677\nChange-Id: I9ebc71bc13f549bd88267e444816151a99bda000\n"
    },
    {
      "commit": "98365d7663cbd82979a5700faf0050220b01084d",
      "tree": "8a4ff3e0a8afd814ed29609b26aa1c6ade2367f6",
      "parents": [
        "848c2dc93b6795e171f3dd6f64ea0be65e2762ca"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Aug 19 20:30:52 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Aug 19 22:42:08 2012 -0700"
      },
      "message": "Refactor for multi-display support.\n\nSplit WindowManagerImpl into two parts, the WindowManager\ninterface implementation remains where it is but the global\ncommunications with the window manager are now handled by\nthe WindowManagerGlobal class.  This change greatly simplifies\nthe challenge of having separate WindowManager instances\nfor each Context.\n\nRemoved WindowManagerImpl.getDefault().  This represents the\nbulk of this change.  Most of the usages of this method were\neither to perform global functions (now handled by WindowManagerGlobal)\nor to obtain the default display (now handled by DisplayManager).\n\nExplicitly associate each new window with a display and make\nthe Display object available to the View hierarchy.\n\nAdd stubs for some new display manager API features.\n\nStart to split apart the concepts of display id and layer stack.\nsince they operate at different layers of abstraction.\nWhile it\u0027s true that each logical display uniquely corresponds to a\nsurface flinger layer stack, it is not necessarily the case that\nthey must use the same ids.  Added Display.getLayerStack()\nand started using it in places where it was relatively easy to do.\n\nChange-Id: I29ed909114dec86807c4d3a5059c3fa0358bea61\n"
    },
    {
      "commit": "79af1dd54c16cde063152922b42c96d72ae9eca8",
      "tree": "142abf0037d20841712e88d65febcbbd92dd5561",
      "parents": [
        "f1b995f9d049cb5c7225b3b17f09369237a83ca2"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 16 16:42:52 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Aug 17 10:36:08 2012 -0700"
      },
      "message": "Switch public APIs to use new UserHandle class for identifying users.\n\nGets rid of \"yet another integer\" confusion.\n\nChange-Id: Id07ea7307aea7c62f0087c6663a1f1c08e2e5dee\n"
    },
    {
      "commit": "756220bd1912535840388a6743830d2e59ad4964",
      "tree": "ee97c666d4bb1f015fd3e89463af09c712ce47e4",
      "parents": [
        "863b19bc8fcfa436011781b67a237fcce3cb703a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 14 16:45:30 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 14 16:51:38 2012 -0700"
      },
      "message": "Add API to create new contexts with custom configurations.\n\nThis allows you to, say, make a Context whose configuration\nis set to a different density than the actual density of the device.\n\nThe main API is Context.createConfigurationContext().  There is\nalso a new API on ContextThemeWrapper that allows you to apply\nan override context before its resources are retrieved, which\naddresses some feature requests from developers to be able to\ncustomize the context their app is running in.\n\nChange-Id: I88364986660088521e24b567e2fda22fb7042819\n"
    },
    {
      "commit": "258848d2ae04f447ff1c18023fa76b139fcc0862",
      "tree": "8736421f4007d81206d0f0ea8b32a2013508976a",
      "parents": [
        "75f0fac91bd7fa67fa76cfdd4e163b9f35be0432"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Aug 10 17:06:33 2012 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sat Aug 11 18:24:07 2012 -0700"
      },
      "message": "User Manager service to manage users and query user details\n\nMoved a bunch of methods from PackageManager to UserManager.\n\nFix launching of activities from recents to correct user.\n\nGuest creation APIs\n\nChange-Id: I0733405e6eb2829675665e225c759d6baa2b708f\n"
    },
    {
      "commit": "a56d9cecee8a34e0554770ac6253dd3a76b9199c",
      "tree": "3e617e7c34c9dafec25b373af7cd392154881b19",
      "parents": [
        "f007bd3cf8cacd75287781c1bb37fe4167c79cba",
        "e1d7c711df3e3a2d2f195457882aa4ddb5626167"
      ],
      "author": {
        "name": "Rich Cannings",
        "email": "richc@google.com",
        "time": "Wed Aug 08 13:50:55 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Aug 08 13:50:56 2012 -0700"
      },
      "message": "Merge \"Revert \"Pass URLs to package verifiers\"\" into jb-mr1-dev"
    },
    {
      "commit": "e1d7c711df3e3a2d2f195457882aa4ddb5626167",
      "tree": "d27b6e508c1bdbd29028034471ee46acfe5d6cf8",
      "parents": [
        "24713907fe4632d263aea82f7a35c8fb08918a09"
      ],
      "author": {
        "name": "Rich Cannings",
        "email": "richc@google.com",
        "time": "Wed Aug 08 12:46:06 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Aug 08 12:46:06 2012 -0700"
      },
      "message": "Revert \"Pass URLs to package verifiers\"\n\nThis reverts commit 24713907fe4632d263aea82f7a35c8fb08918a09\n\nChange-Id: Ie04ba73475b813635c4a74915c45e83250801b6b\n"
    },
    {
      "commit": "537915828b45693e846a126292e026c5b4f05152",
      "tree": "6c47dca99eda5792f1fc006e0f20088ad4048db1",
      "parents": [
        "ec0feefd4422db1151aee722732d8c9528f6dfa8",
        "7d19e0242faac8017033dabb872cdf1542fa184c"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Aug 08 10:22:48 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Aug 08 10:22:49 2012 -0700"
      },
      "message": "Merge \"More mult-user API work.\" into jb-mr1-dev"
    },
    {
      "commit": "7d19e0242faac8017033dabb872cdf1542fa184c",
      "tree": "ab12d3c6597bc42bc7c0dca10ded546192c5c249",
      "parents": [
        "03ad783c5078c7bd487e47bb2a2af67dfbe89f1a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 07 19:12:33 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 07 19:19:22 2012 -0700"
      },
      "message": "More mult-user API work.\n\n- You can now use android:singleUser with receivers and providers.\n- New API to send ordered broadcasts as a user.\n- New Process.myUserHandle() API.\n\nFor now I am trying out \"user handle\" as the name for the numbers\nrepresenting users.\n\nChange-Id: I754c713ab172494bb4251bc7a37a17324a2e235e\n"
    },
    {
      "commit": "b53e9b42c302a5c5ccd837aece6bfffdf0cb5bf2",
      "tree": "78387317c5d39b36b1fabce81eacde277adcd109",
      "parents": [
        "4224790ffac80b7777ebeeed7474c3111a7add49",
        "a8583c2934836572632bb82d1fe7607392d4ca72"
      ],
      "author": {
        "name": "Scott Main",
        "email": "smain@google.com",
        "time": "Tue Aug 07 14:05:28 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Aug 07 14:05:28 2012 -0700"
      },
      "message": "am a8583c29: am 40eee61e: docs: fix broken links and update sitemap text file\n\n* commit \u0027a8583c2934836572632bb82d1fe7607392d4ca72\u0027:\n  docs: fix broken links and update sitemap text file\n"
    },
    {
      "commit": "40eee61e25fb887f5267686f8a0a7c5bd9f95769",
      "tree": "8ba762d17f536f0914f9fe13311be8838ff44834",
      "parents": [
        "ea8375617e0d9099dc156a12989277d320eab1ca"
      ],
      "author": {
        "name": "Scott Main",
        "email": "smain@google.com",
        "time": "Mon Aug 06 17:48:37 2012 -0700"
      },
      "committer": {
        "name": "Scott Main",
        "email": "smain@google.com",
        "time": "Mon Aug 06 18:04:23 2012 -0700"
      },
      "message": "docs: fix broken links\nand update sitemap text file\n\nChange-Id: I6982c3f029c46135ae856b8484d906c2882bad3a\n"
    },
    {
      "commit": "329465c6b2407ee086a171cac1a3581f83dbb048",
      "tree": "0d69eee745692b133e3f2c955561c0e09807ffb5",
      "parents": [
        "478923885da8fac0c1e0a8b7d85b98d1988504bc",
        "b4163a6e12ee7100c758c6d3d062ade1f2843fce"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 02 19:14:39 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 02 19:14:39 2012 -0700"
      },
      "message": "Merge \"Add APIs for interacting across users.\" into jb-mr1-dev"
    },
    {
      "commit": "b4163a6e12ee7100c758c6d3d062ade1f2843fce",
      "tree": "2948e83dec184906f2c44ee332431f219b78359d",
      "parents": [
        "b1758cf8cd007bfffb3d8adceca25f3b0c82bd77"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 02 18:31:26 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 02 19:07:57 2012 -0700"
      },
      "message": "Add APIs for interacting across users.\n\n- Expose the existing Context.sendBroadcast() as\n  Context.sendBroadcastAsUser().\n- Add new android:singleUser attribute for services.\n- Add new INTERACT_ACROSS_USERS_FULL permission for full\n  system-level access to cross-user interface (allows\n  sendBroadcastAsUser() to send to any receiver).\n- Add new INTERACT_ACROSS_USERS_FULL permission for\n  more restricted cross-user interaction: this is required\n  for android:singleUser, and allows you to use\n  sendBroadcastAsUser() but only to send to your own\n  receivers.\n\nChange-Id: I0de88f6718e9505f4de72e3f45d29c0f503b76e9\n"
    },
    {
      "commit": "24713907fe4632d263aea82f7a35c8fb08918a09",
      "tree": "fbf80caed2388c579d64b20b86b9b9f2586b1640",
      "parents": [
        "26ea2e5df58edfd14717c86854f6bb99975b6a77"
      ],
      "author": {
        "name": "rich cannings",
        "email": "richc@google.com",
        "time": "Thu Jul 26 14:07:53 2012 -0700"
      },
      "committer": {
        "name": "rich cannings",
        "email": "richc@google.com",
        "time": "Thu Aug 02 11:26:47 2012 -0700"
      },
      "message": "Pass URLs to package verifiers\n\nThis change passes the originating URL and accompanied referrer to\npackage verifiers, when available.\n\nBug: 6544677\nChange-Id: If9ff6663ad7f3426b7aea2aceb1413b689788138\n"
    },
    {
      "commit": "54da5b5d683e27924eb6573f544616bc217c6c37",
      "tree": "4119fcb5207d036ed1b5e19d7edc7cdf8e289781",
      "parents": [
        "08b7e78597b06b3801d909c9e9ca1538ed9fc355",
        "dd4448ef6807f096cdfdf632857baefd7cbc85ec"
      ],
      "author": {
        "name": "Scott Main",
        "email": "smain@google.com",
        "time": "Wed Jul 25 15:05:39 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jul 25 15:05:39 2012 -0700"
      },
      "message": "am dd4448ef: am 32189e26: Merge \"misc doc bug fixes\" into jb-dev\n\n* commit \u0027dd4448ef6807f096cdfdf632857baefd7cbc85ec\u0027:\n  misc doc bug fixes\n"
    },
    {
      "commit": "ddd88726a247e4100cb62b3dc9d0887ca2ae2ec4",
      "tree": "30361d5e73963eaea11100a01fbc7f6e69daae90",
      "parents": [
        "75bea2e8d35044233ba892bedf102ed08406d653",
        "71930dd77e4dc6f6be5c648019d2ab0da5f0584c"
      ],
      "author": {
        "name": "Jeff Smith",
        "email": "whydoubt@yahoo.com",
        "time": "Wed Jul 25 15:05:23 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jul 25 15:05:23 2012 -0700"
      },
      "message": "am 71930dd7: am a45746ef: Fix several cases of broken droiddoc syntax external issue 35214\n\n* commit \u002771930dd77e4dc6f6be5c648019d2ab0da5f0584c\u0027:\n  Fix several cases of broken droiddoc syntax external issue 35214\n"
    },
    {
      "commit": "32189e260c8dee27d561bf67c0333c9b9927636b",
      "tree": "74a4554bc31dd755c575aef22bf3328c58f724b7",
      "parents": [
        "c524ca275add1c84ef4e1e5c105058f44cac5efb",
        "fe3b1cb27dd7ded1358bf3c4cc047de97158ed1e"
      ],
      "author": {
        "name": "Scott Main",
        "email": "smain@google.com",
        "time": "Wed Jul 25 11:52:51 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 25 11:52:51 2012 -0700"
      },
      "message": "Merge \"misc doc bug fixes\" into jb-dev"
    },
    {
      "commit": "a45746efadd11bb7dfab026fb3c81a25fae74ca4",
      "tree": "9875e997b80cf5a43b7e6ba8bb3615a17bda6c8f",
      "parents": [
        "2f5b61a750e36169e37788a645f422cc8a8f7091"
      ],
      "author": {
        "name": "Jeff Smith",
        "email": "whydoubt@yahoo.com",
        "time": "Thu Jul 19 14:19:24 2012 -0500"
      },
      "committer": {
        "name": "Scott Main",
        "email": "smain@google.com",
        "time": "Wed Jul 25 10:49:25 2012 -0700"
      },
      "message": "Fix several cases of broken droiddoc syntax\nexternal issue 35214\n\npatch contributed by Jeff Smith \u003cwhydoubt@yahoo.com\u003e\n\nChange-Id: I70dcee88a140699bf3e1ab369bed6dcd2fdd3d83\n"
    },
    {
      "commit": "fe3b1cb27dd7ded1358bf3c4cc047de97158ed1e",
      "tree": "d9c73abd71705a5b2f57e47593ce1e18b7109164",
      "parents": [
        "4eb6973bc1f8cd51a2466708b227fb51314ad0c1"
      ],
      "author": {
        "name": "Scott Main",
        "email": "smain@google.com",
        "time": "Tue Jul 24 18:13:11 2012 -0700"
      },
      "committer": {
        "name": "Scott Main",
        "email": "smain@google.com",
        "time": "Tue Jul 24 18:13:11 2012 -0700"
      },
      "message": "misc doc bug fixes\n\nChange-Id: I68963d79422e5cedb1726e91e9639860b13a2471\n"
    },
    {
      "commit": "adba6ffbb949e3644f0effdaffee349b0b49688a",
      "tree": "ee6332da1ea3b485161d1572fce290476bfd0976",
      "parents": [
        "a72d0dd4446c14ea7803244f99454cad841084ba",
        "101a120c27f68fb7d44e6221244cb9441dfc4285"
      ],
      "author": {
        "name": "Scott Main",
        "email": "smain@google.com",
        "time": "Fri Jun 22 13:35:52 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jun 22 13:35:52 2012 -0700"
      },
      "message": "am 101a120c: am 9be0105f: docs: fix several links\n\n* commit \u0027101a120c27f68fb7d44e6221244cb9441dfc4285\u0027:\n  docs: fix several links\n"
    },
    {
      "commit": "9be0105fbc56eb1b1813bb7c5fe258a144867a43",
      "tree": "964727f4694bb224eacdaaa68320292aab85ffd3",
      "parents": [
        "3cd4624448dcaddecc75461ef645da72e7e5c098"
      ],
      "author": {
        "name": "Scott Main",
        "email": "smain@google.com",
        "time": "Fri Jun 22 12:35:08 2012 -0700"
      },
      "committer": {
        "name": "Scott Main",
        "email": "smain@google.com",
        "time": "Fri Jun 22 12:35:08 2012 -0700"
      },
      "message": "docs: fix several links\n\nChange-Id: I89d9fd64dc22c90680bb05415cc966c255165af9\n"
    },
    {
      "commit": "b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97a",
      "tree": "18d849f66b9abbe1519eeb2f4901ada5c5a80cbc",
      "parents": [
        "1c1ca050e19b98c21d5b964930c4fc6f0d9ae567"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Apr 18 18:02:48 2012 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Jun 12 18:18:29 2012 -0700"
      },
      "message": "Add an icon to the user information.\n\nStore the icon in the user folder under /data/system,\nsimilar to how the wallpaper is stored.\n\nChange-Id: Id8ccb55b9e2ba7b4c557505a7f69f04eca1518cf\n"
    },
    {
      "commit": "ce783749b191a58e4fed9a397066376915c1db65",
      "tree": "fe7bbae9d9db880b5e69d82d96cdffa5d4040ed9",
      "parents": [
        "b042f2d9908e20852e4077878e50a0c07b8eee79",
        "f3b4c93e0da9af2db9e16864faa734cf70fecfe3"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue May 29 15:57:52 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue May 29 15:57:52 2012 -0700"
      },
      "message": "am f3b4c93e: am ae5811c7: Merge \"Fix (mostly) issue #5109947: Race condition between retrieving a...\" into jb-dev\n\n* commit \u0027f3b4c93e0da9af2db9e16864faa734cf70fecfe3\u0027:\n  Fix (mostly) issue #5109947: Race condition between retrieving a...\n"
    },
    {
      "commit": "6ae8d1821822296df0606c9cd1c46708cc21cb58",
      "tree": "eb4b17b255b1f0e78078923474afcaad67755f12",
      "parents": [
        "3dac02265e42bf176e26b83da430ce15d6fd06df"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed May 23 13:12:42 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue May 29 13:33:09 2012 -0700"
      },
      "message": "Fix (mostly) issue #5109947: Race condition between retrieving a...\n\n...content provider and updating its oom adj\n\nThis introduces the concept of an \"unstable\" reference on a content\nprovider.  When holding such a reference (and no normal stable ref),\nthe content provider dying will not cause the client process to be\nkilled.\n\nThis is used in ContentResolver.query(), .openAssetFileDescriptor(),\nand .openTypedAssetFileDescriptor() to first access the provider\nwith an unstable reference, and if at the point of calling into the\nprovider we find it is dead then acquiring a new stable reference\nand doing the operation again.  Thus if the provider process dies\nat any point until we get the result back, our own process will not\nbe killed and we can safely retry the operation.\n\nArguably there is still the potential for a race -- if somehow the\nprovider is killed way late by the OOM killer after the query or\nopen has returned -- but this should now be *extremely* unlikely.\nWe also continue to have the issue with the other calls, but these\nare much less critical, and the same model can\u0027t be used there (we\nwouldn\u0027t want to execute two insert operations for example).\n\nThe implementation of this required some significant changes to the\nunderlying plumbing of content providers, now keeping track of the\ntwo different reference counts, and managing them appropriately.  To\nfacilitate this, the activity manager now has a formal connection\nobject for a client reference on a content provider, which hands to\nthe application when opening the provider.\n\nThese changes have allowed a lot of the code to be cleaned up and\nsubtle issues closed.  For example, when a process is crashing, we\nnow have a much better idea of the state of content provider clients\n(olding a stable ref, unstable ref, or waiting for it to launch), so\nthat we can correctly handle each of these.\n\nThe client side code is also a fair amount cleaner, though in the\nfuture there is more than should be done.  In particular, the two\nProviderClientRecord and ProviderRefCount classes should be combined\ninto one, part of which is exposed to the ContentResolver internal\nAPI as a reference on a content provider with methods for updating\nreference counts and such.  Some day we\u0027ll do that.\n\nChange-Id: I87b10d1b67573ab899e09ca428f1b556fd669c8c\n"
    },
    {
      "commit": "1b953b8fbfb510a968259ad78d86399bde8bc292",
      "tree": "f933e98e804af3f72bf6525e9029512555271e32",
      "parents": [
        "be2dca02c4bcb4a86df8ab279724e63213b4e034",
        "a0b2786304a83f6083423b1996f675dc08e48a56"
      ],
      "author": {
        "name": "Brett Chabot",
        "email": "brettchabot@android.com",
        "time": "Fri May 11 11:14:42 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 11 11:14:42 2012 -0700"
      },
      "message": "Merge \"Delete duplicate copies of junit source.\""
    },
    {
      "commit": "652b6d1e591f6684cda4b93d4712920f287991b4",
      "tree": "5ffe183aa2cbe66c8b8b89e8f3a809e4e7f4c603",
      "parents": [
        "a53de0629f3b94472c0f160f5bbe1090b020feab"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed May 09 18:18:40 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed May 09 18:18:40 2012 -0700"
      },
      "message": "Add infrastructure for accessing \"unstable\" content providers.\n\nWe have an API and some stuff that purports to this, but no real\nimplementation yet.\n\nChange-Id: I93555440014a50fdf79fa3f65318d90fb82265b4\n"
    },
    {
      "commit": "a0b2786304a83f6083423b1996f675dc08e48a56",
      "tree": "83bf908483a73dfe174c4ecafb1e4f4060607afb",
      "parents": [
        "aaee2e77256882874806d4d1cd46b0a649e7c40f"
      ],
      "author": {
        "name": "Brett Chabot",
        "email": "brettchabot@android.com",
        "time": "Wed May 09 18:08:31 2012 -0700"
      },
      "committer": {
        "name": "Brett Chabot",
        "email": "brettchabot@android.com",
        "time": "Wed May 09 18:08:31 2012 -0700"
      },
      "message": "Delete duplicate copies of junit source.\n\nBug 5826326\n\nChange-Id: Ie361b3778076686c5a59d8392aadb8c86a9ae981\n"
    },
    {
      "commit": "947f1c8db00bd3805838ff49a5f4d220df507b47",
      "tree": "706e6101ae3e5bfb31b505d11e429256e33580cd",
      "parents": [
        "6d6d186cd1a5df5fff73c8a731a81a9da3fea13b",
        "a7771df3696954f0e279407e8894a916a7cb26cc"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue May 08 10:51:12 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue May 08 10:51:12 2012 -0700"
      },
      "message": "Merge \"Move CancellationSignal to android.os package.\" into jb-dev"
    },
    {
      "commit": "a7771df3696954f0e279407e8894a916a7cb26cc",
      "tree": "3615be79c515fad41808d2b84ac0221ba5a7e299",
      "parents": [
        "507f5586fb48f59f7b4f2fa0ca5387e4d4f2bd8d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon May 07 20:06:46 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon May 07 20:06:46 2012 -0700"
      },
      "message": "Move CancellationSignal to android.os package.\n\nBug: 6427830\nChange-Id: I39451bb1e1d4a8d976ed1c671234f0c8c61658dd\n"
    },
    {
      "commit": "ceb1b0bfaea56251796b08c07b963de7403d84eb",
      "tree": "fea73b05f6b4d47da174eca362693958cf5d785a",
      "parents": [
        "476b03b0c0d5cae4d1b114c6f80858d59ba36cad"
      ],
      "author": {
        "name": "Anonymous Coward",
        "email": "nobody@android.com",
        "time": "Tue Apr 24 10:35:16 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon May 07 16:34:49 2012 -0700"
      },
      "message": "Add encryption parameters to package installation\n\nChange-Id: Ic9f8ab9f8110f08bb3c00725cfce5b8ee7b766f3\n"
    },
    {
      "commit": "f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03f",
      "tree": "5a3201faabf8ba048dcf5fb371900c15b4077f22",
      "parents": [
        "9766937ba57ca80977a68c681fdd4e46b6e1fd81"
      ],
      "author": {
        "name": "Brett Chabot",
        "email": "brettchabot@android.com",
        "time": "Mon Jan 30 11:29:54 2012 -0800"
      },
      "committer": {
        "name": "Brett Chabot",
        "email": "brettchabot@android.com",
        "time": "Wed Apr 11 19:01:30 2012 -0700"
      },
      "message": "Upgrade junit.runner classes to their JUnit4.10 implementation.\n\nBug 5826326\n\nChange-Id: If7e4c48a4369c1056dee5a2049c891bb6ab7d8d0\n"
    },
    {
      "commit": "87571b75e6560d33b8de7ca04801612a20a04d98",
      "tree": "34168684a354f369557dc324f440269aa220f1b9",
      "parents": [
        "5eeee5e0bbf5aba0097a510b3e9dbb286b2b30cd"
      ],
      "author": {
        "name": "Brian Muramatsu",
        "email": "btmura@google.com",
        "time": "Tue Apr 03 11:46:56 2012 -0700"
      },
      "committer": {
        "name": "Brian Muramatsu",
        "email": "btmura@google.com",
        "time": "Tue Apr 03 11:46:56 2012 -0700"
      },
      "message": "Try Alternate Constructor for Single Method Tests\n\nSome tests do not have a no argument constructor. If they don\u0027t\nhave one, then try a constructor with a String argument. A lot\nof CTS tests from open source projects have different practices\nand may not have a no arg constructor.\n\nChange-Id: I87c490c22347a2f4b03c3125308be0d2259f9208\n"
    },
    {
      "commit": "135936072b24b090fb63940aea41b408d855a4f3",
      "tree": "c10e6a7642df4246937bb6fbd7277b642daf3eee",
      "parents": [
        "0c44525a4888de321c9497204d59c8515f828499"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Mar 22 16:16:17 2012 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Mar 27 11:23:01 2012 -0700"
      },
      "message": "User management and switching\n\nBroadcast intents that get sent out when users are added/removed/switched.\n\nMore work on generating user-specific information in package manager queries.\nAPIs to update user name and query a user by id.\nRemoved Package.mSetStopped and mSetEnabled, since they\u0027re not user specific.\n\nUser removal:\n- Cleanup ActivityManager, PackageManager, WallpaperManager, AppWidgetService\n  and AccountManager.\n- Shutdown processes belonging to the user.\n\nDon\u0027t show vibrate option in long-press power if there\u0027s no vibrator.\n\nLock the screen when switching users, to force unlocking.\n\nChange-Id: Ib23a721cb75285eef5fd6ba8c7272462764038fa\n"
    },
    {
      "commit": "b2e822fc2ac87703ac12d062add62408574cbf7c",
      "tree": "97331fe0183386e7081355a5879c44ed5697d025",
      "parents": [
        "60c116e2a6dcc4cbdf5f5f168c57e2dea0839779"
      ],
      "author": {
        "name": "David Hu",
        "email": "hud@google.com",
        "time": "Mon Mar 19 21:03:35 2012 -0700"
      },
      "committer": {
        "name": "David Hu",
        "email": "hud@google.com",
        "time": "Mon Mar 19 21:03:35 2012 -0700"
      },
      "message": "Remove unused BandwidthTestRunner\n\nChange-Id: I5d77682cf662cc88e3d182501c78bb77805e74d1\n"
    },
    {
      "commit": "ca4aab9cd724708af30abb4bfcb2f9b45087f449",
      "tree": "b39154026ba138251e979556f83810965e0f17c9",
      "parents": [
        "bf02b984738f6be5cc2e2d66b12aff7af99eb79e"
      ],
      "author": {
        "name": "David Hu",
        "email": "hud@google.com",
        "time": "Wed Mar 14 15:43:46 2012 -0700"
      },
      "committer": {
        "name": "David Hu",
        "email": "hud@google.com",
        "time": "Mon Mar 19 18:33:58 2012 -0700"
      },
      "message": "BandwidthTestCase\n\nA test case that measures bandwidth metrics when annotated with\nandroid.test.BandwidthTest and adds the metrics to the status bundle\n\nChange-Id: I085110c66c7fcf651aefeeac3d4cdf5bd438ff67\n"
    },
    {
      "commit": "a4972e951bf2bdb7afdafee95b3ab0c15b8bacae",
      "tree": "9800a9dcd62d945a8ad71549ebcef70393ef5442",
      "parents": [
        "89ea4ca9c26f3c7e365525a0b83500e85517a457"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Mar 14 10:38:05 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Mar 14 12:57:14 2012 -0700"
      },
      "message": "Add new \"options\" argument to all startActivity APIs.\n\nThis will be used to allow new features to be requested...  such as,\nsay, a special kind of animation.  Right now there are no options\ndefined.\n\nChange-Id: I4eb6f27275cdd4bf186f6da316ab93a2372ad4b7\n"
    },
    {
      "commit": "e639da7baa23121e35aa06d6e182558e0e755696",
      "tree": "7d956fc301eb1988a8646ff3a62786639a843da0",
      "parents": [
        "b8678d76c3e09d0d65255f3971b6112a48e19099"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 21 15:11:13 2012 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Feb 23 16:39:15 2012 -0800"
      },
      "message": "New development permissions.\n\nThese are permissions that an application can request, but won\u0027t\nnormally be granted.  To have the permission granted, the user\nmust explicitly do so through a new \"adb shell pm grant\" command.\n\nI put these permissions in the \"development tools\" permission\ngroup.  Looking at the stuff there, I think all of the permissions\nwe already had in that group should be turned to development\npermissions; I don\u0027t think any of them are protecting public APIs,\nand they are really not things normal applications should use.\n\nThe support this, the protectionLevel of a permission has been\nmodified to consist of a base protection type with additional\nflags.  The signatureOrSystem permission has thus been converted\nto a signature base type with a new \"system\" flag; you can use\n\"system\" and/or \"dangerous\" flags with signature permissions as\ndesired.\n\nThe permissions UI has been updated to understand these new types\nof permissions and know when to display them.  Along with doing\nthat, it also now shows you which permissions are new when updating\nan existing application.\n\nThis also starts laying the ground-work for \"optional\" permissions\n(which development permissions are a certain specialized form of).\nCompleting that work requires some more features in the package\nmanager to understand generic optional permissions (having a\nfacility to not apply them when installing), along with the\nappropriate UI for the app and user to manage those permissions.\n\nChange-Id: I6571785c6bb5f6b291862b7a9be584885f88f3a5\n"
    },
    {
      "commit": "67cf7d314b5b94db1a9f1c57140b6615b0ea8291",
      "tree": "2de67be8b686a2909a93f2aca89ec7e2328597bc",
      "parents": [
        "8181201c6e55765fd58d2ff07921a143b879edd9"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Feb 16 14:31:23 2012 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Feb 16 15:03:42 2012 -0800"
      },
      "message": "Fix Power Control widget\n\nSome changes in AppWidgetService were interfering with widget permissions.\n\nAdded some hidden methods in Context to communicate the requesting user\ninformation instead of using the calling uid.\n\nBug: 6019296\nChange-Id: I5e519fd3fbbfa5b3fcc5c297b729c671dac8e7c7\n"
    },
    {
      "commit": "37ce3a8af6faab675319d0803b288ab1dddc76be",
      "tree": "4619ebc854dc7c5ebe641bc915599ab6715deed9",
      "parents": [
        "11ca31729c05a5c82aa298fb52ddebbe08a26627"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Feb 06 12:04:42 2012 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Feb 10 14:34:07 2012 -0800"
      },
      "message": "Multi-user - wallpaper service\n\n- Allow each user to have their own wallpaper (live or static).\n- Migrate old wallpaper on upgrade.\n- Update SystemBackupAgent to backup/restore from primary user\u0027s\n  new wallpaper directory.\n\nReduce dependency on Binder.getOrigCallingUser() by passing the\nuserId for bindService.\n\nChange-Id: I19c8c3296d3d2efa7f28f951d4b84407489e2166\n"
    },
    {
      "commit": "4c1241df8f8b7fd5ec3dff6c7e0f66271248e76e",
      "tree": "36df1bce8fe7295d0ab778ca519232a291a3294f",
      "parents": [
        "8ca8a69d5801ad4b809e7b9dbf53bd728820924b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Feb 02 17:05:00 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Feb 02 18:02:16 2012 -0800"
      },
      "message": "Rename CancellationSignal using preferred spelling.\n\nBug: 5943637\nChange-Id: I12a339f285f4db58e79acb5fd8ec2fc1acda5265\n"
    },
    {
      "commit": "75ea64fc54f328d37b115cfb1ded1e45c30380ed",
      "tree": "4254a5d2d0662de8b606b38fea6987da17c130e3",
      "parents": [
        "ebc016c01ea9d5707287cfc19ccc59b21a486c00"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jan 25 19:37:13 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jan 27 17:33:21 2012 -0800"
      },
      "message": "Implement a cancelation mechanism for queries.\n\nAdded new API to enable cancelation of SQLite and content provider\nqueries by means of a CancelationSignal object.  The application\ncreates a CancelationSignal object and passes it as an argument\nto the query.  The cancelation signal can then be used to cancel\nthe query while it is executing.\n\nIf the cancelation signal is raised before the query is executed,\nthen it is immediately terminated.\n\nChange-Id: If2c76e9a7e56ea5e98768b6d4f225f0a1ca61c61\n"
    },
    {
      "commit": "0df0ed5814a83c4cf0dd3d6d6e177f5ed9003863",
      "tree": "6bae98f9f7102bfa2866db8a10f0c28e826a5db9",
      "parents": [
        "4b4d00e7149f11c84614d8cc98ae7bff21dbd960",
        "8cc9a8e132ebbf852e055ed17ab91f35b02fd974"
      ],
      "author": {
        "name": "David Hu",
        "email": "hud@google.com",
        "time": "Thu Jan 05 14:39:45 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 05 14:39:45 2012 -0800"
      },
      "message": "Merge \"BandwidthTestRunner\""
    },
    {
      "commit": "3aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45",
      "tree": "7600f58de48f6764d476cc9d6a92ed0a5dddf278",
      "parents": [
        "8f04ae361cd34fdaea41fbedefb85cff2c684e36"
      ],
      "author": {
        "name": "Joe Fernandez",
        "email": "joefernandez@google.com",
        "time": "Tue Dec 20 10:38:34 2011 -0800"
      },
      "committer": {
        "name": "Joe Fernandez",
        "email": "joefernandez@google.com",
        "time": "Thu Dec 22 15:08:23 2011 -0800"
      },
      "message": "docs: Add developer guide cross-references, Project ACRE, round 4\n\nChange-Id: I1b43414aaec8ea217b39a0d780c80a25409d0991\n"
    },
    {
      "commit": "8cc9a8e132ebbf852e055ed17ab91f35b02fd974",
      "tree": "2f696bc3ca9dd9bd7b2e1317306ed57aa6bba0ee",
      "parents": [
        "b2bf2471b1f0b4a76660e63f91a8de84cc643da8"
      ],
      "author": {
        "name": "David Hu",
        "email": "hud@google.com",
        "time": "Tue Dec 13 15:57:42 2011 -0800"
      },
      "committer": {
        "name": "David Hu",
        "email": "hud@google.com",
        "time": "Wed Dec 14 22:43:58 2011 -0800"
      },
      "message": "BandwidthTestRunner\n\nAdded BandwidthTest annotation and BandwidthTestRunner to start\nand stop the network traffic profiler\n\nChange-Id: Id29ac21ab99ff36bd864121276db59b61eb6e154\n"
    },
    {
      "commit": "d2183654e03d589b120467f4e98da1b178ceeadb",
      "tree": "c52368d929521fd0d7182dc3cf53f8e4b37ed25f",
      "parents": [
        "1d8e7d640ad5ed6fe82bca017293dd89169f1c2e"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Oct 09 12:39:53 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Oct 09 22:10:36 2011 -0700"
      },
      "message": "Fix ownership of CursorWindows across processes.\nBug: 5332296\n\nEnsure that there is always an owner for each CursorWindow\nand that references to each window are acquired/released\nappropriately at all times.\n\nAdded synchronization to CursorToBulkCursorAdaptor to\nprevent the underlying Cursor and CursorWindow from being\nremotely accessed in ways that might violate invariants,\nresulting in leaks or other problems.\n\nEnsured that CursorToBulkCursorAdaptor promptly releases\nits references to the Cursor and CursorWindow when closed\nso they don\u0027t stick around longer than they should, even\nif the remote end hangs onto the IBulkCursor for some reason.\n\nCursorWindow respects Parcelable.FLAG_WRITE_RETURN_VALUE\nas an indication that one reference to the CursorWindow is\nbeing released.  Correspondingly, CursorToBulkCursorAdaptor\nacquires a reference to the CursorWindow before returning\nit to the caller.  This change also prevents races from\nresulting in the transfer of an invalid CursorWindow over\nthe wire.\n\nEnsured that BulkCursorToCursorAdaptor promptly releases\nits reference to the IBulkCursor when closed and throws\non attempts to access the cursor while closed.\n\nModified ContentProviderNative to handle both parts of\nthe wrapping and unwrapping of Cursors into IBulkCursors.\nThis makes it a lot easier to ensure that the right\nthings happen on both ends.  Also, it turns out that\nthe only caller of IContentProvider.bulkQuery was\nContentProviderNative itself so there was no need\nto support bulkQuery on ContentProviderProxy and it was\njust getting in the way.\n\nImplement CloseGuard on CursorWindow.\n\nChange-Id: Ib3c8305d3cc62322f38a06698d404a2989bb6ef9\n"
    },
    {
      "commit": "05ca4c90644921df9193d92b2abdc81ef77e4a62",
      "tree": "94c9e61b0c3d364f68a194c0a65199451410fc35",
      "parents": [
        "15bbaeb0753f5336a5e8ee07e6f796657ecefb73"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Sep 15 10:36:25 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Sep 23 16:03:03 2011 -0700"
      },
      "message": "Allow non-required package verifiers\n\n* Verifiers can be specified in the AndroidManifest.xml\n\n* Those verifiers can respond to the new Intent action\n\n* PackageManager API for those verifiers: verifyPendingInstall\n\nChange-Id: I4892bce2e6984871e6e93c60a1ca0dae145f5df5\n"
    },
    {
      "commit": "0d3647dc00849872ec5e18cce8ffe0e6ae02dd47",
      "tree": "96f042c5efd1667b326065c0b348215ca43e633f",
      "parents": [
        "67ceaf3e83d29ca69708a3ae94f5e7797bef4ca6",
        "9c711282ad234e104c34eb4408d85fc1bb149ded"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Sep 21 18:56:52 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Sep 21 18:56:52 2011 -0700"
      },
      "message": "am 9c711282: Merge \"Unhide new PackageManager APIs for API 14\" into ics-factoryrom\n\n* commit \u00279c711282ad234e104c34eb4408d85fc1bb149ded\u0027:\n  Unhide new PackageManager APIs for API 14\n"
    },
    {
      "commit": "3a9b5fbb97e65019abec97f172b4cbf2100d1225",
      "tree": "7cc787f92fc2071fd8e1050df13c351c616757be",
      "parents": [
        "ee0835b95de225fdc34d45b777b4595d01727a40"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Sep 20 14:15:38 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Sep 20 14:35:10 2011 -0700"
      },
      "message": "Unhide new PackageManager APIs for API 14\n\nChange-Id: I83110285ccee39a4cd872a1c2af8357f541833d4\n"
    },
    {
      "commit": "97567340a4194070ffefe6249e3ae5ba4e458e70",
      "tree": "49cf3cce462fbb5be25ba124cee15ac79b0341b7",
      "parents": [
        "e0d558ac92cd9e550b3d08bf09d9bb12c2a506c6",
        "cbc584d7ebe332f78bf8012d21265ccb482c7cfc"
      ],
      "author": {
        "name": "David Hu",
        "email": "hud@google.com",
        "time": "Mon Sep 19 12:11:11 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Sep 19 12:11:11 2011 -0700"
      },
      "message": "Merge \"Return the bundle object\""
    },
    {
      "commit": "cbc584d7ebe332f78bf8012d21265ccb482c7cfc",
      "tree": "532d575f3d2347e087fce4d7b0ce5cf6679374bd",
      "parents": [
        "2f2eea704ef82878c7aa909a1f7dbdf19851b0fb"
      ],
      "author": {
        "name": "David Hu",
        "email": "hud@google.com",
        "time": "Fri Sep 16 18:08:35 2011 -0700"
      },
      "committer": {
        "name": "David Hu",
        "email": "hud@google.com",
        "time": "Mon Sep 19 11:33:45 2011 -0700"
      },
      "message": "Return the bundle object\n\nAdded the ability for the test runner to return the bundle object\nso the tests can get access to input arguments\n\nChange-Id: I73a704bb2279238bd91a376aacecbe5f607af649\n"
    },
    {
      "commit": "0aaa0d931716e9f57a1d84d795fab2df75092756",
      "tree": "0ada5a585584199d757e73e891ef77960d3a5280",
      "parents": [
        "2f2eea704ef82878c7aa909a1f7dbdf19851b0fb"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Sep 12 16:42:55 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Sep 13 16:02:43 2011 -0700"
      },
      "message": "Add verifier device identity\n\nThis adds a special device identifier that is usable only for device\nvalidation. The user will be presented with this number encoded in\neasily-transcribable Base32 in the Developer options of Settings.\n\nChange-Id: I4843f55ee90d689a51d0269b22454ca04c1be7ec\n"
    },
    {
      "commit": "c69efa5efce6d9a820f8902ca62305cddea163e6",
      "tree": "bc78a9cc5fb6fa960145892e8b92bc52300126bd",
      "parents": [
        "ccccb505abb1fb16d349e80d03edfde3c6775202"
      ],
      "author": {
        "name": "Jesse Wilson",
        "email": "jessewilson@google.com",
        "time": "Wed Sep 07 14:51:40 2011 -0400"
      },
      "committer": {
        "name": "Jesse Wilson",
        "email": "jessewilson@google.com",
        "time": "Wed Sep 07 14:52:12 2011 -0400"
      },
      "message": "Remove frameworks\u0027 reference to an obsolete Bouncycastle keystore file.\n\nWithout this, some SSL code fails with an exception:\njava.io.FileNotFoundException: /system/etc/security/cacerts.bks: open failed: ENOENT (No such file or directory)\nat libcore.io.IoBridge.open(IoBridge.java:410)\nat java.io.FileInputStream.\u003cinit\u003e(FileInputStream.java:78)\nat java.io.FileInputStream.\u003cinit\u003e(FileInputStream.java:105)\nat org.apache.harmony.xnet.provider.jsse.DefaultSSLContextImpl.getTrustManagers(DefaultSSLContextImpl.java:115)\nat org.apache.harmony.xnet.provider.jsse.SSLContextImpl.\u003cinit\u003e(SSLContextImpl.java:71)\nat org.apache.harmony.xnet.provider.jsse.OpenSSLContextImpl.\u003cinit\u003e(OpenSSLContextImpl.java:34)\nat org.apache.harmony.xnet.provider.jsse.DefaultSSLContextImpl.\u003cinit\u003e(DefaultSSLContextImpl.java:59)\nat java.lang.Class.newInstanceImpl(Native Method)\nat java.lang.Class.newInstance(Class.java:1319)\nat java.security.Provider.newInstance(Provider.java:989)\n... 15 more\nCaused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)\nat libcore.io.Posix.open(Native Method)\nat libcore.io.BlockGuardOs.open(BlockGuardOs.java:98)\nat libcore.io.IoBridge.open(IoBridge.java:393)\n... 24 more\n\nChange-Id: I91de30746c1355ff9e0c2a9479392a50fe45aa23\n"
    },
    {
      "commit": "5ab2157bf1f105b02d3e2913cd3a33f9765b74ca",
      "tree": "5c2241ddca3526545b73472ed0006eaba0439da1",
      "parents": [
        "dd7bc9f457204e60feeea53b0b12ba706d6964df"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Jul 27 11:11:19 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Aug 15 17:26:31 2011 -0700"
      },
      "message": "Infrastructure to support package verifier\n\nAllow a package verifier to approve or disapprove of a package being\ninstalled.\n\nChange-Id: Ibfea0f2b1aaa4ab1589a4e59f96144702b9bf94b\n"
    },
    {
      "commit": "3fe3f7328fb4a6f5e067eedc76086dd7b44ffc25",
      "tree": "789a9f5a6ef0aff93a9477dcaf09732c39af62c2",
      "parents": [
        "f382dc2d97e22f6bcce7aa8250d797edc616719e"
      ],
      "author": {
        "name": "Rodrigo Damazio Bovendorp",
        "email": "rdamazio@google.com",
        "time": "Mon Aug 01 17:10:58 2011 -0300"
      },
      "committer": {
        "name": "Rodrigo Damazio Bovendorp",
        "email": "rdamazio@google.com",
        "time": "Mon Aug 01 17:10:58 2011 -0300"
      },
      "message": "Fixing initialization cleanup in activity instrumentation test case\n\nChange-Id: I798fed657ccdc27430edc07d1e911b34c45426b5\n"
    },
    {
      "commit": "877d428e39200fc5f289bfc88d67069cf7b9662a",
      "tree": "222cfa3b427254bf8cd0159c0669fb85a89b8afe",
      "parents": [
        "287bd83f9ea257594e0d483d3851236139e5744e"
      ],
      "author": {
        "name": "Brett Chabot",
        "email": "brettchabot@android.com",
        "time": "Wed Jun 01 18:38:44 2011 -0700"
      },
      "committer": {
        "name": "Brett Chabot",
        "email": "brettchabot@android.com",
        "time": "Wed Jun 01 20:03:39 2011 -0700"
      },
      "message": "Test runner cleanup: delete unused old classes.\n\nChange-Id: Iaaabd47d4074f936a811fc1b6575088d70842564\n"
    },
    {
      "commit": "44bc17c6b517aef35a390c81b5aa79c4f284f744",
      "tree": "b4dabc94a8974f81cf7ea855a93e307205c5b8d7",
      "parents": [
        "52c03d2cb9a782366e804d1910a7c8f072b05353"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Apr 20 18:18:51 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Apr 21 15:17:52 2011 -0700"
      },
      "message": "Rework display size access.\n\nApplications now get the display size from the window manager.  No\nbehavior should be changed yet, this is just prep for some real\nchanges.\n\nChange-Id: I2958a6660895c1cba2b670509600014e55ee9273\n"
    },
    {
      "commit": "beb182a4945b9b762fac77edd1183897bcac5b32",
      "tree": "5cdfa5875008f47169652eaef2fee0aedb15225c",
      "parents": [
        "37e344cbe277e8f4da944c19cffaf34f38f6396e",
        "4b2e934928a2eb65927bd39197198c28c49efb94"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Apr 11 12:14:17 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Apr 11 12:14:17 2011 -0700"
      },
      "message": "Merge \"Package manager changes to store and update user information.\""
    },
    {
      "commit": "4b2e934928a2eb65927bd39197198c28c49efb94",
      "tree": "52dedcaa4ef165954e6c7ec9dcd98c5b13442842",
      "parents": [
        "d07f6a7934d229e91d7ca23e83c664101f472312"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Mar 31 12:38:53 2011 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Apr 11 12:12:58 2011 -0700"
      },
      "message": "Package manager changes to store and update user information.\n\nSome API stubs for managing users and storing their details.\nList of users is stored in an xml file.\nEach user\u0027s properties are stored in a separate xml file.\n\nSome unit tests for modifying the XML files.\n\nChange-Id: If2ce2420723111bd426f6762def3c2afc19a0ae5\n"
    },
    {
      "commit": "43a17654cf4bfe7f1ec22bd8b7b32daccdf27c09",
      "tree": "a5aac88ebb367a0f046a5724edc8e35cbe192cb9",
      "parents": [
        "ea4af8914a3b6ea68558f20ce502966032ca1ab1"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Wed Apr 06 19:22:23 2011 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Thu Apr 07 19:23:05 2011 -0700"
      },
      "message": "Remove the deprecated things from Config.java. These haven\u0027t been working since before 1.0.\n\nChange-Id: Ic2e8fa68797ea9d486f4117f3d82c98233cdab1e\n"
    },
    {
      "commit": "08065b9f09ead8895d97b2971622af8c179e1768",
      "tree": "6bd821f0c111e72ea84f3e7f736e082800721a12",
      "parents": [
        "827107f4ec7d9a53d7bb6e4071858252f263fa8c"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Apr 01 15:49:41 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Apr 01 16:00:23 2011 -0700"
      },
      "message": "Tracking merge of dalvik-dev to master\n\ngit cherry-pick --no-commit  a80febd83c8bf0b6717da2a7136179bdc906a5b7\n\ngit cherry-pick --no-commit  5e642b41cf44c5da7afdd95ab3d5e2bdbf7b31dd\n\ngit cherry-pick --no-commit  4886db14c9eee4b6fee69bd54c57c5af04709c4c\n\ngit cherry-pick --no-commit  560c685e448769904047507b9484ce8111967d7e\n\ngit cherry-pick --no-commit  63dde7a2fcfa53dc531558635b64cea613d3cdb4\n\ngit cherry-pick --no-commit  74e5cb91060a379d98dd3a333b5f231bfb4f502e\n\ngit cherry-pick --no-commit  1cc8c9708b555e2e338b7798d38887a2fefcfea6\n\ngit cherry-pick --no-commit  09625a21f5abe0c0db15757f58585d552d62c3d7\n\ngit cherry-pick --no-commit  fcb02dfe0f5a2bb7c07e6d6fc69f756a484b5458\n\ngit cherry-pick --no-commit  a68cb7fa3ab42854768b8145ff85231663770292\n\ngit cherry-pick --no-commit  716beb1c131dd2c6b805d4f681debaa20075010c\n\ngit cherry-pick --no-commit  8c29b1097a7afe3a77e27546a56e396f3620a4ec\n\ngit cherry-pick --no-commit  9c6a1a55d1c8086c1cc57464eea43725694ff70c\n\ngit cherry-pick --no-commit  b14f5ea5c57acdd009ba5b51f1bbe430f3d353b8\n\nChange-Id: I8cc94175441b009e23549762d6baee1dbace4881\n"
    },
    {
      "commit": "71431bb5ca0d8d566d4ebd9d0bc7eb20950290dc",
      "tree": "ee723ebdccdc82fe04fc99a96f136934e7793530",
      "parents": [
        "b732b7b5e8192501360edc15fb8c6399d11fb97d",
        "79b66725b7755e403e10a9d073121789f09b1a9e"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Mon Feb 28 11:05:55 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Feb 28 11:05:55 2011 -0800"
      },
      "message": "am 79b66725: am 25be2c72: am e0537f18: Merge \"Fix of tearDown() in SingleLaunchActivityTestCase.\"\n\n* commit \u002779b66725b7755e403e10a9d073121789f09b1a9e\u0027:\n  Fix of tearDown() in SingleLaunchActivityTestCase.\n"
    },
    {
      "commit": "25be2c725eba1c94c7fc700e37b194fdcd83a1fb",
      "tree": "352ae9de626d92b0299616fc0f854919879a9777",
      "parents": [
        "6504490cde3ec5d48321d539e654d1f2072b33f9",
        "e0537f1859664ba9c9cf87eb9d6dc3c16986dbb8"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Mon Feb 28 10:15:46 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Feb 28 10:15:46 2011 -0800"
      },
      "message": "am e0537f18: Merge \"Fix of tearDown() in SingleLaunchActivityTestCase.\"\n\n* commit \u0027e0537f1859664ba9c9cf87eb9d6dc3c16986dbb8\u0027:\n  Fix of tearDown() in SingleLaunchActivityTestCase.\n"
    },
    {
      "commit": "7aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6",
      "tree": "153bab6076f6f309e4d3aa0ccf831d8c8ff492c7",
      "parents": [
        "7d9d8efebab9bda05cdb7733374723e1e3787d7c"
      ],
      "author": {
        "name": "Scott Main",
        "email": "smain@google.com",
        "time": "Tue Feb 08 11:25:01 2011 -0800"
      },
      "committer": {
        "name": "Scott Main",
        "email": "smain@google.com",
        "time": "Tue Feb 08 11:37:44 2011 -0800"
      },
      "message": "docs: fix links to revised fundamentals documents\n\nChange-Id: Ie2a660cce1d00f924c9fde5c6a00776307e5e1c7\n"
    },
    {
      "commit": "e8a534d8f0008e27f24016c5978ca0a5f0ecbce2",
      "tree": "47976c63dec66f7b25e9f55d8a6151bc2478bfa0",
      "parents": [
        "73fddbae964ee41895c8218454d0ed7fd71d6913"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Jan 17 13:12:23 2011 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Jan 17 13:13:37 2011 -0800"
      },
      "message": "Remove API that snuck into MockPackageManager\n\nWe didn\u0027t release the get/setPackageObbPath API, but it snuck into\nMockPackageManager. However, it is not usable as a developer anyway.\nRemoving it so it doesn\u0027t stay in the API forever.\n\nCherry-pick from gingerbread\n\nChange-Id: I2083a8f398d983d53661c33270854442e34f9bc9\n"
    },
    {
      "commit": "849dc24fa6a2bb6e1e5496c4710ee60c32abdb7f",
      "tree": "5c565286b72233f286c94ea9404e0f5401643013",
      "parents": [
        "e26aa3f78a33af5720e141e98a1ab0c77ef0456d",
        "524133cc793b5e372cc97c62653281605f57b5b3"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Jan 17 13:05:24 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jan 17 13:05:24 2011 -0800"
      },
      "message": "am 524133cc: Remove API that snuck into MockPackageManager\n\n* commit \u0027524133cc793b5e372cc97c62653281605f57b5b3\u0027:\n  Remove API that snuck into MockPackageManager\n"
    },
    {
      "commit": "a1cbb94dbc9a82d4eb3a47242fe161af21803858",
      "tree": "31e227475f199e3a1bdc34193f5e63b5645e47f1",
      "parents": [
        "db7f38673c33ba55801019007ff18fa4c57f75e0"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Jan 17 12:46:23 2011 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Jan 17 13:00:47 2011 -0800"
      },
      "message": "Revert \"Add the {get,set}PackageObbPaths calls to API\"\n\nThis reverts commit 5d40fe9c6846ba765072e50ed1254293cb9195e4.\n\nChange-Id: Ie41010c92fb860b19a12bcf63f6fe95ffa68da81\n"
    },
    {
      "commit": "524133cc793b5e372cc97c62653281605f57b5b3",
      "tree": "7d2ff33bb31ad9daa4a17ed5d79abe12626f36c2",
      "parents": [
        "34d2b41e48281d1df2c844e004740f008e699093"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Jan 17 12:40:57 2011 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Jan 17 12:40:57 2011 -0800"
      },
      "message": "Remove API that snuck into MockPackageManager\n\nWe didn\u0027t release the get/setPackageObbPath API, but it snuck into\nMockPackageManager. However, it is not usable as a developer anyway.\nRemoving it so it doesn\u0027t stay in the API forever.\n\nChange-Id: Ia569754691dc3a9f2672c1f25e4e08d780db6028\n"
    },
    {
      "commit": "e26aa3f78a33af5720e141e98a1ab0c77ef0456d",
      "tree": "064acf99973b68c4db14bfcfa863d8ddee8763b2",
      "parents": [
        "3392b8e23e7eb0275071af621802ed04c829c911",
        "34d2b41e48281d1df2c844e004740f008e699093"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Jan 17 12:23:43 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jan 17 12:23:43 2011 -0800"
      },
      "message": "am 34d2b41e: Revert \"Add the {get,set}PackageObbPaths calls to API\"\n\n* commit \u002734d2b41e48281d1df2c844e004740f008e699093\u0027:\n  Revert \"Add the {get,set}PackageObbPaths calls to API\"\n"
    },
    {
      "commit": "34d2b41e48281d1df2c844e004740f008e699093",
      "tree": "15bb723f523d330dd8eedb0d1ebd022637d2e1b6",
      "parents": [
        "4a2e478a5bf6b4650181d1dfa643eadcc387fcec"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Sun Jan 16 17:25:18 2011 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Jan 17 11:49:22 2011 -0800"
      },
      "message": "Revert \"Add the {get,set}PackageObbPaths calls to API\"\n\nThis reverts commit 6c4d904851772313930f800ac7c323cf90c709bb.\n\nGoing with a different tactic that doesn\u0027t dump stuff on\nPackageManagerService.\n\nBug: 3214719\nChange-Id: I0bbeccf3c21d264deda4256eb53713d2c98284f4\n"
    },
    {
      "commit": "805fd7ee0e5dc2939e85c84f78d9890a51982bc0",
      "tree": "e2487cd3d7917fa6a126463e2cc5771295544627",
      "parents": [
        "cf18c4788af740773c9b2720a1c4ed5f45454b8e"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Sun Jan 16 18:30:29 2011 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Sun Jan 16 18:43:04 2011 -0800"
      },
      "message": "Add API to get path to OBBs.\n\nAlso hide the bitmap thumbnail stuff, we can\u0027t support it in its\ncurrent form.\n\nAnd fix some bugs with propagating paths to native code.  Yikes!\n\nChange-Id: I13ab37ddbdba5c073489cba5eab035117d3c1574\n"
    },
    {
      "commit": "5d40fe9c6846ba765072e50ed1254293cb9195e4",
      "tree": "3fd67e01ffba461a5700262e32d155febba317d5",
      "parents": [
        "c69d5f3b536a56da9120ace34e05b9878ed164c6"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Jan 14 10:54:46 2011 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Jan 14 12:18:48 2011 -0800"
      },
      "message": "Add the {get,set}PackageObbPaths calls to API\n\nAdd getPackageObbPaths() and setPackageObbPaths() to the public API.\n\nBug: 3214719\nChange-Id: I8627b5f674a795d5780eb5c08911419110670a41\n"
    }
  ],
  "next": "470750793b6e930a323ee63cbed05c43dc435ba1"
}
