package androidx.documentfile.provider; import android.content.Context; import android.net.Uri; import android.provider.DocumentsContract; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import java.io.File; public abstract class DocumentFile { public static final String TAG = "DocumentFile"; @Nullable private final DocumentFile mParent; public DocumentFile(@Nullable DocumentFile documentFile) { this.mParent = documentFile; } @NonNull public static DocumentFile fromFile(@NonNull File file) { return new RawDocumentFile(null, file); } @Nullable public static DocumentFile fromSingleUri(@NonNull Context context, @NonNull Uri uri) { return new SingleDocumentFile(null, context, uri); } @Nullable public static DocumentFile fromTreeUri(@NonNull Context context, @NonNull Uri uri) { return new TreeDocumentFile(null, context, DocumentsContract.buildDocumentUriUsingTree(uri, DocumentsContract.getTreeDocumentId(uri))); } public static boolean isDocumentUri(@NonNull Context context, @Nullable Uri uri) { return DocumentsContract.isDocumentUri(context, uri); } public abstract boolean canRead(); public abstract boolean canWrite(); @Nullable public abstract DocumentFile createDirectory(@NonNull String str); @Nullable public abstract DocumentFile createFile(@NonNull String str, @NonNull String str2); public abstract boolean delete(); public abstract boolean exists(); @Nullable public DocumentFile findFile(@NonNull String str) { DocumentFile[] listFiles = listFiles(); for (DocumentFile documentFile : listFiles) { if (str.equals(documentFile.getName())) { return documentFile; } } return null; } @Nullable public abstract String getName(); @Nullable public DocumentFile getParentFile() { return this.mParent; } @Nullable public abstract String getType(); @NonNull public abstract Uri getUri(); public abstract boolean isDirectory(); public abstract boolean isFile(); public abstract boolean isVirtual(); public abstract long lastModified(); public abstract long length(); @NonNull public abstract DocumentFile[] listFiles(); public abstract boolean renameTo(@NonNull String str); }