package org.commcare.views.dialogs;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
/**
* Wrapper for CommCareAlertDialogs that allows them to persist across screen orientation changes,
* by creating a DialogFragment from a CommCareAlertDialog at the time of actually showing the
* dialog
*
* @author Phillip Mates (pmates@dimagi.com)
* @author Aliza Stone (astone@dimagi.com)
*/
public class AlertDialogFragment extends DialogFragment {
private CommCareAlertDialog underlyingDialog;
public static AlertDialogFragment fromCommCareAlertDialog(CommCareAlertDialog d) {
d.finalizeView();
AlertDialogFragment frag = new AlertDialogFragment();
frag.setUnderlyingDialog(d);
frag.setCancelable(d.isCancelable());
return frag;
}
private void setUnderlyingDialog(CommCareAlertDialog d) {
this.underlyingDialog = d;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public void onCancel(DialogInterface dialog) {
super.onCancel(dialog);
underlyingDialog.performCancel(dialog);
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
underlyingDialog.performDismiss(dialog);
}
@Override
@NonNull
public Dialog onCreateDialog(Bundle savedInstanceState) {
return underlyingDialog.getDialog();
}
@Override
public void onDestroyView() {
// Ohh, you know, just a 5 year old Android bug ol' G hasn't fixed yet
if (getDialog() != null && getRetainInstance()) {
getDialog().setDismissMessage(null);
}
super.onDestroyView();
}
}