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