DocumentsProviderHelper.java revision 99bcc6aa4dbcfaf6206d9bee496f7388fa9ab17c
199bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay/* 299bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay * Copyright (C) 2015 The Android Open Source Project 399bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay * 499bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay * Licensed under the Apache License, Version 2.0 (the "License"); 599bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay * you may not use this file except in compliance with the License. 699bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay * You may obtain a copy of the License at 799bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay * 899bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay * http://www.apache.org/licenses/LICENSE-2.0 999bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay * 1099bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay * Unless required by applicable law or agreed to in writing, software 1199bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay * distributed under the License is distributed on an "AS IS" BASIS, 1299bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1399bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay * See the License for the specific language governing permissions and 1499bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay * limitations under the License. 1599bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay */ 1699bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay 1799bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKaypackage com.android.documentsui; 1899bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay 1999bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKayimport static com.android.documentsui.model.DocumentInfo.getCursorString; 2099bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay 2199bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKayimport android.content.ContentProviderClient; 2299bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKayimport android.database.Cursor; 2399bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKayimport android.net.Uri; 2499bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKayimport android.os.RemoteException; 2599bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKayimport android.provider.DocumentsContract; 2699bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKayimport android.provider.DocumentsContract.Document; 2799bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKayimport android.provider.DocumentsContract.Root; 2899bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay 2999bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKayimport com.android.documentsui.model.RootInfo; 3099bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay 3199bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKayimport libcore.io.IoUtils; 3299bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay 3399bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay/** 3499bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay * Provides support for creation of documents in a test settings. 3599bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay */ 3699bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKaypublic class DocumentsProviderHelper { 3799bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay 3899bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay private final ContentProviderClient mClient; 3999bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay private final String mAuthority; 4099bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay 4199bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay public DocumentsProviderHelper(String authority, ContentProviderClient client) { 4299bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay mClient = client; 4399bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay mAuthority = authority; 4499bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay } 4599bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay 4699bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay public RootInfo getRoot(String id) throws RemoteException { 4799bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay final Uri rootsUri = DocumentsContract.buildRootsUri(mAuthority); 4899bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay 4999bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay Cursor cursor = null; 5099bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay try { 5199bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay cursor = mClient.query(rootsUri, null, null, null, null); 5299bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay while (cursor.moveToNext()) { 5399bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay if (id.equals(getCursorString(cursor, Root.COLUMN_ROOT_ID))) { 5499bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay return RootInfo.fromRootsCursor(mAuthority, cursor); 5599bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay } 5699bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay } 5799bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay throw new IllegalArgumentException("Can't find matching root for id=" + id); 5899bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay } catch (Exception e) { 5999bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay throw new RuntimeException("Can't load root for id=" + id , e); 6099bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay } finally { 6199bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay IoUtils.closeQuietly(cursor); 6299bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay } 6399bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay } 6499bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay 6599bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay public Uri createDocument(Uri parentUri, String mimeType, String name) { 6699bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay if (name.contains("/")) { 6799bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay throw new IllegalArgumentException("Name and mimetype probably interposed."); 6899bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay } 6999bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay try { 7099bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay return DocumentsContract.createDocument(mClient, parentUri, mimeType, name); 7199bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay } catch (RemoteException e) { 7299bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay throw new RuntimeException("Couldn't create document: " + name + " with mimetype " + mimeType, e); 7399bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay } 7499bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay } 7599bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay 7699bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay public Uri createFolder(Uri parentUri, String name) { 7799bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay return createDocument(parentUri, Document.MIME_TYPE_DIR, name); 7899bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay } 7999bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay 8099bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay public Uri createDocument(RootInfo root, String mimeType, String name) { 8199bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay Uri rootUri = DocumentsContract.buildDocumentUri(mAuthority, root.documentId); 8299bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay return createDocument(rootUri, mimeType, name); 8399bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay } 8499bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay 8599bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay public Uri createFolder(RootInfo root, String name) { 8699bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay return createDocument(root, Document.MIME_TYPE_DIR, name); 8799bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay } 8899bcc6aa4dbcfaf6206d9bee496f7388fa9ab17cSteve McKay} 89