)]}'
{
  "log": [
    {
      "commit": "5545f56f7561810187545a1817b6001dd1f9931b",
      "tree": "94cfb5e5a543575adaedbf75ec243a9bbbf765d7",
      "parents": [
        "562ce888af21fc18d1610545ff6373ee2ecbbb13"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Sep 21 13:57:33 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Sep 21 14:07:16 2013 -0700"
      },
      "message": "Create unique files, root ordering, UI bugs.\n\nWhen a file already exists on disk, try adding a counter suffix to\nmake a unique name.  Move services near top of roots list, just below\nrecents.  Remove \"Documents\" root.\n\nIncrease number of recents allowed from single provider, and add more\nlogging to diagnose wedged loaders.\n\nWhen launching GET_CONTENT apps, wait for successful result before\nrelaying result; canceled requests now return to DocumentsUI.\n\nAdd CloseGuard to ContentProviderClients, since leaked instances can\nkeep the remote process alive.\n\nFix UI bug around trailing breadcrumbs.  Fix bug that dropped Recents\nfrom roots list.  Add up action to Settings activity.  Give our\nactivity a default icon while waiting for async roots to load.\n\nBug: 10818683, 10819461, 10819461, 10819196, 10860199\nChange-Id: I7b9e26b1cf8353dd3175458b23da2b4bda6c5831\n"
    },
    {
      "commit": "a9ce049db87259e302e2368d2a4a1c11a94fd831",
      "tree": "c024fcea7bf3983f0f9dd4de270c1412aeb42250",
      "parents": [
        "bdac73fec8e6d4686398654f7a74db465e6de8e0"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 19 15:25:56 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 19 19:53:32 2013 -0700"
      },
      "message": "Load RootInfo in background, invalidation.\n\nMove all RootInfo queries to background threads to avoid janking\nthe UI.  Update passes happen on spawed task, which swaps out updated\ncache results when finished.  Support partial updates when only a\nsingle package/authority has changed.  Watch for change notifications\nfor roots, since flags can change over time.\n\nIgnore stopped packages when in background, but query them for roots\nwhen launching any picker UI.\n\nOptimize management launches by treating as one-shot requests that\ndon\u0027t need to wait for all RootInfo.\n\nBug: 10600454, 10745490\nChange-Id: Ibc7b15688ef6b41bd7e9dd0d7564b501e60e49a9\n"
    },
    {
      "commit": "88f322c3115e85bb96fb46f9192b5daecd472c64",
      "tree": "ec11ce7f6eeeb706df63f675ff3537adf2898751",
      "parents": [
        "16dae5997bb0ff7f03d5a0ccfdc4be94aa35ba51"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 12 16:25:02 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 12 16:39:50 2013 -0700"
      },
      "message": "DocumentsUI tablet support.\n\nShows as a faux dialog on larger tablets, since the normal dialog\nthemes from framework don\u0027t support action bars.  Instead, this hacks\nitself to look like a dialog with an InsetDrawable.  Detects touches\nin dim area to dismiss dialog.\n\nShow all action bar icons on tablets, and roots panel is always\nvisible with a different shadow. Show settings in dialog. Allow mode\nswitches in recents.\n\nBug: 10329832\nChange-Id: Id02982ce7b0d4694962d32f8d5286fdfcc207208\n"
    },
    {
      "commit": "a61dc8e03e6e863005b3a4629ca8f3801d33d3c4",
      "tree": "4c2570186de8e4119938c7e73ad2331622eee1e1",
      "parents": [
        "498a5f5488446e1d5914f5d335ee02572c6201d1"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 05 17:14:14 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Sep 06 08:08:18 2013 -0700"
      },
      "message": "Separate root and document management.\n\nTwo hidden intents for managing roots and documents, used to support\nDownloads UI.  Touching an item tries launching as MANAGE_DOCUMENT\nfirst before falling back to VIEW.  Provide MIME type for roots.\n\nBug: 10446265, 10531347, 10599641\nChange-Id: Ia5584bd6ce3e5a9b0048e8caf1447e3053664413\n"
    },
    {
      "commit": "b51331116eb2ebbc41aaf69142916f9af6dffdd5",
      "tree": "b64f0533ab030ae0c1349fe166b093f716794ace",
      "parents": [
        "5dfb345df7cb17b3a7e534a80a270b4afe7934da"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Sep 01 18:41:04 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Sep 01 18:59:38 2013 -0700"
      },
      "message": "Instance state, fix sharing, Durable objects.\n\nRemember instance state across configuration changes, and enable\nrotation.  This remembers current modes and in-progress traversals.\n\nAlways finish action modes after launching an action.  Fix sharing\nby always putting Uris in extras, and always wrap in a chooser.  Find\ncommon MIME types when sharing multiple documents.  Fix downloads\nlaunching by following directory MIME type change.\n\nIntroduce \"Durable\" which is like Parcelable, but can be used for\nboth byte[] storage and Parcel transport.  Make both DocumentInfo\nand DocumentStack durable.\n\nDisable recents until new behavior is implemented.\n\nBug: 10460236, 10446265, 10533674, 10456344, 10456702\nChange-Id: I4eaf2b0b4cde611c69a1e7b5f1586f6b02019b27\n"
    },
    {
      "commit": "aeb16e2435f9975b9fa1fc4b747796647a21292e",
      "tree": "2e228b0ca25799bf59472d5df08d71e068498b2b",
      "parents": [
        "61f0f9ada51a6718075acfe7fafbb9954f38e980"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Aug 27 18:26:48 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Aug 28 20:49:42 2013 -0700"
      },
      "message": "Stronger DocumentsProvider contract.\n\nUsing a contract class requires that a provider implement it exactly\nwith little help. This change introduces a DocumentsProvider abstract\nclass that provides a client-side implementation of the contract that\ngreatly reduces developer burden, and improves correctness.\n\nThis also moves to first-class DocumentRoot objects, and moves calls\nwith complex side effects to be ContentProvider.call() invocations,\noffering more granular permission control over Uri operations that\nshouldn\u0027t be available through Uri grants.\n\nThis new design also relaxes the requirement that root information be\nburned into every Uri.  Migrate ExternalDocumentsProvider and\nDocumentsUI to adopt new API.\n\nBug: 10497206\nChange-Id: I6f2b3f519bfd62a9d693223ea5628a971ce2e743\n"
    },
    {
      "commit": "4eb407a832b7d6a2d62a535e5cab70b00a0bc8ed",
      "tree": "a4f0280d903b2a3ff7fba71f5641822c4e476335",
      "parents": [
        "58514937628dfcf3b2949e4cbc45d5526ecb8019"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Aug 18 17:38:20 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Aug 18 21:14:02 2013 -0700"
      },
      "message": "Management actions, invalidate caches.\n\nIn manage mode, touching launches a VIEW intent for the file.  Also\nadds actions for sharing and deleting.\n\nMove roots and thumbnail caches into Application object, and flush\ncache when thumbnail size changes.  Listen for package changes and\nbroadcasts that should invalidate our roots cache.\n\nPick default grid/list mode based on provider hint.\n\nBug: 10329983, 10330210, 10378834, 10330069\nChange-Id: I75afb1c58ab71bb9d55852b1059da7257a376248\n"
    },
    {
      "commit": "a5599ef636e37cb0b6474349936999be1afe6987",
      "tree": "ab99c3f837201713f7cd2c0b80a842334934e2d4",
      "parents": [
        "54ca29a5b94c2edf461c5433825d4ae17469fd7c"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Aug 15 16:17:41 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Aug 15 16:25:30 2013 -0700"
      },
      "message": "Documents management mode; API adjustment.\n\nCreate documents manage mode to support Downloads and transient\nstorage devices.  Locks user into requested backend root, and forces\nfile sizes on and sorting by last modified.\n\nSeparate API constants for Documents versus Roots, and give concrete\nMIME types for roots.\n\nTreat null sizes as unknown.  Documents are always enabled in list\nso that divider is drawn.  Mark external storage file as writable.\n\nBug: 10329983, 10332993, 10332952\nChange-Id: I05f4fdf5b04041a38e1ba7fb30202a3b0c615bf6\n"
    },
    {
      "commit": "54ca29a5b94c2edf461c5433825d4ae17469fd7c",
      "tree": "c6bb20d6e873c858dd131404f0c05a75ad552cf2",
      "parents": [
        "2241d45c68739e5bdf187ba3325ee237ef143e21"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Aug 15 11:24:03 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Aug 15 14:14:48 2013 -0700"
      },
      "message": "DocumentsUI handles GET_CONTENT; hinting, errors.\n\nDocument browser now takes over all GET_CONTENT requests that request\nopenable Uris. It shows both storage backends and includes other apps\nthat respond to GET_CONTENT. Only grants transient read permissions.\n\nBetter guarding against throwing storage backends. Send sort order\nand local-only hinting to backends.\n\nRequire that OPEN/CREATE_DOC users include openable category.\n\nBug: 10330112, 10329976, 10340741, 10331689, 10329971\nChange-Id: Ieb8768a6d71201816046f4a4c48832061a313c28\n"
    },
    {
      "commit": "9fb567b59112f99e64e0bff6f343188331bad28d",
      "tree": "75be88e422f398bf0b3f5d42bd0dc42a077bdd69",
      "parents": [
        "b156f4bf8cdfe475a7116b627d84a281e1a281b7"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Aug 07 16:22:02 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Aug 07 16:29:51 2013 -0700"
      },
      "message": "Settings, replace files, sorting by size, tweaks.\n\nAdd settings to show file sizes and advanced storage devices, both\ndisabled by default. Add sorting by size when enabled in settings.\n\nAlways show all documents, but only allow selection when they match\nMIME filter. When creating, select entire filename on focus. When\ncreating, treat selected documents as replacement targets using that\nexact Uri unless display name is changed.\n\nShow available bytes for device roots. Show empty text label in\nempty directories. Split grid backend and details into two separate\nlines. Fix path label ordering when rendering recent directories.\n\nChange-Id: I44c62e8adb8ca7d4355510a13d1ba975196a2d29\n"
    },
    {
      "commit": "b156f4bf8cdfe475a7116b627d84a281e1a281b7",
      "tree": "537c95d8bcf776de593e5dd9ed02f62445ca7147",
      "parents": [
        "66516697a29cf00d93893a1011d3befc7c1ee37f"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Aug 06 16:26:14 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Aug 06 18:16:21 2013 -0700"
      },
      "message": "Recents in create, uniform item layouts.\n\nShow recent directories in a separate fragment, and save as serialized\nversions of new DirectoryStack. Cleaner behavior around recents and\nsearch, instead of treating them as pseudo-Documents.\n\nMore uniform item layouts between list and grid, including both date\nand size information, and originating storage root in recents. Avoid\nclashing directory loaders by assigning unique numbers. Promote\nlist/grid switching up into activity.\n\nChange-Id: I9a93460b896067ca036d7e772eeabde31face2e1\n"
    },
    {
      "commit": "92d7e697a864a3e18bef4ef256bb3eb339a66b4e",
      "tree": "e5cce35e071787bfb81a8341716071925f1c86c4",
      "parents": [
        "7e258b31e70464bb6d80b8b42f0cef8e4417bd6a"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Aug 02 10:33:21 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Aug 02 11:05:11 2013 -0700"
      },
      "message": "Reference docs by ROOT_ID and DOC_ID; recents.\n\nThe same document may be present with different sematics under\nmultiple storage roots, so always reference using both ROOT_ID and\nDOC_ID.  This enables backends to revoke permissions for an entire\nroot, such as when an account is removed.\n\nStart building provider to remember recently accessed documents.\n\nChange-Id: I75befa2e61393dec12fcc7fd27f631fcddae46fa\n"
    },
    {
      "commit": "e6ddb9222d84f25243571d91450699220a92eeb0",
      "tree": "2e2df07fbc48d6021ba5c5f5e7070416ed1c3d07",
      "parents": [
        "326ef35f6f0ee3221804585592e462a9307c2df1"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jul 16 13:01:57 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jul 16 13:01:57 2013 -0700"
      },
      "message": "Disable documents test UI.\n\nChange-Id: Iae8ef3e751a53a3f7df0a7c5bc666ec75e91d9e9\n"
    },
    {
      "commit": "1482789374fb8da3abea8f6f4f272a67205b95db",
      "tree": "b173a2cacc2f29918e55de114054b372076c04c0",
      "parents": [
        "be8b12e687bd10a526b1f54c2d8a52abdad15d85"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jul 01 17:22:02 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jul 01 20:28:20 2013 -0700"
      },
      "message": "Support sorting in storage UI.\n\nExtract mode information into DisplayState which is now consistent\nacross directory traversal.  Use grid mode by default when working\nwith images.  Dialog to switch sort order.\n\nAdd testing UI to exercise until we have real clients.\n\nChange-Id: Ic423584d4559732fb3d2aea9e0406b57d43f6e6d\n"
    },
    {
      "commit": "54e55b740fef1be654c3959aee41ef5ddfa61293",
      "tree": "0be97d0f5e6043bd38be60a0d99e5dd2402648c8",
      "parents": [
        "a6471e88349a23ba7ff954536583f395348bdf8b"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Jun 30 20:02:59 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jul 01 15:31:44 2013 -0700"
      },
      "message": "Iterate on storage UI.\n\nSupport both grid and list view of documents.  Show breadcrumb\nnavigation trail in action bar.  Start supporting file and directory\ncreation.\n\nChange-Id: I93a973da7b0d4387a57fe719e7bb20944adb0290\n"
    },
    {
      "commit": "9e0036ed7d3260d79cc5f9ffd8e3bbe760699924",
      "tree": "88ca52627f99558d18a29acb207bd15cec379ba4",
      "parents": [
        "9ecfee03fa188aebfbd9778b4e020323903495ee"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Apr 26 16:54:55 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed May 01 17:44:42 2013 -0700"
      },
      "message": "External storage provider, document picker UI.\n\nContinuing to flesh out storage backends by adding an external\nstorage document backend.  Still rough, but it can traverse files\nand directories.\n\nEarly pass at OPEN/CREATE_DOC picker UI, which offers to traverse\nany known storage backends.  Supports opening subdirectories and\nreturning a picked file.\n\nChange-Id: Idc3554036b3816a93d9b465ee8a620746859d2ae\n"
    }
  ]
}
