mirror of
https://github.com/oxen-io/session-android.git
synced 2024-11-28 12:35:17 +00:00
b8f663b69c
1) Move all the crypto classes from securesms.crypto. 2) Move all the crypto storage from securesms.database.keys 3) Replace the old imported BC code with spongycastle.
197 lines
6.8 KiB
Java
197 lines
6.8 KiB
Java
package org.thoughtcrime.securesms;
|
|
|
|
import android.app.AlertDialog;
|
|
import android.app.Dialog;
|
|
import android.app.ProgressDialog;
|
|
import android.content.Context;
|
|
import android.content.DialogInterface;
|
|
import android.os.AsyncTask;
|
|
import android.os.Bundle;
|
|
import android.util.Log;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.Toast;
|
|
|
|
import com.actionbarsherlock.app.SherlockFragment;
|
|
import org.whispersystems.textsecure.crypto.MasterSecret;
|
|
import org.thoughtcrime.securesms.database.EncryptedBackupExporter;
|
|
import org.thoughtcrime.securesms.database.NoExternalStorageException;
|
|
import org.thoughtcrime.securesms.database.PlaintextBackupExporter;
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
public class ExportFragment extends SherlockFragment {
|
|
|
|
private static final int SUCCESS = 0;
|
|
private static final int NO_SD_CARD = 1;
|
|
private static final int IO_ERROR = 2;
|
|
|
|
private MasterSecret masterSecret;
|
|
|
|
public void setMasterSecret(MasterSecret masterSecret) {
|
|
this.masterSecret = masterSecret;
|
|
}
|
|
|
|
@Override
|
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
|
|
View layout = inflater.inflate(R.layout.export_fragment, container, false);
|
|
View exportEncryptedView = layout.findViewById(R.id.export_encrypted_backup);
|
|
View exportPlaintextView = layout.findViewById(R.id.export_plaintext_backup);
|
|
|
|
exportEncryptedView.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
handleExportEncryptedBackup();
|
|
}
|
|
});
|
|
|
|
exportPlaintextView.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
handleExportPlaintextBackup();
|
|
}
|
|
});
|
|
|
|
return layout;
|
|
}
|
|
|
|
private void handleExportEncryptedBackup() {
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
|
builder.setIcon(android.R.drawable.ic_dialog_info);
|
|
builder.setTitle(getActivity().getString(R.string.ExportFragment_export_to_sd_card));
|
|
builder.setMessage(getActivity().getString(R.string.ExportFragment_this_will_export_your_encrypted_keys_settings_and_messages));
|
|
builder.setPositiveButton(getActivity().getString(R.string.ExportFragment_export), new Dialog.OnClickListener() {
|
|
@Override
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
new ExportEncryptedTask().execute();
|
|
}
|
|
});
|
|
builder.setNegativeButton(getActivity().getString(R.string.ExportFragment_cancel), null);
|
|
builder.show();
|
|
}
|
|
|
|
private void handleExportPlaintextBackup() {
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
|
builder.setIcon(android.R.drawable.ic_dialog_alert);
|
|
builder.setTitle(getActivity().getString(R.string.ExportFragment_export_plaintext_to_sd_card));
|
|
builder.setMessage(getActivity().getString(R.string.ExportFragment_warning_this_will_export_the_plaintext_contents));
|
|
builder.setPositiveButton(getActivity().getString(R.string.ExportFragment_export), new Dialog.OnClickListener() {
|
|
@Override
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
new ExportPlaintextTask().execute();
|
|
}
|
|
});
|
|
builder.setNegativeButton(getActivity().getString(R.string.ExportFragment_cancel), null);
|
|
builder.show();
|
|
}
|
|
|
|
private class ExportPlaintextTask extends AsyncTask<Void, Void, Integer> {
|
|
private ProgressDialog dialog;
|
|
|
|
@Override
|
|
protected void onPreExecute() {
|
|
dialog = ProgressDialog.show(getActivity(),
|
|
getActivity().getString(R.string.ExportFragment_exporting),
|
|
getActivity().getString(R.string.ExportFragment_exporting_plaintext_to_sd_card),
|
|
true, false);
|
|
}
|
|
|
|
@Override
|
|
protected Integer doInBackground(Void... params) {
|
|
try {
|
|
PlaintextBackupExporter.exportPlaintextToSd(getActivity(), masterSecret);
|
|
return SUCCESS;
|
|
} catch (NoExternalStorageException e) {
|
|
Log.w("ExportFragment", e);
|
|
return NO_SD_CARD;
|
|
} catch (IOException e) {
|
|
Log.w("ExportFragment", e);
|
|
return IO_ERROR;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onPostExecute(Integer result) {
|
|
Context context = getActivity();
|
|
|
|
if (dialog != null)
|
|
dialog.dismiss();
|
|
|
|
if (context == null)
|
|
return;
|
|
|
|
switch (result) {
|
|
case NO_SD_CARD:
|
|
Toast.makeText(context,
|
|
context.getString(R.string.ExportFragment_error_unable_to_write_to_sd_card),
|
|
Toast.LENGTH_LONG).show();
|
|
break;
|
|
case IO_ERROR:
|
|
Toast.makeText(context,
|
|
context.getString(R.string.ExportFragment_error_while_writing_to_sd_card),
|
|
Toast.LENGTH_LONG).show();
|
|
break;
|
|
case SUCCESS:
|
|
Toast.makeText(context,
|
|
context.getString(R.string.ExportFragment_success),
|
|
Toast.LENGTH_LONG).show();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
private class ExportEncryptedTask extends AsyncTask<Void, Void, Integer> {
|
|
private ProgressDialog dialog;
|
|
|
|
@Override
|
|
protected void onPreExecute() {
|
|
dialog = ProgressDialog.show(getActivity(),
|
|
getActivity().getString(R.string.ExportFragment_exporting),
|
|
getActivity().getString(R.string.ExportFragment_exporting_keys_settings_and_messages),
|
|
true, false);
|
|
}
|
|
|
|
@Override
|
|
protected void onPostExecute(Integer result) {
|
|
Context context = getActivity();
|
|
|
|
if (dialog != null) dialog.dismiss();
|
|
|
|
if (context == null) return;
|
|
|
|
switch (result) {
|
|
case NO_SD_CARD:
|
|
Toast.makeText(context,
|
|
context.getString(R.string.ExportFragment_error_unable_to_write_to_sd_card),
|
|
Toast.LENGTH_LONG).show();
|
|
break;
|
|
case IO_ERROR:
|
|
Toast.makeText(context,
|
|
context.getString(R.string.ExportFragment_error_while_writing_to_sd_card),
|
|
Toast.LENGTH_LONG).show();
|
|
break;
|
|
case SUCCESS:
|
|
Toast.makeText(context,
|
|
context.getString(R.string.ExportFragment_success),
|
|
Toast.LENGTH_LONG).show();
|
|
break;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected Integer doInBackground(Void... params) {
|
|
try {
|
|
EncryptedBackupExporter.exportToSd(getActivity());
|
|
return SUCCESS;
|
|
} catch (NoExternalStorageException e) {
|
|
Log.w("ExportFragment", e);
|
|
return NO_SD_CARD;
|
|
} catch (IOException e) {
|
|
Log.w("ExportFragment", e);
|
|
return IO_ERROR;
|
|
}
|
|
}
|
|
}
|
|
} |