|
|
|
|
@ -18,6 +18,7 @@ import java.io.FileOutputStream;
|
|
|
|
|
import java.io.IOException; |
|
|
|
|
import java.io.InputStream; |
|
|
|
|
import java.io.OutputStream; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Objects; |
|
|
|
|
|
|
|
|
|
public class ImportActivity extends Activity { |
|
|
|
|
@ -52,31 +53,88 @@ public class ImportActivity extends Activity {
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
if (resultCode == Activity.RESULT_OK && data != null) { |
|
|
|
|
importFile(data.getData()); |
|
|
|
|
handleClipData(data.getClipData()); |
|
|
|
|
} |
|
|
|
|
ArrayList<Uri> uriList = getItemUris(data.getClipData()); |
|
|
|
|
|
|
|
|
|
Uri dataUri = data.getData(); |
|
|
|
|
if (dataUri != null) |
|
|
|
|
uriList.add(dataUri); |
|
|
|
|
|
|
|
|
|
ArrayList<String> fileNames = getFileNames(uriList); |
|
|
|
|
ArrayList<String> overwrittenFiles = getOverwrittenFiles(fileNames); |
|
|
|
|
if (overwrittenFiles.isEmpty()) { |
|
|
|
|
importFiles(uriList); |
|
|
|
|
finish(); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
String overwrittenFileList = String.join("\n", overwrittenFiles); |
|
|
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(this); |
|
|
|
|
builder.setMessage(getString(R.string.overwrite_query, overwrittenFileList)); |
|
|
|
|
builder.setPositiveButton(R.string.continue_button, (dialog, which) -> { importFiles(uriList); }); |
|
|
|
|
builder.setNegativeButton(R.string.cancel_button, null); |
|
|
|
|
builder.setOnDismissListener(dialog -> finish()); |
|
|
|
|
|
|
|
|
|
finish(); |
|
|
|
|
AlertDialog dialog = builder.create(); |
|
|
|
|
dialog.show(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void handleClipData(ClipData clipData) { |
|
|
|
|
private ArrayList<Uri> getItemUris(ClipData clipData) { |
|
|
|
|
ArrayList<Uri> uriList = new ArrayList<>(); |
|
|
|
|
if (clipData == null) |
|
|
|
|
return; |
|
|
|
|
return uriList; |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < clipData.getItemCount(); i++) { |
|
|
|
|
ClipData.Item item = clipData.getItemAt(i); |
|
|
|
|
if (item == null) |
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
importFile(item.getUri()); |
|
|
|
|
Uri itemUri = item.getUri(); |
|
|
|
|
if (itemUri == null) |
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
uriList.add(itemUri); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return uriList; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private ArrayList<String> getFileNames(ArrayList<Uri> uriList) { |
|
|
|
|
ArrayList<String> fileNames = new ArrayList<>(); |
|
|
|
|
for (Uri uri : uriList) { |
|
|
|
|
DocumentFile file = DocumentFile.fromSingleUri(getApplicationContext(), uri); |
|
|
|
|
if (file == null) |
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
String fileName = file.getName(); |
|
|
|
|
fileNames.add(fileName); |
|
|
|
|
} |
|
|
|
|
return fileNames; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private ArrayList<String> getOverwrittenFiles(ArrayList<String> fileNames) { |
|
|
|
|
ArrayList<String> overwrittenFiles = new ArrayList<>(); |
|
|
|
|
ExternalFilesManager fileManager = new ExternalFilesManager(this); |
|
|
|
|
for (String fileName : fileNames) { |
|
|
|
|
if (fileManager.hasFile(fileName)) |
|
|
|
|
overwrittenFiles.add(fileName); |
|
|
|
|
} |
|
|
|
|
return overwrittenFiles; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void importFiles(ArrayList<Uri> uriList) { |
|
|
|
|
for (Uri uri : uriList) |
|
|
|
|
importFile(uri); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void importFile(Uri fileUri) { |
|
|
|
|
if (fileUri == null) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
DocumentFile file = Objects.requireNonNull(DocumentFile.fromSingleUri(getApplicationContext(), fileUri)); |
|
|
|
|
DocumentFile file = DocumentFile.fromSingleUri(getApplicationContext(), fileUri); |
|
|
|
|
if (file == null) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
String fileName = file.getName(); |
|
|
|
|
ExternalFilesManager fileManager = new ExternalFilesManager(this); |
|
|
|
|
File externalFile = fileManager.getFile(fileName); |
|
|
|
|
|