)]}'
{
  "log": [
    {
      "commit": "d894401fee4d2fd5d1aaf87c40346f2a9b44eeca",
      "tree": "56f283da10e55397352f780f71cb45afb21b5b78",
      "parents": [
        "bdea76f9ae2734898a760b6dc84785dfabe756b0"
      ],
      "author": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Mon Feb 18 15:30:52 2019 +0000"
      },
      "committer": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Mon Feb 18 17:02:21 2019 +0000"
      },
      "message": "BackupManager shouldn\u0027t clear app\u0027s data during restore if agent wasn\u0027t invoked yet\n\nBug: 123738850\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n      2) atest CtsBackupTestCases\n      3) atest CtsBackupHostTestCases\n      4) atest GtsBackupTestCases\n      5) atest GtsBackupHostTestCases\n      6) Manual: Force exceptions before/after agent was called, verify\n                 the new behavior.\n\nChange-Id: Ia9ddea2939fc6d72dd9bc060b0c47bc8da2b868d\n"
    },
    {
      "commit": "aee28fd42f2db33ff6b8c27335c009523ed6c238",
      "tree": "682e0b1e4a91c03095f01df9441f8a936d922411",
      "parents": [
        "826e270caa1582e706fc008f633f99c4242e53f8"
      ],
      "author": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Wed Feb 13 12:36:05 2019 +0000"
      },
      "committer": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Fri Feb 15 20:23:11 2019 +0000"
      },
      "message": "Use new manifest flag to gate clearing data during restore\n\nUse the new manifest flag introduced in ag/5762489 to gate clearing data\nduring restore.\n\nBug: 120267643\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n      2) atest CtsBackupTestCases\n      3) atest CtsBackupHostTestCases\n      4) atest GtsBackupTestCases\n      5) atest GtsBackupHostTestCases\n\nChange-Id: Ida4a9e96f44d1c740d217faed2b9f928e02865ec\n"
    },
    {
      "commit": "953682187e376383945bb7b99e3914f206540543",
      "tree": "dcf1cf2aff948452fd780af23b5d7f274cf5d14f",
      "parents": [
        "06363e342c5bb83c158100dc70d7ca63949def8b"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Wed Feb 13 14:51:17 2019 +0000"
      },
      "committer": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Thu Feb 14 13:19:05 2019 +0000"
      },
      "message": "[Multi-user]: R backwards compatibility in activating/deactivating the service\n\nBug: 123347794\n\nIn Q, backup is OFF by default for non-system users. In R, we will change that to ON\nunless backup was explicitly deactivated with a (permissioned) call to\nsetBackupServiceActive.\nTherefore, remember this for use in R. Basically the default in R will be\nrememberFile.exists() ? rememberFile.value() : ON\nNote that this has to be done right after the permission checks and before any other\naction since we need to remember that a permissioned call was made irrespective of\nwhether the call changes the state or not.\n\nTest: 1. atest $(find frameworks/base/services/tests/servicestests/src/com/android/server/backup -name \u0027\\\u0027\u0027*Test.java\u0027\\\u0027\u0027)\u0027\n2. atest RunBackupFrameworksServicesRoboTests\n3. atest CtsBackupTestCases CtsBackupHostTestCases GtsBackupTestCases GtsBackupHostTestCases\n\nChange-Id: I0897d6f9f8d8d8a9fc3c0faabfc9045b416dd25f\n"
    },
    {
      "commit": "985b1800d4e2cde74bf4f0f258e14ca627373e06",
      "tree": "2fc04592a8a41746dbf1d6e457ec8d67fb68600f",
      "parents": [
        "947cfaaa161017514b0c8b4088d274c7a32c9759"
      ],
      "author": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Thu Feb 07 11:40:10 2019 +0100"
      },
      "committer": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Tue Feb 12 09:29:19 2019 +0000"
      },
      "message": "Renames ChunkListing.java to ChunkListingMap.java.\n\nBug: 111386661\nTest: atest RunBackupFrameworksServicesRoboTests\nChange-Id: I94327204ed39b4b4a6138eb6ddd1b28732a16363\n"
    },
    {
      "commit": "af4ba04daf92062a78682aa1c7ef11783c4fce43",
      "tree": "220ea8d4290070f9cd03087e858ab15e96ba3786",
      "parents": [
        "1fc8cdeae0ccc6ceb247516ccaafbd563b260726",
        "02cf411d278f7d73c6c34d20614b1d56ba50c48e"
      ],
      "author": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Thu Feb 07 09:36:51 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 07 09:36:51 2019 +0000"
      },
      "message": "Merge \"Ports DiffScriptBackupWriter from gmscore to AOSP.\""
    },
    {
      "commit": "bd8491866ccfd18f61ca4c43362c89386ea595fa",
      "tree": "05e7d869bd56134e3fb320ce65bdfc601533d596",
      "parents": [
        "72be7c2a2f200a94435f6edd9c4c5be6e5185f50",
        "471a35da6cb45f514f293060ba0e06bd2b5a7fc9"
      ],
      "author": {
        "name": "Stefano Tommasini",
        "email": "stefanot@google.com",
        "time": "Wed Feb 06 17:41:02 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 06 17:41:02 2019 +0000"
      },
      "message": "Merge \"Create API in BackupManagerService for work profile serial id mapping.\""
    },
    {
      "commit": "02cf411d278f7d73c6c34d20614b1d56ba50c48e",
      "tree": "86d1b5efd64a69ac5efabe1f113eb4f9e58a8047",
      "parents": [
        "01c1c07c578f040e368306bc900a0dfea0ef280a"
      ],
      "author": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Fri Dec 14 14:07:51 2018 +0100"
      },
      "committer": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Wed Feb 06 18:00:30 2019 +0100"
      },
      "message": "Ports DiffScriptBackupWriter from gmscore to AOSP.\n\nA few additional changes (apart from style and usual dependencies) were\nneeded:\n- Additional dependencies (not part of Backup \u0026 Restore code) were\nported over:\n\t- ByteRange\n\t- DiffScriptWriter\n\t- OutputStreamWrapper\n\t- SingleStreamDiffScriptWriter\n\n- DiffScripBackupWriter.ENCRYPTION_DIFF_SCRIPT_MAX_CHUNK_SIZE_BYTES is\nnow a constant rather than a flag.\n- Additional tests were added for SingleStreamDiffScriptWriter.\n\nBug: 111386661\nTest: atest RunBackupFrameworksServicesRoboTests\nChange-Id: Ia3234bb8d665211e6fa91d6a92d190171b0d2dc1\n"
    },
    {
      "commit": "471a35da6cb45f514f293060ba0e06bd2b5a7fc9",
      "tree": "f25aad2ab03fb51b908c53b42cfd27182e3559f3",
      "parents": [
        "c1131c017f6faec20af9cefd07a0a05cd4dc5204"
      ],
      "author": {
        "name": "Stefano Tommasini",
        "email": "stefanot@google.com",
        "time": "Mon Jan 21 13:21:48 2019 +0000"
      },
      "committer": {
        "name": "Stefano",
        "email": "stefanot@google.com",
        "time": "Tue Feb 05 18:16:49 2019 +0000"
      },
      "message": "Create API in BackupManagerService for work profile serial id mapping.\n\nThe launcher needs to know the serial id of the ancenstral device\u0027s work\nprofile  and the serial id of the current device\u0027s work profile in order\nto properly perform a restore.\n\nTest: atest BackupManagerService\nBug: 111301511\n\nChange-Id: Ia929dcc2cb599f935183be1820b1c45f2d6e1de7\n"
    },
    {
      "commit": "924c8a92ac41e4130861329f009f03f9af664f49",
      "tree": "ca5fb94283967755b2029b2ce52a67041c4fc35b",
      "parents": [
        "c7026dd6ae32aadb55ecc764ff2e143b70defc9d"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Jan 31 17:23:12 2019 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Jan 31 17:23:12 2019 +0000"
      },
      "message": "[Multi-user] Whitelist \"android\" for non-system user backup\n\nMove to a whitelist of system apps that are eligible for backup in\nnon-system users.\n\nBug: 123349308\nTest: \"adb shell bmgr backupnow android\" succeeds for system\nand non-system users.\n\nChange-Id: I7bc4982a6e105c2343636532dd2010aa43132d23\n"
    },
    {
      "commit": "db19aa43d0efd2cda1e62a10fb42feb6df148bab",
      "tree": "42a9ad6777217bcfa50584e7b8108d28555a2eea",
      "parents": [
        "39e2a4394e845f7d3594b5ad8928d168c31a7ca8",
        "312e7803462bb89d244f6d71ad38ab2c3a71ddf1"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Jan 31 11:13:14 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 31 11:13:14 2019 +0000"
      },
      "message": "Merge \"[Multi-user] Clear calling identity for backup activation\""
    },
    {
      "commit": "312e7803462bb89d244f6d71ad38ab2c3a71ddf1",
      "tree": "b90d70d76d7ca6a149278d4063db261429569f4e",
      "parents": [
        "7f2d1a73a895cf51c900da38adf4065b0d10ca2c"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Tue Jan 29 20:14:38 2019 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Wed Jan 30 21:09:04 2019 +0000"
      },
      "message": "[Multi-user] Clear calling identity for backup activation\n\nAs part of bmgr activate, if the user is unlocked then we attempt to\nstart the backup service for them. However, as part of initialization,\nAMS enforces the system uid so clear calling identity before starting\nthe service (as we have the shell uid).\n\nBug: 123572171\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) atest TrampolineTest\n3) Manual: Unlock secondary user -\u003e bmgr activate -\u003e no exception thrown\nand service started\n\nChange-Id: I441491e19d9f3c9b49b5778d51ae5331230b129b\n"
    },
    {
      "commit": "9778ed5c0dae3d6405a7c0ad93b482882334a940",
      "tree": "95c31e2aae4301b1c2e6e0b07076c03a7a417fa1",
      "parents": [
        "d8e7d56cdf4e59a346c11c27df3c825190a67edc",
        "5a8e6febecf64afba74189ca8e86dc3838dfacfe"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Wed Jan 30 14:45:16 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 30 14:45:16 2019 +0000"
      },
      "message": "Merge \"[Multi-user] Properly check for system apps in multi-user context\""
    },
    {
      "commit": "5a8e6febecf64afba74189ca8e86dc3838dfacfe",
      "tree": "1bbbee78bff910860b292b6f7639d5d34cbf8950",
      "parents": [
        "7f2d1a73a895cf51c900da38adf4065b0d10ca2c"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Tue Jan 29 19:27:22 2019 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Tue Jan 29 19:31:24 2019 +0000"
      },
      "message": "[Multi-user] Properly check for system apps in multi-user context\n\nThe previous check compared app uid directly to FIRST_APPLICATION_UID\nwhich doesn\u0027t work for non-system users as uid incorporates the user id\n(so system apps in non-system users would always be categorized as\nnon-system apps).\n\nBug: 122309666\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) Manual: verify system packages backed up for system user, not backed\nup for non-system user.\n\nChange-Id: I5e11b4b7c41d74d43d545e4831d09a9a3a59e5cf\n"
    },
    {
      "commit": "21a91fbbd0e231751a2c8d857329bd95b6354cc1",
      "tree": "16d84d58602c5e309e635fc8182440946fad3b4b",
      "parents": [
        "7f2d1a73a895cf51c900da38adf4065b0d10ca2c"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Mon Jan 28 16:45:42 2019 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Mon Jan 28 19:29:57 2019 +0000"
      },
      "message": "[Multi-user] Schedule full backup jobs immediately\n\nAll other schedule call sites for full backup and key value schedule\ninline. The operation should be quick and scheduling on a separate\nhandler makes testing flaky.\n\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) atest ScheduledBackupHostSideTest\n3) atest ProfileScheduledJobHostSideTest\nChange-Id: Id6ae557080da5a98c2ac572ca6b4b7973b7a9c29\n"
    },
    {
      "commit": "75350778e2dd01cb2538bb8bfb00c983e589fb9e",
      "tree": "e9ffd082c4f53ab00996c12eb2377e3711c63466",
      "parents": [
        "748dfe2b1be32d9510fd51daeb9961269bf24d37",
        "bdb8848abe9999fbd302d71f2c0ce62b9a09fd8a"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Jan 24 20:35:51 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 24 20:35:51 2019 +0000"
      },
      "message": "Merge \"[Multi-user] Disable backup by default in non-system users\""
    },
    {
      "commit": "bdb8848abe9999fbd302d71f2c0ce62b9a09fd8a",
      "tree": "b2c8d96aeb9ee6e07dc9434cabe619c8857b50da",
      "parents": [
        "25b54058c0e3bb7e0630650f750092f7ccd2289f"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Tue Jan 22 15:32:25 2019 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Jan 24 15:14:09 2019 +0000"
      },
      "message": "[Multi-user] Disable backup by default in non-system users\n\nKey changes in this CL:\n- Backup is now disabled by default in non-system users unless DPM\nactivates backup for this user AND the system user is activated. This\nprovides gating for the multi-user B\u0026R feature.\n- Activation is done via an \u0027activate\u0027 file that is per-user (but lives\nin the system user directory to account for locked users).\n- isBackupServiceActive() handles both locked and unlocked users.\n- Added a bmgr command to expose isBackupServiceActive() for testing\npurposes and enforce appropriate permissions.\n\nFuture CLs:\n- Handle future migration to backup on by default for non-system users\n- Change CTS tests to use the new bmgr command\n\nBug: 121306407\nTest: 1) atest TrampolineTest\n2) Start system user -\u003e service started; run backup and restore\nsuccessfully\n3) Start non-system user -\u003e ignored;\n4) adb shell bmgr --user 0 activate true -\u003e security exception;\nadb shell bmgr --user 10 activate true -\u003e security exception (work\nprofile);\nadb shell bmgr --user 11 activate true/false -\u003e creates/deletes activate\nfile and starts/stops the service\nChange-Id: Ic77db9b8b2e5170dcf89bef863dac4713730797a\n"
    },
    {
      "commit": "6712b72a485e87e7b5a3fb8795892c539ebaa5ba",
      "tree": "0dfe80ed154a56537ca50f1477e613ef4074417b",
      "parents": [
        "a47310fde06c41a7b41ddb59db767993e195180d"
      ],
      "author": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Sat Jan 19 21:35:32 2019 +0000"
      },
      "committer": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Wed Jan 23 15:57:11 2019 +0000"
      },
      "message": "[Multi-user] Verfiy full backup/restore flow\n\nBug: 121198030\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) atest $(find \\\nframeworks/base/services/tests/servicestests/src/com/android/server/backup \\\n-name \u0027*Test.java\u0027)\n3) atest CtsBackupTestCases\n4) atest CtsBackupHostTestCases\n5) atest GtsBackupTestCases\n6) atest GtsBackupHostTestCases\n\nManual testing:\n1. Start secondary user -\u003e verify fb-schedule file is created, full backup queue initialised\n2. Verify fullbackup of 1 package for system/secondary users, [package] only exists for current user:\n  * bmgr --user [user-id] fullbackup [package]\n  * Verify in logs that backup is successful\n  * Uninstall/install [package]\n  * Verify data is restored\n3. Verify fullbackup of 1 package for secondary user, [package] eixtst for user 0:\n  * bmgr fullbackup [package]\n  * bmgr --user [user-id] fullbackup [package]\n  * Verify in logs that backup is successful\n  * Uninstall/install [package] for secondary user\n  * bmgr --user [user-id] restore [token] [package]\n  * Verify the data restored is different from system user data and belongs to [user-id]\n3. Verify backup of all packages for system/secondary users:\n  * bmgr --user [user-id] backupnow --all\n  * Verify system packages (android, settings, wallpaper) are skipped for secondary user\n  * Verify in logs that backup is successful\n  * Uninstall/install [package]\n  * Verify data is restored\n\nBase -\u003e Patchset 2: Update method calls to use asUser versions\nPatchset 2 -\u003e Patchset 3: Update opComplete callback to accept userId\nPatchset 3 -\u003e Patchset 4: Gate system packages from backup/restore for non-system users\n\nChange-Id: Ic3986709ba4d46c0af9da45bb4dd682ee2aef3ce\n"
    },
    {
      "commit": "25b54058c0e3bb7e0630650f750092f7ccd2289f",
      "tree": "3a7ae1bc7ca9d3171c7cea9e0f1acf070c6ccf6f",
      "parents": [
        "0fa45f1e50c130b3f9c620ac47f905abf26ad20c",
        "72d03de8fa0ae7546122509ffefc84a11bee95e0"
      ],
      "author": {
        "name": "Stefano Tommasini",
        "email": "stefanot@google.com",
        "time": "Tue Jan 22 10:44:49 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 22 10:44:49 2019 +0000"
      },
      "message": "Merge \"Make Trampoline support multi-user backup.\""
    },
    {
      "commit": "72d03de8fa0ae7546122509ffefc84a11bee95e0",
      "tree": "1c5ab6c50a2148a13d98dbdc51165011fd3bf591",
      "parents": [
        "5d21bdf16f52bc4afac202f8b18a16e5c8da6fbc"
      ],
      "author": {
        "name": "Stefano Tommasini",
        "email": "stefanot@google.com",
        "time": "Mon Jan 14 11:24:56 2019 +0000"
      },
      "committer": {
        "name": "Stefano Tommasini",
        "email": "stefanot@google.com",
        "time": "Mon Jan 21 15:29:47 2019 +0000"
      },
      "message": "Make Trampoline support multi-user backup.\n\nWe create a differnte suppressBackup file for each user, and gate\noperations on that.\nBackup still can\u0027t be toggled for other users that is not SYSTEM.\n\nTest: atest TrampolineTest\nTest: Verify backup works and restore works, just for user 0 for now.\nBUG: 121198006\n\nChange-Id: Ib4ecf48d248319e9d890515937fc087ef8f46039\n"
    },
    {
      "commit": "fcdfa01fabcf8394f4c347e5c5c5425b0aef857d",
      "tree": "6dc3106f1e0205687c7d7d87ddfd0ab957a654eb",
      "parents": [
        "53cf5208170a84717614df7a71fccf9d71697a81"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Wed Jan 16 21:21:47 2019 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Wed Jan 16 21:42:55 2019 +0000"
      },
      "message": "[Multi-user] Remove dir management for non-system users\n\nPer-user CE directories are managed by vold so we don\u0027t need to\ninitialize or apply restorecon on them in our service.\n\nOnce the system user is migrated to the its CE directory, we can remove\nthe remaining restorecon and mkdirs logic.\n\nAccompanies aosp/875352 and aosp/873133\n\nBug: 121197420\nTest: 1) Boot device; check directories exist and labelled properly\nfor system user; perform backup successfully\n2) Add secondary user; check directories exist and labelled properly;\nperform backup succesfully\n\nChange-Id: If848da4c9254db87b393fce6cfc4169785bfac51\n"
    },
    {
      "commit": "53cf5208170a84717614df7a71fccf9d71697a81",
      "tree": "9032bae3a60a1e0587c65edcbbebe14b56c32c8f",
      "parents": [
        "f8e7ff917512017baf1fff7b2a9efd533fec78a5"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Tue Jan 15 23:35:23 2019 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Wed Jan 16 12:51:12 2019 +0000"
      },
      "message": "[Multi-user] Convert various calls to use user id\n\nChanges various transport, restore and general bookkeeping flows. Also\nperforms restorecon recursively to relabel child directories properly.\n\nBug: 121198605\nBug: 121197942\nBug: 121198606\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) user unlocked -\u003e transports registered successfully\n3) adb shell bmgr backupnow [package]\n4) Cloud restore backup set from 3) -\u003e apps + widgets successful\n5) atest BackupManagerTransportAttributesHostSideTest\n6) Add secondary user -\u003e check all directories/files relabelled\nChange-Id: I26b23fd7bf10b792658fa7c44941be50aee65521\n"
    },
    {
      "commit": "2c9ae0919419d2c3a77136538bdb1c89a6d1f9b6",
      "tree": "6479d7d960a91883080f68f16f5a72ed5de30f38",
      "parents": [
        "66f91878a06abf3307e275c265773732fd31f19e"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Tue Jan 15 12:54:28 2019 +0000"
      },
      "committer": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Tue Jan 15 12:54:28 2019 +0000"
      },
      "message": "[Multi-user] Change ActivityManagerService to use userId.\n\n1. The book-keeping needs to be per user.\n2. The calls into IBackupManager need to pass in the userId.\n3. convert clearPendingBackup to an internal service call.\n\nBug: 121197004\n\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) atest $(find \\\nframeworks/base/services/tests/servicestests/src/com/android/server/backup \\\n-name \u0027*Test.java\u0027)\n3) atest CtsBackupTestCases\n4) atest CtsBackupHostTestCases\n5) \u0027adb shell bmgr\u0027 enabled/backupnow flow\n\nChange-Id: If49e00fc1d6aa770815c454f01b53865f6a68db4\n"
    },
    {
      "commit": "f87b8c885419f5e879d551f0ea01cbaff8d56be5",
      "tree": "47796f69115b55477741882c07265d123e136a94",
      "parents": [
        "74cababfd50fdcdffc219a7d442a917963adad1e",
        "14d5c21e60e09c42e046fb568c3b0f2380e50f45"
      ],
      "author": {
        "name": "Varun Shah",
        "email": "varunshah@google.com",
        "time": "Tue Jan 15 09:00:25 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 15 09:00:25 2019 +0000"
      },
      "message": "Merge \"Updating certain services to be final fields.\""
    },
    {
      "commit": "ca1b5b9f9a9d85b92135e273d4741b97435a250f",
      "tree": "1a37e85efa8f18aac5a4d2794bfb35cd0cc4960c",
      "parents": [
        "dbad904b0229a4df8f0ae43a0e62df0fa5ddee16",
        "99c350da2c2fea1ff0767d86a025dedce169fd15"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Mon Jan 14 23:43:16 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 14 23:43:16 2019 +0000"
      },
      "message": "Merge \"[Multi-user] Convert key-value flow to use user id\""
    },
    {
      "commit": "1cf011cd7658f7f10ae5c802799a79ef91e3ec2b",
      "tree": "9d94bce56c09b154fafabd878b017a4dfd47d83f",
      "parents": [
        "9e60699ea0323b8a12095e4a032dccde1de5942a",
        "851bdd45711400f83e8c1d8be421735f183d7c1d"
      ],
      "author": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Mon Jan 14 20:07:14 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 14 20:07:14 2019 +0000"
      },
      "message": "Merge \"[Multi-User] Make JobScheduler logic multi-user aware\""
    },
    {
      "commit": "99c350da2c2fea1ff0767d86a025dedce169fd15",
      "tree": "d21ed7e8381b4bfb27f3991c325573740996883d",
      "parents": [
        "3596cfa9bcc7a0a2c7c89a9cd212815eeb456112"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Sat Jan 12 16:48:00 2019 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Mon Jan 14 18:05:10 2019 +0000"
      },
      "message": "[Multi-user] Convert key-value flow to use user id\n\nChange paths that key-value backup/restore flow goes through to use\nuser id.\n\nBug: 121198605\nBug: 121198606\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) atest $(find \\\nframeworks/base/services/tests/servicestests/src/com/android/server/backup \\\n-name \u0027*Test.java\u0027)\n3) adb shell bmgr backupnow [kv package]\nChange-Id: Ie192391561f8e03f623c4d86914b3787ff2c0f88\n"
    },
    {
      "commit": "851bdd45711400f83e8c1d8be421735f183d7c1d",
      "tree": "71f1371ee74711dc148326998975a2be4da9aead",
      "parents": [
        "fc758be231a4652e4910c9f31842b29ae2f087bf"
      ],
      "author": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Fri Jan 04 16:44:24 2019 +0000"
      },
      "committer": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Mon Jan 14 17:36:14 2019 +0000"
      },
      "message": "[Multi-User] Make JobScheduler logic multi-user aware\n\nPatchset 1: Introduce BackupJobIdManager to allocate/recycle IDs for KeyValueBackupJob and\nFullBackupJob\n\nPatchset 2: Update KeyValueBackupJob and FullBackupJob to work for multiple users — take in\nuserId as a parameter and use BackupJobIdManager to assign job IDs\n\nPatchset 3: Update robo tests\n\nThe corresponding GTS ScheduledBackupHostSideTest will be updated in a separate CL with the same\ntopic.\n\nBug: 121198009\nTest: 1) atest KeyValueBackupJobTest\n      2) atest KeyValueBackupTaskTest\nChange-Id: Ifdba254b7084b3d0a1507cc6512e98399c1aad8f\n"
    },
    {
      "commit": "d50bda40d3566fdfb4e57472fdaee30345ddc5ca",
      "tree": "bac5bc923e9da28bf5183caeae6960793d0bce0e",
      "parents": [
        "a5e892f5773832e02b0b240db4a95512e8fc996b",
        "1b99948e6bdff490d0919679ff18d5ec2f662d51"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Mon Jan 14 17:04:27 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 14 17:04:27 2019 +0000"
      },
      "message": "Merge \"[Multi-user] Transport changes\""
    },
    {
      "commit": "1b99948e6bdff490d0919679ff18d5ec2f662d51",
      "tree": "328143bdeddf62adcbaf152c6d861d422b01dec4",
      "parents": [
        "5068cada964c862462a1b5646d7a8aa74c4c8772"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Mon Jan 14 12:36:53 2019 +0000"
      },
      "committer": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Mon Jan 14 15:04:24 2019 +0000"
      },
      "message": "[Multi-user] Transport changes\n\nBug: 121197942\n\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) atest $(find \\\nframeworks/base/services/tests/servicestests/src/com/android/server/backup \\\n-name \u0027*Test.java\u0027)\n3) atest CtsBackupTestCases\n4) atest CtsBackupHostTestCases\n5) atest GtsBackupTestCases\n6) atest GtsBackupHostTestCases\n\nChange-Id: If9c23a7d6b2fc936502d184f585041cf91ad5893\n"
    },
    {
      "commit": "14d5c21e60e09c42e046fb568c3b0f2380e50f45",
      "tree": "d59683365cdb4a1aa6e1c1356b837ee8c707cf3c",
      "parents": [
        "27b6918c71f66828718f38b78fe85b6e62d6b24c"
      ],
      "author": {
        "name": "Varun Shah",
        "email": "varunshah@google.com",
        "time": "Fri Jan 11 18:41:58 2019 -0800"
      },
      "committer": {
        "name": "Varun Shah",
        "email": "varunshah@google.com",
        "time": "Fri Jan 11 18:41:58 2019 -0800"
      },
      "message": "Updating certain services to be final fields.\n\nCertain services were removed from being final fields in ag/5932642.\nThis change essentially reverts the deletions of those final fields.\n\nBug: 122591875\nTest: atest cts.tests.app.src.android.app.cts.ActivityManagerTest#testIsAppForegroundRemoved\nChange-Id: I403d214b31c964ee5587c35260138e0af12fd11e\n"
    },
    {
      "commit": "345ec1b9905ee119c169dcbd4a1698f7d00b8c32",
      "tree": "960478b543acd703026d06f3bbe176bad9c1f43e",
      "parents": [
        "be09f2801e099bfd51e378e0b14854956618fde5",
        "4f98512cc5eb420ef55ed32b73e04632034d98cd"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Jan 10 15:56:23 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 10 15:56:23 2019 +0000"
      },
      "message": "Merge \"[Multi-user] Make package changes receiver per-user\""
    },
    {
      "commit": "4f98512cc5eb420ef55ed32b73e04632034d98cd",
      "tree": "85c1c78e4e24fb05a5062160920c3dccd1ee4e5e",
      "parents": [
        "e714a7eaa9e45485be9f29aa58efe41ffa313839"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Wed Jan 09 17:52:22 2019 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Jan 10 14:25:47 2019 +0000"
      },
      "message": "[Multi-user] Make package changes receiver per-user\n\nMakes the BroadcastReceiver that receives changes to installed packages\nand sdcards tied to a specific user.\n\nBug: 121198607\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) Manual testing with user 0 and 11:\n- User started -\u003e receiver registered for correct user;\n- Package changed -\u003e correct receiver;\n- Package added -\u003e correct receiver, updates bookkeeping for correct user;\n- Package removed -\u003e correct receiver, updates bookkeeping for correct user;\n\nChange-Id: I68c034da6ec775a4d0489a2d09fc32854dcf11dc\n"
    },
    {
      "commit": "4a5e370b61f7caa6a21fc90f85bcaf5b06cea832",
      "tree": "8f395ac2515e32225ea468943546644be6e272a6",
      "parents": [
        "9879a6375b0aec4e118d372c68e9c484308a325d"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Mon Jan 07 16:13:22 2019 +0000"
      },
      "committer": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Wed Jan 09 20:39:26 2019 +0000"
      },
      "message": "[Multi-user] adb fullbackup: support userId\n\nBug: 121198030\n\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) atest $(find \\\nframeworks/base/services/tests/servicestests/src/com/android/server/backup \\\n-name \u0027*Test.java\u0027)\n3) atest CtsBackupTestCases CtsBackupHostTestCases GtsBackupTestCases GtsBackupHostTestCases\n4) tested \"adb backup -all -obb -apk\". confirmed that log contains \"obb dir: /storage/emu..\" etc. restore of wallpaper worked.\n\nChange-Id: Ic8ff71c5dd949aecc7561a3bac5033e822fcf305\n"
    },
    {
      "commit": "834b72e770cc585fb8640a04f9ced3c70e1be060",
      "tree": "e0381077d8b9c115e64a94f114650e01021dc4d8",
      "parents": [
        "620609820631db2b55af78e0987cfccc119f7d20",
        "356e09b0d4cda6413d7dd22669bf6c4b7c8d76a4"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Wed Jan 09 13:48:28 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 09 13:48:28 2019 +0000"
      },
      "message": "Merge \"[Multi-user] Make backup and initialize receivers per user\""
    },
    {
      "commit": "8f7cd8787db56f62e7daa4f6899a8956a5f6b39c",
      "tree": "7956fab369c3e0693f74c4975c0cf39ed7149d5a",
      "parents": [
        "cf3728a30225776151f7a1d511e97994d150591c",
        "98c84e193eaed1d55312ba84795b07585e8c2aab"
      ],
      "author": {
        "name": "Varun Shah",
        "email": "varunshah@google.com",
        "time": "Wed Jan 09 01:03:43 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 09 01:03:43 2019 +0000"
      },
      "message": "Merge \"Moved isAppForeground to ActivityManagerInternal.\""
    },
    {
      "commit": "356e09b0d4cda6413d7dd22669bf6c4b7c8d76a4",
      "tree": "cdec453afa86da0a4765cf873bec06f49b784ef2",
      "parents": [
        "cb577bca431c00aaa30d547f893ead9c2fa15f18"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Tue Jan 08 10:59:46 2019 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Tue Jan 08 20:19:43 2019 +0000"
      },
      "message": "[Multi-user] Make backup and initialize receivers per user\n\nMakes the PendingIntent and BroadcastReceiver for running backup and\ninitialize operations tied to a specific user. Also some style cleanup.\n\nBug: 121305979\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) adb shell bmgr clear [transport] -\u003e init successfully\n3) adb shell bmgr run -\u003e backup successful\n4) adb shell bmgr enable false -\u003e runs device init successfully\nChange-Id: Ic3f411fbf97c758974a0af10a36e4812d19a534d\n"
    },
    {
      "commit": "e5050980339d23191f86d84021d61a367b3ff7bf",
      "tree": "606d9b0c7ebb9a9ddf498c37e8e2730d32811a48",
      "parents": [
        "01a6fc95fe90296365362dc7909d11f1417b2f93",
        "6e95fc95cee50cfd28a8e4a10e2557e062d95866"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Tue Jan 08 10:08:28 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 08 10:08:28 2019 +0000"
      },
      "message": "Merge \"[Multi-user] Clean up backup enabled initialization\""
    },
    {
      "commit": "98c84e193eaed1d55312ba84795b07585e8c2aab",
      "tree": "4829262f95fde1157afabe71c10a9b8b7aa9d0a8",
      "parents": [
        "c0203f1268cc1749f796700db8643b5de75903f9"
      ],
      "author": {
        "name": "Varun Shah",
        "email": "varunshah@google.com",
        "time": "Thu Jan 03 19:24:24 2019 -0800"
      },
      "committer": {
        "name": "Varun Shah",
        "email": "varunshah@google.com",
        "time": "Mon Jan 07 12:47:27 2019 -0800"
      },
      "message": "Moved isAppForeground to ActivityManagerInternal.\n\nRemoved isAppForeground from the ActivityManager aidl and added it to\nActivityManagerInternal. Updated all of its references as well.\n\nBug: 119327603\nTest: atest cts.tests.app.src.android.app.cts.ActivityManagerTest#testIsAppForegroundRemoved\nTest: atest WifiServiceImplTest\nTest: atest WifiLockManagerTest\n\nChange-Id: I5c0fbe41df3cd00e02f8c0e1005fc9cf5832df77\n"
    },
    {
      "commit": "2fbb91c4a9e60ed2415abd7205d3237601c0e70b",
      "tree": "0755c68bdb27a53a366e88d985bbac254d081126",
      "parents": [
        "2729b24c533c64c8fd88bc61cd027b571b92d9ec",
        "b3bf0c63e22c539c44173beb2376358a21772c83"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Mon Jan 07 17:45:53 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 07 17:45:53 2019 +0000"
      },
      "message": "Merge changes Ibd37ae12,I9a33547c\n\n* changes:\n  backup: no-op code cleanup\n  [Multi-user] Make backup dirs user-specific\n"
    },
    {
      "commit": "6e95fc95cee50cfd28a8e4a10e2557e062d95866",
      "tree": "9bf4e1c03e63f78a41f9c3384ef428c3ad463e77",
      "parents": [
        "ed04879a5db669047b180477989c9b9bdc7d7015"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Jan 03 14:42:11 2019 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Mon Jan 07 16:50:24 2019 +0000"
      },
      "message": "[Multi-user] Clean up backup enabled initialization\n\nRemove indirection in setting backup enabled state to call directly into\nthe UserBMS instance.\n\nBug: 121305979\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) During SUW -\u003e backup initializes off;\nTurn backup on in SUW -\u003e backup enabled;\nSubsequent boots -\u003e backup initializes on\nChange-Id: Ief688c4e1c14b443db87eda43ec0ee398282662f\n"
    },
    {
      "commit": "b3bf0c63e22c539c44173beb2376358a21772c83",
      "tree": "0e683e3fdb11889c0d7c00b35514988caf386c14",
      "parents": [
        "801f2ec567fbeb9d2a76b2c062ef3cc39c0e4d2a"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Fri Jan 04 22:28:49 2019 +0000"
      },
      "committer": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Mon Jan 07 15:16:22 2019 +0000"
      },
      "message": "backup: no-op code cleanup\n\n1. remove unused methods,imports,members\n2. make members private/final as much as possible\n\nBug: 122371936\n\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) atest $(find \\\nframeworks/base/services/tests/servicestests/src/com/android/server/backup \\\n-name \u0027*Test.java\u0027)\n3) atest CtsBackupTestCases\n4) atest CtsBackupHostTestCases\n\nChange-Id: Ibd37ae124be87487b0b30bcb92b012c1713f6555\n"
    },
    {
      "commit": "801f2ec567fbeb9d2a76b2c062ef3cc39c0e4d2a",
      "tree": "1672fecf3f121ce8dfb9ca1820e6280d9df06439",
      "parents": [
        "ed04879a5db669047b180477989c9b9bdc7d7015"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Fri Jan 04 01:27:01 2019 +0000"
      },
      "committer": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Mon Jan 07 14:56:51 2019 +0000"
      },
      "message": "[Multi-user] Make backup dirs user-specific\n\n1. For system user, functionality remains almost (see 2) exactly the\nsame.\n2. Change the full backup dir which is used only to write temporary\nmanifest and meta dirs by the system process when doing full backup.\nThis is so that we dont have to worry unnecessarily about yet another dir.\n\nBug: 120424138\n\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) atest $(find \\\nframeworks/base/services/tests/servicestests/src/com/android/server/backup \\\n-name \u0027*Test.java\u0027)\n3) atest CtsBackupTestCases\n4) atest CtsBackupHostTestCases\n5) atest GtsBackupTestCases\n6) atest GtsBackupHostTestCases\n7) \u0027adb shell bmgr\u0027 enabled/backupnow flow\n\nChange-Id: I9a33547c9595a86b62869ee731d4c75a029922e8\n"
    },
    {
      "commit": "c0a76041cbf2a607fce219f4226e43409c0b2d62",
      "tree": "868dc9de3f3a161e77b37e61c6466f761f5cb04e",
      "parents": [
        "443143af4bf63d752d5617989f74122496ff4427"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Mon Jan 07 14:36:57 2019 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Mon Jan 07 14:36:57 2019 +0000"
      },
      "message": "[Multi-user] Make various backup settings be per-user\n\nUse the \"forUser\" variation of getting/putting settings for the\nfollowing backup settings:\n- backup_auto_restore\n- backup_transport\n- packages_to_clear_data_before_full_restore\n\nBug: 121305979\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) Verify default auto restore is true;\nToggle auto restore in UI -\u003e changes UserBMS state;\nChange current transport via bmgr -\u003e changes UserBMS state;\nCheck settings for user 0 different from user 10;\n3) Run backup pass, restore pass\n\nChange-Id: I69e2a4f9c870dd7b5661dfa17f891384825926f5\n"
    },
    {
      "commit": "443143af4bf63d752d5617989f74122496ff4427",
      "tree": "6b82f3c78a2e44fe10a1ea59ccae3cda40d8ab40",
      "parents": [
        "180e51535c2c56e87d90b6bf36caefc48ecff4e8"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Fri Jan 04 20:31:11 2019 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Mon Jan 07 12:09:24 2019 +0000"
      },
      "message": "[Multi-user] Change device provisioned to per-user setup complete\n\nMigrate from the global setting DEVICE_PROVISIONED to the per-user\nsetting USER_SETUP_COMPLETE. The logic for how the service handles\nprovisioned state is the same, only the setting we use to determine the\nstate is changed, as well as a rename to reflect this (\"provisioned\" -\u003e\n\"setup complete\").\n\nProvisionedObserver is now SetupObserver (move didn\u0027t persist b/c of\namount of changes to the file)\n\nThe BackupManagerMonitor log event id referencing provisioned will be\nchanged in a future CL as it requires an API change.\n\nBug: 121305979\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) Reset device, go through SUW -\u003e not setupComplete;\nFinish SUW -\u003e setupComplete (verify logging + dumpsys) and jobs\nscheduled;\nPerform backup (not blocked by setupComplete);\nAdd new user -\u003e setupComplete only after finishing SUW\n\nChange-Id: Iddf9ce7853a13b2d51135047de1b270af7034c06\n"
    },
    {
      "commit": "180e51535c2c56e87d90b6bf36caefc48ecff4e8",
      "tree": "22946e3f9d1b8a35273598440308cd9a6f6ea986",
      "parents": [
        "c54ffd28f7efa82054ebc4443c7c6a396e07ddd6"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Jan 03 17:16:58 2019 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Fri Jan 04 12:33:29 2019 +0000"
      },
      "message": "[Multi-user] Make each user have their own backup thread\n\nThe original backup thread is now only used by Trampoline and BMS for\ngeneral non-user specific operations. Each UserBMS instance has its own\n\u0027backup-[user id]\u0027 thread to allow for parallelism between users. When a\nuser is stopped, we quit this thread.\n\nBug: 121305979\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) Start system user -\u003e verify backup-0 thread created;\nStart secondary user -\u003e verify backup-10 thread created;\nStop secondary user -\u003e verify backup-10 thread stopped;\nVerify work posted to the thread is executed (register transports, bmgr\nbackupnow, etc.)\n\nChange-Id: Iaa37fb3e2eb442653e27565ca13a88a0582efa9d\n"
    },
    {
      "commit": "2de1d8577d328d8b8fd4c409f1e4d9e06dd764f5",
      "tree": "0fdf0f1d62313af47b307534be7183b6923350d4",
      "parents": [
        "570a4f0c544fbc4f34051a72bd743d111daf1f73",
        "71508fda924474491b88e20f4635e7509a9364d7"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Thu Jan 03 13:05:49 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 03 13:05:49 2019 +0000"
      },
      "message": "Merge \"[Multi-user] No-op refactor to move backup dirs and settings, which should be user-specific, to one class for each.\""
    },
    {
      "commit": "71508fda924474491b88e20f4635e7509a9364d7",
      "tree": "3661665582c935793752cff5db44ca8e3aba2050",
      "parents": [
        "d21496879af51d6d074d3eaa828dbe1434eed1d8"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Wed Jan 02 17:04:04 2019 +0000"
      },
      "committer": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Wed Jan 02 22:41:36 2019 +0000"
      },
      "message": "[Multi-user] No-op refactor to move backup dirs and settings, which should be user-specific,\nto one class for each.\n\nThis is to be able to see all filesystem access by backup/restore\ntogether so as to prepare to make all these directories be per user.\n\nBug: 120424138\n\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) atest $(find \\\nframeworks/base/services/tests/servicestests/src/com/android/server/backup \\\n-name \u0027*Test.java\u0027)\n3) atest CtsBackupTestCases\n4) atest CtsBackupHostTestCases\n5) \u0027adb shell bmgr\u0027 enabled/backupnow flow\n\nChange-Id: I9f30d22b9f609eaaf06d9e5a6fa5879ed1f0e653\n"
    },
    {
      "commit": "91824ff0969de5ea7a0a72143a8417d889d16b59",
      "tree": "8f0fce50e9d2aa6bb0bf648a27345023a08a7bc4",
      "parents": [
        "a0bf4d7ac2e4b1f5ea8d3127874d2a427f554483"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Thu Dec 20 14:52:28 2018 +0000"
      },
      "committer": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Fri Dec 21 12:11:23 2018 +0000"
      },
      "message": "[Backup cleanup] remove unused (and no-op) method setBackupProvisioned\n\nBug: 120120742\n\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) atest $(find \\\nframeworks/base/services/tests/servicestests/src/com/android/server/backup \\\n-name \u0027*Test.java\u0027)\n3) atest CtsBackupTestCases\n4) atest CtsBackupHostTestCases\n5) atest GtsBackupTestCases\n6) atest GtsBackupHostTestCases\n\nChange-Id: I7b712f346f851ca4f2b6b7d62a0a8fdcc7c77a56\n"
    },
    {
      "commit": "71452ce2047219037c8bb18f41e7e5a55e7ab07f",
      "tree": "8b25d2debbd8f8c00b299f3518c430f190e96a91",
      "parents": [
        "49ba9fee7a69b5b19c8e8dd2951dea94aa5bfc3e"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Dec 20 14:49:11 2018 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Fri Dec 21 10:07:37 2018 +0000"
      },
      "message": "[Multi-User] Unregister stopped users in BMS\n\nAdds a handler for system service callbacks when a user is stopped. This\ncurrently only unregisters the user in bookkeeping but will be used in\nthe future for cleanup work such as cancelling scheduled jobs, etc.\n\nBug: 120212806\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) atest TrampolineTest\n3) Enable multi user + register user -\u003e service started for user; stop\nuser -\u003e user is unregistered\n\nChange-Id: Ic712da646f961b9bb02c7d77d964a13345eca7ec\n"
    },
    {
      "commit": "816fd23605ae6a7a4af4f372d33ea4080d6e69b0",
      "tree": "f6742feaed5bf6eaf28d0b0b474f112b7264de0f",
      "parents": [
        "69be3f19b68b78a394630c13682660900867bf58"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Wed Dec 19 21:19:00 2018 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Dec 20 16:53:48 2018 +0000"
      },
      "message": "[Multi-user] Consolidate system and non-system user unlock callbacks\n\nIn Trampoline, initializing the BMS service and starting the service for\nthe system user are now handled separately. System and non-system users\nnow both use the same unlock callback to bring up their UserBMS instance.\n\nBug: 120212806\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) atest TrampolineTest\n3) Unlock system user -\u003e starts service for user\n4) Multi-user enabled + unlock non-system user -\u003e starts service for\nuser\n\nChange-Id: Id49bb4a3834eb299be69d924b94a36794a4eb2e4\n"
    },
    {
      "commit": "8cd86f195e95b7b1c82f919c9f8241a833866998",
      "tree": "99f6cb02f113c560c3b51ba481c61883803fed05",
      "parents": [
        "16729c7cd84c025eb8e84e9d155a7b20db85f15f"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Wed Dec 19 14:53:06 2018 +0000"
      },
      "committer": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Wed Dec 19 19:48:13 2018 +0000"
      },
      "message": "[Multi-user] Change Trampoline,BackupManagerService to use userId\n\nAlso, a few additional small changes:\n1) move getTransportWhitelist from UserBackupManagerService to\nBackupManagerService since it doesn\u0027t depend on the user\n2) remove setBackupProvisioned from BackupManagerService and\nUserBackupManagerService since its unused and is a no-op. I\u0027ll remove\nit from Trampoline and the AIDL in a future CL.\n\nBug: 120120742\n\nTest: 1) atest RunBackupFrameworksServicesRoboTests\n2) atest $(find \\\nframeworks/base/services/tests/servicestests/src/com/android/server/backup \\\n-name \u0027*Test.java\u0027)\n3) atest CtsBackupTestCases\n4) atest CtsBackupHostTestCases\n5) atest GtsBackupTestCases\n6) atest GtsBackupHostTestCases\n7) \u0027adb shell bmgr\u0027 enabled/backupnow flow\n\nChange-Id: Iec932dac2ccd6200888e22b35a524a2aec834854\n"
    },
    {
      "commit": "9f6e3e6948a3d3fab96170d9ed795ed5b8ede801",
      "tree": "86856c043225726560b8c746a4eb6d8121b6d497",
      "parents": [
        "70f04ce261027948e00d8c20935d6b38cee6112a",
        "f55148bfe6de148055d638a0adb1fdb85b07b029"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Wed Dec 19 16:23:03 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Dec 19 16:23:03 2018 +0000"
      },
      "message": "Merge \"[Multi-user] Store user id in UserBMS\""
    },
    {
      "commit": "2ec8b910261ffceb80bf4c11dc7cf1d1fd63949e",
      "tree": "91311d57d5b156f20d5b72d31c964f817d456f71",
      "parents": [
        "d4dcb418634fcab4090e6952895bdd8e3e3913e0",
        "d1ee43e576b2a87b28c096404f7cb3cf7a123ae2"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Wed Dec 19 11:50:10 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Dec 19 11:50:10 2018 +0000"
      },
      "message": "Merge \"[Multi-user] Change more BackupManager AIDL methods to accept userId in methods\""
    },
    {
      "commit": "f55148bfe6de148055d638a0adb1fdb85b07b029",
      "tree": "9f150d4787c9cf23e6f4f489b2ed5728a0541629",
      "parents": [
        "d4dcb418634fcab4090e6952895bdd8e3e3913e0"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Tue Dec 18 14:56:50 2018 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Wed Dec 19 10:57:01 2018 +0000"
      },
      "message": "[Multi-user] Store user id in UserBMS\n\nThe user id will be used in methods to other system services and passed\nto backup/restore subclasses.\n\nBug: 120212806\nTest: atest RunFrameworksServicesRoboTests\nChange-Id: I9aca91c3aca30ac0861438e438c4b96bb78e14ed\n"
    },
    {
      "commit": "d1ee43e576b2a87b28c096404f7cb3cf7a123ae2",
      "tree": "58b8862335c56ac80e6f220e96690ed4b13f6a9d",
      "parents": [
        "009bd1bfe357418d993a93f3b28adb56d8ea01e5"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Sun Dec 16 21:41:03 2018 +0000"
      },
      "committer": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Tue Dec 18 14:10:17 2018 +0000"
      },
      "message": "[Multi-user] Change more BackupManager AIDL methods to accept userId in methods\n\nBug: 120120742\n\nTest: 1) atest RunFrameworksServicesRoboTests\n2) atest $(find \\\nframeworks/base/services/tests/servicestests/src/com/android/server/backup \\\n-name \u0027*Test.java\u0027)\n3) atest CtsBackupTestCases\n4) atest CtsBackupHostTestCases\n5) atest GtsBackupTestCases\n6) atest GtsBackupHostTestCases\n7) \u0027adb shell bmgr\u0027 enabled/backupnow flow\n\nChange-Id: Ia0641f66dd0a935420f1aee332bb2e21ca03610e\n"
    },
    {
      "commit": "6a93c233fe851c5629aedf388d485c752d5a6ffe",
      "tree": "87795b9bad8da680e7497b8ee6e502afe0dad4cc",
      "parents": [
        "feb504cb6626aab7b957ddee1c13f9cbadd7314c"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Tue Dec 11 18:24:03 2018 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Mon Dec 17 22:00:51 2018 +0000"
      },
      "message": "[Multi-user] Decouple UserBMS and BMS creation\n\nThe BMS constructor is now only responsible for setting up the system\nservice. User registration logic is moved to its own helper that\nTrampoline calls during a user unlock callback.\n\n** Logic **\nAll IBackupManager methods that BMS implements now use bookkeeping to\nget the UserBMS instance to act on. Currently the system user instance\nis hardcoded in most methods as we don\u0027t pass in the user id parameter\n(except for a few added in ag/5667585).\n\nIf these methods are called on a non-registered user, we log and return\na default value.\n\n** Tests **\nEach IBackupManager method now has four corresponding tests:\n1) Permission denial test: No INTERACT_ACROSS_USERS_FULL permission +\nnon-calling user id \u003d security exception (added in ag/5667585, only for\nmethods that take in an user id param currently).\n2) Permission grant test: INTERACT_ACROSS_USERS_FULL permission +\nnon-calling user id \u003d call forwarded.\n3) Registered user test: Passing an user id that has a corresponding\nUserBMS instance -\u003e delegate call to that UserBMS instance.\n4) Unknown user test: Passing an user id that has no corresponding\nUserBMS instance -\u003e no call forwarded.\n\nThese tests will be updated when more methods take in an user id param.\n\nBug: 120212806\nTest: 1) atest RunFrameworksServicesRoboTests\n2) Unlock system user -\u003e starts service, registers transports\n3) adb shell bmgr flows\n4) atest TrampolineTest\n5) CTS + GTS Backup test cases\n6) SUW + Cloud restore; D2D\nChange-Id: Ic04f754c75af905ee34c609063c08406e23671d5\n"
    },
    {
      "commit": "a2fe6c5bb914bb3374a13d7c718614dd98698b71",
      "tree": "b9151fb44e4b8d3df789158e9c590bdcadded722",
      "parents": [
        "1982ca78e30ae156d77d8a3216593f6272fc0ec9"
      ],
      "author": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Mon Dec 03 17:28:39 2018 +0000"
      },
      "committer": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Mon Dec 17 16:48:13 2018 +0000"
      },
      "message": "[Multi-user] Add -user param to adb backup/restore\n\nAdd an optional parameter -user to provide ID of the user for which to\nrun backup/restore operation. Add robolectric test to verify the\nnew parameter is proccessed correctly.\n\nBug: 119908153\nTest: 1) atest BackupTest\n      2) atest BackupManagerServiceTest\n      3) atest TrampolineTest\n      4) atest GtsBackupTestCases\n      5) atest GtsBackupHostTestCases\n      6) Manual:\n        - Run \"adb backup -all\" and verify that backup is successfull\n        - Run \"adb restore\" and verify that restore is successfull\n        - Run \"adb backup -all -user 10\" and verify that backup faield as\n          it\u0027s only currently supported for system user\n        - Run \"adb restore -user 10\" and verify that restore failed as it\u0027s\n          only currently supported for system user\n\nChange-Id: I6dbf9c87eedd5a72da0446beff7d2551f98f2654\n"
    },
    {
      "commit": "cd44f758952f17f838f10381d24a9ff3e8b4cdbe",
      "tree": "b64a72d55e1185bbad5b29292098374ea9983103",
      "parents": [
        "a96d8d0b78b93a428edad06b0202cb38741213ef"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Fri Dec 07 16:49:37 2018 +0000"
      },
      "committer": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Tue Dec 11 17:06:30 2018 +0000"
      },
      "message": "[Multi-user] Change BackupManager AIDL to accept userId in methods\n\nBug: 120120742\n\nTest: 1) atest RunFrameworksServicesRoboTests\n2) atest $(find \\\nframeworks/base/services/tests/servicestests/src/com/android/server/backup \\\n-name \u0027*Test.java\u0027)\n3) atest CtsBackupTestCases\n4) atest CtsBackupHostTestCases\n5) atest GtsBackupTestCases\n6) atest GtsBackupHostTestCases\n7) Toggle Backup/\u0027Backup Now\u0027 in Settings\n8) \u0027adb shell bmgr\u0027 enabled/backupnow flow\n\nChange-Id: I5dba38f6a24e07947d1b0948f9caefeca011205d\n"
    },
    {
      "commit": "59f6f7fffaca0533dc636e7441ae28fa5aa199bb",
      "tree": "94eaade06fbb83ab1331ba1c103e09f421ffd18b",
      "parents": [
        "604eb2a83801d4bfd9e83e1561678956fbe7663c"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Tue Dec 04 19:18:32 2018 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Mon Dec 10 12:43:44 2018 +0000"
      },
      "message": "[Multi-user] Initialize user state in UserBMS\n\nMove per-user state initialization (directories for bookkeeping data and\ntransport manager) from BMS to UserBMS.\n\nThe UserBMS constructor is now private and callers should use the static\nhelper to create a new instance. This is primarily for three reasons:\n1) Allows for extracting logic out of the constructor into helpers.\n2) Allows for performing necessary user-specific setup in the future\nsuch as data migration.\n3) Allows for writing unit tests without having setters/getters\nexclusively for tests.\n\nBug: 120212806\nTest: 1) atest RunFrameworksServicesRoboTests\n2) boot -\u003e unlock user -\u003e service started and verify transports\nregistered\n3) adb shell bmgr backupnow [package] -\u003e writes to /data dir\n   adb shell bmgr enable false -\u003e writes to /data dir\n4) adb shell bmgr backupnow --all -\u003e writes to /cache dir\n\nChange-Id: If88d95059951dbae0abf691629db1a05d27f743d\n"
    },
    {
      "commit": "604eb2a83801d4bfd9e83e1561678956fbe7663c",
      "tree": "f57700050a1ada514c5d9e4d83e5c9831248123f",
      "parents": [
        "3b2e750a93816c298df8b739c56fd76487f1d18f"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Tue Dec 04 13:40:10 2018 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Mon Dec 10 12:43:15 2018 +0000"
      },
      "message": "[Multi-user] Consolidate BMS creation\n\nPart of prep work to create a UserBMS instance per user.\n\nMoves BMS state initialization to the BMS constructor. Most of this\nstate will then be moved to the UserBMS constructor since it\u0027s per-user\nstate.\n\nBug: 120212806\nTest: 1) atest RunFrameworksServicesRoboTests\n2) atest TrampolineTest\n3) boot -\u003e unlock user -\u003e create service\n4) adb shell bmgr flows\n\nChange-Id: I140c4db3d5c147e3dd09e590eaf15a9f4d8b3da1\n"
    },
    {
      "commit": "3b2e750a93816c298df8b739c56fd76487f1d18f",
      "tree": "132a1741a8f8a5748bfb1d9421e18d44db732050",
      "parents": [
        "a6d828755ee306c0e01a078530c22bd83d56f55f"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Fri Nov 30 16:57:12 2018 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Mon Dec 10 12:41:51 2018 +0000"
      },
      "message": "[Multi-user] Stop migrating legacy backup setting\n\nThe backup enabled setting BACKUP_ENABLED was deprecated since Android\nN and replaced by a file containing enabled state.\n\nStop migrating this setting for the system user to be able to\nconsolidate starting the backup service for system and non-system users.\n\nThere\u0027s been several Android versions since the deprecation that the\nchance we need the setting is slim (as devices shouldn\u0027t OTA from N to\ncurrent). Without the setting, the default would be backup off (absence\nof file) which can then be enabled again via SUW or Settings.\n\nBug: 120212806\nTest: 1) boot and unlock system user\n2) adb shell bmgr backup [package]; adb shell bmgr restore [package]\n3) atest RunFrameworksServicesRoboTests\nChange-Id: I6d2b375a9400dffa9f75528d42f36b4af2e14187\n"
    },
    {
      "commit": "a6d828755ee306c0e01a078530c22bd83d56f55f",
      "tree": "43f9f9ff4f532e50e537846628132c64ae0a91e9",
      "parents": [
        "348c897729fef9a4c3d2f522efea0c6946071971"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Fri Nov 30 12:09:08 2018 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Mon Dec 10 12:33:28 2018 +0000"
      },
      "message": "[Multi-user] Create setting for multi-user backup service support\n\nWhether the backup service supports multi-user is now configured in a\nGlobal setting: backup_multi_user_enabled\n\nThis allows us to develop multi-user support hidden behind a flag. In a\nfuture CL, we\u0027ll also gate the types of users we support.\n\nAlso create basic infrastructure for starting the service for a newly\nunlocked user (currently a no-op).\n\nBug: 120212806\nTest: 1) atest TrampolineTest\n2) adb shell settings put global backup_multi_user_enabled 0;\n   unlock system user -\u003e verify service started;\n   unlock user 10 -\u003e verify service not started;\n3) adb shell settings put global backup_multi_user_enabled 1;\n   unlock system user -\u003e verify service started;\n   unlock user 10 -\u003e verify service started;\n\nChange-Id: I048e017cfa6148097cebe2eb2916d1b53c53d3b0\n"
    },
    {
      "commit": "ae12b3c5a1e875be608cebfe4445eaacaff60aaf",
      "tree": "82675efe92cd73d7c641a7ebddf3d55968a58c3e",
      "parents": [
        "e95bb70598faa3738c696621303ede566cf632ba"
      ],
      "author": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Wed Nov 21 16:33:52 2018 +0100"
      },
      "committer": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Wed Dec 05 16:11:28 2018 +0000"
      },
      "message": "Ports the first part of encryption/key to AOSP.\n\nA few additional changes (apart from style and usual dependencies) were needed:\n- Dependency on KeyStore was removed (see b/75771701).\n- References to internal names were removed or renamed.\n- ByteStringUtils is used as a replacement for the Guava bytes-to-hex-string conversions.\n- Uses java\u0027s Optional rather than Guava\u0027s Optional.\n- Change to Slog for logging.\n- TertiaryKeyRotationTracker.MAX_BACKUPS_UNTIL_TERTIARY_KEY_ROTATION is now a constant rather than a flag.\n\nBug: 111386661\nTest: atest RunFrameworksServicesRoboTests\nChange-Id: If9bcfb1f73ba78c278947b8499236bb536e625eb\n"
    },
    {
      "commit": "da6e447f2a652ad60e31eaa835301770557cde32",
      "tree": "1bf288af72395bf95b5d29e504a174068115e110",
      "parents": [
        "fc14d7967196811fd844e8400e3daec9f90249fd",
        "df70906e801efc6f2b5ff0fa722c951b2d2bdfd5"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Nov 29 19:53:39 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Nov 29 19:53:39 2018 +0000"
      },
      "message": "Merge \"Update B\u0026R owners\""
    },
    {
      "commit": "df70906e801efc6f2b5ff0fa722c951b2d2bdfd5",
      "tree": "b597050b23609ffbca07349d1353910167a9d792",
      "parents": [
        "de93099a3818784297da83e7c6a43d52a86e7e9c"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Nov 29 15:55:12 2018 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Nov 29 15:55:12 2018 +0000"
      },
      "message": "Update B\u0026R owners\n\nOwners source of truth is now in AOSP but has merge conflicts with\ninternal so submitting a separate CL here (AOSP change at\naosp/813915).\n\nTest: N/A\nChange-Id: I0e96914bb339874a30c80776596f2d84e508df85\n"
    },
    {
      "commit": "8c0d41ac2dc5401ab4ba929b21726ed828ebc8d2",
      "tree": "4ff585420942bab56d2bebb3e08b08f7e9d7f545",
      "parents": [
        "d4ef3010915e5ed6d24a0d26e9615c365a962083",
        "384230f9e0e8116bedefbe934d4d46c33646bf9d"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Nov 29 13:36:57 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Nov 29 13:36:57 2018 +0000"
      },
      "message": "Merge \"[Multi-user] Rename GlobalBackupManagerService -\u003e BackupManagerService\""
    },
    {
      "commit": "384230f9e0e8116bedefbe934d4d46c33646bf9d",
      "tree": "2e96d07d81ff3f1c6d920319a85017d79ba64e35",
      "parents": [
        "813716b1990d5c1c044ac4d735b9c52eba965e18"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Wed Nov 28 10:58:08 2018 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Wed Nov 28 12:30:21 2018 +0000"
      },
      "message": "[Multi-user] Rename GlobalBackupManagerService -\u003e BackupManagerService\n\nRestore original naming since UserBackupManagerService is now merged.\n\nJust find and replace, no functionality changes in this CL.\n\nBug: 118520567\nTest: 1) atest RunFrameworksServicesRoboTests\n2) atest $(find \\\nframeworks/base/services/tests/servicestests/src/com/android/server/backup \\\n-name \u0027*Test.java\u0027)\n3) adb shell bmgr flows\nChange-Id: Ia37997cec93fac9ebb5102edfff9000c9cff4eb1\n"
    },
    {
      "commit": "178828f259e0ed1bbcab8a5bdfb74bf3219fe036",
      "tree": "5327597f7d48e8909a703afc2854173ee30f7778",
      "parents": [
        "ed3d6070c1763fee6d9f643b08324650a926f506",
        "813716b1990d5c1c044ac4d735b9c52eba965e18"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Wed Nov 28 10:37:18 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Nov 28 10:37:18 2018 +0000"
      },
      "message": "Merge \"[Multi-user] Extract BackupManagerService to UserBackupManagerService\""
    },
    {
      "commit": "fc2851e4d5fcb7d3bee2256df7e3f45b84c5c12c",
      "tree": "8277112aca368e16fcd7c4af29cd36faefd912f1",
      "parents": [
        "30968d9df74fbdf8491c116ca72e54ae54be16bd"
      ],
      "author": {
        "name": "Patrick Baumann",
        "email": "patb@google.com",
        "time": "Tue Nov 13 15:23:22 2018 -0800"
      },
      "committer": {
        "name": "Patrick Baumann",
        "email": "patb@google.com",
        "time": "Tue Nov 27 12:56:14 2018 -0800"
      },
      "message": "Removes ASEC-related logic from the framework\n\nThis change removes remaining ASEC-related logic from the framework in\npreparation for install refactoring.\n\nBug: 109941548\nTest: install still works\nChange-Id: Ic7322038e45c026bcc59800a5a9fafdbb461021f\n"
    },
    {
      "commit": "813716b1990d5c1c044ac4d735b9c52eba965e18",
      "tree": "8be8efa9d1b6976f7a442deff9c40382c6097894",
      "parents": [
        "de93099a3818784297da83e7c6a43d52a86e7e9c"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Tue Nov 20 14:08:21 2018 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Tue Nov 27 14:23:30 2018 +0000"
      },
      "message": "[Multi-user] Extract BackupManagerService to UserBackupManagerService\n\nBMS is split into GlobalBMS and UserBMS.\nUserBMS:\n- Core backup/restore implementations and bookkeeping.\n- Will be per user in a future CL (only one instance in this CL to limit\nscope of changes).\n\nGlobalBMS:\n- System service definition, interaction with Trampoline, user-aware\noperations.\n- Will be renamed back to BMS in a future CL (so BMS history can follow\nUserBMS in this CL).\n\n*** Reviewers, please pay attention to the patchset breakdown to better\nunderstand what is a rename/move vs. new changes ***\n\n* Base -\u003e Patchset 2: BMS splits into GlobalBMS and UserBMS (MOVE ONLY)\n\nPatchset 1: Rename BMS -\u003e UserBMS\nPatchset 2: Move parts of UserBMS to GlobalBMS\nNo new functionality, only moving existing code.\n\n* Patchset 2 -\u003e Patchset 3: New functionality for GlobalBMS\n\n- Switch references from BMS to GlobalBMS in Trampoline.java.\n- Change the definition of the system service in SystemServer.java to\nGlobalBMS.\n- Instantiate one instance of UserBMS in GlobalBMS constructor.\n- Add all IBackupManager methods, which for now just directly calls the\ncorresponding method in UserBMS.\n\n* Patchset 3 -\u003e Patchset 4: Migrate usages of BMS in code (RENAME ONLY)\n\nFind and replace, no new functionality.\n\n* Patchset 4 -\u003e Patchset 5: Migrate usages of BMS in tests (RENAME ONLY)\n\nFind and replace, no new functionality.\n\n* Patchset 5 -\u003e Patchset 6: New tests for GlobalBMS\n\nAdd tests for all the new IBackupManager methods added (just tests\nstraight redirection for now).\n\n* Overall: View Patchset 2 -\u003e [Latest Patchset] for new code.\n\nTODO: Modify art-profile with rename\n\nBug: 118520567\nTest: 1) atest RunFrameworksServicesRoboTests\n2) atest $(find\nframeworks/base/services/tests/servicestests/src/com/android/server/backup\n-name \u0027*Test.java\u0027)\n3) atest GtsBackupHostTestCases\n4) atest CtsBackupTestCases\n5) atest CtsBackupHostTestCases\n6) atest DeviceOwnerTest\n7) \u0027Backup Now\u0027 in Settings\n8) Cloud and d2d restore in SUW; deferred restore\n9) All \u0027adb shell bmgr\u0027 flows\n10) adb backup; adb restore\nChange-Id: Ib5a5837375fe950bc7d33a5e31cca16b605541f9\n"
    },
    {
      "commit": "850f109ec83f3ce41f654357243333463d98d32d",
      "tree": "3cafb3e77996a43ef6c593937e676caf28c1c82a",
      "parents": [
        "5c4f214953d0b364df2a37d17cf1fc3d71655d05",
        "8d144eb8bd3487a68c3a0cf58d9744e7d9e1d78b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 22 10:24:38 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Nov 22 10:24:38 2018 +0000"
      },
      "message": "Merge \"Start using shared libraries class loader.\""
    },
    {
      "commit": "8d144eb8bd3487a68c3a0cf58d9744e7d9e1d78b",
      "tree": "426ef6d13cf9eb5286d67980a7282a5c41b669de",
      "parents": [
        "a5c84f29809f10855add6e66c0649b3a601f9f45"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 15 12:59:52 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 22 10:06:41 2018 +0000"
      },
      "message": "Start using shared libraries class loader.\n\nChange 1/2. Change 2/2 will setup the class loader namespace for\nshared libraries.\n\nThis change sets up shared libraries class loaders for applications\nand for dexopt.\n\nbug: 111174995\nTest: DexoptUtilsTest, device boots\n\nChange-Id: Ie9a2b4eaa85cda59951703433f7a2d03bc12095d\n"
    },
    {
      "commit": "70bb9a64626bc3b39e7fcdcae88e1a97bbdc3bd1",
      "tree": "bad1f11a2c251f597db0d7b26af24aecf0101ce7",
      "parents": [
        "9347978d5f7248113d7686d245ee7576123597fd"
      ],
      "author": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Thu Nov 15 16:08:53 2018 +0100"
      },
      "committer": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Tue Nov 20 09:38:11 2018 +0000"
      },
      "message": "Ports encryption/storage from gmscore to AOSP.\n\nA few additional changes (apart from style and usual dependencies) were needed:\n- BackupEncryptionDbHelper now extends SQLiteOpenHelper directly,\nimplementing relevant methods.\n- Dependencies on Guava are replaced by their Java equivalents.\n\nBug: 111386661\nTest: atest RunFrameworksServicesRoboTests\nChange-Id: I4566980fc81d6cff5e7012184502e028980512ae\n"
    },
    {
      "commit": "56a5c275844f124bd01f13e7d4ed0a223977b878",
      "tree": "bf186029b589202dbf17a9b8908a334831722501",
      "parents": [
        "92052f6f8e35886f92b65268e20112c28abac222"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Fri Nov 16 15:12:04 2018 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Fri Nov 16 17:49:16 2018 +0000"
      },
      "message": "[Multi-user] Fix BMS checkstyle\n\nNow that checkstyle runs a preupload hook for frameworks/services, when\nwe move BMS -\u003e UserBMS, checkstyle will complain of errors because it\nsees it as a new file.\n\nThis CL just fixes checkstyle complaints (mostly adding javadocs,\nvariable naming, operand placement, etc.) for BMS so the CL that creates\nUserBMS can have as little changes as possible to ease review.\n\nThere is no change in functionality in this CL.\n\nBug: 118520567\nTest: atest RunFrameworksServicesRoboTests\nChange-Id: I1118d6deef83d1abfbc8fd94883d7d162a4399cb\n"
    },
    {
      "commit": "832d53c4363f9c4d6d40e19ee7572203ad042321",
      "tree": "6fdde7b091a51583bc4256e68da6fe95bbfa514f",
      "parents": [
        "0638d504d01ba9992dab12eae34dcb0bdb026407",
        "2863ea6c11e3689982ef9eecc25146478d297e5b"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Fri Nov 16 13:09:48 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Nov 16 13:09:48 2018 +0000"
      },
      "message": "Merge \"[Multi-user] Clean up BMS structure\""
    },
    {
      "commit": "2863ea6c11e3689982ef9eecc25146478d297e5b",
      "tree": "f350ac3aed1b53bae19359f5b70536cff76634a5",
      "parents": [
        "13638940cad966e8d78856c3912e8d429478d6e4"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Nov 15 12:18:47 2018 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Nov 15 12:54:41 2018 +0000"
      },
      "message": "[Multi-user] Clean up BMS structure\n\nPart of preparation to extract out user BMS.\n\nRemove unused components:\n- Backup traces\n- Unused fields\n\nClean-up work:\n- Better organize BMS class structure to be able to separate global vs.\nuser state. This is purely a move and no functionality has changed:\n\u003e static fields, static methods, instance fields, constructor, methods,\nprivate static methods, static inner class (system service definition).\n- Add javadoc comments to comply with new checkstyle preupload hook.\n\nBug: 118520567\nTest: 1) atest RunFrameworksServicesRoboTests\n2) atest FrameworksServicesTests\n\nChange-Id: I5ac868ff0df0ec007b64d686647d9a676e374e40\n"
    },
    {
      "commit": "865003370bd6fafa46d1437af067e7236dae64bb",
      "tree": "f69ebdf742b674d69c5b5a94da476871c3af3288",
      "parents": [
        "145401596c4ffeee2d62ae28ad2f2db4f5bf7309"
      ],
      "author": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Wed Oct 31 15:13:55 2018 +0100"
      },
      "committer": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Wed Nov 14 14:56:45 2018 +0000"
      },
      "message": "Ports chunking/cdc from gmscore to AOSP.\n\nSome additional changes (apart from the regular style modifications)\nwere needed:\n- Guava crypto methods are replaced by their javax equivalents.\n- Preconditions checks now depend on com.android.util rather than Guava.\n\nBug: 111386661,116575321\nTest: atest RunFrameworksServicesRoboTests\nChange-Id: I43f92f1c0fb3acf62469712d8db212f94429116c\n"
    },
    {
      "commit": "eb6dabcdde47d20ba87a792e3349931f834a3348",
      "tree": "a5bd22062b095ab8e8ac859a3df771ba54022134",
      "parents": [
        "449563024b648ef5fb1ace9245891ee67562bbda"
      ],
      "author": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Mon Nov 12 11:09:04 2018 +0000"
      },
      "committer": {
        "name": "Ruslan Tkhakokhov",
        "email": "rthakohov@google.com",
        "time": "Tue Nov 13 21:13:14 2018 +0000"
      },
      "message": "KV] Don\u0027t set current token if no data was moved\n\nBug: 119299848\nTest:\n1) atest KeyValueBackupTaskTest\n2) Manual:\n - Run \u0027adb shell bmgr init\u0027 for the active transport to wipe all backup data\n - Run \u0027adb shell dumpsys backup\u0027 and verify string \u0027Current: 0\u0027, i.e. the current token is\n   set to 0\n - Create a test app implementing a BackupAgent that writes no data in onBackup() and\n   install it on the device\n - Run \u0027adb shell bmgr backupnow --non-incremental \u003ctest_app_package\u003e\u0027 to initiate a backup,\n   where --non-incremental flag makes sure PM is not added to the backup queue\n - Run \u0027adb shell dumpsys backup\u0027 and verify string \u0027Current: 0\u0027 again\n\nChange-Id: I595bea9874fd84d0c81b32a509c970a1b142872c\n"
    },
    {
      "commit": "523c949dd75d7643a591f794f9e9e76cb8cccc8b",
      "tree": "a35435d3caf23e2d32b4f19d77e19241d8204860",
      "parents": [
        "7eeac900b621d5d7dedb531f6c6da0c43840421a"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Tue Oct 30 17:09:54 2018 +0000"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Wed Oct 31 18:43:17 2018 +0000"
      },
      "message": "[Multi-user] Clean up backup service creation and disable\n\nPart of prep to make BMS multi-user aware.\n\nCurrent disable logic:\n- Trampoline is a proxy to BMS that enforces system- and policy-imposed\ndisabling of the backup service (user-configurable disabling is in BMS).\n- Backup service can be disabled by system property \u003d permanent disable.\n- Backup service can be disabled by a privileged caller like Device\nPolicy Manager \u003d temporary disable.\n\nIn multi-user context:\n- The system user is the main actor in creation and disabling of the\nbackup service.\n- BMS is only created when the system user is unlocked -\u003e system user\nwill always be unlocked first and is always running.\n- Device Policy Manager acts on the system user and shuts down backup\nmechanism for the whole device -\u003e disable for system user disables for\nall users.\n- Non-system users have no impact on the creation/disabling of the\nbackup service.\n\nThis CL:\n- Clean up and document the above logic.\n- Move synchronization on backup suppress file from \u0027this\u0027 to private\nlock.\n\nBug: 118520567\nTest: 1) atest TrampolineTest\n2) atest DevicePolicyManagerTest\n3) Manual:\n- Before unlocking system user \u003e service not started\n- Unlock system user \u003e service started\n\nChange-Id: I207858bcfd1e0b9de43291bec178066b59c3a7cb\n"
    },
    {
      "commit": "5dffe468819175d148732b591b36b14226a2c3dc",
      "tree": "59d5d9d7fb85c11097793d65c439c48531038f30",
      "parents": [
        "56b402c491cde241f3127a9a21c96d058e7ab179",
        "84c66b8e0c5def3444acee435ea8738e4dad2f2d"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Oct 30 11:46:34 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 30 11:46:34 2018 +0000"
      },
      "message": "Merge \"Ports second part of the chunking code from gmscore to AOSP.\""
    },
    {
      "commit": "0e7b2e6b401d3f2934832696156a0d131b191d50",
      "tree": "af69e92eb733db8ebca638d44035b4df7c4ece01",
      "parents": [
        "8c12dcd11a18081b365d81267c3d29f9848222f9"
      ],
      "author": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Mon Oct 29 13:05:21 2018 +0000"
      },
      "committer": {
        "name": "Chandan Nath",
        "email": "nathch@google.com",
        "time": "Mon Oct 29 17:03:53 2018 +0000"
      },
      "message": "cleanup Trampoline\n\nremove unused boolean and make private where possible\n\nBug: 118605476\n\nTest: 1) atest RunFrameworksServicesRoboTests\n2) atest TrampolineTest\n3) flashed device and ran:adb shell bmgr backupnow --all\nEnded with \"Backup finished with result: Success\". in logcat, there were\na few Scotty exceptions but those are known and ignorable as they come\nfrom the server\n\nChange-Id: I08fbe494f9268e80e8f16a8f66405ee8a743e9c3\n"
    },
    {
      "commit": "84c66b8e0c5def3444acee435ea8738e4dad2f2d",
      "tree": "fb80b1f8cd89e31b4f3518cc14e8d54a05c57e6b",
      "parents": [
        "8c12dcd11a18081b365d81267c3d29f9848222f9"
      ],
      "author": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Mon Oct 22 17:03:49 2018 +0200"
      },
      "committer": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Mon Oct 29 13:32:03 2018 +0100"
      },
      "message": "Ports second part of the chunking code from gmscore to AOSP.\n\nBug: 111386661\nTest: atest RunFrameworksServicesRoboTests\nChange-Id: I993adf481a22f862a3c5ffaa99723d8dbda679df\n"
    },
    {
      "commit": "861872dace5134caccf2073077e5a7dbbc985ced",
      "tree": "90339966e7c6c2cb12842ae788c68b541702e95a",
      "parents": [
        "ca4d6f124c4d3f35f6eda59cb517fe6462407c9c",
        "a5ccb6c03212e3229b4c17f90635bdce7649a653"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Oct 16 10:01:08 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 16 10:01:08 2018 +0000"
      },
      "message": "Merge \"Remove BackupManagerServiceInterface\""
    },
    {
      "commit": "d77874c423047411c4735d92d92b2052fa8c0f0d",
      "tree": "a3a687a3025975bfbe271d8d5088818f8df491e5",
      "parents": [
        "1a9b94259777a30a1e9a32f7ca39c2ca1c975a32",
        "5dcff706582623e4c01db411efa9ccaf71947f48"
      ],
      "author": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Mon Oct 15 09:17:18 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Oct 15 09:17:18 2018 +0000"
      },
      "message": "Merge \"[KV] Only discard state if non-null\""
    },
    {
      "commit": "5dcff706582623e4c01db411efa9ccaf71947f48",
      "tree": "09a26d47296b399ad4727bcf251d59ce47c05c70",
      "parents": [
        "38304b594fe7b01de2edc39bbba2cb37791b0318"
      ],
      "author": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Fri Oct 12 11:28:50 2018 +0100"
      },
      "committer": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Fri Oct 12 15:09:47 2018 +0100"
      },
      "message": "[KV] Only discard state if non-null\n\nTo avoid NPEs. Added tests. This design is not optimal but left any\nre-design to be done when we move applyStateTransition() to more upper\nlevels, which is going to happen when we extract package-backup.\n\nBug: 117269444\nTest: atest FrameworksServicesRoboTests\nTest: 1. Set BackupApp to time-out on agent onCreate()\n      2. adb shell bmgr backupnow --non-incremental\n         com.google.android.apps.backupapp\n      3. Verify it doesn\u0027t crash\nChange-Id: I7a3fd3d3d5a4b5931206564c197edd86b6321933\n"
    },
    {
      "commit": "477a17e6d87f842e5dd0bac7745ec47a5a5463a0",
      "tree": "c26ab773a3b7b12e253a2b8b44f424d2db90755c",
      "parents": [
        "8426a06516635fc7ba943af78e1b64efa4215aa5"
      ],
      "author": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Tue Oct 02 10:32:29 2018 +0200"
      },
      "committer": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Fri Oct 05 12:58:06 2018 +0200"
      },
      "message": "Ports part of the backup/encryption/chunking code from gmscore.\n\nSome additional changes (apart from style) were needed:\n- ChunkOrderingType.java is an @IntDef referencing the possible values\nfor the ChunkOrderingType enum in the proto.\n- EncryptedChunk.java is no longer an AutoValue class.\n- Inlined some constants from Guava.\n\nBug: 111386661,116575321\nTest: atest RunFrameworksServicesRoboTests\nChange-Id: I7656cae13de0bd918be5016ffb155de4b8fd5f71\n"
    },
    {
      "commit": "a5ccb6c03212e3229b4c17f90635bdce7649a653",
      "tree": "f02459523d332dc415e2d1c59978faf8f8f9ee57",
      "parents": [
        "38304b594fe7b01de2edc39bbba2cb37791b0318"
      ],
      "author": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Tue Oct 02 14:13:07 2018 +0100"
      },
      "committer": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Tue Oct 02 14:13:07 2018 +0100"
      },
      "message": "Remove BackupManagerServiceInterface\n\nInterface was created for switching between refactored and\nnon-refactored version, not needed anymore. Removed with IntelliJ\u0027s\nRefactor \u003e Inline... tool.\n\nBug: 22388012\nTest: atest FrameworksServicesTests\nTest: atest FrameworksServicesRoboTests\nTest: adb shell bmgr backupnow \u003cpackage\u003e\nChange-Id: I7d92b73676634ddd09a1bc71cbcfc4400ad1be90\n"
    },
    {
      "commit": "ab4bbc038e0baad837c72dcf1845320f1a8ea1fb",
      "tree": "1eb09cdda6f8a176441dc4d480b67606f274a828",
      "parents": [
        "e672d0735912db39305a4321a2ae7b3e3b8caadf",
        "226dfa2edab07f0202249c5026fb1c8e927ae895"
      ],
      "author": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Thu Sep 27 12:19:58 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 27 12:19:58 2018 +0000"
      },
      "message": "Merge \"Moves all backup chunk-model related classes over to the framework.\""
    },
    {
      "commit": "4fee398440e4cb69dd2b79f4f0ac85cea89a6bdc",
      "tree": "541e9ff7e60862e3ea375f53d6c900280f3c9812",
      "parents": [
        "6b0f8ab1575570c914e8f1054442e999d775c23f",
        "1f1bae90736c3cb44f6d9b50db17151d664d680a"
      ],
      "author": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Wed Sep 26 09:11:20 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 26 09:11:20 2018 +0000"
      },
      "message": "Merge \"[KV] Exceptions for error-handling\""
    },
    {
      "commit": "d142f364574214239992b59ca5072cc029b1a836",
      "tree": "34987204c6ae3f6876fac1e65893bfef4ec3bd6f",
      "parents": [
        "47e79a1626e8014c7e7283c09006cb511c034665",
        "cad924cfd464b66c1da8f7f7954e02dce5acc4ff"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Sep 25 18:52:18 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 25 18:52:18 2018 +0000"
      },
      "message": "Merge \"Set KV MORE_DEBUG to false and add tests\""
    },
    {
      "commit": "1f1bae90736c3cb44f6d9b50db17151d664d680a",
      "tree": "b774d7867cc2590ddfc4a8beb5454c39bd5e1221",
      "parents": [
        "3921b96ede045e7ca3d345f0053efebcc7220600"
      ],
      "author": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Wed Sep 19 10:21:02 2018 +0100"
      },
      "committer": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Tue Sep 25 15:49:43 2018 +0100"
      },
      "message": "[KV] Exceptions for error-handling\n\nAdded 2 exceptions:\n* TaskException: For what we used to call transport-level failures,\n  these bring queue processing to a halt.\n* AgentException: For failures that happen due to the backup agent, these\n  only prevent the backup of the current package, still allowing backup\n  for the remaining packages in the queue.\n\nThese are usually thrown deep in the call stack and caught in backupPackage()\n(and similarly backupPm()) and run(), the former for clean-up, where\nthey are re-thrown and the latter for further processing where they are\nfinally swallowed. The clean-up is more explicit now.\n\nThis enabled further refactoring of backupPackage()/backupPm(),\nextractAgentData() and sendDataToTransport().\n\nOne change that I intend to revisit is reporting to the observer.\nPreviously we used to detect some exceptional cases and set mStatus\n(which doesn\u0027t exist anymore) to other more general exceptional case and\nthen in this general case handling report the success/failure to the observer.\nWith the new exception-throwing model I changed this and the leaves are\nactually responsible for reporting success/failure to the observer (see\nchanges in the reporter). This is to avoid too many changes in this CL.\n\nI\u0027m entertaining the idea of extracting out package backup as a separate\nclass and leave only queue-processing and generic bookkeeping to this\nclass.\n\nTest: atest FrameworksServicesRoboTests\nTest: adb shell bmgr backupnow \u003ckv_package\u003e\nChange-Id: If3b1da7a5eb939e453f94fad76f5790696d1265a\n"
    },
    {
      "commit": "226dfa2edab07f0202249c5026fb1c8e927ae895",
      "tree": "ad8a202549534dd7ed131385921145fe50314c42",
      "parents": [
        "beb077d987bed4e45a3e6ec7e3b8468ec66e1a0b"
      ],
      "author": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Thu Sep 13 17:36:42 2018 +0200"
      },
      "committer": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Tue Sep 25 16:04:32 2018 +0200"
      },
      "message": "Moves all backup chunk-model related classes over to the framework.\n\nIncludes the proto definition of ChunksMetadata and related classes.\n\nSome additional changes (apart from style) were needed:\n- EncryptedChunkOrdering was modified to be a non-AutoValue class, and\ntests were added.\n- Protos are now read from an InputStream manually, as any protos should not\nbe used directly in the platform.\n- Helper classes are added for reading from ProtoInputStream.\n\nBug: 111386661,116575321\nTest: atest RunFrameworksServicesRoboTests\nChange-Id: I8b74ad059d72e305be7817f79f8c61aa50f7b268\n"
    },
    {
      "commit": "e58291256b444ef7442c83c8a577a6fe577691ac",
      "tree": "0e96c0fb46c386841a39aaf81c56f81168bec65a",
      "parents": [
        "81e430324cb97580bffb7dff42248400702eb56a"
      ],
      "author": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Thu Sep 20 11:59:10 2018 +0100"
      },
      "committer": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Thu Sep 20 11:59:10 2018 +0100"
      },
      "message": "Fix caller log on appIsRunningAndEligibleForBackupWithTransport\n\nTest: atest FrameworksServicesRoboTests\nTest: adb shell bmgr backupnow --all\nChange-Id: I577db6fb92880916a231ffa36a468bd64d8cae09\n"
    },
    {
      "commit": "cad924cfd464b66c1da8f7f7954e02dce5acc4ff",
      "tree": "b265b3895826937c88ad9416cf91b4f9196ffff9",
      "parents": [
        "81e430324cb97580bffb7dff42248400702eb56a"
      ],
      "author": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Wed Sep 19 16:43:37 2018 +0100"
      },
      "committer": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Thu Sep 20 11:52:07 2018 +0100"
      },
      "message": "Set KV MORE_DEBUG to false and add tests\n\nForgot this one in the CL. Also added tests to catch this in presubmit.\n\nTest: atest FrameworksServicesRoboTests\nTest: adb shell bmgr backupnow \u003ckv_package\u003e and verify no MORE_DEBUG\n      logs\n\nChange-Id: I14affca28609bcd855e13fdcc160994c71ed9695\n"
    },
    {
      "commit": "071f28ded148ac3395b16f1b89fb2c007ee9eab8",
      "tree": "ad08c4497f5c9b8970298bdc07fed54f6544588c",
      "parents": [
        "d1cf264e92e52e68e9b60cf3f27cf0edea4036ff",
        "3b6e08772e2cf401bb38912d9e60e7403251bb24"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Sep 13 08:45:35 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 13 08:45:35 2018 +0000"
      },
      "message": "Merge \"Revert the mandatory backups feature.\""
    },
    {
      "commit": "3b6e08772e2cf401bb38912d9e60e7403251bb24",
      "tree": "2eeda9680f744a67b00744c29960c1af5e39b973",
      "parents": [
        "edc46f4239c3f7410468c115d1604e5c871b8809"
      ],
      "author": {
        "name": "Lenka Trochtova",
        "email": "ltrochtova@google.com",
        "time": "Thu Aug 09 14:16:45 2018 +0200"
      },
      "committer": {
        "name": "Lenka Trochtova",
        "email": "ltrochtova@google.com",
        "time": "Wed Sep 12 13:39:05 2018 +0200"
      },
      "message": "Revert the mandatory backups feature.\n\nBug: 79736299\nTest: make RunFrameworksServicesRoboTests\nTest: cts-tradefed run cts -m CtsBackupHostTestCase\n\nChange-Id: I1209174c9f6aa794c7ca67f4a8737c0589d5fd69\n"
    },
    {
      "commit": "629d31c543cd6e28334bc74edf09445a537ee49b",
      "tree": "117f81c9041ed8af03fa5f40218e27786296e105",
      "parents": [
        "edc46f4239c3f7410468c115d1604e5c871b8809",
        "cf2b7c3b39a3eca910be2b0b345c7b88ac934079"
      ],
      "author": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Wed Sep 12 10:02:24 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 12 10:02:24 2018 +0000"
      },
      "message": "Merge \"Moves first parts of backup crypto code (ChunkHash class) to the framework.\""
    },
    {
      "commit": "cf2b7c3b39a3eca910be2b0b345c7b88ac934079",
      "tree": "d73ec4b9ac752479fb21ba160167982073845373",
      "parents": [
        "dab9d744bf2e90ae92b0842acf22b8fcf2066578"
      ],
      "author": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Tue Sep 11 10:54:10 2018 +0200"
      },
      "committer": {
        "name": "Bram Bonné",
        "email": "brambonne@google.com",
        "time": "Tue Sep 11 19:32:25 2018 +0200"
      },
      "message": "Moves first parts of backup crypto code (ChunkHash class) to the framework.\n\nSome changes were needed to the original code:\n- Guava\u0027s EqualsTester tests are replaced by regular equals tests.\n- Guava\u0027s primitives.UnsignedBytes.LexicographicalComparator needed to\nbe copied over, as no corresponding comparator exists in the framework.\n\nBug: 111386661\nTest: atest RunFrameworksServicesRoboTests\nChange-Id: I24fef4b47f7777b9be0c2e51f0be48e45b323987\n"
    },
    {
      "commit": "944dca780e0a39a515729599eaad0a1a38a1bc55",
      "tree": "bac4723bb3f96ae9f7b5ae7083cfbfb8a24a1dcb",
      "parents": [
        "00ebba4f98d943bfe4235428130ece0efe5cf589",
        "ef0d93eb71200e354a60212ba4dd1a3311028073"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Sep 10 11:56:20 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Sep 10 11:56:20 2018 +0000"
      },
      "message": "Merge \"[KV] Refactor clean-up\""
    },
    {
      "commit": "1374690674f445ecbccdba7c90502079066ac0f1",
      "tree": "4ee366c3e139d899bc5f4891164ef611feefffe0",
      "parents": [
        "c18bf578af2a88f3d2636c00a3b0c6824f4c4430"
      ],
      "author": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Thu Aug 09 18:07:11 2018 +0100"
      },
      "committer": {
        "name": "Annie Meng",
        "email": "anniemeng@google.com",
        "time": "Fri Sep 07 14:56:45 2018 +0100"
      },
      "message": "[FBR] Extract app metadata backup to helper\n\nIn full backup, we backup additional metadata about the app\n(manifest, widget, apk, obb) not specified by the app\u0027s backup agent.\nThis CL extracts these methods out to their own helper (AppMetadataBackupWriter)\nand adds unit tests for these methods.\n\n** Note: The backup behavior is the same, only the structure has changed.\nBehavioral changes will be done in future CLs. **\n\nWhat this CL covers:\n- Move the backup of this extra app data out of the FullBackupEngine to\nseparate agent data backup and non-agent data backup.\n- Move logic of deciding what data to backup from FullBackupEngine to\nFullBackupRunner (where the writer is used).\n- Add unit tests for metadata backup.\n- Some style fixes/clean up.\n\nNot covered (future CLs):\n- Refactoring FullBackupEngine/FullBackupRunner mechanism.\n- Streaming backup data directly instead of writing to temporary files.\n- Separating out and fixing apk and obb backup.\n\nBug: 110081582\nTest: 1) atest AppDataBackupWriterTest\n2) atest RunFrameworksServicesRoboTests\n3) atest GtsBackupHostTestCases\n4) Verify success for:\n - adb shell bmgr backupnow \u003cfull backup package\u003e; adb restore 1 \u003cfull\nbackup package\u003e\n - adb backup \u003cfull backup package\u003e; adb restore\n - cloud backup and restore\n5) Use local transport and adb backup to inspect manifest and widget data\nwritten and file metadata consistent between runs.\n6) Verify compatibility with adb backup -keyvalue manifest\n\nChange-Id: Icb43fd2e0505c2416738ee3ef370b206363fac68\n"
    }
  ],
  "next": "ef0d93eb71200e354a60212ba4dd1a3311028073"
}
