Home | History | Annotate | Download | only in documentsui
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package com.android.documentsui;
     17 
     18 import android.database.Cursor;
     19 import android.database.MatrixCursor;
     20 import android.database.MatrixCursor.RowBuilder;
     21 import android.os.Bundle;
     22 import android.os.CancellationSignal;
     23 import android.os.ParcelFileDescriptor;
     24 import android.provider.DocumentsContract;
     25 import android.provider.DocumentsContract.Document;
     26 import android.provider.DocumentsContract.Root;
     27 import android.provider.DocumentsProvider;
     28 
     29 import java.io.FileNotFoundException;
     30 
     31 /**
     32  * Simple test provider that provides a single root. Subclasess provider support
     33  * for returning documents.
     34  */
     35 abstract class TestRootProvider extends DocumentsProvider {
     36 
     37     static final String[] DEFAULT_ROOT_PROJECTION = new String[] {
     38             Root.COLUMN_ROOT_ID,
     39             Root.COLUMN_FLAGS,
     40             Root.COLUMN_TITLE,
     41             Root.COLUMN_DOCUMENT_ID,
     42             Root.COLUMN_AVAILABLE_BYTES
     43     };
     44 
     45     static final String[] DEFAULT_DOCUMENT_PROJECTION = new String[] {
     46             Document.COLUMN_DOCUMENT_ID,
     47             Document.COLUMN_MIME_TYPE,
     48             Document.COLUMN_DISPLAY_NAME,
     49             Document.COLUMN_LAST_MODIFIED,
     50             Document.COLUMN_FLAGS,
     51             Document.COLUMN_SIZE,
     52     };
     53 
     54     private final String mRootId;
     55     private final String mRootName;
     56     private final int mFlags;
     57     private final String mRootDocId;
     58 
     59     public TestRootProvider(String rootName, String rootId, int flags, String rootDocId) {
     60         mRootName = rootName;
     61         mRootId = rootId;
     62         mFlags = flags;
     63         mRootDocId = rootDocId;
     64     }
     65 
     66     @Override
     67     public Cursor queryRoots(String[] projection) throws FileNotFoundException {
     68         MatrixCursor c = new MatrixCursor(
     69                 projection != null ? projection : DEFAULT_ROOT_PROJECTION);
     70         final RowBuilder row = c.newRow();
     71         row.add(Root.COLUMN_ROOT_ID, mRootId);
     72         row.add(Root.COLUMN_TITLE, mRootName);
     73         row.add(Root.COLUMN_FLAGS, mFlags);
     74         row.add(Root.COLUMN_DOCUMENT_ID, mRootDocId);
     75         row.add(Root.COLUMN_AVAILABLE_BYTES, 1024 * 1024 * 1000);
     76         return c;
     77     }
     78 
     79     protected void addFile(MatrixCursor c, String id) {
     80         addFile(c, id, 0);
     81     }
     82 
     83     protected void addFile(MatrixCursor c, String id, int flags) {
     84         final RowBuilder row = c.newRow();
     85         row.add(Document.COLUMN_DOCUMENT_ID, id);
     86         row.add(Document.COLUMN_DISPLAY_NAME, id);
     87         row.add(Document.COLUMN_SIZE, 0);
     88         row.add(Document.COLUMN_MIME_TYPE, "text/plain");
     89         row.add(Document.COLUMN_FLAGS, flags);
     90         row.add(Document.COLUMN_LAST_MODIFIED, System.currentTimeMillis());
     91     }
     92 
     93     protected void addFolder(MatrixCursor c, String id) {
     94         addFolder(c, id, 0);
     95     }
     96 
     97     protected void addFolder(MatrixCursor c, String id, int flags) {
     98         final RowBuilder row = c.newRow();
     99         row.add(Document.COLUMN_DOCUMENT_ID, id);
    100         row.add(Document.COLUMN_DISPLAY_NAME, id);
    101         row.add(Document.COLUMN_SIZE, 0);
    102         row.add(Document.COLUMN_MIME_TYPE, DocumentsContract.Document.MIME_TYPE_DIR);
    103         row.add(Document.COLUMN_FLAGS, flags);
    104         row.add(Document.COLUMN_LAST_MODIFIED, System.currentTimeMillis());
    105     }
    106 
    107     protected MatrixCursor createDocCursor(String[] projection) {
    108         MatrixCursor c = new MatrixCursor(
    109                 projection != null ? projection : DEFAULT_DOCUMENT_PROJECTION);
    110         c.setExtras(new Bundle());
    111         return c;
    112     }
    113 
    114     @Override
    115     public ParcelFileDescriptor openDocument(String documentId, String mode,
    116             CancellationSignal signal) throws FileNotFoundException {
    117         throw new UnsupportedOperationException("Nope!");
    118     }
    119 
    120     @Override
    121     public boolean onCreate() {
    122         return true;
    123     }
    124 
    125 }
    126