Added Encrypted Backup feature.The Zip File is Password Protected, which is asked from the user at the time of export immediately on click of Export Button.

This commit is contained in:
Ankit Tiwari
2021-10-15 22:51:52 +05:30
parent 44066e6599
commit 2390568bdf
3 changed files with 25 additions and 10 deletions

View File

@@ -47,6 +47,7 @@ public class ImportExportActivity extends CatimaAppCompatActivity
private String importAlertTitle;
private String importAlertMessage;
private DataFormat importDataFormat;
private String exportPassword;
@Override
protected void onCreate(Bundle savedInstanceState)
@@ -88,7 +89,19 @@ public class ImportExportActivity extends CatimaAppCompatActivity
@Override
public void onClick(View v)
{
chooseFileWithIntent(intentCreateDocumentAction, CHOOSE_EXPORT_LOCATION);
AlertDialog.Builder builder = new AlertDialog.Builder(ImportExportActivity.this);
builder.setTitle(R.string.passwordRequired);
final EditText input = new EditText(ImportExportActivity.this);
input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
builder.setView(input);
builder.setPositiveButton(R.string.ok, (dialogInterface, i) -> {
chooseFileWithIntent(intentCreateDocumentAction, CHOOSE_EXPORT_LOCATION);
exportPassword = input.getText().toString();
});
builder.setNegativeButton(R.string.cancel, (dialogInterface, i) -> dialogInterface.cancel());
builder.show();
}
});
@@ -211,7 +224,7 @@ public class ImportExportActivity extends CatimaAppCompatActivity
importExporter.execute();
}
private void startExport(final OutputStream target, final Uri targetUri, final boolean closeWhenDone)
private void startExport(final OutputStream target, final Uri targetUri,char[] password, final boolean closeWhenDone)
{
ImportExportTask.TaskCompleteListener listener = new ImportExportTask.TaskCompleteListener()
{
@@ -229,7 +242,7 @@ public class ImportExportActivity extends CatimaAppCompatActivity
};
importExporter = new ImportExportTask(ImportExportActivity.this,
DataFormat.Catima, target, listener);
DataFormat.Catima, target,password, listener);
importExporter.execute();
}
@@ -407,6 +420,7 @@ public class ImportExportActivity extends CatimaAppCompatActivity
{
if (requestCode == CHOOSE_EXPORT_LOCATION)
{
OutputStream writer;
if (uri.getScheme() != null)
{
@@ -416,9 +430,8 @@ public class ImportExportActivity extends CatimaAppCompatActivity
{
writer = new FileOutputStream(new File(uri.toString()));
}
Log.e(TAG, "Starting file export with: " + uri.toString());
startExport(writer, uri, true);
startExport(writer, uri,exportPassword.toCharArray(),true);
}
else
{

View File

@@ -35,7 +35,7 @@ class ImportExportTask extends AsyncTask<Void, Void, ImportExportResult>
/**
* Constructor which will setup a task for exporting to the given file
*/
ImportExportTask(Activity activity, DataFormat format, OutputStream output,
ImportExportTask(Activity activity, DataFormat format, OutputStream output,char[] password,
TaskCompleteListener listener)
{
super();
@@ -43,6 +43,7 @@ class ImportExportTask extends AsyncTask<Void, Void, ImportExportResult>
this.doImport = false;
this.format = format;
this.outputStream = output;
this.password = password;
this.listener = listener;
}
@@ -70,14 +71,14 @@ class ImportExportTask extends AsyncTask<Void, Void, ImportExportResult>
return importResult;
}
private ImportExportResult performExport(Context context, OutputStream stream, DBHelper db)
private ImportExportResult performExport(Context context, OutputStream stream, DBHelper db,char[] password)
{
ImportExportResult result = ImportExportResult.GenericFailure;
try
{
OutputStreamWriter writer = new OutputStreamWriter(stream, StandardCharsets.UTF_8);
result = MultiFormatExporter.exportData(context, db, stream, format,null);
result = MultiFormatExporter.exportData(context, db, stream, format,password);
writer.close();
}
catch (IOException e)
@@ -118,7 +119,7 @@ class ImportExportTask extends AsyncTask<Void, Void, ImportExportResult>
}
else
{
result = performExport(activity.getApplicationContext(), outputStream, db);
result = performExport(activity.getApplicationContext(), outputStream, db,password);
}
return result;