)]}'
{
  "log": [
    {
      "commit": "b180a65d41adc731cbff1536c7ede15174bc08e1",
      "tree": "58be4cd70b6ce9340bd334bc58b95bd54558a920",
      "parents": [
        "f9b70ab87e8f26b57ac3d8dc3b77052e747cb888"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 23 14:23:41 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 23 14:23:45 2013 -0700"
      },
      "message": "Allow saving to Downloads.\n\nUses new column to mark writability.  Also filter file selection in\ncreate mode to only allow writable files.\n\nBug: 10667164, 10893268\nChange-Id: I90f74efbb7ac634fbdb3cc02a904a96a434d3605\n"
    },
    {
      "commit": "1feeddf518d31a7ff5d28000a631857442cd7161",
      "tree": "aa3fe4cbf1ee0546838193479f17fe8f7ac8ea68",
      "parents": [
        "5545f56f7561810187545a1817b6001dd1f9931b"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Sep 21 15:11:19 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Sep 21 15:26:37 2013 -0700"
      },
      "message": "Latest UX asset drop, grid padding.\n\nBring in latest asset drop.  Apply grid padding programmatically\ninstead of waiting for asset.  Remove alpha from directory animation.\n\nUpdate save footer background to match spec.\n\nBug: 10700025\nChange-Id: I8eef08f36d04767b78e91b23f72bdbebfbb02f58\n"
    },
    {
      "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": "f8abf2e387681f2ed7631783418972972379d740",
      "tree": "da02ac336db671dc8af4c7ce3b2ea855b8286017",
      "parents": [
        "0aaeaab0bf954a7ff34a4894c509ca6a137079eb"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 19 11:25:56 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 19 11:25:56 2013 -0700"
      },
      "message": "Also catch one more tablet layout NPE.\n\nBug: 10837208\nChange-Id: I178110431221773658403319b2be7aff22adadc8\n"
    },
    {
      "commit": "0aaeaab0bf954a7ff34a4894c509ca6a137079eb",
      "tree": "a6903710dee0b959a373d6d2afce1ce74c527ecd",
      "parents": [
        "563ee0fbe99c234f3364044cb762a75abbbaa797"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 19 11:19:39 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 19 11:19:39 2013 -0700"
      },
      "message": "Fix tablet layout and resources.\n\nBug: 10837208\nChange-Id: I563a3b66976b5b02cdb25e077bf0709bb6e66926\n"
    },
    {
      "commit": "563ee0fbe99c234f3364044cb762a75abbbaa797",
      "tree": "09c4a3149195e3a0bfd822395ede49e7100adbc9",
      "parents": [
        "e20a3acdc2d52c7eeb76940206145b3c419394a6"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Sep 18 18:03:49 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Sep 18 18:03:49 2013 -0700"
      },
      "message": "Latest UX asset drop.\n\nDarker action bar overflow icon, larger grid-mode directory icon,\nicon for music albums, generic file icon.\n\nFix bug that allowed null MIME types to be picked.\n\nBug: 10700025\nChange-Id: I2089678eaf793bc3c7214b21c9de5f38429ebb0f\n"
    },
    {
      "commit": "e20a3acdc2d52c7eeb76940206145b3c419394a6",
      "tree": "450a27e9b12d402241b4c403934319487d86bc26",
      "parents": [
        "6df7d4a574ffd85c82cad402552e3854df3a3f85"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Sep 18 16:26:49 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Sep 18 17:12:25 2013 -0700"
      },
      "message": "Save directory state and animate.\n\nSave scroll position and restore when rotating or going up the\ndirectory stack.  Also show directory animations when navigating\nthe directory stack.\n\nBug: 10417201\nChange-Id: Ia2c508debc2bffffe6306eb9078afefef259dfe2\n"
    },
    {
      "commit": "ad178f5509a9573e1cc9bc7fbfaeb10dd2847f31",
      "tree": "8430a6d0a8abce98e6e632ebc27de04ae0a517cd",
      "parents": [
        "a751d97e8611d16a2929c538f634a4b4c7b2938a"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Mon Sep 16 09:44:32 2013 -0700"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Mon Sep 16 09:44:32 2013 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: I6066e1589c84a842887ac37b737d6852a2ff99a7\nAuto-generated-cl: translation import\n"
    },
    {
      "commit": "2a19a5bd50ee0fcebb8d497b47ec33cd532ac1ca",
      "tree": "5293a5442c7371cb4ccd7f39931a94f56d18fcf4",
      "parents": [
        "c8db445e42f1b60b9af036cb0d793ee11ae4c9c6"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Fri Sep 13 21:45:23 2013 -0700"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Fri Sep 13 21:45:23 2013 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: I45033c9b90cdbf35e1feec31b91df21a27eaaf06\nAuto-generated-cl: translation import\n"
    },
    {
      "commit": "f6db154975ef575479ba4ab59d80bcf592288252",
      "tree": "e2dab1b025abe925dd70a368a8bd4919f9fae6f4",
      "parents": [
        "3e1189b3590aefb65a2af720ae2ba959bbd4188d"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Sep 13 13:42:19 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Sep 13 16:02:14 2013 -0700"
      },
      "message": "More UX updates around picking images.\n\nWhen picking images or videos, hide the titles in recents, since the\nthumbnails should speak for themselves.  Also respect new flag that\nallows a directory to request their titles be hidden.\n\nShow directory icon hint in grid mode when showing a thumbnail, to\nremind user it\u0027s a directory.\n\nFilter directories out of recents.  Hide most action bar icons on\nphones, even when room.  Only show drawer on first launch.  Hide most\ndrawer headers to match spec.\n\nBug: 10710331\nChange-Id: I0ef1973ddd62750f57345336388366eda1449720\n"
    },
    {
      "commit": "3e1189b3590aefb65a2af720ae2ba959bbd4188d",
      "tree": "d3cf503e72f633e7c6ef51792bec077434deede6",
      "parents": [
        "ab62870c7e787323057d3b16a3ff1fd118fb5925"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 12 21:59:06 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Sep 13 11:35:04 2013 -0700"
      },
      "message": "Move search to roots; Documents root; hide empty.\n\nDocuments searches now happen root-wide, instead of only under a\nsubdirectory.  Updates abstract class and flags to match.  Add flag\nfor a root to indicate it\u0027s empty, and hide empty roots in UI unless\ncreating.\n\nDefine \"Documents\" public directory and storage backend to contain\nfiles.\n\nBug: 10712057, 10710865, 10710758\nChange-Id: I8716367568969f9cb1d83927b2bf5a7013809350\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": "c57bd8b9962a87282aef4bf367c33238f1d7c46e",
      "tree": "b09a672d4c41af92cb0c47c2837b721106150575",
      "parents": [
        "0792054f6b94986ed72df4f7fb8e775d8b916946",
        "caaf6979f38fe0ff21ba57656c75d818642a230b"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Thu Sep 12 02:45:52 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 12 02:45:52 2013 +0000"
      },
      "message": "Merge \"Import translations. DO NOT MERGE\" into klp-dev"
    },
    {
      "commit": "caaf6979f38fe0ff21ba57656c75d818642a230b",
      "tree": "e869f01d33e058091b655dd22d572be43fb6b8a6",
      "parents": [
        "c19d683d9ea5dafdd8e355dc3fa34b362bc379e9"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Wed Sep 11 11:15:47 2013 -0700"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Wed Sep 11 11:15:47 2013 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: I00a9521d0ac1e2463268295d1ea09f2894b1618c\nAuto-generated-cl: translation import\n"
    },
    {
      "commit": "aca405cd592679af4a4b31b01dfed6fd59c4a168",
      "tree": "3874e1d82a8542bd0e3ae39bf85b7fbffccfcc3c",
      "parents": [
        "e4984bea95a07dea0ef0259fefa1e52f0bbb1533"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Sep 11 09:14:16 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Sep 11 09:14:16 2013 -0700"
      },
      "message": "Fix SDK build.\n\nChange-Id: Ib12748478cb1b42621454ab2035fb8f3163b6ac8\n"
    },
    {
      "commit": "ed903213e6d3d75d497498c9cf95aa8e74277a9e",
      "tree": "1ad4508da5dc2eeef64d6ebfa604136148123311",
      "parents": [
        "cc8f710a503ebda563caf2fcfc584de5e2ed76c4"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Sep 10 17:56:39 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Sep 10 20:04:11 2013 -0700"
      },
      "message": "More tweaks to match UX spec.\n\nFixed text colors to match spec.  Behold The Greyening!  Centered\nloader spinner in grid mode.  Show multiple lines in status messages.\n\nAdd string descriptions.  Fix bug where toggling size setting didn\u0027t\nkick a UI rebind.\n\nBug: 10510022\nChange-Id: Icb41ebeb4de0fed8c04fc6cf5213af1587b72641\n"
    },
    {
      "commit": "4ec973925fc2cd18f9ec0d0ca5af588564fded27",
      "tree": "d24a03c6f8cecb6bbba7e6073589afb58b05a2e9",
      "parents": [
        "1d2daa7809b58c226410c0060d7837de0a29888a"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Sep 10 12:04:26 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Sep 10 16:40:36 2013 -0700"
      },
      "message": "More UX work for thumbnails, search, management.\n\nHide non-finished downloads from normal picker UI, but keep them\naround in management mode.  Uses a Uri query parameter and a hidden\nAPI on DocumentsProvider.\n\nScale thumbnails to fit viewport, always show MIME icon while waiting\non thumbnails, and crossfade between them.  Cancel thumbnail tasks\nwhen views are recycled.\n\nFilter directories out of search results for now.  Also leave sort\nordering from backend intact, since it\u0027s custom ranking.  Fix\nSearchView interaction to dismiss properly and restore across\norientation and drawer state changes.\n\nHide most actions when drawer is open.  Invalidate RootInfo cache\nwhen locale changes.  Apply sort ordering when showing recent create\ndirectories.  Hide recent summary string when icon is enough for user\nto disambiguate.\n\nBug: 10667184, 10665663\nChange-Id: I331d3272a08c497f88dc659d9e112231cb35aa69\n"
    },
    {
      "commit": "5f5e84770badd10c41fd4a2b01a9958a607eacd9",
      "tree": "e00d66f38f32098feafdd8207944838f2317fcf5",
      "parents": [
        "a244732d93c09da1db9fd79b6e7275649a18c60b",
        "903747a3479add3693fc0c332c5159b84544bb01"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Tue Sep 10 05:00:52 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 10 05:00:52 2013 +0000"
      },
      "message": "Merge \"Import translations. DO NOT MERGE\" into klp-dev"
    },
    {
      "commit": "b7757a6b32edea62a1a9a803ad83579220f26100",
      "tree": "776fdedeb15d49f65d0d74e0d642d8bb52f640a2",
      "parents": [
        "fb3445c9b31c7f8401d6eec0606dabee366c8aad"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 09 17:46:54 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 09 17:55:10 2013 -0700"
      },
      "message": "Rename offer() to add(), remove/hide some APIs.\n\nChange MatrixCursor offer() to add() based on review feedback.  Remove\nsome now-unused XML metadata.  Hide document creation, since it\u0027s not\nsupported in initial version.\n\nBug: 10577809, 10461706, 10678563\nChange-Id: I7b3f4c6899c28f633471ef816bee22bf032aa0d2\n"
    },
    {
      "commit": "fb3445c9b31c7f8401d6eec0606dabee366c8aad",
      "tree": "95540ac1a3c64192787d5a1f5bd1fc4923050752",
      "parents": [
        "3f4c205fd3110345241e690f2a2e7c1b477eac76"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 09 17:35:46 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 09 17:35:48 2013 -0700"
      },
      "message": "Sort order is sticky for session, back leaves.\n\nInstead of persisting sort order per-directory, the order is now\nsticky for that session.  Any user selected sort order takes\nprecedence over an ordering hinted by a backend.\n\nWhen a restored DocumentStack is untouched, the back key now leaves\nthe dialog, instead of popping from the restored stack.\n\nPersist list/grid mode changes async.\n\nBug: 10659604, 10672973\nChange-Id: I9f022a081c014537447c9c2af10e19d8cd9566aa\n"
    },
    {
      "commit": "3f4c205fd3110345241e690f2a2e7c1b477eac76",
      "tree": "48803386429a4bb8088dc97380df097d497e6268",
      "parents": [
        "d182bb641f228b2d28527a6aa86075f6358ab838"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 09 16:51:06 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 09 16:55:35 2013 -0700"
      },
      "message": "Disabled states, more UX work, bug fixes.\n\nFix drawable state to correctly show dimmed disabled state.  Update\ndisabled state for all children to grey out text.\n\nBlock multi-selection of documents not matching MIME filter.  Load\nthumbnails in parallel.  Show thumbnails in list mode based on MIME\ntype to match spec.\n\nGive each footer a unique view type to avoid recycler crashes.\n\nShow breadcrumb icons in recent create paths.  Fix timestamp bug when\nquerying/updating recent paths.\n\nMake ContentProviderClient.closeQuietly() really be quiet.\n\nBug: 10668364, 10510022, 10668701, 10534224, 10667726\nChange-Id: I3c705412fb211519f15ad41a273a7533b878e9e5\n"
    },
    {
      "commit": "903747a3479add3693fc0c332c5159b84544bb01",
      "tree": "4eac3576869dc6e8a71098542bcd7b5c2fd70f35",
      "parents": [
        "bdd61696c6720faa14ca9fdf180e519138b3d087"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Mon Sep 09 09:39:13 2013 -0700"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Mon Sep 09 09:39:13 2013 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: I8825a1c9aa0d9d85efa50e9ce2849a0e1ee287da\nAuto-generated-cl: translation import\n"
    },
    {
      "commit": "d182bb641f228b2d28527a6aa86075f6358ab838",
      "tree": "94eafb66067b4139a014a1f03320c4a9a5f32171",
      "parents": [
        "0c58bd97384498be14aa9795be9188ca93110e00"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Sep 07 14:45:03 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 09 09:16:09 2013 -0700"
      },
      "message": "Remember mode and sort on per-directory basis.\n\nPersist the last user-selected list/grid mode and sort order for\neach directory.  Remembered user choice always overrides provider\nhinting.\n\nFilter out recent documents that don\u0027t match requested MIME type, and\nshow recents in grid mode when picking images.  Hide mode and sort\norder in recents.\n\nAdd hinting flag for backend to indicate a directory would like to be\nsorted by last modified.  Include explicit root in DocumentStack and\nclearly mark derived fields.\n\nBug: 10392047, 10608506\nChange-Id: I2dd3a0e4112852ebf87e7dbb08b3781c86587dcf\n"
    },
    {
      "commit": "28c05ee8931cecf4c51c470e0043d30196010c49",
      "tree": "59c80cf9039d2c27a24d618dbc3e65dc66011b5f",
      "parents": [
        "6d97d3c1a2ebac4e3f32c7e5bc134864ace1c17f"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Sep 06 13:22:09 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Sep 06 13:57:57 2013 -0700"
      },
      "message": "Item layout tweaking, hook up more assets.\n\nUpdate layouts for items in both list and grid mode to reflect\nlatest UX.  Use new card background in grid mode, and apply gradient\ntreatment over thumbnails.\n\nVisibly mark currently selected root.\n\nBug: 10510022\nChange-Id: I36b290d7082b5cdfd7b3167df7d976032bc01bd6\n"
    },
    {
      "commit": "6d97d3c1a2ebac4e3f32c7e5bc134864ace1c17f",
      "tree": "0095bc600df69f008cf3f6b1717c169a4bfef87d",
      "parents": [
        "911d7f411f36f2279aae44c89ff1d33a29140046"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Sep 06 10:43:45 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Sep 06 10:46:54 2013 -0700"
      },
      "message": "Another asset drop, provider icons, tests.\n\nLatest asset update, including provider icons which are treated as\nspecial cases for now instead of checking into separate apps.  Add\ntests for MIME type matching of roots.  Remove unused XML.\n\nBug: 10510022\nChange-Id: Id567a9e06ba241f60ac011823e550253c6c797fb\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": "ca5d413eb978db22ec1c0f327e10b1ecf793792d",
      "tree": "2f0e2c4e5b9fc18fbac25430efabfd599c589162",
      "parents": [
        "bd8476016576124e82a23de864faf587299f6826",
        "1eb0aa4b7344b69c9c99958d1aca1fb4c8ade4a0"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Thu Sep 05 23:28:25 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 05 23:28:26 2013 +0000"
      },
      "message": "Merge \"Import translations. DO NOT MERGE\" into klp-dev"
    },
    {
      "commit": "5d7acbd8bedbccfd64d9d790d0b3c2492acdc219",
      "tree": "655735a1a22e6e81331caae8f64de3838c9f1262",
      "parents": [
        "e0e4197c55a8a7f6896eec2794c4cd455736e46b",
        "923396b7720367ec99c889725fddfa556e703971"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 05 21:19:39 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 05 21:19:39 2013 +0000"
      },
      "message": "Merge \"Filter roots based on supported MIME types.\" into klp-dev"
    },
    {
      "commit": "923396b7720367ec99c889725fddfa556e703971",
      "tree": "13699b997e258c4096c087f7fea2f3ba7374ee92",
      "parents": [
        "0b14db3cf5eac43736462999337c9a3efdc1ac81"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 05 13:55:35 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 05 13:58:04 2013 -0700"
      },
      "message": "Filter roots based on supported MIME types.\n\nUsing flags to indicate supported types isn\u0027t very extensible, so\nuse newline-separated MIME types instead.\n\nBug: 10514613\nChange-Id: I45641fc20b423b2a0bb2df7457c274f42aa6861a\n"
    },
    {
      "commit": "1eb0aa4b7344b69c9c99958d1aca1fb4c8ade4a0",
      "tree": "2182ae9844d7d8f9f9b9eac48edd65fdbc707eed",
      "parents": [
        "9e8bdc39bcdfc22d05edd5f4a0ca69cdffec4f34"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Thu Sep 05 09:10:12 2013 -0700"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Thu Sep 05 09:10:12 2013 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: I24ceb7ffe39244cb12c97067c3292b460b4a2c8f\nAuto-generated-cl: translation import\n"
    },
    {
      "commit": "7f95595fe7c08e62e0468d1c718cdf6ebed974b0",
      "tree": "a7cee5c496fa8f05cc5ea5cd390abc4a8d73e222",
      "parents": [
        "b145ac127ac25abd30597f798612b539107f8368",
        "0b14db3cf5eac43736462999337c9a3efdc1ac81"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 05 03:04:18 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 05 03:04:18 2013 +0000"
      },
      "message": "Merge \"Asset drop, icons for common MIME types.\" into klp-dev"
    },
    {
      "commit": "b145ac127ac25abd30597f798612b539107f8368",
      "tree": "c8fb1e42be7d8bff9082e3000e337ee2089ad1e0",
      "parents": [
        "eebf6895fde7ef0d87c91d31b3abb36d4a98df66",
        "e37ea6123d1aa3cd3e8804988886b1f6046d79d6"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 05 03:04:09 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 05 03:04:09 2013 +0000"
      },
      "message": "Merge \"Fix document management permission enforcement.\" into klp-dev"
    },
    {
      "commit": "0b14db3cf5eac43736462999337c9a3efdc1ac81",
      "tree": "60b2fdd6db8e779f2939f6f195bf8577fa2cf569",
      "parents": [
        "e37ea6123d1aa3cd3e8804988886b1f6046d79d6"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Sep 04 18:03:18 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Sep 04 18:46:56 2013 -0700"
      },
      "message": "Asset drop, icons for common MIME types.\n\nBring in latest assets from UX. Map common MIME types to specific\nicons.\n\nBug: 10510022\nChange-Id: I01ea8749ca5515a04efcbc15eb0c8cbb43e5e7ad\n"
    },
    {
      "commit": "e37ea6123d1aa3cd3e8804988886b1f6046d79d6",
      "tree": "1fee5a31a764f5aaa5228dd13e8add9924eeacc1",
      "parents": [
        "954be0232655d316bc5decbbd35579af902c75c2"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Sep 04 14:30:31 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Sep 04 18:43:34 2013 -0700"
      },
      "message": "Fix document management permission enforcement.\n\nAllow both explicit holders of the MANAGE_DOCUMENTS permission and\nthose holding Uri grants to perform management tasks.\n\nExtend grants for newly created documents when caller doesn\u0027t have\npermission.  Revoke grants when deleting documents.\n\nTest now writes actual content into picked file.  Workaround updated\nflags for Drive app.\n\nBug: 10623211\nChange-Id: Ia8e90b33e0fac8294b2cacb96d083c43fdf75aab\n"
    },
    {
      "commit": "df8fe74455ca1ecccc0604cef0d36e101fe735be",
      "tree": "f12bf49c98aa082ee48efdd7c4a0cd9b1521f31b",
      "parents": [
        "b414cbddb9d64c400d2bbd307c62317a8f529bcd",
        "8213e34b149233e8d09ff24bc4c8f9364232e21c"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Wed Sep 04 04:43:47 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 04 04:43:51 2013 +0000"
      },
      "message": "Merge \"Import translations. DO NOT MERGE\" into klp-dev"
    },
    {
      "commit": "954be0232655d316bc5decbbd35579af902c75c2",
      "tree": "745d4ea34ad245f3e9d87ef19a8910d47cdd3ad4",
      "parents": [
        "ded77187ef53341765fcab8e29cda94810fc2ca5"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Sep 03 15:25:52 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Sep 03 17:02:47 2013 -0700"
      },
      "message": "Show loading, error, and info messages as footers.\n\nA provider can include extras in their Cursors to indicate that\nloading is ongoing, or include an error or informational message,\nwhich are now shown in footer views.\n\nFix registration to always get change notifications.\n\nTest provider that verifies common provider behavior of holding\na reference to \"cloud\" resources that are released by GC when the\nremote Cursor is closed.  Also used to validate Recents behavior\nfor slow providers.\n\nBug: 10599268\nChange-Id: I331c31058dbb80261e7d279b851197c65ac87e32\n"
    },
    {
      "commit": "ded77187ef53341765fcab8e29cda94810fc2ca5",
      "tree": "b74b3dc22c9f256764492559547a4f51a69be2db",
      "parents": [
        "9c104ab454de23628b5751db44ef08221d20dc86"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Sep 03 14:17:06 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Sep 03 14:17:10 2013 -0700"
      },
      "message": "Updated documents UX around action bar.\n\nChange action bar to match current design; drawer is always available\nand navigation dropdown is used to interact with current traversal\npath in hierarchy.  On first launch, show recents with drawer\nexpanded.  On subsequent launches, resume from last location with\ndrawer closed.  If last location root isn\u0027t applicable, then behave\nlike initial launch.  Move sort order into action bar submenu.\n\nDelete documents using contract.  Use unstable provider when\ninflating DocumentInfo from Uri.\n\nBug: 10330219, 10510851\nChange-Id: I6e94637d70ebca156a6c5d50272e878156d0dd62\n"
    },
    {
      "commit": "8213e34b149233e8d09ff24bc4c8f9364232e21c",
      "tree": "3af099d9ac409f4823c2eeba283047561c7c4ba3",
      "parents": [
        "96661c42d0643c129fed60678aa0b8f99d32b456"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Tue Sep 03 10:07:16 2013 -0700"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Tue Sep 03 10:07:16 2013 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: I17ec3c595dbf7291f781fa73ce5772d2a647ae91\nAuto-generated-cl: translation import\n"
    },
    {
      "commit": "118cb0353f6dabce1a1d6b550f7fc9eb78c7de87",
      "tree": "b24a3bca50e9f23ecda406e6b8b676299c281cf3",
      "parents": [
        "7c925042061bf4b80cf80a7e6d94995c62eca7e1",
        "348ad6866b91afa4d59d45df533ef88094c74d13"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Sep 03 03:50:55 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 03 03:50:56 2013 +0000"
      },
      "message": "Merge \"Filter roots based on incoming request.\" into klp-dev"
    },
    {
      "commit": "7c925042061bf4b80cf80a7e6d94995c62eca7e1",
      "tree": "1c5fd786ee45212b4f3aceee4969c7dbffc6a075",
      "parents": [
        "c22acf6f1fc001ad0f1c23c5261f371d63e4106e",
        "251097b3789632000ccdaf7fb7d66a82ff37d882"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Sep 03 03:50:27 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 03 03:50:27 2013 +0000"
      },
      "message": "Merge \"New recents behavior to match spec.\" into klp-dev"
    },
    {
      "commit": "c22acf6f1fc001ad0f1c23c5261f371d63e4106e",
      "tree": "bb6e0bbb5bcbde7e76b71d207668ffabfabbb13d",
      "parents": [
        "db06adec0d25f57d0fff8788b0081f92f6e5383c",
        "b51331116eb2ebbc41aaf69142916f9af6dffdd5"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Sep 03 03:50:10 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 03 03:50:10 2013 +0000"
      },
      "message": "Merge \"Instance state, fix sharing, Durable objects.\" into klp-dev"
    },
    {
      "commit": "db06adec0d25f57d0fff8788b0081f92f6e5383c",
      "tree": "3a62cfdefae6eacc0322aa697be1a90a7623dbee",
      "parents": [
        "cd6d7deec8742e257a670db8e027f628afdf337e",
        "5dfb345df7cb17b3a7e534a80a270b4afe7934da"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Sep 03 03:50:00 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 03 03:50:00 2013 +0000"
      },
      "message": "Merge \"Use Cursors directly when binding documents.\" into klp-dev"
    },
    {
      "commit": "348ad6866b91afa4d59d45df533ef88094c74d13",
      "tree": "020b78712575e75216d246ff961af93c9247f051",
      "parents": [
        "251097b3789632000ccdaf7fb7d66a82ff37d882"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 02 17:19:40 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 02 17:43:14 2013 -0700"
      },
      "message": "Filter roots based on incoming request.\n\nWhen incoming request is for local-only content, or for ACTION_CREATE,\nonly include roots advertise those features.\n\nFilters roots based on the allowed MIME types and the supported types\nadvertised by each root.  This supports displaying Images and Audio\nroots only when requesting those content types.  Applies the same\nfilter when deciding which roots to query for recents.\n\nFixes advanced filtering instead of limiting to just devices. Update\nsorting so that Recent always appears first. Add testing support for\nLOCAL_ONLY.\n\nBug: 10597317, 10526535\nChange-Id: Ic5ccf475c4fe93fd52b29388d369d7f6915c0c42\n"
    },
    {
      "commit": "cd6d7deec8742e257a670db8e027f628afdf337e",
      "tree": "5745aabc61c5ed61d0877082c0e5ebd5eafecbab",
      "parents": [
        "61dda198598e95971ca224e3bcb7393f30e45657",
        "ae9b51bfa313c51a31af30875a71255d7b6d2e61"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Sep 03 00:07:17 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 03 00:07:17 2013 +0000"
      },
      "message": "Merge \"Refactoring of DocumentsContract.\" into klp-dev"
    },
    {
      "commit": "251097b3789632000ccdaf7fb7d66a82ff37d882",
      "tree": "9a9b17a73b1dbff9292683b1e316640dd8c8e2f3",
      "parents": [
        "b51331116eb2ebbc41aaf69142916f9af6dffdd5"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 02 15:07:28 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 02 15:33:57 2013 -0700"
      },
      "message": "New recents behavior to match spec.\n\nUpdated behavior queries each documents root for recently modified\ndocuments.  It uses a new variant of DirectoryLoader which limits the\nmaximum number of parallel queries to relieve memory pressure.  When\nfirst started, it waits up to 500ms for everyone to finish, then\npublishes whatever results are ready, and then refreshes results as\neach straggler finishes.\n\nNew RootCursorWrapper that always blends in authority and rootId\ncolumns, which are used for binding root details from blended cursors.\n\nBug: 10593596, 10329994\nChange-Id: Icc0d4a2f1b6166edc72f78a4c88f444eeba6f2f0\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": "5dfb345df7cb17b3a7e534a80a270b4afe7934da",
      "tree": "ca3998076409d454e72c01f250961e72a8304839",
      "parents": [
        "ae9b51bfa313c51a31af30875a71255d7b6d2e61"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Aug 31 21:27:44 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Aug 31 21:33:56 2013 -0700"
      },
      "message": "Use Cursors directly when binding documents.\n\nInstead of creating a DocumentInfo for every list item, bind the\nadapter against Cursor directly.\n\nCreate new SortingCursorWrapper which performs sorting at query time\nand keeps a O(1) mapping from sorted to unsorted positions in the\nunderlying Cursor.\n\nSuppress extra loader passes that had been kicked off.  Use unstable\nprovider when querying to guard against broken providers.\n\nBug: 10567506, 10510851\nChange-Id: I535814da6b17c38de04a1175e0afcc78c6b966ce\n"
    },
    {
      "commit": "ae9b51bfa313c51a31af30875a71255d7b6d2e61",
      "tree": "97179597056ef53aafbf952b22bf332954de0649",
      "parents": [
        "aeb16e2435f9975b9fa1fc4b747796647a21292e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Aug 31 15:02:20 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Aug 31 16:58:28 2013 -0700"
      },
      "message": "Refactoring of DocumentsContract.\n\nCombines related columns and constants onto the same class so they\nare easier to discover.  Move back to surfacing roots with columns\nso they are consistent with documents.\n\nAdvanced roots are represented with a flag instead of distinct\ntypes.  Flags to indicate supporting of well-known media types,\ninstead of arbitrary an MIME filter.  Reintroduce well-formed rootId\nto support recents.\n\nAlways use the expanded version of \"documents\" in constants, methods,\nand argument names.\n\nRefactor DocumentProvider method names to clearly distinguish if\na single item or multiple could be returned, and of which type.  Add\ndocumentation to clearly define which methods have already been\noverridden.\n\nBug: 10567506, 10567557\nChange-Id: I981f26ab82f2b520a19aa1ce66f659de50d7fac0\n"
    },
    {
      "commit": "9fd81a9008d5c8dd33272b6a451d89fa2fa1841e",
      "tree": "972eb1e03b7baf79f25363cb55954aaa1e216eea",
      "parents": [
        "166853e6c90abe84c556a574589419f576c5e986",
        "aeb16e2435f9975b9fa1fc4b747796647a21292e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Aug 29 04:27:02 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 29 04:27:02 2013 +0000"
      },
      "message": "Merge \"Stronger DocumentsProvider contract.\" into klp-dev"
    },
    {
      "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": "62ee6fab6520f36f4cd705bb2fcb0ba3aebfaf09",
      "tree": "831e07da67203139a1aecb21480a69fe1ced270e",
      "parents": [
        "627dd9b584a267b206bace8dc518287fe58b9563"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Wed Aug 28 18:05:47 2013 -0700"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Wed Aug 28 18:05:47 2013 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: Ic6b1048f4afaa520fea602ec4367de5e192186bd\nAuto-generated-cl: translation import\n"
    },
    {
      "commit": "a943688bb050e4fbf093d1821812bfbe0efec07f",
      "tree": "3692ccaf696358872ead12a51777f771bf7301a1",
      "parents": [
        "94366313331a789440a3c077173aafcb85cabe78"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Mon Aug 26 09:42:10 2013 -0700"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Mon Aug 26 09:42:10 2013 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: I7be513f3d5decec282200b01900ce480fcf291cf\nAuto-generated-cl: translation import\n"
    },
    {
      "commit": "98d6212327d1c483894b642d5e24c3aac9fca9cf",
      "tree": "94c82b0f8f8fa9cd8d622ebb45d5fdaa20dafc08",
      "parents": [
        "570cd0f4c06a6e3de2af348040415ff2fcff57a1",
        "bd3b902567b09379e1b62c60b3319ad82102efad"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Aug 23 23:17:47 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 23 23:17:47 2013 +0000"
      },
      "message": "Merge \"Add CancellationSignal support to file operations.\" into klp-dev"
    },
    {
      "commit": "bd3b902567b09379e1b62c60b3319ad82102efad",
      "tree": "c179f95abfe89e2029e099c1dba50dcefc6dfe7b",
      "parents": [
        "b4f6a01d51612b9e50dffd95905e9c9add79b5d8"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Aug 20 15:20:04 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Aug 23 11:27:25 2013 -0700"
      },
      "message": "Add CancellationSignal support to file operations.\n\nSince ContentProvider file operations can end up doing substantial\nnetwork I/O before returning the file, allow clients to cancel their\nfile requests with CancellationSignal.\n\nIdeally this would only be needed for openFile(), but ContentResolver\nheavily relies on openAssetFile() and openTypedAssetFile() for common\ncases.\n\nAlso improve documentation to mention reliable ParcelFileDescriptors\nand encourage developers to move away from \"rw\" combination modes,\nsince they restrict provider flexibility.  Mention more about places\nwhere pipes or socket pairs could be returned.\n\nImprove DocumentsContract documentation.\n\nBug: 10329944\nChange-Id: I49b2825ea433eb051624c4da3b77612fe3ffc99c\n"
    },
    {
      "commit": "20e4beea1c0753ca17697df0b028ed53945bd53f",
      "tree": "5f0fe5ea9df3a5b21faf5e59e45b7d34df36d88c",
      "parents": [
        "17f832296cba0c9932403d894b0c95a9d0d5ab76"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Fri Aug 23 10:08:48 2013 -0700"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Fri Aug 23 10:08:48 2013 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: Ibbd7d5bc59126933bbcf0370cbdcd590f89d0ad7\nAuto-generated-cl: translation import\n"
    },
    {
      "commit": "b448660a227f93d7bd5c5d019a21745e67c2f54d",
      "tree": "5e083b5b469e5a62704bd1a1f07d4ca10a1739ae",
      "parents": [
        "4eb407a832b7d6a2d62a535e5cab70b00a0bc8ed"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Aug 18 22:26:48 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Aug 18 22:32:02 2013 -0700"
      },
      "message": "Request more documents when EXTRA_HAS_MORE.\n\nImplement EXTRA_HAS_MORE and EXTRA_REQUEST_MORE contract with\ndocument providers.  Providers can include EXTRA_HAS_MORE when\nadditional data is available with additional cost, such as a network\nrequest.\n\nListen to content changes based on returned cursor instead of\noriginal Uri.  Include a test backend to exercise.  UX still under\ndevelopment.\n\nBug: 10350207\nChange-Id: Iaa8954df55a1a1c0aa96eb8a4fd288e12c2fbb01\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": "9d0843df7e3984293dc4ab6ee2f9502e898b63aa",
      "tree": "9487940fefdc3034d1e13838b0cca47ed5bce35b",
      "parents": [
        "a5599ef636e37cb0b6474349936999be1afe6987"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue May 07 12:41:33 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Aug 17 19:05:07 2013 -0700"
      },
      "message": "Resized thumbnails; async; extend MatrixCursor.\n\nWhen requesting thumbnails, check if their dimensions are larger\nthan requested, and downscale to avoid memory pressure.  Load them\nasync and with LruCache.\n\nExtend MatrixCursor so that RowBuilder can offer() columns without\nrequiring they know the projection map.  This makes it easier to\nrespond to query() calls, where the remote side controls the\nprojection map.  Use it to handle custom projections in external\nstorage backend.\n\nUpdate date/time formatting to match spec.\n\nBug: 10333418, 10331689\nChange-Id: I7e947a8e8068af8a39b55e6766b3241de4f3fc16\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": "255b4a6fdb8296e95e6ee57f7155ecc0cb995650",
      "tree": "575530b2dfbfb1b60f5cb3130a57cad9a7a6e869",
      "parents": [
        "184a0100abc431fc3d6d8dd1b20212b84958cada"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Aug 08 17:57:16 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Aug 08 17:57:16 2013 -0700"
      },
      "message": "Always include a default DocumentStack.\n\nChange-Id: Idbde1d832ac95c4b3c8bd5cd82b0fa695e0bcb6d\n"
    },
    {
      "commit": "0c2d31bfa113c2848620ac05c916802410b71da1",
      "tree": "ff891f91b2282a42e8ec650efaabc4a5e43b2b4c",
      "parents": [
        "9fb567b59112f99e64e0bff6f343188331bad28d"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Aug 07 18:33:33 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Aug 07 18:36:41 2013 -0700"
      },
      "message": "Better handling of broken storage providers.\n\nBegin throwing FNFE when storage provider doesn\u0027t know about document\nor when it\u0027s having trouble.  Treat all provider errors as FNFE and\navoid crashing our UI.\n\nChange-Id: I946f1ae4125791999464dc4ce494853d5d1c0629\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": "66516697a29cf00d93893a1011d3befc7c1ee37f",
      "tree": "c86d01f2f1aaf23edd5b4424388144670dad7cb2",
      "parents": [
        "ef7184a1aa0be5d496a5cb495a0f9e11f342af44"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Aug 06 11:26:10 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Aug 06 11:38:46 2013 -0700"
      },
      "message": "Storage roots in fragment, sectioned.\n\nMove storage roots into a fragment, since it\u0027s not a drawer on\ntablets.  Cluster and sort roots when displaying.  SectionedListAdapter\nto make clustered roots easier to manage.  Add docs for root types.\n\nMove roots cache into separate class to make it easier to share.\n\nChange-Id: Ia0b92eade059e816324641f600c08026c0e268c9\n"
    },
    {
      "commit": "ef7184a1aa0be5d496a5cb495a0f9e11f342af44",
      "tree": "db95537171aedc73dd595ee6d09cf5433cb8697b",
      "parents": [
        "dc2963aecaf38bf53d6de82957412a486049c207"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Aug 05 17:56:48 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Aug 05 20:14:12 2013 -0700"
      },
      "message": "More recents work; filtering and sorting.\n\nUpdate DirectoryFragment to render List\u003cDocument\u003e, making it more\ngeneral purpose.  Feed it documents either from a backend Cursor or\nafter resolving fields from a recents Cursor.  Start in recents when\nno persisted stack available.  Synthesize a root for recents.\n\nLocal directory filtering and sorting using predicates and\ncomparators, all performed on background thread.  Introduce\nUriDerivativeLoader which handles ContentObserver updates while\nproducing a derivative work of a Cursor.\n\nSplit data model classes into separate files.\n\nChange-Id: Idb88b4ee22c58c8e508328e678877f7e4c978533\n"
    },
    {
      "commit": "dc2963aecaf38bf53d6de82957412a486049c207",
      "tree": "92e8761e1415e13d789199be3d0b60a873f2763e",
      "parents": [
        "92d7e697a864a3e18bef4ef256bb3eb339a66b4e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Aug 02 15:55:26 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Aug 02 17:39:38 2013 -0700"
      },
      "message": "Track and persist directory stacks; recents work.\n\nMove to manual tracking of directory navigation stack so we have Uri\ndata to persist, instead of opaque fragment backstack.  Remember\ndirectory stacks across launches on a per-app basis.\n\nStart recording recently opened and created files.  Uniform Uri\nparameter extraction utility methods in contract.\n\nChange-Id: I79ed30ee10272bf7c53d339e797639c993f649bb\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": "7e258b31e70464bb6d80b8b42f0cef8e4417bd6a",
      "tree": "1a5687b979f6a709303fe3a642403bbbc84ce72b",
      "parents": [
        "3d38fa301ca502882b1bbe06c030d037289636b7"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Aug 01 11:01:47 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Aug 01 11:34:56 2013 -0700"
      },
      "message": "XML metadata for storage backend; custom icons.\n\nIntroduce XML metadata for storage backends, used to indicate if\ncustom roots should be queried, and provide any custom MIME type\nicons inside that backend.\n\nParse metadata and resolve custom icons in UI.\n\nChange-Id: Iec026c0b10845edff7a345d9389691ddf2c87a0e\n"
    },
    {
      "commit": "bc2971d2499f5bf5534ced7296ece630ca902738",
      "tree": "3869ca1f16028c13ccd6b1f521c5291bd91c0095",
      "parents": [
        "20d96d8aff2193d548977e23ce5158657cac94e0"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jul 31 20:53:22 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jul 31 21:03:09 2013 -0700"
      },
      "message": "Sliding drawer for roots, move sorting, search.\n\nMove backend root exploration into sliding drawer, and adjust action\nbar when moving between modes.  Moves sorting into action bar spinner\ninstead of separate dialog.  Also add initial search support.\n\nChange-Id: I70189911ba56ae6bd93d5c503a8600acd6d6c0c5\n"
    },
    {
      "commit": "20d96d8aff2193d548977e23ce5158657cac94e0",
      "tree": "b650fadd3425d2b72a4ef6d9e0f180596b5b54f1",
      "parents": [
        "5259ffba255b38728a20e28aa6ba029416d0e925"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jul 30 17:08:39 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jul 30 22:55:23 2013 -0700"
      },
      "message": "Define storage roots, external GUIDs, creation.\n\nAllow storage backends to publish multiple roots into the UI, which\nare defined by a directory GUID, type, and label details.  Update\nexternal provider to surface a primary external storage root, and\nswitch to burning file path into the returned GUIDs so they remain\ndurable.\n\nAdded insert, update, and delete support to external provider. Adds\nfile extensions to display names when needed to match MIME type.\n\nAdd flags for searching and deletion, and extras for Cursor\npagination. Add directory creation dialog to UI. Opening a document\nalways gives write access.\n\nChange-Id: I9bea1aa0dcde909a5ab86aefeece7451ab920cf1\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": "be8b12e687bd10a526b1f54c2d8a52abdad15d85",
      "tree": "1ef49eac10010b487799de3cdc625d0783bfe3d5",
      "parents": [
        "54e55b740fef1be654c3959aee41ef5ddfa61293"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jul 01 16:56:54 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jul 01 17:00:14 2013 -0700"
      },
      "message": "Support multi-select in storage UI.\n\nWhen caller has specified that multiple documents are okay, enable\nmulti-select action mode.  Currently only allows document selection,\nnot directories.  Returns multiple documents through ClipData.\n\nFix bug where GridView was stuck with 2 columns on tablets.\n\nChange-Id: Id49b29a86330639b56fa116d37e7f0d874980c5b\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"
    }
  ]
}
