)]}'
{
  "log": [
    {
      "commit": "8f4fe6eccbc3849686f08389cb5868f2d59f5fbb",
      "tree": "2bc1c8981f728f7f76255e487eaabc12ff33cbcd",
      "parents": [
        "0fe7ce968bc7f0eff64f08e2d51c8b1e6b4a6fc8"
      ],
      "author": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Tue Mar 14 18:21:40 2017 +0100"
      },
      "committer": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Wed Mar 22 16:29:15 2017 +0100"
      },
      "message": "When snapshots are disabled, fill it with single color.\n\nTest: Launch DisableScreenshotsActivity, go to recents, make sure\ncontent is blue. Reopen activity from home, make sure starting\nwindow is blue.\n\nBug: 31339431\nChange-Id: I29689774c3cdcb784d8f5bfa4f947a6f35b91e01\n"
    },
    {
      "commit": "0fe7ce968bc7f0eff64f08e2d51c8b1e6b4a6fc8",
      "tree": "c7032c5de42a5b3fd23f7be2fadbceb9643f3684",
      "parents": [
        "6f9dbcb742ee930151444118dd61c2239efce09d"
      ],
      "author": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Wed Feb 22 16:45:48 2017 +0100"
      },
      "committer": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Wed Mar 22 15:59:44 2017 +0100"
      },
      "message": "Add API to disable snapshotting of activities\n\nTest: runtest frameworks-services -c\ncom.android.server.wm.TaskSnapshotControllerTest\nTest: Launch DisableScreenshotsActivity, go to recents, make sure\ncontent is white.\nBug: 31339431\n\nChange-Id: I329925d2fca389e561da3389a67fe888b5bb1033\n"
    },
    {
      "commit": "c7b57b1e65b487defad4967cf42cf076b499cbee",
      "tree": "72964f743c15cb729c024e0b92ccefbada726064",
      "parents": [
        "c52839277b8714d150a9fe276b6ba3fa8a0cbf38"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Aug 10 14:52:52 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Aug 10 14:52:52 2015 -0700"
      },
      "message": "Fix issue #23037899: Support for Battery Optimization permission + Dialog\n\nNew permission, new Intent action.\n\nChange-Id: I1d9ba55be8f72074e29d33ad7a0a12a820bbac39\n"
    },
    {
      "commit": "de15edaa9bf486a4050bb067317d313fd807bb10",
      "tree": "489bb47ee9025eaccb14fa979f3b3e583f92fcbf",
      "parents": [
        "80abf887a1578669d3167ea83d52a497a64ea491"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jul 01 12:30:54 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jul 01 12:37:00 2015 -0700"
      },
      "message": "Work on issue #21589105: Scope WRITE_SETTINGS and SYSTEM_ALERT_WINDOW...\n\n...to an explicit toggle to enable in Settings\n\nAdd a new permission flag, saying the permission can be automatically\ngranted to pre-api-23 apps.  Apply this to SYSTEM_ALERT_WINDOW.\n\nChange-Id: I24a0ceabe7e9f5e458a864d30eda2696ad14a699\n"
    },
    {
      "commit": "3d1933c45fe9ba2389ebd166d96abeceab1971d1",
      "tree": "aa62fd57d10a9ae0bfb86e73655bc07b3b2b47e3",
      "parents": [
        "8a435ced674562b827f91800317a89056e050b15"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jun 10 16:25:57 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 12 12:37:35 2015 -0700"
      },
      "message": "Implement some control over ALLOW_WHILE_IDLE alarms.\n\nSince these alarms allow you to bypass the idle restrictions,\nwe don\u0027t want them to be so open-ended like other alarms.  This\nimplements a policy where the alarm manager will only deliver these\ntypes of alarms every X minutes to each application.  For this\ninitial implementation, X is 1 minute under normal operation and\n15 minutes when in idle mode.\n\nTo do this, I needed to introduce a new internal allow-while-idle\nflag for system alarms, which applications can\u0027t get, and doesn\u0027t\nhave these new restrictions.\n\nAlso tweaked how the alarm manager handles the alarm window, so it\ndoesn\u0027t change if the alarm gets rescheduld; the window is now always\nwhat as computed based on the time when the alarm was first\ngiven to it.\n\nFinally, fix TimeUtils to be able to correctly print times that\nare \u003e 999 days.\n\nChange-Id: Ibad8c6a7c14b0624b54e82267be23224b4c31e84\n"
    },
    {
      "commit": "b5a380d409a1431a38db978864b9d85b689e3cce",
      "tree": "5cd36c4c095331869e1019739500b517fbf516a6",
      "parents": [
        "aba3ecb976cacd7c92fe8f8afae20d112781d68e"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed May 20 18:18:46 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 21 16:45:29 2015 -0700"
      },
      "message": "Add API to track usage time of apps.\n\nThis adds a new ActivityOption for the caller to ask the\nsystem to track the time the user is in the app it launches,\ndelivering the result when they are done.\n\nThe time interval tracked is from when the app launches the\nactivity until the user leaves that app\u0027s flow.  They are\nconsidered to stay in the flow as long as new activities\nare being launched or returned to from the original flow,\neven if they cross package or task boundaries.  For example,\nif the originator starts an activity to view an image, and\nwhile there the user selects to share, which launches gmail\nin a new task, and they complete the share, the time during\nthat entire operation will be included.\n\nThe user is considered to complete the operation once they\nswitch to another activity that is not part of the tracked\nflow.  For example, use the notification shade, launcher, or\nrecents to launch or switch to another app.  Simply going\nin to these navigation elements does not break the flow\n(although the launcher and recents stops time tracking of\nthe session), it is the act of going somewhere else that\ncompletes the tracking.\n\nThe data is delivered to the app through a PendingIntent,\nwhich includes the total time the app was in the flow along\nwith a time break-down by app package.\n\nChange-Id: If1cf8892d422c52ec5042eba0e15a8e7e8f83abf\n"
    },
    {
      "commit": "875e464e362c1e5527c5830c107c7ef84ecfbf0d",
      "tree": "f3aeb9a8e88b314340c6581d44f2d78389580dd5",
      "parents": [
        "76de89820c51c4bc288b440a82374b9d6c806244"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Dec 01 16:22:14 2014 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Dec 01 16:22:14 2014 -0800"
      },
      "message": "Add test for isolated services.\n\nChange-Id: Ibcbc4e766400acb8cf0385f922db6ca448a652a3\n"
    },
    {
      "commit": "4f0e4a9ada1192e103d43409d83e177608571c68",
      "tree": "9a50bb1cb2d24def5ac42474a59cbcf009753c63",
      "parents": [
        "9522055f1d10b30158b772885bf4befe06fb2a08"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Nov 19 14:21:07 2014 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Nov 19 14:21:07 2014 -0800"
      },
      "message": "Add new empty app test entry points.\n\nChange-Id: Ib899c95de6b7bb936d2114e86bec4c5aef5f7eda\n"
    },
    {
      "commit": "2d7576b082b84068fb9d68419b710b9bec49139b",
      "tree": "90842d7939ca423ed778ba88978b83fbe4962683",
      "parents": [
        "1e2e4307ff381e5cb9d8d19eb6a1aca763ba9415"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Oct 03 16:26:04 2014 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Oct 03 16:26:04 2014 -0700"
      },
      "message": "Fix issue #17752399: Multiple apps broken by GET_TASKS permission change\n\nKeep around GET_TASKS as a permission available to apps, so apps still\nthink they have it and don\u0027t get all uppity because they don\u0027t.\n\nAdd a new REAL_GET_TASKS that is the actual permission now.\n\nPlus some temporary compatibility code until everyone can transition\nfromn GET_TASKS to REAL_GET_TASKS.\n\nChange-Id: I12c1102eed24844685dcbd2fa3b612811603958f\n"
    },
    {
      "commit": "eeb2c7e712dbae91de04ab2338c1fbccfbce7ba2",
      "tree": "02ff12fb190fc18e32f69f16438fb2f719a0ee4f",
      "parents": [
        "4c45b649c36d6c28d22a98d979fbda3b7c36677a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Sep 23 16:45:39 2014 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Sep 23 16:45:39 2014 -0700"
      },
      "message": "Work on issue #17628623: Need to update default preferred activities for YouTube\n\nImprove the warning logs when setting up preferred activities\nto help identify when there are issues and what they are.  Also\nimprove the algorithm a little to still apply permissions when\nresetting them and there are additional third party apps, as long\nas the additional app is something like another browser and the\npreferred activity being set is more specific (has a better match).\n\nAnd add an example of using manifest-based preferred activities\nin to ActivityTest -- and yes it DOES work! :p\n\nChange-Id: I1ff39e03a5df6526206e0c3882085396b355d814\n"
    },
    {
      "commit": "89ad456ea49cb62615ebdcac83a2515743bbe5fa",
      "tree": "4fdd6b948f74930ad10beca0a042e40f36efc50c",
      "parents": [
        "1ce1ba68acbfcbd4100d8c4be7d17a1f0623fd62"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Sun Aug 24 16:45:38 2014 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 26 11:16:59 2014 -0700"
      },
      "message": "Fix issue #16311398: Limit number of documents a process can open\n\nIn application processes, monitor for when we start getting close\nto the Dalvik heap limit, and ask the activity manager to try to\nprune old activity instances in that case.\n\nAdd an explicit API for apps to ask that they have their own\nactivity instances cleaned up, if they want.\n\nFix some bugs in launching activities that were not correctly\napplying the \"multi task\" behavior in the appropriate situations\nof document-centric recents.\n\nClean up the activity manager\u0027s process removal code to all share\na common path.\n\nAdd a new \"Spam\" option to ActivityTests, which continually creates\nnew tasks, checking that the activity manager will now prune old\ntasks rather than letting the app run out of RAM.\n\nAnd while I was was doing this, I found problems with the path\nfor bringing an empty task to the foreground -- it could make\na new task instead of re-starting the root activity in the\nexisting task.  This is fixed, and some code in the recents\nUI for working around the bug is removed.\n\nAnd as long as I am doing that, we now have nice hooks in to\nthe activity manager for AppTask to give some APIs for better\nmanaging the task, so add those along with more tests for these\nAPIs in ActivityTests.\n\nWe should look at also having the activity manager try to prune\nold tasks when it sees app processes being killed, to better balance\nmemory use across multiple processes when some processes may host\nmany documents.  That however is for another CL...\n\nChange-Id: I2bb81c3f92819350c868c7a7470b35817eb9bea9\n"
    },
    {
      "commit": "15ed2754a308546a54ab1061b4e365d6fe9b898d",
      "tree": "454e2961bd63f756b36fe77187b4225fb55982e7",
      "parents": [
        "f52233df74bb4a3efa1f7b9107353c841eafc933"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Aug 18 15:08:33 2014 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Aug 18 15:48:41 2014 -0700"
      },
      "message": "Fix path for handling system window with app token.\n\nIt is wrong to turn the token into a null appWindowToken; we\nneed to create a new top-level token as if they had passed in null.\n\nChange-Id: I870d8167c6ed456ea8fd58b149809ec9e0103bce\n"
    },
    {
      "commit": "3992645bf333c56669ef2fa19c26b2947884a4f3",
      "tree": "e75d77024860894fd438a6926ccd7e3546b737d3",
      "parents": [
        "2fd6cb043901c1bfbf5f566d13522cc3c1c21fb4"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Sep 25 14:53:52 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Sep 25 17:14:22 2012 -0700"
      },
      "message": "More activity tests.\n\nChange-Id: Id381ee2db55b135a0734c193fce44c55ef1cdae6\n"
    },
    {
      "commit": "7d19e0242faac8017033dabb872cdf1542fa184c",
      "tree": "ab12d3c6597bc42bc7c0dca10ded546192c5c249",
      "parents": [
        "03ad783c5078c7bd487e47bb2a2af67dfbe89f1a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 07 19:12:33 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 07 19:19:22 2012 -0700"
      },
      "message": "More mult-user API work.\n\n- You can now use android:singleUser with receivers and providers.\n- New API to send ordered broadcasts as a user.\n- New Process.myUserHandle() API.\n\nFor now I am trying out \"user handle\" as the name for the numbers\nrepresenting users.\n\nChange-Id: I754c713ab172494bb4251bc7a37a17324a2e235e\n"
    },
    {
      "commit": "b4163a6e12ee7100c758c6d3d062ade1f2843fce",
      "tree": "2948e83dec184906f2c44ee332431f219b78359d",
      "parents": [
        "b1758cf8cd007bfffb3d8adceca25f3b0c82bd77"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 02 18:31:26 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 02 19:07:57 2012 -0700"
      },
      "message": "Add APIs for interacting across users.\n\n- Expose the existing Context.sendBroadcast() as\n  Context.sendBroadcastAsUser().\n- Add new android:singleUser attribute for services.\n- Add new INTERACT_ACROSS_USERS_FULL permission for full\n  system-level access to cross-user interface (allows\n  sendBroadcastAsUser() to send to any receiver).\n- Add new INTERACT_ACROSS_USERS_FULL permission for\n  more restricted cross-user interaction: this is required\n  for android:singleUser, and allows you to use\n  sendBroadcastAsUser() but only to send to your own\n  receivers.\n\nChange-Id: I0de88f6718e9505f4de72e3f45d29c0f503b76e9\n"
    },
    {
      "commit": "0c5001d776d56bae02a5cc2663286a125d99bc5e",
      "tree": "ea7458737297e313c454f18d672e2b997af13990",
      "parents": [
        "26b05f7dc35f47bc62bf9630df288ae2d6e4657e"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Apr 12 18:16:08 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Apr 12 18:28:06 2011 -0700"
      },
      "message": "Add APIs to remove tasks.\n\nYou can remove sub-tasks inside of a task, or an entire task.\n\nWhen removing an entire task, you can have its process killed\nas well.\n\nWhen the process is killed, any running services will get an\nonTaskRemoved() callback for them to do cleanup before their\nprocess is killed (and the service possibly restarted).\n\nOr they can set a new android:stopWithTask attribute to just\nhave the service automatically (cleanly) stopped at this point.\n\nChange-Id: I1891bc2da006fa53b99c52f9040f1145650e6808\n"
    },
    {
      "commit": "f26fd99a7c2f554b0297760bb66336473c7db61f",
      "tree": "292bc65e6d068857bda10f2f45727a7c88601b64",
      "parents": [
        "bdf7b013f81b0b56a18cc9dd2fb987b56d595650"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Apr 08 18:14:09 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Apr 08 18:16:21 2011 -0700"
      },
      "message": "Rework thumbnails in activity manager.\n\nWe now only keep a thumbnail for the task, not for each\nactivity.  However if you use FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET,\nwe will make a new secondary thumbnail for that series of\nactivities.  There is a new API for the app to get these\nsecondary thumbnails.\n\nAlso set a default thumbnail size for non-xlarge screens\nso we have thumbnails on phones.  (We need some smarter\ncode in the platform for computing the actual thumbnail\ndimensions of the current device).  And add a test app\nto show recent tasks + thumbnails.\n\nChange-Id: Ic36759f6635522118a2cb7f156662229a610c492\n"
    }
  ]
}
