package androidx.documentfile.provider; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.provider.DocumentsContract; import android.util.Log; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import java.util.ArrayList; @RequiresApi(21) public class TreeDocumentFile extends DocumentFile { private Context mContext; private Uri mUri; public TreeDocumentFile(@Nullable DocumentFile documentFile, Context context, Uri uri) { super(documentFile); this.mContext = context; this.mUri = uri; } private static void closeQuietly(@Nullable AutoCloseable autoCloseable) { if (autoCloseable != null) { try { autoCloseable.close(); } catch (RuntimeException e) { throw e; } catch (Exception unused) { } } } @Nullable private static Uri createFile(Context context, Uri uri, String str, String str2) { try { return DocumentsContract.createDocument(context.getContentResolver(), uri, str, str2); } catch (Exception unused) { return null; } } @Override // androidx.documentfile.provider.DocumentFile public boolean canRead() { return DocumentsContractApi19.canRead(this.mContext, this.mUri); } @Override // androidx.documentfile.provider.DocumentFile public boolean canWrite() { return DocumentsContractApi19.canWrite(this.mContext, this.mUri); } @Override // androidx.documentfile.provider.DocumentFile @Nullable public DocumentFile createDirectory(String str) { Uri createFile = createFile(this.mContext, this.mUri, "vnd.android.document/directory", str); if (createFile != null) { return new TreeDocumentFile(this, this.mContext, createFile); } return null; } @Override // androidx.documentfile.provider.DocumentFile @Nullable public DocumentFile createFile(String str, String str2) { Uri createFile = createFile(this.mContext, this.mUri, str, str2); if (createFile != null) { return new TreeDocumentFile(this, this.mContext, createFile); } return null; } @Override // androidx.documentfile.provider.DocumentFile public boolean delete() { try { return DocumentsContract.deleteDocument(this.mContext.getContentResolver(), this.mUri); } catch (Exception unused) { return false; } } @Override // androidx.documentfile.provider.DocumentFile public boolean exists() { return DocumentsContractApi19.exists(this.mContext, this.mUri); } @Override // androidx.documentfile.provider.DocumentFile @Nullable public String getName() { return DocumentsContractApi19.getName(this.mContext, this.mUri); } @Override // androidx.documentfile.provider.DocumentFile @Nullable public String getType() { return DocumentsContractApi19.getType(this.mContext, this.mUri); } @Override // androidx.documentfile.provider.DocumentFile public Uri getUri() { return this.mUri; } @Override // androidx.documentfile.provider.DocumentFile public boolean isDirectory() { return DocumentsContractApi19.isDirectory(this.mContext, this.mUri); } @Override // androidx.documentfile.provider.DocumentFile public boolean isFile() { return DocumentsContractApi19.isFile(this.mContext, this.mUri); } @Override // androidx.documentfile.provider.DocumentFile public boolean isVirtual() { return DocumentsContractApi19.isVirtual(this.mContext, this.mUri); } @Override // androidx.documentfile.provider.DocumentFile public long lastModified() { return DocumentsContractApi19.lastModified(this.mContext, this.mUri); } @Override // androidx.documentfile.provider.DocumentFile public long length() { return DocumentsContractApi19.length(this.mContext, this.mUri); } @Override // androidx.documentfile.provider.DocumentFile public DocumentFile[] listFiles() { ContentResolver contentResolver = this.mContext.getContentResolver(); Uri uri = this.mUri; Uri buildChildDocumentsUriUsingTree = DocumentsContract.buildChildDocumentsUriUsingTree(uri, DocumentsContract.getDocumentId(uri)); ArrayList arrayList = new ArrayList(); Cursor cursor = null; try { cursor = contentResolver.query(buildChildDocumentsUriUsingTree, new String[]{"document_id"}, null, null, null); while (cursor.moveToNext()) { arrayList.add(DocumentsContract.buildDocumentUriUsingTree(this.mUri, cursor.getString(0))); } } catch (Exception e) { Log.w("DocumentFile", "Failed query: " + e); } catch (Throwable th) { closeQuietly(null); throw th; } closeQuietly(cursor); Uri[] uriArr = (Uri[]) arrayList.toArray(new Uri[arrayList.size()]); DocumentFile[] documentFileArr = new DocumentFile[uriArr.length]; for (int i = 0; i < uriArr.length; i++) { documentFileArr[i] = new TreeDocumentFile(this, this.mContext, uriArr[i]); } return documentFileArr; } @Override // androidx.documentfile.provider.DocumentFile public boolean renameTo(String str) { try { Uri renameDocument = DocumentsContract.renameDocument(this.mContext.getContentResolver(), this.mUri, str); if (renameDocument != null) { this.mUri = renameDocument; return true; } } catch (Exception unused) { } return false; } }