package com.gettingmobile.android.app; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import com.gettingmobile.goodnews.util.ThemeUtil; import com.google.inject.Binder; import com.google.inject.Injector; import com.google.inject.Module; import roboguice.RoboGuice; public abstract class AdaptiveDialogHandler { protected static final String EXTRA_KEY_BASE = "com.gettingmobile.goodnews."; protected static final String EXTRA_KEY_HANDLER_CLASS = EXTRA_KEY_BASE + "HANDLER_CLASS"; protected static final String EXTRA_KEY_HANDLER_EXTRAS = EXTRA_KEY_BASE + "HANDLER_EXTRAS"; protected final int layourId; private AdaptiveDialogInterface dialog; protected static void start(Activity activity, Class<? extends AdaptiveDialogHandler> dialogHandlerClass, Bundle extras) { final Class<? extends Activity> activityClass = ThemeUtil.isTablet(activity) ? AdaptiveDialogTabletActivity.class : AdaptiveDialogPhoneActivity.class; final Intent intent = new Intent(activity, activityClass); intent.putExtra(EXTRA_KEY_HANDLER_CLASS, dialogHandlerClass); if (extras != null) { intent.putExtra(EXTRA_KEY_HANDLER_EXTRAS, extras); } activity.startActivity(intent); } protected static void start(Activity activity, Class<? extends AdaptiveDialogHandler> dialogHandlerClass) { start(activity, dialogHandlerClass, null); } protected static AdaptiveDialogHandler createDialogHandlerFromIntent(Context context, Intent intent) { final Bundle handlerExtras = intent.getBundleExtra(EXTRA_KEY_HANDLER_EXTRAS); final Injector injector = handlerExtras == null ? RoboGuice.getInjector(context) : RoboGuice.getInjector(context).createChildInjector(new Module() { @Override public void configure(Binder binder) { binder.bind(Bundle.class).toInstance(handlerExtras); } }); //noinspection unchecked return injector.getInstance((Class<? extends AdaptiveDialogHandler>) intent.getExtras().getSerializable(EXTRA_KEY_HANDLER_CLASS)); } protected AdaptiveDialogHandler(int layoutId) { this.layourId = layoutId; } public int getLayoutId() { return layourId; } public AdaptiveDialogInterface getDialog() { return dialog; } public void setDialog(AdaptiveDialogInterface dialog) { this.dialog = dialog; } @SuppressWarnings("UnusedParameters") protected void onCreate(View view) { // do nothing by default } protected void onStart() { // do nothing by default } @SuppressWarnings("UnusedParameters") protected void onSaveInstanceState(Bundle outState) { // do nothing by default } @SuppressWarnings("UnusedDeclaration") protected void onRestoreInstanceState (Bundle savedInstanceState) { // do nothing by default } protected void onRightButtonClicked() { dialog.dismiss(); } protected void onLeftButtonClicked() { dialog.dismiss(); } protected void onMiddleButtonClicked() { dialog.dismiss(); } }