mirror of
https://github.com/oxen-io/session-android.git
synced 2023-12-14 02:53:01 +01:00
b89a72dbeb
You know, it's much more fun listening to you in a lecture theatre. :-P Right; any nit picks now might have to wait 3 weeks, depending on available connectivity. Hope I did not screw this one up.
147 lines
5.2 KiB
Java
147 lines
5.2 KiB
Java
package org.thoughtcrime.securesms;
|
|
|
|
import android.app.AlertDialog;
|
|
import android.app.ProgressDialog;
|
|
import android.content.Context;
|
|
import android.content.DialogInterface;
|
|
import android.os.Handler;
|
|
import android.os.Message;
|
|
import android.util.Log;
|
|
import android.widget.Toast;
|
|
|
|
import org.thoughtcrime.securesms.database.ApplicationExporter;
|
|
import org.thoughtcrime.securesms.database.NoExternalStorageException;
|
|
|
|
import java.io.IOException;
|
|
|
|
public class ApplicationExportManager extends Handler implements Runnable {
|
|
|
|
private static final int ERROR_NO_SD = 0;
|
|
private static final int ERROR_IO = 1;
|
|
private static final int COMPLETE = 2;
|
|
|
|
private static final int TASK_EXPORT = 0;
|
|
private static final int TASK_IMPORT = 1;
|
|
|
|
private int task;
|
|
private ProgressDialog progressDialog;
|
|
private ApplicationExportListener listener;
|
|
|
|
private final Context context;
|
|
|
|
public ApplicationExportManager(Context context) {
|
|
this.context = context;
|
|
}
|
|
|
|
public void setListener(ApplicationExportListener listener) {
|
|
this.listener = listener;
|
|
}
|
|
|
|
public void importDatabase() {
|
|
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context);
|
|
alertBuilder.setTitle(R.string.ApplicationExportManager_import_database_and_settings_title);
|
|
alertBuilder.setMessage(R.string.ApplicationExportManager_import_database_and_settings_message);
|
|
alertBuilder.setCancelable(false);
|
|
alertBuilder.setPositiveButton(R.string.ApplicationExportManager_import, new DialogInterface.OnClickListener() {
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
task = TASK_IMPORT;
|
|
progressDialog = new ProgressDialog(context);
|
|
progressDialog.setTitle(context.getString(R.string.ApplicationExportManager_importing_database_and_keys));
|
|
progressDialog.setMessage(context
|
|
.getString(R.string.ApplicationExportManager_importing_your_sms_database_keys_and_settings));
|
|
progressDialog.setCancelable(false);
|
|
progressDialog.setIndeterminate(true);
|
|
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
|
|
progressDialog.show();
|
|
|
|
if (listener != null)
|
|
listener.onPrepareForImport();
|
|
|
|
new Thread(ApplicationExportManager.this).start();
|
|
}
|
|
});
|
|
|
|
alertBuilder.setNegativeButton(android.R.string.cancel, null);
|
|
alertBuilder.create().show();
|
|
}
|
|
|
|
|
|
public void exportDatabase() {
|
|
Log.w("ApplicationExportManager", "Context: " + context);
|
|
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context);
|
|
alertBuilder.setTitle(R.string.ApplicationExportManager_export_database_question);
|
|
alertBuilder.setMessage(R.string.ApplicationExportManager_export_textsecure_database_keys_and_settings_prompt);
|
|
alertBuilder.setCancelable(false);
|
|
|
|
alertBuilder.setPositiveButton(R.string.ApplicationExportManager_export, new DialogInterface.OnClickListener() {
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
task = TASK_EXPORT;
|
|
progressDialog = new ProgressDialog(context);
|
|
progressDialog.setTitle(context.getString(R.string.ApplicationExportManager_exporting_database_and_keys));
|
|
progressDialog.setMessage(context
|
|
.getString(R.string.ApplicationExportManager_exporting_your_sms_database_keys_and_settings));
|
|
progressDialog.setCancelable(false);
|
|
progressDialog.setIndeterminate(true);
|
|
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
|
|
progressDialog.show();
|
|
|
|
new Thread(ApplicationExportManager.this).start();
|
|
}
|
|
});
|
|
|
|
alertBuilder.setNegativeButton(android.R.string.cancel, null);
|
|
alertBuilder.create().show();
|
|
}
|
|
|
|
|
|
public void run() {
|
|
try {
|
|
switch (task) {
|
|
case TASK_EXPORT: ApplicationExporter.exportToSd(context); break;
|
|
case TASK_IMPORT: ApplicationExporter.importFromSd(context); break;
|
|
}
|
|
} catch (NoExternalStorageException e) {
|
|
Log.w("SecureSMS", e);
|
|
this.obtainMessage(ERROR_NO_SD).sendToTarget();
|
|
return;
|
|
} catch (IOException e) {
|
|
Log.w("SecureSMS", e);
|
|
this.obtainMessage(ERROR_IO).sendToTarget();
|
|
return;
|
|
}
|
|
|
|
this.obtainMessage(COMPLETE).sendToTarget();
|
|
}
|
|
|
|
@Override
|
|
public void handleMessage(Message message) {
|
|
switch (message.what) {
|
|
case ERROR_NO_SD:
|
|
Toast.makeText(context, R.string.ApplicationExportManager_no_sd_card_found_exclamation,
|
|
Toast.LENGTH_LONG).show();
|
|
break;
|
|
case ERROR_IO:
|
|
Toast.makeText(context, R.string.ApplicationExportManager_error_exporting_to_sd_exclamation,
|
|
Toast.LENGTH_LONG).show();
|
|
break;
|
|
case COMPLETE:
|
|
switch (task) {
|
|
case TASK_IMPORT:
|
|
Toast.makeText(context, R.string.ApplicationExportManager_import_successful_exclamation,
|
|
Toast.LENGTH_LONG).show();
|
|
break;
|
|
case TASK_EXPORT:
|
|
Toast.makeText(context, R.string.ApplicationExportManager_export_successful_exclamation,
|
|
Toast.LENGTH_LONG).show();
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
|
|
progressDialog.dismiss();
|
|
}
|
|
|
|
public interface ApplicationExportListener {
|
|
public void onPrepareForImport();
|
|
}
|
|
}
|