)]}'
{
  "log": [
    {
      "commit": "6c644e620d541e52d3f4e32fddc689aa5e5350e6",
      "tree": "fa932fbf9d77fd0c721a775d6aa776184568ccdf",
      "parents": [
        "148cd8c0bced9bcd72beb2e93a086fde9dcfef9e"
      ],
      "author": {
        "name": "Philip P. Moltmann",
        "email": "moltmann@google.com",
        "time": "Wed Jul 18 15:41:24 2018 -0700"
      },
      "committer": {
        "name": "Philip P. Moltmann",
        "email": "moltmann@google.com",
        "time": "Tue Jul 24 11:45:34 2018 -0700"
      },
      "message": "Always review permissions before \u003cM app is started the first time\n\nThis splits the\n- review permissions\n- individually control permissions\n- consent to manage wireleess (wifi + bluetooth)\nproperties.\n\nAlmost all code cares only for the first and it is now always true.\nHence a lot of code can be simplified.\n\nBug: 110431654\nTest: atest PermissionsHostTest\n      started pre-M app\nChange-Id: I733cd476ccd0bf5eaa59e9a9506db34f57c6baee\n"
    },
    {
      "commit": "f955e56d51dac0fade192b544af5679d3d8193ac",
      "tree": "9af30f17af98970b4b4123e0f53bc04fbcd587ae",
      "parents": [
        "fd935d3a126c4cfe643765d500a4fbed11d77b9b"
      ],
      "author": {
        "name": "Tyler Gunn",
        "email": "tgunn@google.com",
        "time": "Thu Apr 26 14:43:31 2018 -0700"
      },
      "committer": {
        "name": "Tyler Gunn",
        "email": "tgunn@google.com",
        "time": "Fri Apr 27 08:44:07 2018 -0700"
      },
      "message": "Require READ_CALL_LOG permission to see phone numbers in phone state.\n\nIncoming and outgoing call phone numbers are visible in the phone state\nbroadcast and via the PhoneStateListener.  To enhance user privacy, change\nto require the READ_CALL_LOG permission in order to receive the call\nphone numbers.\n\nThis means to see phone numbers:\n1. android.intent.action.PHONE_STATE - requires READ_PHONE_STATE and\nREAD_CALL_LOG permission.\n2. PhoneStateListener#onCallStateChanged - now required READ_CALL_LOG\npermission.\n\nTo support this new behavior, added sendBroadcastAsUserMultiplePermissions\nmethod to context to allow sending the broadcast to all users while\nrequiring the two permissions.\n\nBug: 78650469\nTest: Created PHONE_STATE broadcast receiver in test app and verified that\nwhen no permissions are granted, the phone number is empty for incoming\nand outgoing calls.\nTest: Granted Phone state permission to test app and verified that phone\nnumber is not populated.\nTest: Granted test app read call log permission and verified that phone\nnumber is populated.\nTest: Created PhoneStateListener in test app and verified that when no\npermissions are granted, phone number is empty for incoming and outgoing.\ncalls.\nTest: Granted read call log permission to test app and verified that both\nthe incoming and outgoing numbers are populated.\n\nChange-Id: I857ea00cc58a0abbb77960643f361dd6dd9c8b56\n"
    },
    {
      "commit": "6affc07065083468c5580b04d3572ef6acbb138c",
      "tree": "ce99f9bff97029318db42ac178b83a8379d99319",
      "parents": [
        "fc16c4b3c48233be0f22db671d7e80188b2dea17",
        "021b57ab8df0927aa1f78a2f3bb01d5e70594b1a"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Mar 22 22:15:31 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 22 22:15:31 2018 +0000"
      },
      "message": "Merge \"APIs to suspend packages with SUSPEND_APPS permission\" into pi-dev"
    },
    {
      "commit": "021b57ab8df0927aa1f78a2f3bb01d5e70594b1a",
      "tree": "f051df742120d34fc3ef87ee4c1d65b2e970d6ab",
      "parents": [
        "5d9617c439d0f85b67ba0d21e43f665ab9bf13ae"
      ],
      "author": {
        "name": "Suprabh Shukla",
        "email": "suprabh@google.com",
        "time": "Thu Mar 08 18:21:50 2018 -0800"
      },
      "committer": {
        "name": "Suprabh Shukla",
        "email": "suprabh@google.com",
        "time": "Thu Mar 22 12:59:57 2018 -0700"
      },
      "message": "APIs to suspend packages with SUSPEND_APPS permission\n\nChanged the existing hidden api setPackagesSuspendedAsUser to a system\napi setPackagesSuspended that can be called by apps with either\nMANAGE_USERS or SUSPEND_APPS permission. Additionally, the suspending\napp can now specify optional extra information meant to be used by the\nsuspended apps and the launcher to deal with this state.\n\nThe following other APIs are added:\n - isPackageSuspended(): Apps can query whether they are in a suspended\n state\n - @SystemApi getPackageSuspendedAppExtras(String): Apps with permission\n SUSPEND_APPS can get the appExtras passed to PM when suspending the\n app.\n - @SystemApi setPackageSuspendedAppExtras(String, PersistableBundle):\n Apps with permission SUSPEND_APPS can update app extras for a\n suspended package.\n - getPackageSuspendedAppExtras(): Apps can call to get the appExtras\n passed in to PM when they were suspended.\n\nTest: Can be run via:\natest com.android.server.pm.PackageManagerSettingsTests\natest com.android.server.pm.PackageUserStateTest\natest com.android.server.pm.SuspendPackagesTest\n\nBug: 74336673\nChange-Id: I3b9ed2c8478b34ee2e8986f5f5fddb2839d102e3\n"
    },
    {
      "commit": "18e3eb816887156f40def1c14db434ddde9ec245",
      "tree": "eb89c3addc9bac983b9d4fb1138ebe4de5fcc52a",
      "parents": [
        "a5fd0294c76c1faa3479a2093ae3e5f0838791ad"
      ],
      "author": {
        "name": "Philip P. Moltmann",
        "email": "moltmann@google.com",
        "time": "Fri Mar 09 16:55:55 2018 -0800"
      },
      "committer": {
        "name": "Philip P. Moltmann",
        "email": "moltmann@google.com",
        "time": "Tue Mar 20 13:57:14 2018 -0700"
      },
      "message": "Add SoundTriggerDetectionService\n\nThe service is meant to replace the PendingIntent based API. Once all\nusers of the PendingIntent based API switched the PendingIntent based API\nwill be removed.\n\nTo have as little as possible impact on the whole SoundTrigger framework\nthe RemoteSoundTriggerDetectionService class implements the same\ninterface as the PendingIntent based class. Hence the exising code has\nvery little change. Further once the old code can be removed the amount\nof changed (and added) code is limited.\n\nThe RemoteSoundTriggerDetectionService -\u003e SoundTriggerDetectionService\nis a vanilla as possible service implementation. The special behaviors\nare:\n- The system holds a wakelock while service operations are in progress\nand the service is bound as foreground. Hence the service can e.g.\nlisten to the microphone.\n- Service operations have a certain amount of time they are allowed to\nrun. Once every operation is either finished or the the operation\nexceeded the allotted time, the system calls onStopOperation for each\nstill pending operation. This is a similar model as for the commonly\nused JobService.\n  Please note that if the time allowed for an operation is 15s and\nop1 was run as 0si, and op1 was run at 5s, the service is allowed to run\nuntil 20s. Hence _both_ onStopOperations will happen at 20s. This is\ndone for ease of implementation but should not give the service more\npower than calling onStopOperation exactly 15s after each operation is\ntriggered.\n- If an operation is done before the allotted time is reached, the\nservice can declare the operation as finished manually by calling\nonOperationFinished. This is a call back into the system, hence a\n\u0027client\u0027 binder is sent to the service. If the operation is finished\nby calling this method onStopOperation will not be called.\n- As the service instance might be killed and restored between\noperations we add a opaque bundle \u0027params\u0027 to each operations. The users\nof the API can use this to send data from the start command to the\noperations. It can also just be set to null. The params are not meant to\nstore changing state in between operations. Such state needs to be\npersisted using the regular methods (e.g. write it to disk)\n- A service can be used for multiple recognition sessions. Each\nrecognition is uniquelity defined by its sound model UUID. Hence each\noperation gets at least tree arguments: Operation ID, sound mode UUID, params\n- As a small optimization the params are cached inside of the service\ninstance.\n\nThe time allowed for each operation is in a @SystemAPI global setting,\nso the service can make sure it finishes the operations before they are\nstopped. It might take some time to deliver the operations via the\nbinder, hence it is not recommended to try to use every last ms of\nallotted time.\n\nTest: atest SoundTriggerDetectionServiceTest (added in separate CL)\n      atest android.provider.SettingsBackupTest\nChange-Id: I47f813b7a5138a6f24732197813a605d29f85a93\nFixes: 73829108\n"
    },
    {
      "commit": "700feef8a60e06784d28d1db9502e650df854cad",
      "tree": "eb635270a03ffb5a2722a2fe85a90e3609e8c434",
      "parents": [
        "f9a02975eaa5a36584eb1f214193d24053af73f1"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Thu Feb 15 10:59:41 2018 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue Feb 20 12:14:18 2018 -0800"
      },
      "message": "Shortcut permissions for default text classifier\n\n- Add two shortcut related permissions as SystemAPI for the default\ntext classifier.\n\n- The default text classifier package name still comes from the\nsystem resource.\n\nBug: 73083596\nBug: 71555985\nTest: atest CtsPermission2TestCases\nTest: Manual test with a test package, with the following in config.xml\n\u003cstring name\u003d\"config_defaultTextClassifierPackage\" translatable\u003d\"false\"\u003ecom.example.android.pm.shortcutlauncherdemo\u003c/string\u003e\n\nChange-Id: I19081d9d6ba0b33eb25d19aa55b4fe2f26a75897\n"
    },
    {
      "commit": "064f16638be7304e589177386aa09f542a07ff88",
      "tree": "809d3fba0dfc525f58afbd3ba6f03c40fa2c1a5d",
      "parents": [
        "cf8f8026b515c5ead886fe830a13bf97aa3a8959",
        "5cdda3425ccf3c62e400a1646615f4479a8266af"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jan 24 03:00:27 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 24 03:00:27 2018 +0000"
      },
      "message": "Merge \"Add API to expose signing certificate proof-of-rotation.\""
    },
    {
      "commit": "5cdda3425ccf3c62e400a1646615f4479a8266af",
      "tree": "f8942116930669c5170dad00cac8df019a8a35b1",
      "parents": [
        "77029c5b16351775cb2333369ef9a4bc1d9acf58"
      ],
      "author": {
        "name": "Daniel Cashman",
        "email": "dcashman@google.com",
        "time": "Fri Jan 19 07:22:52 2018 -0800"
      },
      "committer": {
        "name": "Dan Cashman",
        "email": "dcashman@google.com",
        "time": "Tue Jan 23 09:10:13 2018 -0800"
      },
      "message": "Add API to expose signing certificate proof-of-rotation.\n\nWith the addition of APK Signature Scheme v3, the platform now can\nsupport key rotation by using the proof-of-rotation provided by the\nnew scheme.  Create a new API which allows checking of the entire\nprovided history of an APK\u0027s signing certificates, not just the\ncurrent signer.  This should allow for changes of APK signing\ncertificates without fear of losing access to resources that would\nhave been provided under the old signing certificate.\n\nChange getPackageInfo(GET_SIGNATURES) to return the oldest signing\ncertificate in the chain so that apps which do programmatic checks,\nbut are not updated to use the new API, still get the same information\nthey would have gotten had there been no rotation.\n\nBug: 64686581\nTest: Builds, boots.\nChange-Id: I8982fd4cce60f5d85a6180d157a6e2a661b1a6d7\n"
    },
    {
      "commit": "7ee1a7acc4d3ff8d05aaa76ba7665fdef9f315ec",
      "tree": "29df2ef4c209487cd6ab0c1860c238deaa2bfe0e",
      "parents": [
        "82c264e0f27961523e4bd3511890bfd35a01fd7e"
      ],
      "author": {
        "name": "Roberto Perez",
        "email": "robertoalexis@google.com",
        "time": "Mon Dec 04 17:14:33 2017 -0800"
      },
      "committer": {
        "name": "Roberto Perez",
        "email": "robertoalexis@google.com",
        "time": "Thu Jan 18 14:43:27 2018 -0800"
      },
      "message": "Adding a new category to mark car-optimized launcher activity\n\nTest: TBD\nBug: 70681347\n\nChange-Id: I81ea7f9f3021e8a9d25fa980a8687d66765469c5\n"
    },
    {
      "commit": "1ab3d6e56b56fe0cfe31e437326b5cbc66bdb361",
      "tree": "39e7ba3aa2b34512aa29c4f35dd2de1a06777c5f",
      "parents": [
        "464eb00e67e0875e4f5abbc3417fc714ecc6ffe1"
      ],
      "author": {
        "name": "Ben Gruver",
        "email": "bgruv@google.com",
        "time": "Thu Dec 07 13:45:08 2017 -0800"
      },
      "committer": {
        "name": "Ben Gruver",
        "email": "bgruv@google.com",
        "time": "Thu Jan 11 12:13:29 2018 -0800"
      },
      "message": "Implement harmful app warning at activity launch\n\nBug: 63909431\nTest: manual\n\nChange-Id: I8a5497421cb8130af8cdd5129b0f6e1707a01e36\n"
    },
    {
      "commit": "772b6923206a34e97c45bc48e7ad4bebfd3eae29",
      "tree": "269bbfc393c0bafa04c565fff1f11946f99d79a2",
      "parents": [
        "0d64cd33ba31d77f255c2240ea8c69b1a1b05144"
      ],
      "author": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Fri Dec 22 16:13:15 2017 +0000"
      },
      "committer": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Tue Jan 09 14:38:38 2018 +0000"
      },
      "message": "Add apis needed for android.test.legacy\n\nThe long term goal of removing junit and dependent android.test classes\nfrom the android.jar is the removal of the runtime libraries that\nprovide those classes. A key part of the strategy for migrating APKs off\nthe runtime libraries is the android.test.legacy library which APKs can\nstatically include in place of the runtime dependencies without having\nto change their source code.\n\nThe longer term goal is for all tests to migrate from these classes\naltogther and to use the Android Test Support Library instead but that\nwill require significant changes to the test source code.\n\nIn order for it to be safe to statically include android.test.legacy in\nan APK it cannot use any internal APIs. This change adds the additional\nclasses and methods needed to the android.test.mock API library. The\nadditions are all marked as deprecated to try and avoid developers\nfrom using them in new tests.\n\nIt also marks the AccountManager constructor used by MockAccountManager\nwith the android.annotation.MockApi so that it is included in the mock\nstubs libraries against which the android.test.mock.stubs[-system]\nlibraries build.\n\nBug: 30188076\nTest: make checkbuild\nChange-Id: I85417cc328cab898ab93b9b726648f4232555324\n"
    },
    {
      "commit": "79c238ada6e7072f62f807781d58d314ed2f17a9",
      "tree": "7ddce85f1fbd5a5850d82b998c83de7621e47b79",
      "parents": [
        "ec397abf931a39ed1c3d36f0af4ee9a68b883b07"
      ],
      "author": {
        "name": "Philip P. Moltmann",
        "email": "moltmann@google.com",
        "time": "Wed Dec 13 15:59:07 2017 -0800"
      },
      "committer": {
        "name": "Philip P. Moltmann",
        "email": "moltmann@google.com",
        "time": "Thu Jan 04 13:26:28 2018 -0800"
      },
      "message": "Use modern install method in backup service\n\nTest: adb backup -apk myApp -f backup ; adb restore backup\nChange-Id: I2bbcb0487ecc525a6dc8a2693b15ce624db275b0\n"
    },
    {
      "commit": "8439ac08b1b8ef362cd649dbefdea4ac140051e2",
      "tree": "f7dfbb91bb60ff3c2e8768aa9975ca45b4563e59",
      "parents": [
        "ff38f236b55b51a9f8e03b909f4791ccca329c48"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Dec 12 17:26:23 2017 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Dec 13 13:59:04 2017 -0700"
      },
      "message": "Start accepting Executors instead of Handlers.\n\nAfter discussion in API council, our new best-practices are to have\ndevelopers provide an Executor to dispatch callbacks/listeners on,\ninstead of the previous guidance of using a Handler.\n\nDefine Context.getMainExecutor() to easily obtain an Executor\nassociated with the main thread of application.  This allows new\nAPIs to require a @NonNull Executor.  Also define a new\n@CallbackExecutor auto-doc annotation that explains background and\npoints developers at new Context method above.\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsContentTestCases -t android.content.cts.ContextTest#testMainLooper\nTest: cts-tradefed run commandAndExit cts-dev -m CtsContentTestCases -t android.content.cts.ContextTest#testMainExecutor\nBug: 70348426\nChange-Id: I536892bcd80fcfba1bb1ddf67648c08a26d7ddd2\n"
    },
    {
      "commit": "45f8b29ce0ca9f80c586850c4be3a1e552bc6c2f",
      "tree": "9913a099ec8f3f38240422d7cfbedef42b509f4b",
      "parents": [
        "71e9a56fc30d66ad6d475fbf26425d791c2befa2"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Nov 07 18:49:43 2017 -0800"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Dec 04 14:26:46 2017 -0800"
      },
      "message": "Add SystemApis to expose runtime profile information\n\nThe API allows a system apps which acquired\n{@code android.permission.READ_RUNTIME_PROFILE} to snapshot the runtime\nprofiles of installed packages.\n\nThe API is implemented in a new service class (AndroidRuntimeManager)\naccessible from the context using\ncontext().getPackageManager().getAndroidRuntimeManager().\n\nThe main functionality is exposed as a one way call into the\nAndroidRuntimeManager with the result being posted on a callback. The\nprofile is available to the caller as a read-only ParcelFileDescriptor.\n\nThis CL only adds the API interfaces and validation. It does not fully\nimplement the functionality.\n\noneway void snapshotRuntimeProfile(in String packageName,\n  in String codePath, in ISnapshotRuntimeProfileCallback callback)\n\nBug: 30934496\nTest: gts-tradefed -m GtsAndroidRuntimeManagerHostTestCases\n\nChange-Id: Iaa6be4715840f24508acba3162ea9c1ab725bd38\n"
    },
    {
      "commit": "b13f15332e5279d53afa9af2c6835e2476daa655",
      "tree": "fd6921f40e0e1463bf3235276d0de8aa42b6f0dd",
      "parents": [
        "5209abad9b72623131cc4619d9eab01b386d7c01"
      ],
      "author": {
        "name": "Philip P. Moltmann",
        "email": "moltmann@google.com",
        "time": "Tue Nov 14 08:34:06 2017 -0800"
      },
      "committer": {
        "name": "Philip P. Moltmann",
        "email": "moltmann@google.com",
        "time": "Thu Nov 16 11:32:47 2017 -0800"
      },
      "message": "Remove one legacy install path\n\nAlso removed everything needed only for this path\n\nTest: Installed app via package installer, adb, google play store\nBug: 65261282\nChange-Id: Ia8a03fa5900687cd2adf844ba7e6c07e0537382e\n"
    },
    {
      "commit": "e254526f0fe5d22681555bd4a00b7ee96fee1dc1",
      "tree": "c8e450764c8d6704bdac446117634951822f7675",
      "parents": [
        "42753a512e2719ca078851a62760a19890641e6f"
      ],
      "author": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Wed Nov 15 11:39:14 2017 +0000"
      },
      "committer": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Thu Nov 16 13:15:29 2017 +0000"
      },
      "message": "Separate android.test.mock from test-runner source\n\nExtracts the source for the android.test.mock library from the\nframeworks/base/test-runner directory into its own\nframeworks/base/test-mock directory. They are already treated separately\nat runtime and compile time so this just makes the separation complete.\n\nBug: 30188076\nTest: make checkbuild\nChange-Id: I20e5b06ba79677e76117c82e9f9e2ecd15e5fed6\n"
    }
  ]
}
