15fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey/*
25fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey * Copyright (C) 2014 The Android Open Source Project
35fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey *
45fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License");
55fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey * you may not use this file except in compliance with the License.
65fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey * You may obtain a copy of the License at
75fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey *
85fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey *      http://www.apache.org/licenses/LICENSE-2.0
95fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey *
105fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey * Unless required by applicable law or agreed to in writing, software
115fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS,
125fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey * See the License for the specific language governing permissions and
145fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey * limitations under the License.
155fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey */
165fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
175fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkeypackage android.support.v4.provider;
185fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
195fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkeyimport android.content.Context;
205fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkeyimport android.net.Uri;
215fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
225fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkeyclass TreeDocumentFile extends DocumentFile {
235fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    private Context mContext;
245fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    private Uri mUri;
255fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
265fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    TreeDocumentFile(DocumentFile parent, Context context, Uri uri) {
275fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        super(parent);
285fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        mContext = context;
295fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        mUri = uri;
305fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    }
315fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
325fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    @Override
335fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    public DocumentFile createFile(String mimeType, String displayName) {
345fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        final Uri result = DocumentsContractApi21.createFile(mContext, mUri, mimeType, displayName);
355fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        return (result != null) ? new TreeDocumentFile(this, mContext, result) : null;
365fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    }
375fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
385fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    @Override
395fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    public DocumentFile createDirectory(String displayName) {
405fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        final Uri result = DocumentsContractApi21.createDirectory(mContext, mUri, displayName);
415fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        return (result != null) ? new TreeDocumentFile(this, mContext, result) : null;
425fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    }
435fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
445fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    @Override
455fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    public Uri getUri() {
465fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        return mUri;
475fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    }
485fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
495fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    @Override
505fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    public String getName() {
515fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        return DocumentsContractApi19.getName(mContext, mUri);
525fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    }
535fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
545fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    @Override
555fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    public String getType() {
565fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        return DocumentsContractApi19.getType(mContext, mUri);
575fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    }
585fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
595fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    @Override
605fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    public boolean isDirectory() {
615fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        return DocumentsContractApi19.isDirectory(mContext, mUri);
625fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    }
635fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
645fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    @Override
655fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    public boolean isFile() {
665fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        return DocumentsContractApi19.isFile(mContext, mUri);
675fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    }
685fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
695fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    @Override
705fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    public long lastModified() {
715fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        return DocumentsContractApi19.lastModified(mContext, mUri);
725fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    }
735fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
745fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    @Override
755fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    public long length() {
765fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        return DocumentsContractApi19.length(mContext, mUri);
775fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    }
785fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
795fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    @Override
805fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    public boolean canRead() {
815fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        return DocumentsContractApi19.canRead(mContext, mUri);
825fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    }
835fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
845fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    @Override
855fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    public boolean canWrite() {
865fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        return DocumentsContractApi19.canWrite(mContext, mUri);
875fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    }
885fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
895fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    @Override
905fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    public boolean delete() {
915fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        return DocumentsContractApi19.delete(mContext, mUri);
925fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    }
935fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
945fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    @Override
955fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    public boolean exists() {
965fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        return DocumentsContractApi19.exists(mContext, mUri);
975fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    }
985fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
995fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    @Override
1005fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    public DocumentFile[] listFiles() {
1015fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        final Uri[] result = DocumentsContractApi21.listFiles(mContext, mUri);
1025fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        final DocumentFile[] resultFiles = new DocumentFile[result.length];
1035fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        for (int i = 0; i < result.length; i++) {
1045fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey            resultFiles[i] = new TreeDocumentFile(this, mContext, result[i]);
1055fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        }
1065fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        return resultFiles;
1075fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    }
1085fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey
1095fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    @Override
1105fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    public boolean renameTo(String displayName) {
1115fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        final Uri result = DocumentsContractApi21.renameTo(mContext, mUri, displayName);
1125fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        if (result != null) {
1135fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey            mUri = result;
1145fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey            return true;
1155fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        } else {
1165fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey            return false;
1175fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey        }
1185fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey    }
1195fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey}
120