package com.dozuki.ifixit.ui.guide.create; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.FragmentManager; import com.actionbarsherlock.view.Menu; import com.dozuki.ifixit.App; import com.dozuki.ifixit.R; import com.dozuki.ifixit.model.guide.Guide; import com.dozuki.ifixit.ui.BaseMenuDrawerActivity; import com.dozuki.ifixit.ui.LoadingFragment; import com.dozuki.ifixit.ui.guide.create.StepReorderFragment.StepRearrangeListener; import com.dozuki.ifixit.util.api.Api; import com.dozuki.ifixit.util.api.ApiEvent; import com.squareup.otto.Subscribe; public class StepsActivity extends BaseMenuDrawerActivity implements StepRearrangeListener { static final int GUIDE_EDIT_STEP_REQUEST = 0; private static final String GUIDE_STEPS_PORTAL_FRAG = "GUIDE_STEPS_PORTAL_FRAG"; public static String GUIDE_KEY = "GUIDE_KEY"; public static String GUIDE_ID_KEY = "GUIDE_ID_KEY"; public static String GUIDE_PUBLIC_KEY = "GUIDE_PUBLIC_KEY"; private StepPortalFragment mStepPortalFragment; private Guide mGuide; private boolean mIsLoading; ///////////////////////////////////////////////////// // LIFECYCLE ///////////////////////////////////////////////////// @Override public void onCreate(Bundle savedInstanceState) { int guideid = 0; super.onCreate(savedInstanceState); if (savedInstanceState != null) { // to persist mGuide mGuide = (Guide) savedInstanceState.getSerializable(StepsActivity.GUIDE_KEY); mIsLoading = savedInstanceState.getBoolean(LOADING); } Bundle extras = getIntent().getExtras(); if (extras != null) { mGuide = (Guide) extras.getSerializable(StepsActivity.GUIDE_KEY); guideid = extras.getInt(StepsActivity.GUIDE_ID_KEY, 0); if (guideid == 0 && mGuide != null) { guideid = mGuide.getGuideid(); } } setContentView(R.layout.guide_create_steps_root); if (findViewById(R.id.guide_create_fragment_steps_container) != null && getSupportFragmentManager().findFragmentByTag(GUIDE_STEPS_PORTAL_FRAG) == null) { mStepPortalFragment = new StepPortalFragment(); Bundle fragArgs = new Bundle(); fragArgs.putInt(GUIDE_ID_KEY, guideid); if (mGuide != null) { fragArgs.putSerializable(GUIDE_KEY, mGuide); } mStepPortalFragment.setArguments(fragArgs); mStepPortalFragment.setRetainInstance(true); getSupportFragmentManager().beginTransaction() .add(R.id.guide_create_fragment_steps_container, mStepPortalFragment, GUIDE_STEPS_PORTAL_FRAG).commit(); } else { mStepPortalFragment = (StepPortalFragment) getSupportFragmentManager() .findFragmentByTag(GUIDE_STEPS_PORTAL_FRAG); } if (mIsLoading) { getSupportFragmentManager().beginTransaction().hide(mStepPortalFragment).addToBackStack(null).commit(); } } @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); savedInstanceState.putSerializable(StepsActivity.GUIDE_KEY, mGuide); savedInstanceState.putBoolean(LOADING, mIsLoading); } @Override public void finish() { Intent returnIntent = new Intent(); returnIntent.putExtra(GuideCreateActivity.GUIDE_KEY, mGuide); setResult(RESULT_OK, returnIntent); super.finish(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == GUIDE_EDIT_STEP_REQUEST && resultCode == RESULT_OK) { Guide guide = (Guide) data.getSerializableExtra(GuideCreateActivity.GUIDE_KEY); if (guide != null) { mGuide = guide; } } } @Override public void onReorderComplete(boolean reodered) { ((StepRearrangeListener) getSupportFragmentManager().findFragmentByTag(GUIDE_STEPS_PORTAL_FRAG)) .onReorderComplete(reodered); } @Override public boolean finishActivityIfLoggedOut() { return true; } @Override public boolean onCreateOptionsMenu(Menu menu) { getSupportMenuInflater().inflate(R.menu.step_list_menu, menu); return super.onCreateOptionsMenu(menu); } ///////////////////////////////////////////////////// // NOTIFICATION LISTENERS ///////////////////////////////////////////////////// @Subscribe public void onRetrievedGuide(ApiEvent.GuideForEdit event) { if (!event.hasError()) { mGuide = event.getResult(); App.sendScreenView("/user/guides/" + mGuide.getGuideid()); hideLoading(); } else { Api.getErrorDialog(StepsActivity.this, event).show(); } } @Subscribe public void onIntroSavedGuide(ApiEvent.EditGuide event) { if (!event.hasError()) { mGuide = event.getResult(); hideLoading(); } else { Api.getErrorDialog(StepsActivity.this, event).show(); } } ///////////////////////////////////////////////////// // HELPERS ///////////////////////////////////////////////////// public void showLoading() { showLoading(R.id.guide_create_fragment_steps_container); } @Override public void showLoading(int container) { mStepPortalFragment = (StepPortalFragment) getSupportFragmentManager().findFragmentByTag(GUIDE_STEPS_PORTAL_FRAG); getSupportFragmentManager().beginTransaction() .add(container, new LoadingFragment(), LOADING).addToBackStack(LOADING) .commit(); if (mStepPortalFragment != null) { getSupportFragmentManager().beginTransaction().hide(mStepPortalFragment).addToBackStack(null).commit(); } mIsLoading = true; } @Override public void hideLoading() { getSupportFragmentManager().popBackStack(LOADING, FragmentManager.POP_BACK_STACK_INCLUSIVE); mIsLoading = false; } }