package com.gettingmobile.android.app;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
public final class DialogActivity extends Activity implements DialogInterface.OnDismissListener {
private static final String LOG_TAG = "goodnews.DialogActivity";
public static final String EXTRA_DIALOG_TITLE = IntentConstants.EXTRA_BASE + "DIALOG_TITLE";
public static final String EXTRA_DIALOG_MESSAGE = IntentConstants.EXTRA_BASE + "DIALOG_MESSAGE";
public static final String EXTRA_DIALOG_POSITIVE_BUTTON_TEXT = IntentConstants.EXTRA_BASE + "DIALOG_POSITIVE_BUTTON_TEXT";
public static final String EXTRA_DIALOG_POSITIVE_BUTTON_INTENT = IntentConstants.EXTRA_BASE + "DIALOG_POSITIVE_BUTTON_INTENT";
public static final String EXTRA_DIALOG_NEGATIVE_BUTTON_TEXT = IntentConstants.EXTRA_BASE + "DIALOG_NEGATIVE_BUTTON_TEXT";
public static final String EXTRA_DIALOG_NEGATIVE_BUTTON_INTENT = IntentConstants.EXTRA_BASE + "DIALOG_NEGATIVE_BUTTON_INTENT";
public static final String EXTRA_DIALOG_NEUTRAL_BUTTON_TEXT = IntentConstants.EXTRA_BASE + "DIALOG_NEUTRAL_BUTTON_TEXT";
public static final String EXTRA_DIALOG_NEUTRAL_BUTTON_INTENT = IntentConstants.EXTRA_BASE + "DIALOG_NEUTRAL_BUTTON_INTENT";
public static Intent createIntent(Context context, CharSequence title, CharSequence message,
CharSequence positiveButtonText, PendingIntent positiveButtonIntent,
CharSequence negativeButtonText, PendingIntent negativeButtonIntent,
CharSequence neutralButtonText, PendingIntent neutralButtonIntent) {
final Intent intent = new Intent(context, DialogActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
final Bundle extras = new Bundle();
extras.putCharSequence(EXTRA_DIALOG_TITLE, title);
extras.putCharSequence(EXTRA_DIALOG_MESSAGE, message);
extras.putCharSequence(EXTRA_DIALOG_POSITIVE_BUTTON_TEXT, positiveButtonText);
extras.putParcelable(EXTRA_DIALOG_POSITIVE_BUTTON_INTENT, positiveButtonIntent);
extras.putCharSequence(EXTRA_DIALOG_NEGATIVE_BUTTON_TEXT, negativeButtonText);
extras.putParcelable(EXTRA_DIALOG_NEGATIVE_BUTTON_INTENT, negativeButtonIntent);
extras.putCharSequence(EXTRA_DIALOG_NEUTRAL_BUTTON_TEXT, neutralButtonText);
extras.putParcelable(EXTRA_DIALOG_NEUTRAL_BUTTON_INTENT, neutralButtonIntent);
intent.putExtras(extras);
return intent;
}
public static Intent createIntent(Context context, int title, int message,
int positiveButtonText, PendingIntent positiveButtonIntent,
int negativeButtonText, PendingIntent negativeButtonIntent,
int neutralButtonText, PendingIntent neutralButtonIntent) {
return createIntent(context, context.getText(title), context.getText(message),
(positiveButtonText != 0 ? context.getText(positiveButtonText) : null), positiveButtonIntent,
(negativeButtonText != 0 ? context.getText(negativeButtonText) : null), negativeButtonIntent,
(neutralButtonText != 0 ? context.getText(neutralButtonText) : null), neutralButtonIntent);
}
public static PendingIntent createPendingIntent(Context context, Intent intent) {
return PendingIntent.getActivity(context, 0, intent, 0);
}
@Override
protected void onResume() {
super.onResume();
final Bundle extras = getIntent().getExtras();
if (extras == null) {
finish();
} else {
final CharSequence title = extras.getCharSequence(EXTRA_DIALOG_TITLE);
final CharSequence message = extras.getCharSequence(EXTRA_DIALOG_MESSAGE);
if (title == null || message == null) {
finish();
} else {
final CharSequence positiveButtonText = extras.getCharSequence(EXTRA_DIALOG_POSITIVE_BUTTON_TEXT);
final PendingIntent positiveButtonIntent = (PendingIntent) extras.getParcelable(EXTRA_DIALOG_POSITIVE_BUTTON_INTENT);
final CharSequence negativeButtonText = extras.getCharSequence(EXTRA_DIALOG_NEGATIVE_BUTTON_TEXT);
final PendingIntent negativeButtonIntent = (PendingIntent) extras.getParcelable(EXTRA_DIALOG_NEGATIVE_BUTTON_INTENT);
final CharSequence neutralButtonText = extras.getCharSequence(EXTRA_DIALOG_NEUTRAL_BUTTON_TEXT);
final PendingIntent neutralButtonIntent = (PendingIntent) extras.getParcelable(EXTRA_DIALOG_NEUTRAL_BUTTON_INTENT);
showDialog(title, message,
positiveButtonText, positiveButtonIntent,
negativeButtonText, negativeButtonIntent,
neutralButtonText, neutralButtonIntent);
}
}
}
protected void showDialog(CharSequence title, CharSequence message,
CharSequence positiveButtonText, final PendingIntent positiveButtonIntent,
CharSequence negativeButtonText, final PendingIntent negativeButtonIntent,
CharSequence neutralButtonText, final PendingIntent neutralButtonIntent) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this).
setTitle(title).
setMessage(message);
if (positiveButtonText != null) {
builder.setPositiveButton(positiveButtonText, new OnButtonClickListener(positiveButtonIntent));
}
if (negativeButtonText != null) {
builder.setNegativeButton(negativeButtonText, new OnButtonClickListener(negativeButtonIntent));
}
if (neutralButtonText != null) {
builder.setNeutralButton(neutralButtonText, new OnButtonClickListener(neutralButtonIntent));
}
builder.show().setOnDismissListener(this);
}
@Override
public void onDismiss(DialogInterface dialogInterface) {
finish();
}
/*
* inner classes
*/
final class OnButtonClickListener implements DialogInterface.OnClickListener {
private final PendingIntent intent;
OnButtonClickListener(PendingIntent intent) {
this.intent = intent;
}
@Override
public void onClick(DialogInterface dialogInterface, int i) {
try {
if (intent != null) {
try {
intent.send();
} catch (PendingIntent.CanceledException ex) {
Log.e(LOG_TAG, "button intent failed", ex);
}
}
} finally {
dialogInterface.dismiss();
}
}
}
}