Browse Source

Add confirmation popup for overwrite

pull/6776/head
staphen 2 years ago committed by Anders Jenbo
parent
commit
ed1a2a4e99
  1. 74
      android-project/app/src/main/java/org/diasurgical/devilutionx/ImportActivity.java
  2. 3
      android-project/app/src/main/res/values/strings.xml

74
android-project/app/src/main/java/org/diasurgical/devilutionx/ImportActivity.java

@ -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);

3
android-project/app/src/main/res/values/strings.xml

@ -14,5 +14,8 @@
<string name="import_short_label">Import Data</string>
<string name="gamepad_tv_text">This game requires a gamepad to play</string>
<string name="import_data_info">On the next screen, select files that will be imported into:\n\n%1$s</string>
<string name="overwrite_query">The following files will be overwritten. Is this okay?\n\n%1$s</string>
<string name="ok_button">OK</string>
<string name="continue_button">Continue</string>
<string name="cancel_button">Cancel</string>
</resources>

Loading…
Cancel
Save