)]}'
{
  "log": [
    {
      "commit": "e4de5a0d3b6e0c897c1cea0912b58e11db962365",
      "tree": "116138f77e2ea3bd5871d6f7ec38815382d3696c",
      "parents": [
        "f85c97741485a53c1cca5d9d6192a9436d91a044"
      ],
      "author": {
        "name": "Xiaohui Chen",
        "email": "xiaohuic@google.com",
        "time": "Tue Sep 22 15:33:31 2015 -0700"
      },
      "committer": {
        "name": "Xiaohui Chen",
        "email": "xiaohuic@google.com",
        "time": "Wed Sep 23 18:50:11 2015 +0000"
      },
      "message": "Cleanup OWNER references.\n\nBug: 19913735\nChange-Id: I2150c6baaab80fe11312e4401394a2a8da52e595\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": "1958e5e7870579337f1d1d3e6c6fae096ba3abb9",
      "tree": "fad208704fc337915aff86df8021895eb1910701",
      "parents": [
        "f63655e49fcccd922e8d5f61c67f58bd4a361211"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 12 18:11:41 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jun 15 11:53:59 2015 -0700"
      },
      "message": "Fix issue #21813831: Need API for asking to be added to power whitelist\n\nAdd the API.  Clean up a few related things.\n\nChange-Id: I190adad1812f36f6095b98a1001fedb94874e8b5\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": "67ba2c7fa25a635c640956ff3a5e64164cb23396",
      "tree": "fc3e734c9f8b05f4baa310828979e7fad0c6e103",
      "parents": [
        "2fe44efced5ac28bc3e03c9c101644b4ef0134bb"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 05 14:23:38 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 05 14:23:38 2015 -0700"
      },
      "message": "Fix issue #21572679: API Review: ActivityOptions, usage time report\n\nChange-Id: I62751e93e39f90d5d2ec725586880724f3edbbc7\n"
    },
    {
      "commit": "e5c42621095a12e7d22ca5ab871dacd28c9bff41",
      "tree": "2ba8e545b5c97ede4be9532d08e0cd03cd24e0b5",
      "parents": [
        "8b20cdb27bc5b4c433c4fc650203be9a25842bbd"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue May 19 16:04:04 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 21 18:19:50 2015 -0700"
      },
      "message": "Improve reporting to apps of transaction too large failures.\n\nIf the app tried to do various things with too much data --\nstarting an activity, starting a service, sending a broadcast --\nthis would fairly silently fail with little indication of what\nwas going on.  Fix this in two ways:\n\n- Now when the native code generates a TransactionTooLargeException,\n  it may include an additional message in it telling you how much\n  data was in the parcel being sent, to help you understand why\n  this happening.\n\n- In all the framework code paths where we call to the system and\n  may fail, convert these failures into a a runtime exception and\n  rethrow them back to the app so that it will clearly get the\n  above message.\n\nChange-Id: I745159b97d3edb6fca86aa09cbc40c1f15a7d128\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": "85d558cd486d195aabfc4b43cff8f338126f60a5",
      "tree": "0a228ca6ffb9079635434a740abeeece370f055d",
      "parents": [
        "993e3d2d40cbd95d78cd3d2a76c77af2f4ab0e88"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Nov 04 10:31:54 2014 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Nov 11 00:42:18 2014 +0000"
      },
      "message": "Add Activity API to get referrer information.\n\nThis expands the use of EXTRA_REFERRER to be relevant anywhere,\nallowing apps to supply referrer information if they want.  However,\nif they don\u0027t explicitly supply it, then the platform now keeps\ntrack of package names that go with Intents when delivering them\nto apps, which it can be returned as the default value.\n\nThe new method Activity.getReferrer() is used to retrieve this\nreferrer information.  It knows about EXTRA_REFERRER, it can return\nthe default package name tracked internally, and it also can return\na new EXTRA_REFERRER_NAME if that exists.  The latter is needed\nbecause we can\u0027t use EXTRA_REFERRER in some cases since it is a Uri,\nand things like #Intent; URI extras can only generate primitive type\nextras.  We really need to support this syntax for referrers, so we\nneed to have this additional extra field as an option.\n\nWhen a referrer is to a native app, we are adopting the android-app\nscheme.  Since we are doing this, Intent\u0027s URI creation and parsing\nnow supports this scheme, and we improve its syntax to be able to build\nintents with custom actions and stuff, instead of being all hung up\non custom schemes.\n\nWhile doing this, fixed a problem when parsing both intent: and new\nandroid-app: schemes with a selector portion, where we were not\nrespecting any scheme that was specified.\n\nChange-Id: I06e55221e21a8156c1d6ac755a254fea386917a2\n"
    },
    {
      "commit": "d54b578e47fb410c776bb3a4272c2c523153f657",
      "tree": "19e21c01839d987d47bb74725c3f055f59566b09",
      "parents": [
        "fe91d4e6a2ef4e51910965ea258f91c14f5ee0dc"
      ],
      "author": {
        "name": "Wale Ogunwale",
        "email": "ogunwale@google.com",
        "time": "Thu Oct 23 15:55:23 2014 -0700"
      },
      "committer": {
        "name": "Wale Ogunwale",
        "email": "ogunwale@google.com",
        "time": "Tue Nov 04 10:59:31 2014 -0800"
      },
      "message": "Fix issue #17305377: Don\u0027t kill process if it still has tasks.\n\nWe previously killed a process when one of its task was\nswiped away in the recents UI. This had negative performance\nimplications for apps with multiple tasks in recents. Now we\nwill only kill the process if there are no more tasks associated\nwith it.\n\nChanged also removes the need for the\nActivityManager.REMOVE_TASK_KILL_PROCESS since ActivityManager\nwill now only kill a task process if it process has no out\nstanding tasks.\n\nBug: 17305377\nChange-Id: Ibc39bb328d13c7eab05c04798c2f14887923d9d4\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": "345d4f4f14038c2225cd599f9c432b25e572dc2c",
      "tree": "e116de958f5269166bac765250fbacb2239be860",
      "parents": [
        "bb8c4834613207cf880e8491b33eb495cc268548",
        "0321573fa7583cd2ac4ece015c2eb784e3b24eb8"
      ],
      "author": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Tue Sep 09 17:05:03 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 09 17:05:04 2014 +0000"
      },
      "message": "Merge \"Remove deprecated (and now unused) API method.\" into lmp-dev"
    },
    {
      "commit": "0321573fa7583cd2ac4ece015c2eb784e3b24eb8",
      "tree": "b623a531de65b0eb2cae0cd778fcfa654829a1a9",
      "parents": [
        "68c936f77d836285c255e98b73bdadb78025ade9"
      ],
      "author": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Tue Sep 09 08:53:56 2014 -0700"
      },
      "committer": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Tue Sep 09 08:53:56 2014 -0700"
      },
      "message": "Remove deprecated (and now unused) API method.\n\nRemoves ActivityOptions.makeLaunchTaskBehindAnimation().\n\nFixes bug 16958544.\n\nChange-Id: I2d58f4235994fe01d55b3309d0ec6f8449c5d5b8\n"
    },
    {
      "commit": "a4e102ee580282dc7abeb22f4a025813e53b9431",
      "tree": "879e7632cbe83220696694dbcac3f39e587cd039",
      "parents": [
        "b75dd5cedd5eb83d1f9b86ad4a09a5e6ec3df537"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Sep 04 22:52:27 2014 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Sep 05 18:43:43 2014 -0700"
      },
      "message": "Work on issue #17357238: Recents is often slow if not used in a while\n\nAdd a new activity attribute, resumeWhilePausing, that allows an\nactivity specifying it to immediately start running without waiting\nfor the previous activity to pause.  The recents activity is updated\nto use this.\n\nThe implementation of this is ultimately fairly simple -- if we are\nin the path of resuming such an activity, and find that we first need\nto pause the existing activity, then within the activity manager we\ndo the regular pause flow but act like it has immediately finished\npausing right then so that we can immediately go on to the resume.\nTo make this clean, we tell the activity when asking it to pause that\nit should not come back and tell us it is done, because we aren\u0027t in\nany way waiting for it.\n\nOne potentially important change I needed to make here is the pause\ncallback no longer provides the saved persistent state, because we\nnow can\u0027t count on that callback happening.  I don\u0027t think there was\nreally any utility in this anyway -- all modern apps will have their\nsave state flow happen as part of stopping, not pausing, so we\u0027ll\nonly capture that saved state when the stop is reported back anyway.\nAnd since we do send the saved state back when stopping, it would\nalways blow away whatever we had gotten at the pause.\n\nFinally, update the documentation for AppTask.startActivity(), and\nfix the implementation handling that to be cleaner -- we need to\ndeal with inTask first before getting in to \"oh noes add NEW_TASK\nif this isn\u0027t coming from a calling activity\" flow.\n\nChange-Id: Ia1da0fac90d7bdbaafdda2e34850d795ce17a39f\n"
    },
    {
      "commit": "d7c9289f935992f4ae2fc032747f9e04bb86a7d0",
      "tree": "b31b07270a4075e5a7827ba9751710170a4aeda3",
      "parents": [
        "19d431f330bf1d89c92c0971dad5fa8f5950b16d"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Aug 27 16:44:24 2014 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 28 11:38:13 2014 -0700"
      },
      "message": "Fix issue #17289876: startActivityFromRecents appears to launch the wrong task\n\nIt would be good to actually bring the task to the front.\n\nAlso, make the flow when inTask is provided better match what happens when\nwe go looking for a task on our own.\n\nAnd this includes another fix that was supposed to be part of a different\nchange but I forgot this class is part of the framework project now.\n\nChange-Id: I3cf05f2e585c0fd7a0dbb7c7cf9fb1655764dd93\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": "aec68bb89fe614181a20eb97340149406218ce2f",
      "tree": "b0e8807d7fb06487897a5813d9d8e3bb453f8175",
      "parents": [
        "cf038760f2af569a47e81d17d5cc86792a550c3e"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Aug 20 15:25:13 2014 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Aug 20 18:03:43 2014 -0700"
      },
      "message": "Fix issue #17038762: Add API to add entries to the recents list\n\nNew API Added to ActivityManager for adding an entry.  See docs\nthere.\n\nRepercussions:\n\n- I hit a bug in system UI where if the thumbnail has alpha, it tries\n  to modify it, but thumbnails are loading immutable so crashes.  Fixed\n  this by loading the bitmaps to be mutable.\n- Improved dump output of recents; there was a lot of stuff missing.\n  Also split the recents dump output from the rest of the activity\n  output, since it can be really large.\n- Added tests to the lovely ActivityTest app.\n\nBonus: new method on AppTask to control the exclude from recents flag.\n\nChange-Id: I01e543db4d15320ee1701e95872fef73c116526c\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": "c0ffce5ddd6446f1d46a49cdfaeda4a2ce408e1d",
      "tree": "d35f14610cdd43912a963295aa6719ae596a1669",
      "parents": [
        "51cb97096814352127aed69e5ac97013e9172038"
      ],
      "author": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Tue Jul 01 12:38:52 2014 -0700"
      },
      "committer": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Wed Jul 02 16:31:46 2014 -0700"
      },
      "message": "Use cached thumbnails in Recent tasks.\n\nThe thumbnail returned from ActivityManager.getTaskThumbnail() now\ncontains either a Bitmap or a ParcelFileDescriptor that points to\na file containing a compressed Bitmap. The Recent tasks list is\nnow responsible for all thumbnail Bitmap caching as the activity\nmanager keeps only the most recent 5. This also permits low memory\ndevices to have many more tasks in the Recent tasks list.\n\nAs part of this CL the concept of subtasks is removed eliminating\ncode supporting the TaskAccessInfo and IThumbnailRetriever classes.\n\nFixes bug 15828934.\n\nChange-Id: I0fd0320a1a04e3c78d79357899b83a2fff97abf2\n"
    },
    {
      "commit": "8b7bc13e217034e0ddd00f9033463190f50dce88",
      "tree": "af54af27930da9b20e5bbbd30648f08f36b41cd7",
      "parents": [
        "f94b34f5397d92080c188277b062537480c05b7d"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jul 31 17:52:07 2013 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jul 31 17:52:07 2013 -0700"
      },
      "message": "Fix issue #10115327: MapCollections need to implement equals\n\nChange-Id: I8e7b6dd092442f3870aa1a36bd2a7cd974177146\n"
    },
    {
      "commit": "62d708f4dd8e2a8554df4967837df9896efeff7c",
      "tree": "ce65deb60a6e33a6fed2fd6ca3d6da820a15ffc0",
      "parents": [
        "9deaa286d8db51cd53118b3c14a418c512cf55db"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jul 25 16:42:59 2013 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jul 25 16:53:09 2013 -0700"
      },
      "message": "Okay, I give in, add null key support to ArrayMap and ArraySet.\n\nChange-Id: Iac5035f9c5884a9f9d5acb38132bb128d7a55249\n"
    },
    {
      "commit": "21ab6f49910a6f319bc7b9d3964086cb1ffe09d0",
      "tree": "b01a138cf1fe647cdd0c015542a773da7bf80698",
      "parents": [
        "be4e6aaa0252dd7da28b7aa85beba982538efa46"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jun 10 15:59:15 2013 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jun 11 14:37:54 2013 -0700"
      },
      "message": "ArrayMap is great, so how about ArraySet!\n\nAlso a few little tweaks to the ArrayMap implementation.  Note that\nthese are fairly parallel implementations; I looked at what I could\nabstract out as a base class, but there isn\u0027t really all that much without\nmaking the resulting code more general and thus slower.  If we kept\nthe data structure for ArraySet the same as map, where the array has\ntwo values per entry, then they could probably share a lot of code.\nI couldn\u0027t really bring myself to do that at this point, though...\n\nChange-Id: I9e0dd8baa8e1febcc1033ecef61623ad59ce4aae\n"
    },
    {
      "commit": "f4130cf35fa128e36f96e55955d4f5db86197e4a",
      "tree": "0ae8a2c211bebc906d67402e3aa7e0c5b801babe",
      "parents": [
        "ae8f82f2015612a659b95007c355d12c83fbcefc"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu Jun 06 16:34:33 2013 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu Jun 06 16:43:41 2013 -0700"
      },
      "message": "Additional functionality and performance for ArrayMap\n\nAdded equals() and hashCode() to ArrayMap to allow equals() tests\nof maps with the same key/value pairs to return true.\n\nChanged putAll() to handle the case of an empty map faster, just copying\nthe arrays instead of adding elements one by one.\n\nAdded to ArrayMapTests to test new equals() and copy constructor\nfunctionality.\n\nIssue #9299310 Optimize ArrayMap copy constructor\n\nChange-Id: I1186a0eddd1fd53a0f380c2f3972fc1942cdf879\n"
    },
    {
      "commit": "f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccda",
      "tree": "3e2b15a9b72cde690279e5650923b460109c66fc",
      "parents": [
        "b631eda39cc53d88417fc0143ebfb08dc5dbc133"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 20 18:42:16 2013 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 24 16:36:14 2013 -0700"
      },
      "message": "New ArrayMap class.\n\nThis is a new kind of key/value mapping that stores its data\nas an array, so it doesn\u0027t need to create an extra Entry object\nfor every mapping placed in to it.  It is also optimized to reduce\nmemory overhead in other ways, by keeping the base object small,\nbeing fairly aggressive about keeping the array data structures\nsmall, etc.\n\nThere are some unit and performance tests dropped in to some\nrandom places; they will need to be put somewhere else once I\ndecided what we are going to do with this for the next release\n(for example if we make it public the unit tests should go in\nto CTS).\n\nSwitch IntentResolver to using ArrayMap instead of HashMap.\n\nAlso get rid of a bunch of duplicate implementations of binarySearch,\nand add an optimization to the various sparse arrays where you can\nsupply an explicit 0 capacity to prevent it from doing an initial\narray allocation; use this new optimization in a few places where it\nmakes sense.\n\nChange-Id: I01ef2764680f8ae49938e2a2ed40dc01606a056b\n"
    },
    {
      "commit": "45c0924fbbb2bdd38b5d154e2bc440abda4381c4",
      "tree": "28d2b29fa1e35d2c1744ed993a0e7bb9e658c27a",
      "parents": [
        "8ff9a156c04c24458d94c716a64a5b7327f0e987"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Jan 16 16:04:00 2013 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Jan 16 16:04:00 2013 -0800"
      },
      "message": "Fix test build failure\n\nChange-Id: Ic96c2490439a78af2fb92db49b25b67b56954a20\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": "5ac72a29593ab9a20337a2225df52bdf4754be02",
      "tree": "dc5310e556b3662cb5f097b30e700a26d50a4db5",
      "parents": [
        "e217ee4d7a8223289a1af7363627c69956c46d41"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Aug 29 18:32:08 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 30 14:33:22 2012 -0700"
      },
      "message": "Improve multi-user broadcasts.\n\nYou can now use ALL and CURRENT when sending broadcasts, to specify\nwhere the broadcast goes.\n\nSticky broadcasts are now correctly separated per user, and registered\nreceivers are filtered based on the requested target user.\n\nNew Context APIs for more kinds of sending broadcasts as users.\n\nUpdating a bunch of system code that sends broadcasts to explicitly\nspecify which user the broadcast goes to.\n\nMade a single version of the code for interpreting the requested\ntarget user ID that all entries to activity manager (start activity,\nsend broadcast, start service) use.\n\nChange-Id: Ie29f02dd5242ef8c8fa56c54593a315cd2574e1c\n"
    },
    {
      "commit": "79af1dd54c16cde063152922b42c96d72ae9eca8",
      "tree": "142abf0037d20841712e88d65febcbbd92dd5561",
      "parents": [
        "f1b995f9d049cb5c7225b3b17f09369237a83ca2"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 16 16:42:52 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Aug 17 10:36:08 2012 -0700"
      },
      "message": "Switch public APIs to use new UserHandle class for identifying users.\n\nGets rid of \"yet another integer\" confusion.\n\nChange-Id: Id07ea7307aea7c62f0087c6663a1f1c08e2e5dee\n"
    },
    {
      "commit": "756220bd1912535840388a6743830d2e59ad4964",
      "tree": "ee97c666d4bb1f015fd3e89463af09c712ce47e4",
      "parents": [
        "863b19bc8fcfa436011781b67a237fcce3cb703a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 14 16:45:30 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 14 16:51:38 2012 -0700"
      },
      "message": "Add API to create new contexts with custom configurations.\n\nThis allows you to, say, make a Context whose configuration\nis set to a different density than the actual density of the device.\n\nThe main API is Context.createConfigurationContext().  There is\nalso a new API on ContextThemeWrapper that allows you to apply\nan override context before its resources are retrieved, which\naddresses some feature requests from developers to be able to\ncustomize the context their app is running in.\n\nChange-Id: I88364986660088521e24b567e2fda22fb7042819\n"
    },
    {
      "commit": "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": "8a59b7f95f84ecc1f961a57d013ac68743c35d74",
      "tree": "8cfde280b6d68df32a4e12f647b4a6523d40be42",
      "parents": [
        "3df01599879e2bed32960911394fc9e2a8fcbc33"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jan 09 12:05:26 2012 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jan 24 11:10:40 2012 -0800"
      },
      "message": "Add new test for showing very slow animations.\n\nChange-Id: Ibcc3e46a72210cf8a8e4cf5a932e2c9a7995f0f1\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"
    }
  ]
}
