misp-bump/app/src/main/java/lu/circl/mispbump/auxiliary/DialogManager.java

313 lines
9.9 KiB
Java

package lu.circl.mispbump.auxiliary;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import androidx.appcompat.app.AlertDialog;
import java.security.PublicKey;
import lu.circl.mispbump.R;
import lu.circl.mispbump.models.SyncInformation;
import lu.circl.mispbump.security.DiffieHellman;
/**
* Creates and show dialogs.
* Automatically takes care of using the UI Thread.
*/
public class DialogManager {
public static void syncAlreadyExistsDialog(SyncInformation oldSync, SyncInformation newSync, Context context, final IDialogFeedback callback) {
final AlertDialog.Builder adb = new AlertDialog.Builder(context);
// this dialog needs definite user feedback
adb.setCancelable(false);
// if (oldSync.organisation.getName().equals(newSync.organisation.getName())) {
// adb.setTitle("Already Synced with " + oldSync.organisation.getName());
// } else {
// adb.setTitle("Already Synced with " + oldSync.organisation.getName() + "(Now:" + newSync.organisation.getName() + ")");
// }
adb.setMessage("");
adb.setPositiveButton("Override Credentials", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (callback != null) {
callback.positive();
}
}
});
adb.setNegativeButton("Just Update Content", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (callback != null) {
callback.negative();
}
}
});
Activity act = (Activity) context;
act.runOnUiThread(new Runnable() {
@Override
public void run() {
adb.create().show();
}
});
}
public static void saveAndExitDialog(Context context, final IDialogFeedback callback) {
final AlertDialog.Builder adb = new AlertDialog.Builder(context);
adb.setTitle("Save before exit?");
adb.setMessage("Saved syncs can be accessed from the main menu.");
adb.setPositiveButton("Save and Exit", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (callback != null) {
callback.positive();
}
}
});
adb.setNegativeButton("Exit", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (callback != null) {
callback.negative();
}
}
});
Activity act = (Activity) context;
act.runOnUiThread(new Runnable() {
@Override
public void run() {
adb.create().show();
}
});
}
/**
* Dialog to display a received public key.
*
* @param publicKey the public key to display
* @param context needed to build and show the dialog
* @param callback {@link IDialogFeedback}
*/
public static void publicKeyDialog(PublicKey publicKey, Context context, final IDialogFeedback callback) {
final AlertDialog.Builder adb = new AlertDialog.Builder(context);
adb.setTitle("Public Key");
String message = "Algorithm: " + publicKey.getAlgorithm() + "\n" +
"Format: " + publicKey.getFormat() + "\n" +
"Content: \n" + DiffieHellman.publicKeyToString(publicKey);
adb.setMessage(message);
adb.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (callback != null) {
callback.positive();
}
}
});
Activity act = (Activity) context;
act.runOnUiThread(new Runnable() {
@Override
public void run() {
adb.create().show();
}
});
}
/**
* Dialog to display a received public key.
*
* @param syncInformation {@link SyncInformation}
* @param context needed to build and show the dialog
* @param callback {@link IDialogFeedback}
*/
public static void syncInformationDialog(SyncInformation syncInformation, Context context, final IDialogFeedback callback) {
final AlertDialog.Builder adb = new AlertDialog.Builder(context);
adb.setTitle("Sync information received");
adb.setMessage(syncInformation.getRemoteOrganisation().getName());
adb.setPositiveButton("Accept", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (callback != null) {
callback.positive();
}
}
});
adb.setNegativeButton("Reject", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (callback != null) {
callback.negative();
}
}
});
Activity act = (Activity) context;
act.runOnUiThread(new Runnable() {
@Override
public void run() {
adb.create().show();
}
});
}
/**
* Dialog to ask the user if his sync partner already scanned the displayed qr code.
*
* @param context needed to build and show the dialog
* @param callback {@link IDialogFeedback}
*/
public static void confirmProceedDialog(Context context, final IDialogFeedback callback) {
final AlertDialog.Builder adb = new AlertDialog.Builder(context);
adb.setTitle("Continue?");
adb.setMessage("Only continue if your partner already scanned this QR code");
adb.setPositiveButton("Continue", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (callback != null) {
callback.positive();
}
}
});
adb.setNegativeButton("Show QR code again", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (callback != null) {
callback.negative();
}
}
});
Activity act = (Activity) context;
act.runOnUiThread(new Runnable() {
@Override
public void run() {
adb.create().show();
}
});
}
/**
* Dialog to provide login information.
*
* @param context needed to build and show the dialog
*/
public static void loginHelpDialog(Context context) {
final AlertDialog.Builder adb = new AlertDialog.Builder(context);
adb.setMessage(R.string.login_help_text);
adb.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
Activity act = (Activity) context;
act.runOnUiThread(new Runnable() {
@Override
public void run() {
adb.create().show();
}
});
}
public static void instanceNotAvailableDialog(Context context, final IDialogFeedback callback) {
final AlertDialog.Builder adb = new AlertDialog.Builder(context);
adb.setTitle("MISP not available");
adb.setMessage("Your MISP instance is not available. Would you like to save?");
adb.setPositiveButton("Retry now", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (callback != null) {
callback.positive();
}
}
});
adb.setNegativeButton("Save & retry later", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (callback != null) {
callback.negative();
}
}
});
Activity act = (Activity) context;
act.runOnUiThread(new Runnable() {
@Override
public void run() {
adb.create().show();
}
});
}
public static void deleteSyncInformationDialog(Context context, final IDialogFeedback callback) {
final AlertDialog.Builder adb = new AlertDialog.Builder(context);
adb.setTitle("Delete Sync Information?");
adb.setMessage("This sync information will be deleted permanently");
adb.setPositiveButton("Delete", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (callback != null) {
callback.positive();
}
}
});
adb.setNegativeButton("Discard", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (callback != null) {
callback.negative();
}
}
});
Activity act = (Activity) context;
act.runOnUiThread(new Runnable() {
@Override
public void run() {
adb.create().show();
}
});
}
/**
* Interface to give feedback about the user choice in dialogs.
*/
public interface IDialogFeedback {
void positive();
void negative();
}
}