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; 21c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viveretteimport android.support.annotation.RequiresApi; 225fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey 23c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette@RequiresApi(21) 245fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkeyclass TreeDocumentFile extends DocumentFile { 255fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey private Context mContext; 265fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey private Uri mUri; 275fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey 285fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey TreeDocumentFile(DocumentFile parent, Context context, Uri uri) { 295fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey super(parent); 305fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey mContext = context; 315fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey mUri = uri; 325fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 335fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey 345fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey @Override 355fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey public DocumentFile createFile(String mimeType, String displayName) { 365fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey final Uri result = DocumentsContractApi21.createFile(mContext, mUri, mimeType, displayName); 375fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey return (result != null) ? new TreeDocumentFile(this, mContext, result) : null; 385fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 395fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey 405fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey @Override 415fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey public DocumentFile createDirectory(String displayName) { 425fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey final Uri result = DocumentsContractApi21.createDirectory(mContext, mUri, displayName); 435fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey return (result != null) ? new TreeDocumentFile(this, mContext, result) : null; 445fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 455fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey 465fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey @Override 475fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey public Uri getUri() { 485fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey return mUri; 495fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 505fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey 515fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey @Override 525fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey public String getName() { 535fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey return DocumentsContractApi19.getName(mContext, mUri); 545fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 555fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey 565fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey @Override 575fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey public String getType() { 585fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey return DocumentsContractApi19.getType(mContext, mUri); 595fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 605fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey 615fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey @Override 625fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey public boolean isDirectory() { 635fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey return DocumentsContractApi19.isDirectory(mContext, mUri); 645fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 655fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey 665fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey @Override 675fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey public boolean isFile() { 685fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey return DocumentsContractApi19.isFile(mContext, mUri); 695fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 705fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey 715fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey @Override 7226f311a9b57b9551ad58d6b7f9a571bebcebf0dcTomasz Mikolajewski public boolean isVirtual() { 7326f311a9b57b9551ad58d6b7f9a571bebcebf0dcTomasz Mikolajewski return DocumentsContractApi19.isVirtual(mContext, mUri); 7426f311a9b57b9551ad58d6b7f9a571bebcebf0dcTomasz Mikolajewski } 7526f311a9b57b9551ad58d6b7f9a571bebcebf0dcTomasz Mikolajewski 7626f311a9b57b9551ad58d6b7f9a571bebcebf0dcTomasz Mikolajewski @Override 775fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey public long lastModified() { 785fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey return DocumentsContractApi19.lastModified(mContext, mUri); 795fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 805fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey 815fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey @Override 825fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey public long length() { 835fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey return DocumentsContractApi19.length(mContext, mUri); 845fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 855fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey 865fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey @Override 875fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey public boolean canRead() { 885fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey return DocumentsContractApi19.canRead(mContext, mUri); 895fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 905fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey 915fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey @Override 925fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey public boolean canWrite() { 935fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey return DocumentsContractApi19.canWrite(mContext, mUri); 945fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 955fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey 965fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey @Override 975fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey public boolean delete() { 985fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey return DocumentsContractApi19.delete(mContext, mUri); 995fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 1005fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey 1015fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey @Override 1025fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey public boolean exists() { 1035fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey return DocumentsContractApi19.exists(mContext, mUri); 1045fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 1055fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey 1065fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey @Override 1075fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey public DocumentFile[] listFiles() { 1085fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey final Uri[] result = DocumentsContractApi21.listFiles(mContext, mUri); 1095fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey final DocumentFile[] resultFiles = new DocumentFile[result.length]; 1105fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey for (int i = 0; i < result.length; i++) { 1115fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey resultFiles[i] = new TreeDocumentFile(this, mContext, result[i]); 1125fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 1135fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey return resultFiles; 1145fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 1155fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey 1165fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey @Override 1175fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey public boolean renameTo(String displayName) { 1185fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey final Uri result = DocumentsContractApi21.renameTo(mContext, mUri, displayName); 1195fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey if (result != null) { 1205fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey mUri = result; 1215fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey return true; 1225fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } else { 1235fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey return false; 1245fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 1255fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey } 1265fdfbc2e02f46509474057e4366585f6a6062cb9Jeff Sharkey} 127