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