Import: individual files chosen by an external app.

This commit is contained in:
Dennis Guse
2020-07-17 18:43:18 +02:00
parent 5f637952aa
commit bf9b6d6627
5 changed files with 77 additions and 46 deletions
@@ -44,7 +44,9 @@ import de.dennisguse.opentracks.util.FileUtils;
public class ImportProgressDialogFragment extends DialogFragment {
private static final String EXTRA_DIRECTORY_URI_KEY = "directory_uri";
private static final String EXTRA_IS_TREE_KEY = "tree_uri";
private static final String EXTRA_DATA_URI_KEY = "data_uri";
private static final String TAG = ImportProgressDialogFragment.class.getSimpleName();
@@ -59,12 +61,10 @@ public class ImportProgressDialogFragment extends DialogFragment {
private int trackImportSuccessCount;
private int fileCount;
/**
* Create a new instance.
*/
public static void showDialog(FragmentManager fragmentManager, Uri documentFileUri) {
public static void showDialog(FragmentManager fragmentManager, Uri documentFileUri, boolean isDirectory) {
Bundle bundle = new Bundle();
bundle.putParcelable(EXTRA_DIRECTORY_URI_KEY, documentFileUri);
bundle.putParcelable(EXTRA_DATA_URI_KEY, documentFileUri);
bundle.putBoolean(EXTRA_IS_TREE_KEY, isDirectory);
ImportProgressDialogFragment dialogFragment = new ImportProgressDialogFragment();
dialogFragment.setArguments(bundle);
@@ -79,9 +79,13 @@ public class ImportProgressDialogFragment extends DialogFragment {
// This fragment uses a background thread, so it should not be recreated during activity re-creation.
setRetainInstance(true);
Uri directoryUri = getArguments().getParcelable(EXTRA_DIRECTORY_URI_KEY);
DocumentFile documentFile = DocumentFile.fromTreeUri(getContext(), directoryUri);
Uri directoryUri = getArguments().getParcelable(EXTRA_DATA_URI_KEY);
DocumentFile documentFile;
if (getArguments().getBoolean(EXTRA_IS_TREE_KEY)) {
documentFile = DocumentFile.fromTreeUri(getContext(), directoryUri);
} else {
documentFile = DocumentFile.fromSingleUri(getContext(), directoryUri);
}
directoryDisplayName = FileUtils.getPath(documentFile);
importThread = new ImportThread(documentFile);
@@ -33,7 +33,6 @@ public abstract class DirectoryChooserActivity extends AppCompatActivity {
if (resultCode == Activity.RESULT_OK) {
Uri directoryUri = resultData.getData();
startActivity(createIntent(directoryUri));
}
finish();
@@ -16,7 +16,6 @@
package de.dennisguse.opentracks.io.file.importer;
import android.net.Uri;
import android.os.Bundle;
import androidx.annotation.NonNull;
@@ -43,8 +42,12 @@ public class ImportActivity extends FragmentActivity implements ImportProgressDi
super.onCreate(savedInstanceState);
if (savedInstanceState == null || !savedInstanceState.getBoolean(BUNDLE_ACTIVITY_RECREATED, false)) {
Uri directoryUri = getIntent().getParcelableExtra(EXTRA_DIRECTORY_URI_KEY);
ImportProgressDialogFragment.showDialog(getSupportFragmentManager(), directoryUri);
if (getIntent().getData() != null) {
ImportProgressDialogFragment.showDialog(getSupportFragmentManager(), getIntent().getData(), false);
} else {
// Started from DirectoryChooserActivity
ImportProgressDialogFragment.showDialog(getSupportFragmentManager(), getIntent().getParcelableExtra(EXTRA_DIRECTORY_URI_KEY), true);
}
}
}
@@ -309,7 +309,10 @@ public class FileUtils {
public static ArrayList<DocumentFile> getFiles(DocumentFile file) {
ArrayList<DocumentFile> files = new ArrayList<>();
if (!file.isDirectory()) return files;
if (!file.isDirectory()) {
files.add(file);
return files;
}
for (DocumentFile candidate : file.listFiles()) {
if (!candidate.isDirectory()) {