package com.mapsaurus.paneslayout; import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; import android.support.v4.app.Fragment; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.view.MenuItem; import com.mapsaurus.paneslayout.PanesSizer.PaneSizer; @SuppressWarnings("unused") public abstract class PanesActivity extends SherlockFragmentActivity implements FragmentLauncher{ private ActivityDelegate mDelegate; @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); mDelegate.onSaveInstanceState(savedInstanceState); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int screenSize = (getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK); if (screenSize == Configuration.SCREENLAYOUT_SIZE_LARGE || screenSize == Configuration.SCREENLAYOUT_SIZE_XLARGE) { mDelegate = new TabletDelegate(this); } else { mDelegate = new PhoneDelegate(this); } mDelegate.onCreate(savedInstanceState); } /** * Deals with updating fragments on orientation changes and layout changes. */ public abstract void updateFragment(Fragment f); /* ********************************************************************* * Deal with over-riding activity methods * ********************************************************************* */ /** * Deal with menu buttons */ @Override public boolean onOptionsItemSelected(MenuItem item) { if (mDelegate.onOptionsItemSelected(item)) return true; return super.onOptionsItemSelected(item); } /** * Deal with back pressed */ @Override public void onBackPressed() { if (mDelegate.onBackPressed()) return; super.onBackPressed(); } /* ********************************************************************* * Adding, removing, getting fragments * * Note: fragments are added in a stack. Here's a sample use case: * * setMenuFragment(A) * stack: A * * addFragment(A, B) * stack: A, B * * addFragment(B, C) * stack: A, B, C * * addFragment(B, D) * stack: A, B, D * * clearFragments() * stack: A * * ********************************************************************* */ /** * Add a new fragment after the previous fragment. */ @Override public void addFragment(Fragment prevFragment, Fragment newFragment) { mDelegate.addFragment(prevFragment, newFragment); updateFragment(newFragment); } /** * Add a fragment as a menu */ public void setMenuFragment(Fragment f) { mDelegate.setMenuFragment(f); } /** * Clear all fragments from stack except the menu fragment */ public void clearFragments() { mDelegate.clearFragments(); } /** * Get menu framgent */ public Fragment getMenuFragment() { return mDelegate.getMenuFragment(); } /** * Get top framgent */ public Fragment getTopFragment() { return mDelegate.getTopFragment(); } /** * Show the menu */ public void showMenu() { mDelegate.showMenu(); } /* ********************************************************************* * Setup tablet or phone delegates * ********************************************************************* */ /** * Set the pane sizer */ public void setPaneSizer(PaneSizer sizer) { if (mDelegate instanceof TabletDelegate) ((TabletDelegate) mDelegate).setPaneSizer(sizer); } }