/* © 2010 Stephan Reichholf <stephan at reichholf dot net> * * Licensed under the Create-Commons Attribution-Noncommercial-Share Alike 3.0 Unported * http://creativecommons.org/licenses/by-nc-sa/3.0/ */ package net.reichholf.dreamdroid.activities; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import net.reichholf.dreamdroid.DreamDroid; import net.reichholf.dreamdroid.R; import net.reichholf.dreamdroid.activities.abs.BaseActivity; import net.reichholf.dreamdroid.activities.abs.MultiPaneHandler; import net.reichholf.dreamdroid.fragment.ActivityCallbackHandler; import net.reichholf.dreamdroid.fragment.abs.BaseHttpFragment; import net.reichholf.dreamdroid.fragment.dialogs.ActionDialog; import net.reichholf.dreamdroid.fragment.dialogs.MultiChoiceDialog; /** * @author sre */ public class SimpleFragmentActivity extends BaseActivity implements MultiPaneHandler, ActionDialog.DialogActionListener, MultiChoiceDialog.MultiChoiceDialogListener { private Fragment mFragment; private ActivityCallbackHandler mCallBackHandler; protected boolean mThemeSet = false; @Override public void onCreate(Bundle savedInstanceState) { if (!mThemeSet) DreamDroid.setTheme(this); super.onCreate(savedInstanceState); if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } mFragment = null; boolean initFragment = true; if (savedInstanceState != null) { mFragment = getSupportFragmentManager().findFragmentById(R.id.content); initFragment = false; } initViews(initFragment); if(initFragment) handleExtras(getIntent().getExtras()); } protected void handleExtras(Bundle extras) { Bundle args = new Bundle(); args.putSerializable(BaseHttpFragment.sData, extras.getSerializable("serializableData")); args.putString("action", extras.getString("action")); mFragment.setArguments(args); } protected void initViews(boolean initFragment) { setContentView(R.layout.simple_layout); if (initFragment) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); if (mFragment == null) { Fragment f = null; @SuppressWarnings("unchecked") Class<Fragment> c = (Class<Fragment>) getIntent().getExtras().get("fragmentClass"); Bundle args = new Bundle(); try { //noinspection ConstantConditions f = c.newInstance(); args.putAll(getIntent().getExtras()); f.setArguments(args); } catch (InstantiationException | IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } mFragment = f; } mCallBackHandler = null; ft.replace(R.id.content, mFragment, "fragment"); ft.commit(); } } @Override public void onSaveInstanceState(Bundle outState) { outState.putString("WORKAROUND_FOR_BUG_19917_KEY", "WORKAROUND_FOR_BUG_19917_VALUE"); super.onSaveInstanceState(outState); } @Override public boolean onCreateOptionsMenu(Menu menu) { return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); return true; } return super.onOptionsItemSelected(item); } @Override public void showDetails(Fragment fragment) { showDetails(fragment, true); } /* * (non-Javadoc) * * @see * net.reichholf.dreamdroid.abstivities.MultiPaneHandler#showDetails(java * .lang.Class) */ @Override public void showDetails(Class<? extends Fragment> fragmentClass) { try { showDetails(fragmentClass.newInstance()); } catch (InstantiationException | IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /* * (non-Javadoc) * * @see * net.reichholf.dreamdroid.abstivities.MultiPaneHandler#showDetails(android * .support.v4.app.Fragment, boolean) */ @Override public void showDetails(Fragment fragment, boolean addToBackStack) { Intent intent = new Intent(this, ((Object) this).getClass()); intent.putExtra("fragmentClass", ((Object) fragment).getClass()); intent.putExtras(fragment.getArguments()); if (fragment.getTargetRequestCode() > 0) { startActivityForResult(intent, fragment.getTargetRequestCode()); } else { startActivity(intent); } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (mCallBackHandler != null) { if (mCallBackHandler.onKeyDown(keyCode, event)) { return true; } } return super.onKeyDown(keyCode, event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (mCallBackHandler != null) { if (mCallBackHandler.onKeyUp(keyCode, event)) { return true; } } return super.onKeyUp(keyCode, event); } @Override public boolean isMultiPane() { return false; } @Override public boolean isDrawerOpen() { return false; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { mFragment.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data); } @Override public void onFragmentResume(Fragment fragment) { mCallBackHandler = (ActivityCallbackHandler) fragment; } @Override public void onFragmentPause(Fragment fragment) { mCallBackHandler = null; } @Override public void showDialogFragment(Class<? extends DialogFragment> fragmentClass, Bundle args, String tag) { try { DialogFragment f = fragmentClass.newInstance(); f.setArguments(args); showDialogFragment(f, tag); } catch (InstantiationException | IllegalAccessException e) { Log.e(DreamDroid.LOG_TAG, e.getMessage()); } } @Override public void showDialogFragment(DialogFragment fragment, String tag) { FragmentManager fm = getSupportFragmentManager(); fragment.show(fm, tag); } @Override public void showDialogFragment(android.app.DialogFragment fragment, String tag) { android.app.FragmentManager fm = getFragmentManager(); fragment.show(fm, tag); } @Override public void onDialogAction(int action, Object details, String dialogTag) { if (mFragment != null) ((ActionDialog.DialogActionListener) mFragment).onDialogAction(action, details, dialogTag); } @Override public void onMultiChoiceDialogSelection(String dialogTag, DialogInterface dialog, Integer[] selected) { if (mFragment != null) ((MultiChoiceDialog.MultiChoiceDialogListener) mFragment).onMultiChoiceDialogSelection(dialogTag, dialog, selected); } @Override public void onMultiChoiceDialogFinish(String dialogTag, int result) { if (mFragment != null) ((MultiChoiceDialog.MultiChoiceDialogListener) mFragment).onMultiChoiceDialogFinish(dialogTag, result); } }