mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-06-16 17:48:29 +02:00
86 lines
3.0 KiB
Java
86 lines
3.0 KiB
Java
package com.distractionware.vvvvvv;
|
|
|
|
import android.database.Cursor;
|
|
import android.database.MatrixCursor;
|
|
import android.database.MatrixCursor.RowBuilder;
|
|
import android.net.Uri;
|
|
import android.provider.DocumentsContract;
|
|
import android.provider.DocumentsContract.Document;
|
|
import android.provider.DocumentsContract.Root;
|
|
|
|
import java.io.File;
|
|
import java.io.FileNotFoundException;
|
|
|
|
public class BaseDirProvider extends FileSystemProvider {
|
|
private static final String AUTHORITY = "com.distractionware.vvvvvv.basedir";
|
|
private static final String DOC_ID_ROOT = "vvvvvv";
|
|
|
|
private static final String[] DEFAULT_ROOT_PROJECTION = new String[]{
|
|
Root.COLUMN_ROOT_ID, Root.COLUMN_FLAGS, Root.COLUMN_ICON, Root.COLUMN_TITLE,
|
|
Root.COLUMN_DOCUMENT_ID,
|
|
};
|
|
|
|
private static final String[] DEFAULT_DOCUMENT_PROJECTION = new String[]{
|
|
Document.COLUMN_DOCUMENT_ID, Document.COLUMN_MIME_TYPE, Document.COLUMN_DISPLAY_NAME,
|
|
Document.COLUMN_LAST_MODIFIED, Document.COLUMN_FLAGS, Document.COLUMN_SIZE,
|
|
};
|
|
|
|
private File mRoot;
|
|
|
|
@Override
|
|
public boolean onCreate() {
|
|
super.onCreate(DEFAULT_DOCUMENT_PROJECTION);
|
|
mRoot = getContext().getExternalFilesDir(null);
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public Cursor queryRoots(String[] projection) throws FileNotFoundException {
|
|
final MatrixCursor result = new MatrixCursor(resolveRootProjection(projection));
|
|
final RowBuilder row = result.newRow();
|
|
row.add(Root.COLUMN_ROOT_ID, DOC_ID_ROOT);
|
|
row.add(Root.COLUMN_FLAGS,
|
|
Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_CREATE | Root.FLAG_SUPPORTS_SEARCH |
|
|
Root.FLAG_SUPPORTS_IS_CHILD);
|
|
row.add(Root.COLUMN_ICON, R.mipmap.ic_launcher);
|
|
row.add(Root.COLUMN_TITLE, "VVVVVV");
|
|
row.add(Root.COLUMN_DOCUMENT_ID, DOC_ID_ROOT);
|
|
return result;
|
|
}
|
|
|
|
@Override
|
|
protected Uri buildNotificationUri(String docId) {
|
|
return DocumentsContract.buildChildDocumentsUri(AUTHORITY, docId);
|
|
}
|
|
|
|
private static String[] resolveRootProjection(String[] projection) {
|
|
return projection != null ? projection : DEFAULT_ROOT_PROJECTION;
|
|
}
|
|
|
|
private static String[] resolveDocumentProjection(String[] projection) {
|
|
return projection != null ? projection : DEFAULT_DOCUMENT_PROJECTION;
|
|
}
|
|
|
|
@Override
|
|
protected String getDocIdForFile(File file) {
|
|
return "raw:" + file.getAbsolutePath();
|
|
}
|
|
|
|
@Override
|
|
protected File getFileForDocId(String documentId, boolean visible)
|
|
throws FileNotFoundException {
|
|
if (DOC_ID_ROOT.equals(documentId)) {
|
|
return mRoot;
|
|
} else if (documentId.startsWith("raw:")) {
|
|
final String name = documentId.substring(4);
|
|
final File file = new File(name);
|
|
if (!file.exists()) {
|
|
throw new FileNotFoundException("File not found: " + name);
|
|
}
|
|
return file;
|
|
} else {
|
|
throw new FileNotFoundException("Invalid document ID: " + documentId);
|
|
}
|
|
}
|
|
}
|