package com.boardgamegeek.util; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AlertDialog; import android.view.View; import android.view.Window; import android.view.WindowManager.LayoutParams; import com.boardgamegeek.R; /** * Helper class for creating and modifying dialogs. */ public class DialogUtils { private DialogUtils() { } public static void show(DialogFragment fragment, FragmentManager manager, String tag) { FragmentTransaction ft = manager.beginTransaction(); ft.add(fragment, tag); ft.commitAllowingStateLoss(); } public static void launchDialog(Fragment host, DialogFragment dialog, String tag, Bundle arguments) { FragmentTransaction ft = host.getFragmentManager().beginTransaction(); Fragment prev = host.getFragmentManager().findFragmentByTag(tag); if (prev != null) { ft.remove(prev); } ft.addToBackStack(null); dialog.setStyle(DialogFragment.STYLE_NORMAL, R.style.Theme_bgglight_Dialog); dialog.setArguments(arguments); ft.add(dialog, tag); ft.commitAllowingStateLoss(); } public static Dialog createCancelDialog(final Activity activity) { return createConfirmationDialog(activity, R.string.are_you_sure_cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { activity.setResult(Activity.RESULT_CANCELED); activity.finish(); } }); } public static Dialog createConfirmationDialog(Context context, String message, DialogInterface.OnClickListener okListener) { return createConfirmationDialog(context, -1, message, null, okListener, null); } public static Dialog createConfirmationDialog(Context context, int messageId, DialogInterface.OnClickListener okListener) { return createConfirmationDialog(context, messageId, null, null, okListener, null); } private static Dialog createConfirmationDialog(Context context, int messageId, String message, View view, DialogInterface.OnClickListener okListener, DialogInterface.OnClickListener cancelListener) { AlertDialog.Builder builder = new AlertDialog.Builder(context).setCancelable(true) .setNegativeButton(android.R.string.cancel, cancelListener) .setPositiveButton(android.R.string.ok, okListener) .setTitle(R.string.are_you_sure_title); builder = addAlertIcon(builder); if (messageId != -1) { builder.setMessage(messageId); } else { builder.setMessage(message); } if (view != null) { builder.setView(view); } return builder.create(); } public static AlertDialog.Builder addAlertIcon(AlertDialog.Builder builder) { return builder.setIconAttribute(android.R.attr.alertDialogIcon); } public static void showFragment(FragmentActivity activity, DialogFragment fragment, String tag) { FragmentManager manager = activity.getSupportFragmentManager(); final FragmentTransaction ft = manager.beginTransaction(); final Fragment prev = manager.findFragmentByTag(tag); if (prev != null) { ft.remove(prev); } ft.addToBackStack(null); fragment.show(ft, tag); } public static void requestFocus(@NonNull AlertDialog dialog) { requestFocus(dialog, null); } public static void requestFocus(@NonNull AlertDialog dialog, View view) { if (view != null) view.requestFocus(); Window window = dialog.getWindow(); if (window != null) window.setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE); } }