)]}'
{
  "log": [
    {
      "commit": "e6c04f9417cc4bff0f5f9e72f0d6d66d2aab6e80",
      "tree": "cd544b7655f5a41228bfd1690cbd5164cf0e0bc5",
      "parents": [
        "722743667110718acf473c92727b55581c0b9309"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Apr 18 21:38:05 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Apr 18 23:11:00 2015 -0700"
      },
      "message": "Broadcast hidden volumes, notification polish.\n\nSend limited broadcast intent when certain volume state changes\noccur; the only customer for now is ExternalStorageProvider.\n\nChange notification flow to be less bumpy.  Pick USB icon based on\ndisk type, and avoid using \"generic\" disk labels.\n\nBug: 19993667\nChange-Id: I263bc9e9aae2ae57eb4d1afe76da686aee5475fb\n"
    },
    {
      "commit": "7e1f5410ff246b1ec7b216cc737ec3eedf526b4f",
      "tree": "803250d1f006d6b64cd6e44678977c5ef6bd4f9e",
      "parents": [
        "3dbea35f7eaa6d5f94601a48ebb3be18223d4604"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Nov 11 14:36:33 2013 -0800"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Nov 11 14:36:33 2013 -0800"
      },
      "message": "Give storage provider access to secondary devices.\n\nBug: 11411460\nChange-Id: I3827ed5b859a68c60742a27917459e8df2c276bb\n"
    },
    {
      "commit": "1f706c6cd1cb841adadc2babc57a34e5728983ec",
      "tree": "f0b9956276e741a7e7416a272ff47d8ba667fcfe",
      "parents": [
        "5aca2b8dc4f4ff2d466a64587d06666c7bbd9749"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Oct 17 10:52:17 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Oct 17 10:55:32 2013 -0700"
      },
      "message": "Include external storage devices in DocumentsUI.\n\nInclude volume UUID in generated document IDs to uniquely identify\nvolumes over time.  Show volume label to users.  Watch for mount\nchanges to update available roots.\n\nBug: 11175082\nChange-Id: Ia151bde768587468efde0c1d97a740b5353d1582\n"
    },
    {
      "commit": "85f5f8132015d8a5043ea4413702420d0d157c9f",
      "tree": "08493f51fca4a3ebd4eaf584e8c0fa03b373be9c",
      "parents": [
        "ca25db0cb3d6b9686a42c9cb99d90dc095f20cd8"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Oct 07 10:16:12 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Oct 07 14:19:13 2013 -0700"
      },
      "message": "Add \u003cintent-filter\u003e support to \u003cprovider\u003e.\n\nFor the new documents work, we\u0027re only interested in the subset of\nContentProviders that actually implement DocumentsContract.  Instead\nof returning all providers, add \u003cintent-filter\u003e support to make it\neasier to limit the set of returned ProviderInfo.\n\nDefine a well-known action for DocumentsProviders, and start using it\nwhen querying for roots.  Continue supporting the old \u003cmeta-data\u003e\napproach until all apps have been updated.\n\nBug: 8599233\nChange-Id: I05f049bba21311f5421738002f99ee214447c909\n"
    },
    {
      "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": "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": "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": "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": "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": "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"
    }
  ]
}
