diff --git a/app/src/main/java/protect/card_locker/ImportExportActivity.java b/app/src/main/java/protect/card_locker/ImportExportActivity.java
index 20f305ffe..c5ee29759 100644
--- a/app/src/main/java/protect/card_locker/ImportExportActivity.java
+++ b/app/src/main/java/protect/card_locker/ImportExportActivity.java
@@ -12,8 +12,10 @@ import android.text.InputType;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
+import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
+import android.widget.FrameLayout;
import android.widget.Toast;
import java.io.File;
@@ -90,14 +92,23 @@ public class ImportExportActivity extends CatimaAppCompatActivity
public void onClick(View v)
{
AlertDialog.Builder builder = new AlertDialog.Builder(ImportExportActivity.this);
- builder.setTitle(R.string.passwordRequired);
+ builder.setTitle(R.string.exportPasswordRequired);
+
+ FrameLayout container = new FrameLayout(ImportExportActivity.this);
+ FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+ params.leftMargin = 50;
+ params.rightMargin = 50;
final EditText input = new EditText(ImportExportActivity.this);
input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
- builder.setView(input);
+ input.setLayoutParams(params);
+ input.setHint("Enter Password");
+
+ container.addView(input);
+ builder.setView(container);
builder.setPositiveButton(R.string.ok, (dialogInterface, i) -> {
- chooseFileWithIntent(intentCreateDocumentAction, CHOOSE_EXPORT_LOCATION);
exportPassword = input.getText().toString();
+ chooseFileWithIntent(intentCreateDocumentAction, CHOOSE_EXPORT_LOCATION);
});
builder.setNegativeButton(R.string.cancel, (dialogInterface, i) -> dialogInterface.cancel());
builder.show();
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index aa689bccb..d45c44099 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -196,6 +196,7 @@
Yes
No
Please enter the password
+ Set a password to protect your export."
Could not generate sharable URL. Please report this.
Turn flashlight on
Turn flashlight off
diff --git a/app/src/test/java/protect/card_locker/ImportExportTest.java b/app/src/test/java/protect/card_locker/ImportExportTest.java
index 53442f9b0..230faef6f 100644
--- a/app/src/test/java/protect/card_locker/ImportExportTest.java
+++ b/app/src/test/java/protect/card_locker/ImportExportTest.java
@@ -357,31 +357,34 @@ public class ImportExportTest
public void multipleCardsExportImportPasswordProtected() throws IOException
{
final int NUM_CARDS = 10;
- final String password = "123456789";
- addLoyaltyCards(NUM_CARDS);
+ List passwords = Arrays.asList(null, "123456789".toCharArray());
+ for(char[] password : passwords){
+ addLoyaltyCards(NUM_CARDS);
- ByteArrayOutputStream outData = new ByteArrayOutputStream();
- OutputStreamWriter outStream = new OutputStreamWriter(outData);
+ ByteArrayOutputStream outData = new ByteArrayOutputStream();
+ OutputStreamWriter outStream = new OutputStreamWriter(outData);
- // Export data to CSV format
- ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima,password.toCharArray());
- assertEquals(ImportExportResult.Success, result);
- outStream.close();
+ // Export data to CSV format
+ ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima,password);
+ assertEquals(ImportExportResult.Success, result);
+ outStream.close();
- TestHelpers.getEmptyDb(activity);
+ TestHelpers.getEmptyDb(activity);
- ByteArrayInputStream inData = new ByteArrayInputStream(outData.toByteArray());
+ ByteArrayInputStream inData = new ByteArrayInputStream(outData.toByteArray());
- // Import the CSV data
- result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inData, DataFormat.Catima, password.toCharArray());
- assertEquals(ImportExportResult.Success, result);
+ // Import the CSV data
+ result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inData, DataFormat.Catima, password);
+ assertEquals(ImportExportResult.Success, result);
- assertEquals(NUM_CARDS, db.getLoyaltyCardCount());
+ assertEquals(NUM_CARDS, db.getLoyaltyCardCount());
- checkLoyaltyCards();
+ checkLoyaltyCards();
+
+ // Clear the database for the next format under test
+ TestHelpers.getEmptyDb(activity);
+ }
- // Clear the database for the next format under test
- TestHelpers.getEmptyDb(activity);
}
@Test