)]}'
{
  "log": [
    {
      "commit": "e752a5cc64b78f799525aa4e44e5f74e8c402465",
      "tree": "faac395cc63bde42799bfea8d6c018ee1963ad2e",
      "parents": [
        "98da46b723d515420261a4c04225cdec135ca98d"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Mon Jan 15 17:14:20 2018 -0800"
      },
      "committer": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Jan 16 21:38:32 2018 -0800"
      },
      "message": "No sensor access to idle UIDs - native framework\n\nIdle UIDs are ones that were in the background for long enough time.\nCurrently such apps can access sensor data even though they have no\nuser perceptible components running. This affects the user\u0027s privacy\nsince an app in the background can use sensor data to infer location,\nactivity, habits, etc.\n\nThe goal is to restrict sensor access for all apps in the ecosystem\nregardless of target SDK which means the solution should be backwards\ncompatible. At the high level the sesnor service observes UID state\nchanges and applies policy like this:\n\nContinuous sensors: for sensros in this reporting mode when the UID\ngoes in the background we will stop dispatching events. Once the UID\ngoes active we will start reporting the events. While this is an\napp visible behavior change we would rather do that vs delivering\nfake events.\n\nFlush events: there is no change in behavior based on the UID state.\nHence, idle apps can request a flush and would get the completion\ncallback. From an app perspective flushing works at any point.\n\nTrigger events: for sensors in this reporting mode when the UID\ngoes in the background we will not report any trigger events. From\nan app perspective the sensor just did not pick up any events.\n\nOn-change events: for sensors in this reporting mode when the UID\ngoes in the background we will not report any change events. From\nan app perspective the sensor just did not pick up any events.\n\nWake locks: since UIDs in idle state cannot acquire wakelocks we\nwill not be grabbing a wakelock on behalf of apps in that state.\n\nTest: Added - SensorTest#testSanitizedContinuousEventsUidIdle\n      Added - SensorTest#testBatchAndFlushUidIdle\n      Pass - cts-tradefed run cts-dev -m CtsSensorTestCases\n\nbug:63938985\n\nChange-Id: I156803610ad6d86afaae641ebbb0e84f16d2344b\n"
    },
    {
      "commit": "e2347b7953f70232541bdc1b392230d6231aaeb9",
      "tree": "1d73a0ad214dcbcdf8bae3d1dc1eebb83985575b",
      "parents": [
        "33dcaf9b52649785bff0c56b48f84a8218354888"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Mon Apr 25 15:41:05 2016 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Mon Apr 25 15:44:11 2016 -0700"
      },
      "message": "Fix google-explicit-constructor warnings.\n\nBug: 28341362\nChange-Id: I0ce850de85e0de6a5472dd142f738856142db9ec\n"
    },
    {
      "commit": "b412f6e203b38f8047f760261a5e3dc6d0722f08",
      "tree": "f4e06f90090581c0efcff50602145ff11d0ea753",
      "parents": [
        "61a3c8dec90acebef15ef56cae14efea69279f69"
      ],
      "author": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Wed Apr 29 16:50:41 2015 -0700"
      },
      "committer": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Fri May 01 13:51:45 2015 -0700"
      },
      "message": "Add body sensors app op - framework native\n\nChange-Id: I727a2bb1e28ae9158f2df9c74dd0aee977dfd47f\n"
    },
    {
      "commit": "f1377f506c764a8b254b60ee28e38e12ccc8135c",
      "tree": "4de921366de5c41e50e466e6dfa5d12225c9a004",
      "parents": [
        "4afd8b67f9be307e6c6ed89deab2e85516bb3a0e"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Apr 28 12:09:01 2015 -0700"
      },
      "committer": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Tue Apr 28 16:33:28 2015 -0700"
      },
      "message": "Respect the record audio app op - frameworks native\n\nChange-Id: Id747767377953fd644a538aad3f603d6c50875a2\n"
    },
    {
      "commit": "317ff37cf79d31170fa7320f0ba5ded1ec043e4c",
      "tree": "fa0a6f50bd00a0ddd906196dd595413a99ef3241",
      "parents": [
        "f3e4fda09106cb93bddea35a2cc7dbd4b2c281e9"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu May 29 13:09:22 2014 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu May 29 13:10:03 2014 -0700"
      },
      "message": "binder: rm utils/Debug.h\n\nChange-Id: I16931919a26c16a0d701771c93fa7fe1c6f60ef8\n"
    },
    {
      "commit": "837a0d0fb2c3fba8082d47d04cb6120af1eb9a54",
      "tree": "91aa19308f64695c7b03b06c5f7268a7a5997cfd",
      "parents": [
        "a65139634e2203230a76b8f510fe3cb21d1b3843"
      ],
      "author": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@android.com",
        "time": "Tue Jul 13 15:33:35 2010 -0700"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@android.com",
        "time": "Tue Jul 13 15:45:18 2010 -0700"
      },
      "message": "Add Parcel::readExceptionCode() and Parcel::writeNoException()\n\nAdd native Parcel methods analogous to the Java versions.\n\nCurrently, these don\u0027t do much, but upcoming StrictMode work changes\nthe RPC calling conventions in some cases, so it\u0027s important that\neverybody uses these consistently, rather than having a lot of code\ntrying to parse RPC responses out of Parcels themselves.\n\nAs a summary, the current convention that Java Binder services use is\nto prepend the reply Parcel with an int32 signaling the exception\nstatus:\n\n     0: no exception\n     -1: Security exception\n     -2: Bad Parcelable\n     -3: ...\n     -4: ...\n     -5: ...\n\n... followed by Parceled String if the exception code is non-zero.\n\nWith an upcoming change, it\u0027ll be the case that a response Parcel can,\nnon-exceptionally return rich data in the header, and also return data\nto the caller.  The important thing to note in this new case is that\nthe first int32 in the reply parcel *will not be zero*, so anybody\nmanually checking for it with reply.readInt32() will get false\nnegative failures.\n\nShort summary: If you\u0027re calling into a Java service and manually\nchecking the exception status with reply.readInt32(), change it to\nreply.readExceptionCode().\n\nChange-Id: I23f9a0e53a8cfbbd9759242cfde16723641afe04\n"
    },
    {
      "commit": "83c0446f27b9542d6c2e724817b2b2d8d1f55085",
      "tree": "a5a1a310070cad89ee8aaa86d3b1b874f9d29610",
      "parents": [
        "5f2397488ab700674d059a001e917de28a1b0a0c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 22 19:00:22 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 26 16:12:20 2009 -0700"
      },
      "message": "some work to try to reduce the code size of some native libraries\n\n- make sure that all binder Bn classes define a ctor and dtor in their respective library.\n  This avoids duplication of the ctor/dtor in libraries where these objects are instantiated.\n  This is also cleaner, should we want these ctor/dtor to do something one day.\n\n- same change as above for some Bp classes and various other non-binder classes\n\n- moved the definition of CHECK_INTERFACE() in IInterface.h instead of having it everywhere.\n\n- improved the CHECK_INTERFACE() macro so it calls a single method in Parcel, instead of inlining its code everywhere\n\n- IBinder::getInterfaceDescriptor() now returns a \"const String16\u0026\" instead of String16, which saves calls to String16 and ~String16\n\n- implemented a cache for BpBinder::getInterfaceDescriptor(), since this does an IPC. HOWEVER, this method never seems to be called.\n  The cache makes BpBinder bigger, so we need to figure out if we need this method at all.\n"
    },
    {
      "commit": "c5b2c0bf8007562536b822eb060fc54a01f8e08b",
      "tree": "da6084f542177972cf72a985b5d2c10330f87de3",
      "parents": [
        "208059f67ed2dd9fa025e07fcb6954d3cb61c79e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 19 19:08:10 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 20 12:55:03 2009 -0700"
      },
      "message": "move libbinder\u0027s header files under includes/binder\n"
    },
    {
      "commit": "208059f67ed2dd9fa025e07fcb6954d3cb61c79e",
      "tree": "b2fde632a7c9abf4137751ffe779318c0a89bd96",
      "parents": [
        "501c6179e158b2d5bfc67cb8b7180c02ac301f97"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 18 15:08:03 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 20 12:55:02 2009 -0700"
      },
      "message": "checkpoint: split libutils into libutils + libbinder\n"
    },
    {
      "commit": "edbf3b6af777b721cd2a1ef461947e51e88241e1",
      "tree": "f09427b843b192cccf8c3b5328cb81dddf6489fa",
      "parents": [
        "d5193d9394c5e58176d7bcdf50ef017f8a3b9e1e"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "d5193d9394c5e58176d7bcdf50ef017f8a3b9e1e",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [
        "43aa2b1cbf7a03e248e10f4d0fec0463257cd52d"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "7c1b96a165f970a09ed239bb4fb3f1b0d8f2a407",
      "tree": "df5a6539447324de36e95b057d6b9f0361b7a250",
      "parents": [],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
