diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index c8d84eea9..9eb203ca4 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -73,11 +73,13 @@ limitations under the License.
+
+
@@ -135,6 +137,7 @@ limitations under the License.
+
@@ -192,6 +195,8 @@ limitations under the License.
+
+
diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportActivity.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportActivity.java
index 056f542fc..8afb65d17 100644
--- a/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportActivity.java
+++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportActivity.java
@@ -16,6 +16,7 @@
package de.dennisguse.opentracks.io.file.importer;
+import android.content.ClipData;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
@@ -30,6 +31,10 @@ import androidx.documentfile.provider.DocumentFile;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.ViewModelProvider;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.TrackRecordedActivity;
import de.dennisguse.opentracks.databinding.ImportActivityBinding;
@@ -47,17 +52,15 @@ public class ImportActivity extends FragmentActivity {
public static final String EXTRA_DIRECTORY_URI_KEY = "directory_uri";
- private static final String BUNDLE_TOOLBAR_TITLE = "toolbar_title";
- private static final String BUNDLE_DOCUMENT_URI = "document_uri";
+ private static final String BUNDLE_DOCUMENT_URIS = "document_uris";
private static final String BUNDLE_IS_DIRECTORY = "is_directory";
private ImportActivityBinding viewBinding;
boolean doubleBackToCancel = false;
- private Uri documentUri;
+ private ArrayList documentUris = new ArrayList<>();
private boolean isDirectory;
- private String toolbarTitle;
private ImportViewModel viewModel;
private ImportViewModel.Summary summary;
@@ -70,35 +73,46 @@ public class ImportActivity extends FragmentActivity {
Toolbar toolbar = findViewById(R.id.toolbar);
- final DocumentFile documentFile;
+ final Intent intent = getIntent();
+ final ClipData intentClipData = intent.getClipData();
+
if (savedInstanceState == null) {
- if (getIntent().getData() != null) {
- documentUri = getIntent().getData();
- isDirectory = false;
- } else if (getIntent().getClipData() != null && getIntent().getClipData().getItemCount() > 0) {
- documentUri = getIntent().getClipData().getItemAt(0).getUri();
+ if (intent.getData() != null) {
+ documentUris.add(intent.getData());
isDirectory = false;
} else {
- // Started from DirectoryChooserActivity
- documentUri = getIntent().getParcelableExtra(EXTRA_DIRECTORY_URI_KEY);
- isDirectory = true;
+ if (intentClipData != null && intentClipData.getItemCount() > 0) {
+ for (int i = 0; i < intentClipData.getItemCount(); i++) {
+ documentUris.add(intentClipData.getItemAt(i).getUri());
+ }
+ isDirectory = false;
+ } else {
+ // Started from DirectoryChooserActivity
+ documentUris.add(intent.getParcelableExtra(EXTRA_DIRECTORY_URI_KEY));
+ isDirectory = true;
+ }
}
- documentFile = isDirectory ? DocumentFile.fromTreeUri(this, documentUri) : DocumentFile.fromSingleUri(this, documentUri);
- toolbarTitle = getString(R.string.import_progress_message, documentFile.getName());
} else {
- documentUri = savedInstanceState.getParcelable(BUNDLE_DOCUMENT_URI);
- toolbarTitle = savedInstanceState.getString(BUNDLE_TOOLBAR_TITLE);
+ documentUris = savedInstanceState.getParcelable(BUNDLE_DOCUMENT_URIS);
isDirectory = savedInstanceState.getBoolean(BUNDLE_IS_DIRECTORY);
-
- documentFile = isDirectory ? DocumentFile.fromTreeUri(this, documentUri) : DocumentFile.fromSingleUri(this, documentUri);
}
- toolbar.setTitle(toolbarTitle);
+ final List documentFiles;
+ if (isDirectory) {
+ documentFiles = new ArrayList<>();
+ documentFiles.add(DocumentFile.fromTreeUri(this, documentUris.get(0)));
+ } else {
+ documentFiles = documentUris.stream().map(it -> DocumentFile.fromSingleUri(this, it)).collect(Collectors.toList());
+ }
+
+ //Works for a directory, but we might have received multiple files via SEND_MULTIPLE.
+ toolbar.setTitle(getString(R.string.import_progress_message, documentFiles.get(0).getName()));
+
initViews();
viewModel = new ViewModelProvider(this).get(ImportViewModel.class);
- viewModel.getImportData(documentFile).observe(this, data -> {
+ viewModel.getImportData(documentFiles).observe(this, data -> {
summary = data;
setProgress();
});
@@ -107,9 +121,8 @@ public class ImportActivity extends FragmentActivity {
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
- outState.putParcelable(BUNDLE_DOCUMENT_URI, documentUri);
+ outState.putParcelableArrayList(BUNDLE_DOCUMENT_URIS, documentUris);
outState.putBoolean(BUNDLE_IS_DIRECTORY, isDirectory);
- outState.putString(BUNDLE_TOOLBAR_TITLE, toolbarTitle);
}
@Override
diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportViewModel.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportViewModel.java
index 74650fe40..27cfe34fe 100644
--- a/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportViewModel.java
+++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportViewModel.java
@@ -11,7 +11,9 @@ import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
+import java.util.stream.Collectors;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.content.data.Track;
@@ -33,20 +35,20 @@ public class ImportViewModel extends AndroidViewModel implements ImportServiceRe
summary = new Summary();
}
- public LiveData getImportData(DocumentFile documentFile) {
+ LiveData getImportData(List documentFiles) {
if (importData == null) {
importData = new MutableLiveData<>();
- loadData(documentFile);
+ loadData(documentFiles);
}
return importData;
}
- public void cancel() {
+ void cancel() {
cancel = true;
}
- private void loadData(DocumentFile documentFile) {
- List fileList = FileUtils.getFiles(documentFile);
+ private void loadData(List documentFiles) {
+ List fileList = documentFiles.stream().map(FileUtils::getFiles).flatMap(Collection::stream).collect(Collectors.toList());
summary.totalCount = fileList.size();
filesToImport.addAll(fileList);
importNextFile();
@@ -90,7 +92,7 @@ public class ImportViewModel extends AndroidViewModel implements ImportServiceRe
importNextFile();
}
- public static class Summary {
+ static class Summary {
private int totalCount;
private int successCount;
private int existsCount;