ADD week 5

This commit is contained in:
2025-03-31 16:33:42 +02:00
parent 86f265f22d
commit bf645048e6
4927 changed files with 544053 additions and 0 deletions

View File

@ -0,0 +1,7 @@
package androidx.documentfile;
/* loaded from: classes.dex */
public final class R {
private R() {
}
}

View File

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

View File

@ -0,0 +1,137 @@
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.text.TextUtils;
import android.util.Log;
/* loaded from: classes.dex */
class DocumentsContractApi19 {
private static final int FLAG_VIRTUAL_DOCUMENT = 512;
private static final String TAG = "DocumentFile";
public static boolean isVirtual(Context context, Uri uri) {
return DocumentsContract.isDocumentUri(context, uri) && (getFlags(context, uri) & 512) != 0;
}
public static String getName(Context context, Uri uri) {
return queryForString(context, uri, "_display_name", null);
}
private static String getRawType(Context context, Uri uri) {
return queryForString(context, uri, "mime_type", null);
}
public static String getType(Context context, Uri uri) {
String rawType = getRawType(context, uri);
if ("vnd.android.document/directory".equals(rawType)) {
return null;
}
return rawType;
}
public static long getFlags(Context context, Uri uri) {
return queryForLong(context, uri, "flags", 0L);
}
public static boolean isDirectory(Context context, Uri uri) {
return "vnd.android.document/directory".equals(getRawType(context, uri));
}
public static boolean isFile(Context context, Uri uri) {
String rawType = getRawType(context, uri);
return ("vnd.android.document/directory".equals(rawType) || TextUtils.isEmpty(rawType)) ? false : true;
}
public static long lastModified(Context context, Uri uri) {
return queryForLong(context, uri, "last_modified", 0L);
}
public static long length(Context context, Uri uri) {
return queryForLong(context, uri, "_size", 0L);
}
public static boolean canRead(Context context, Uri uri) {
return context.checkCallingOrSelfUriPermission(uri, 1) == 0 && !TextUtils.isEmpty(getRawType(context, uri));
}
public static boolean canWrite(Context context, Uri uri) {
if (context.checkCallingOrSelfUriPermission(uri, 2) != 0) {
return false;
}
String rawType = getRawType(context, uri);
int queryForInt = queryForInt(context, uri, "flags", 0);
if (TextUtils.isEmpty(rawType)) {
return false;
}
if ((queryForInt & 4) != 0) {
return true;
}
if (!"vnd.android.document/directory".equals(rawType) || (queryForInt & 8) == 0) {
return (TextUtils.isEmpty(rawType) || (queryForInt & 2) == 0) ? false : true;
}
return true;
}
public static boolean exists(Context context, Uri uri) {
Cursor cursor = null;
try {
cursor = context.getContentResolver().query(uri, new String[]{"document_id"}, null, null, null);
return cursor.getCount() > 0;
} catch (Exception e) {
Log.w(TAG, "Failed query: " + e);
return false;
} finally {
closeQuietly(cursor);
}
}
private static String queryForString(Context context, Uri uri, String str, String str2) {
ContentResolver contentResolver = context.getContentResolver();
Cursor cursor = null;
try {
cursor = contentResolver.query(uri, new String[]{str}, null, null, null);
return (!cursor.moveToFirst() || cursor.isNull(0)) ? str2 : cursor.getString(0);
} catch (Exception e) {
Log.w(TAG, "Failed query: " + e);
return str2;
} finally {
closeQuietly(cursor);
}
}
private static int queryForInt(Context context, Uri uri, String str, int i) {
return (int) queryForLong(context, uri, str, i);
}
private static long queryForLong(Context context, Uri uri, String str, long j) {
ContentResolver contentResolver = context.getContentResolver();
Cursor cursor = null;
try {
cursor = contentResolver.query(uri, new String[]{str}, null, null, null);
return (!cursor.moveToFirst() || cursor.isNull(0)) ? j : cursor.getLong(0);
} catch (Exception e) {
Log.w(TAG, "Failed query: " + e);
return j;
} finally {
closeQuietly(cursor);
}
}
private static void closeQuietly(AutoCloseable autoCloseable) {
if (autoCloseable != null) {
try {
autoCloseable.close();
} catch (RuntimeException e) {
throw e;
} catch (Exception unused) {
}
}
}
private DocumentsContractApi19() {
}
}

View File

