package com.gettingmobile.android.app.actions;
import android.app.Activity;
import android.app.Application;
import android.app.Dialog;
import android.util.Log;
import com.gettingmobile.android.app.DialogFactory;
import com.gettingmobile.goodnews.R;
import com.gettingmobile.goodnews.SimpleActivityAccessor;
public class ActionContextActivityAccessor<T extends Application, U extends Activity>
extends SimpleActivityAccessor<U> implements ActionContext<T> {
private static final String LOG_TAG = "goodnews.ActionContextActivityAccessor";
private static final int DIALOG_WAIT = -1;
public ActionContextActivityAccessor(U activity) {
super(activity);
}
public Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_WAIT:
return DialogFactory.createProgressDialog(getActivity(), true, 0, R.string.wait, false);
default:
return null;
}
}
@SuppressWarnings("unchecked")
@Override
public T getApp() {
return (T) getActivity().getApplication();
}
@Override
public U getActivity() {
return super.getActivity();
}
@Override
public void showWaitDialog() {
getActivity().showDialog(DIALOG_WAIT);
}
@Override
public void dismissWaitDialog() {
dismissDialogSafely(DIALOG_WAIT);
}
/**
* Safe version of {@code dismissDialog} that will <em>not</em> throw an exception if called for a dialog that is
* not shown, because this situation may occur for dialogs which are closed via a callback exactly in the moment
* after a recreation of the activity (e.g. after a screen rotation).
* @param id the ID of the dialog to be dismissed.
*/
public void dismissDialogSafely(int id) {
try {
getActivity().dismissDialog(id);
} catch (IllegalArgumentException ex) {
Log.w(LOG_TAG, "Failed to dismiss dialog.", ex);
}
}
}