package com.openvehicles.OVMS.ui; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.text.TextUtils; import android.widget.FrameLayout; import com.openvehicles.OVMS.R; public class BaseFragmentActivity extends ApiActivity { private static final String EXT_FRAGMENT_CLASS_NAME = "ext_fragmentclassname"; private static final String EXT_ONLY_ORIENTATION = "ext_only_orientation"; private static final String EXT_FOR_RESULT = "ext_for_result"; public static void show(Context pContext, Class<? extends Fragment> pClazz, Bundle pArgs, int pOnlyOrientation) { Intent intent = new Intent(pContext, BaseFragmentActivity.class); intent.putExtra(EXT_FRAGMENT_CLASS_NAME, pClazz.getName()); intent.putExtra(EXT_ONLY_ORIENTATION, pOnlyOrientation); if (pArgs != null) intent.putExtras(pArgs); pContext.startActivity(intent); } public static void showForResult(Fragment pFragment, Class<? extends Fragment> pClazz, Bundle pArgs, int pRequestCode, int pOnlyOrientation) { Intent intent = new Intent(pFragment.getActivity(), BaseFragmentActivity.class); intent.putExtra(EXT_FRAGMENT_CLASS_NAME, pClazz.getName()); intent.putExtra(EXT_ONLY_ORIENTATION, pOnlyOrientation); intent.putExtra(EXT_FOR_RESULT, true); if (pArgs != null) intent.putExtras(pArgs); pFragment.startActivityForResult(intent, pRequestCode); } @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); String fragmentClassName = getIntent().getStringExtra(EXT_FRAGMENT_CLASS_NAME); if (TextUtils.isEmpty(fragmentClassName)) { finish(); return; } int orientation = getIntent().getIntExtra(EXT_ONLY_ORIENTATION, Configuration.ORIENTATION_UNDEFINED); if (orientation != Configuration.ORIENTATION_UNDEFINED && orientation != getResources().getConfiguration().orientation) { finish(); return; } setDefaultContentView(); if (getCurrentFragment() == null) setStartFragment(fragmentClassName); } protected void setDefaultContentView() { FrameLayout fl = new FrameLayout(this); fl.setId(R.id.content); setContentView(fl); } public int getContentId() { return R.id.content; } public Fragment getCurrentFragment() { return getSupportFragmentManager().findFragmentById(getContentId()); } public Fragment setStartFragment(Class<? extends Fragment> pClazz) { return setStartFragment(pClazz, getIntent().getExtras()); } public Fragment setStartFragment(String pClassName) { return setStartFragment(pClassName, getContentId(), getIntent().getExtras()); } public Fragment setStartFragment(Class<? extends Fragment> pClazz, int pId) { return setStartFragment(pClazz, pId, getIntent().getExtras()); } public Fragment setStartFragment(Class<? extends Fragment> pClazz, Bundle pArgs) { return setStartFragment(pClazz, getContentId(), pArgs); } public Fragment setStartFragment(Class<? extends Fragment> pClazz, int pId, Bundle pArgs) { return setStartFragment(pClazz.getName(), pId, pArgs); } public Fragment setStartFragment(String pClassName, int pId, Bundle pArgs) { FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); Fragment fragment = fm.findFragmentById(pId); if (fragment == null) { fragment = Fragment.instantiate(this, pClassName, pArgs); ft.add(pId, fragment); } else { if (!fragment.getClass().getName().equals(pClassName)) { fragment = Fragment.instantiate(this, pClassName, pArgs); ft.replace(pId, fragment); } } ft.commit(); return fragment; } public Fragment replaceFragment(Class<? extends Fragment> pClazz, int pId, Bundle pArgs) { return replaceFragment(pClazz.getName(), pId, pArgs); } public Fragment replaceFragment(String pClassName, int pId, Bundle pArgs) { FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); Fragment fragment = Fragment.instantiate(this, pClassName, pArgs); ft.replace(pId, fragment); ft.commit(); return fragment; } public Fragment setNextFragment(Class<? extends Fragment> pClazz) { return setNextFragment(pClazz, getIntent().getExtras()); } public Fragment setNextFragment(Class<? extends Fragment> pClazz, Bundle pArgs) { Fragment fragment = Fragment.instantiate(this, pClazz.getName(), pArgs); FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(getContentId(), fragment); ft.addToBackStack(null); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); return fragment; } }