@ -0,0 +1,155 @@
package androidx.documentfile.provider;
import android.net.Uri;
import android.util.Log;
import android.webkit.MimeTypeMap;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
/* loaded from: classes.dex */
class RawDocumentFile extends DocumentFile {
private File mFile;
@Override // androidx.documentfile.provider.DocumentFile
public boolean isVirtual() {
return false;
}
RawDocumentFile(DocumentFile documentFile, File file) {
super(documentFile);
this.mFile = file;
}
@Override // androidx.documentfile.provider.DocumentFile
public DocumentFile createFile(String str, String str2) {
String extensionFromMimeType = MimeTypeMap.getSingleton().getExtensionFromMimeType(str);
if (extensionFromMimeType != null) {
str2 = str2 + "." + extensionFromMimeType;
}
File file = new File(this.mFile, str2);
try {
file.createNewFile();
return new RawDocumentFile(this, file);
} catch (IOException e) {
Log.w("DocumentFile", "Failed to createFile: " + e);
return null;
}
}
@Override // androidx.documentfile.provider.DocumentFile
public DocumentFile createDirectory(String str) {
File file = new File(this.mFile, str);
if (file.isDirectory() || file.mkdir()) {
return new RawDocumentFile(this, file);
}
return null;
}
@Override // androidx.documentfile.provider.DocumentFile
public Uri getUri() {
return Uri.fromFile(this.mFile);
}
@Override // androidx.documentfile.provider.DocumentFile
public String getName() {
return this.mFile.getName();
}
@Override // androidx.documentfile.provider.DocumentFile
public String getType() {
if (this.mFile.isDirectory()) {
return null;
}
return getTypeForName(this.mFile.getName());
}
@Override // androidx.documentfile.provider.DocumentFile
public boolean isDirectory() {
return this.mFile.isDirectory();
}
@Override // androidx.documentfile.provider.DocumentFile
public boolean isFile() {
return this.mFile.isFile();
}
@Override // androidx.documentfile.provider.DocumentFile
public long lastModified() {
return this.mFile.lastModified();
}
@Override // androidx.documentfile.provider.DocumentFile
public long length() {
return this.mFile.length();
}
@Override // androidx.documentfile.provider.DocumentFile
public boolean canRead() {
return this.mFile.canRead();
}
@Override // androidx.documentfile.provider.DocumentFile
public boolean canWrite() {
return this.mFile.canWrite();
}
@Override // androidx.documentfile.provider.DocumentFile
public boolean delete() {
deleteContents(this.mFile);
return this.mFile.delete();
}
@Override // androidx.documentfile.provider.DocumentFile
public boolean exists() {
return this.mFile.exists();
}
@Override // androidx.documentfile.provider.DocumentFile
public DocumentFile[] listFiles() {
ArrayList arrayList = new ArrayList();
File[] listFiles = this.mFile.listFiles();
if (listFiles != null) {
for (File file : listFiles) {
arrayList.add(new RawDocumentFile(this, file));
}
}
return (DocumentFile[]) arrayList.toArray(new DocumentFile[arrayList.size()]);
}
@Override // androidx.documentfile.provider.DocumentFile
public boolean renameTo(String str) {
File file = new File(this.mFile.getParentFile(), str);
if (!this.mFile.renameTo(file)) {
return false;
}
this.mFile = file;
return true;
}
private static String getTypeForName(String str) {
int lastIndexOf = str.lastIndexOf(46);
if (lastIndexOf < 0) {
return "application/octet-stream";
}
String mimeTypeFromExtension = MimeTypeMap.getSingleton().getMimeTypeFromExtension(str.substring(lastIndexOf + 1).toLowerCase());
return mimeTypeFromExtension != null ? mimeTypeFromExtension : "application/octet-stream";
}
private static boolean deleteContents(File file) {
File[] listFiles = file.listFiles();
boolean z = true;
if (listFiles != null) {
for (File file2 : listFiles) {
if (file2.isDirectory()) {
z &= deleteContents(file2);
}
if (!file2.delete()) {
Log.w("DocumentFile", "Failed to delete " + file2);
z = false;
}
}
}
return z;
}
}

View File

@ -0,0 +1,101 @@
package androidx.documentfile.provider;
import android.content.Context;
import android.net.Uri;
import android.provider.DocumentsContract;
/* loaded from: classes.dex */
class SingleDocumentFile extends DocumentFile {
private Context mContext;
private Uri mUri;
@Override // androidx.documentfile.provider.DocumentFile
public Uri getUri() {
return this.mUri;
}
SingleDocumentFile(DocumentFile documentFile, Context context, Uri uri) {
super(documentFile);
this.mContext = context;
this.mUri = uri;
}
@Override // androidx.documentfile.provider.DocumentFile
public DocumentFile createFile(String str, String str2) {
throw new UnsupportedOperationException();
}
@Override // androidx.documentfile.provider.DocumentFile
public DocumentFile createDirectory(String str) {
throw new UnsupportedOperationException();
}
@Override // androidx.documentfile.provider.DocumentFile
public String getName() {
return DocumentsContractApi19.getName(this.mContext, this.mUri);
}
@Override // androidx.documentfile.provider.DocumentFile
public String getType() {
return DocumentsContractApi19.getType(this.mContext, 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 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
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
public DocumentFile[] listFiles() {
throw new UnsupportedOperationException();
}
@Override // androidx.documentfile.provider.DocumentFile
public boolean renameTo(String str) {
throw new UnsupportedOperationException();
}
}

View File

@ -0,0 +1,162 @@
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 java.util.ArrayList;
/* loaded from: classes.dex */
class TreeDocumentFile extends DocumentFile {
private Context mContext;
private Uri mUri;
@Override // androidx.documentfile.provider.DocumentFile
public Uri getUri() {
return this.mUri;
}
TreeDocumentFile(DocumentFile documentFile, Context context, Uri uri) {
super(documentFile);
this.mContext = context;
this.mUri = uri;
}
@Override // androidx.documentfile.provider.DocumentFile
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;
}
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 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
public String getName() {
return DocumentsContractApi19.getName(this.mContext, this.mUri);
}
@Override // androidx.documentfile.provider.DocumentFile
public String getType() {
return DocumentsContractApi19.getType(this.mContext, 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 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
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
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 {
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);
}
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;
} finally {
closeQuietly(cursor);
}
}
private static void closeQuietly(AutoCloseable autoCloseable) {
if (autoCloseable != null) {
try {
autoCloseable.close();
} catch (RuntimeException e) {
throw e;
} catch (Exception unused) {
}
}
}
@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;
}
}