diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 731303cd..f75c5adc 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -1,101 +1,83 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:allowAudioPlaybackCapture="true"
+ android:installLocation="preferExternal">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/java/su/xash/engine/XashDocumentsProvider.java b/android/app/src/main/java/su/xash/engine/XashDocumentsProvider.java
deleted file mode 100644
index 0678bc2e..00000000
--- a/android/app/src/main/java/su/xash/engine/XashDocumentsProvider.java
+++ /dev/null
@@ -1,253 +0,0 @@
-package su.xash.engine;
-
-import android.annotation.TargetApi;
-import android.content.res.AssetFileDescriptor;
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.graphics.Point;
-import android.os.Build;
-import android.os.CancellationSignal;
-import android.os.ParcelFileDescriptor;
-import android.provider.DocumentsContract.Document;
-import android.provider.DocumentsContract.Root;
-import android.provider.DocumentsProvider;
-import android.webkit.MimeTypeMap;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-@TargetApi(Build.VERSION_CODES.KITKAT)
-public class XashDocumentsProvider extends DocumentsProvider {
- private static final String ALL_MIME_TYPES = "*/*";
- private File mRootDir;
-
- private static final String TAG = "XashDocumentsProvider";
-
- @Override
- public boolean onCreate() {
- mRootDir = getContext().getExternalFilesDir(null);
-
- return true;
- }
-
- private static final String[] DEFAULT_ROOT_PROJECTION = new String[]{Root.COLUMN_ROOT_ID,
- Root.COLUMN_MIME_TYPES,
- Root.COLUMN_FLAGS,
- Root.COLUMN_ICON,
- Root.COLUMN_TITLE,
- Root.COLUMN_SUMMARY,
- Root.COLUMN_DOCUMENT_ID,
- Root.COLUMN_AVAILABLE_BYTES};
-
- 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};
-
- @Override
- public Cursor queryRoots(String[] projection) {
- final MatrixCursor result = new MatrixCursor(projection != null ? projection : DEFAULT_ROOT_PROJECTION);
-
- final String appName = getContext().getString(R.string.app_name);
- final String docId = getDocIdForFile(mRootDir);
-
- int flags;
-
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
- flags = Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_CREATE | Root.FLAG_SUPPORTS_SEARCH;
- } else {
- flags = Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_CREATE | Root.FLAG_SUPPORTS_SEARCH | Root.FLAG_SUPPORTS_IS_CHILD;
- }
-
- final MatrixCursor.RowBuilder row = result.newRow();
- row.add(Root.COLUMN_ROOT_ID, docId);
- row.add(Root.COLUMN_DOCUMENT_ID, docId);
- row.add(Root.COLUMN_SUMMARY, null);
- row.add(Root.COLUMN_FLAGS, flags);
- row.add(Root.COLUMN_TITLE, appName);
- row.add(Root.COLUMN_MIME_TYPES, ALL_MIME_TYPES);
- row.add(Root.COLUMN_AVAILABLE_BYTES, mRootDir.getFreeSpace());
- row.add(Root.COLUMN_ICON, R.mipmap.ic_launcher);
-
- return result;
- }
-
- @Override
- public Cursor queryDocument(String documentId, String[] projection) throws FileNotFoundException {
- final MatrixCursor result = new MatrixCursor(projection != null ? projection : DEFAULT_DOCUMENT_PROJECTION);
-
- includeFile(result, documentId, null);
-
- return result;
- }
-
- @Override
- public Cursor queryChildDocuments(String parentDocumentId, String[] projection, String sortOrder) throws FileNotFoundException {
- final MatrixCursor result = new MatrixCursor(projection != null ? projection : DEFAULT_DOCUMENT_PROJECTION);
-
- final File parent = getFileForDocId(parentDocumentId);
- final File[] filesList = parent.listFiles();
-
- if (filesList != null) {
- for (File file : filesList) {
- includeFile(result, null, file);
- }
- }
-
- return result;
- }
-
- @Override
- public ParcelFileDescriptor openDocument(final String documentId, String mode, CancellationSignal signal) throws FileNotFoundException {
- final File file = getFileForDocId(documentId);
-
- final int accessMode = ParcelFileDescriptor.parseMode(mode);
-
- return ParcelFileDescriptor.open(file, accessMode);
- }
-
- @Override
- public AssetFileDescriptor openDocumentThumbnail(String documentId, Point sizeHint, CancellationSignal signal) throws FileNotFoundException {
- final File file = getFileForDocId(documentId);
-
- final ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
-
- return new AssetFileDescriptor(pfd, 0, file.length());
- }
-
- @Override
- public String createDocument(String parentDocumentId, String mimeType, String displayName) throws FileNotFoundException {
- File newFile = new File(parentDocumentId, displayName);
-
- int noConflictId = 1;
-
- while (newFile.exists()) {
- newFile = new File(parentDocumentId, displayName + " (" + noConflictId++ + ")");
- }
-
- try {
- boolean succeeded;
-
- if (Document.MIME_TYPE_DIR.equals(mimeType)) {
- succeeded = newFile.mkdir();
- } else {
- succeeded = newFile.createNewFile();
- }
-
- if (!succeeded) {
- throw new FileNotFoundException("Failed to create document with id " + newFile.getPath());
- }
- } catch (IOException e) {
- throw new FileNotFoundException("Failed to create document with id " + newFile.getPath());
- }
-
- return newFile.getPath();
- }
-
- @Override
- public void deleteDocument(String documentId) throws FileNotFoundException {
- File file = getFileForDocId(documentId);
-
- if (file.isDirectory()) {
- if (!deleteDirectory(file)) {
- throw new FileNotFoundException("Failed to delete document with id " + documentId);
- }
- } else if (!file.delete()) {
- throw new FileNotFoundException("Failed to delete document with id " + documentId);
- }
- }
-
- @Override
- public String getDocumentType(String documentId) throws FileNotFoundException {
- File file = getFileForDocId(documentId);
-
- return getMimeType(file);
- }
-
- @Override
- public boolean isChildDocument(String parentDocumentId, String documentId) {
- return documentId.startsWith(parentDocumentId);
- }
-
- private static File getFileForDocId(String docId) throws FileNotFoundException {
- final File f = new File(docId);
-
- if (!f.exists()) throw new FileNotFoundException(f.getAbsolutePath() + " not found");
-
- return f;
- }
-
- private static String getDocIdForFile(File file) {
- return file.getAbsolutePath();
- }
-
- private static String getMimeType(File file) {
- if (file.isDirectory()) {
- return Document.MIME_TYPE_DIR;
- } else {
- final String name = file.getName();
- final int lastDot = name.lastIndexOf('.');
-
- if (lastDot >= 0) {
- final String extension = name.substring(lastDot + 1).toLowerCase();
- final String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
-
- if (mime != null) return mime;
- }
-
- return "application/octet-stream";
- }
- }
-
- private static boolean deleteDirectory(File dir) {
- final File[] allContents = dir.listFiles();
-
- if (allContents != null) {
- for (File file : allContents) {
- deleteDirectory(file);
- }
- }
- return dir.delete();
- }
-
- private void includeFile(MatrixCursor result, String docId, File file) throws FileNotFoundException {
- if (docId == null) {
- docId = getDocIdForFile(file);
- } else {
- file = getFileForDocId(docId);
- }
-
- int flags = 0;
-
- if (file.isDirectory()) {
- if (file.canWrite()) {
- flags |= Document.FLAG_DIR_SUPPORTS_CREATE;
- }
- } else if (file.canWrite()) {
- flags |= Document.FLAG_SUPPORTS_WRITE;
- }
-
- File parentFile = file.getParentFile();
- if (parentFile != null && parentFile.canWrite()) {
- flags |= Document.FLAG_SUPPORTS_DELETE;
- }
-
- final String displayName = file.getName();
- final String mimeType = getMimeType(file);
-
- if (mimeType.startsWith("image/")) {
- flags |= Document.FLAG_SUPPORTS_THUMBNAIL;
- }
-
- final MatrixCursor.RowBuilder row = result.newRow();
- row.add(Document.COLUMN_DOCUMENT_ID, docId);
- row.add(Document.COLUMN_DISPLAY_NAME, displayName);
- row.add(Document.COLUMN_SIZE, file.length());
- row.add(Document.COLUMN_MIME_TYPE, mimeType);
- row.add(Document.COLUMN_LAST_MODIFIED, file.lastModified());
- row.add(Document.COLUMN_FLAGS, flags);
- row.add(Document.COLUMN_ICON, R.mipmap.ic_launcher);
- }
-}