package edu.mit.mitmobile2; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.view.KeyEvent; import android.view.View; import edu.mit.mitmobile2.MITSliderTitleBar.OnPreviousNextListener; import edu.mit.mitmobile2.SliderView.Adapter; import edu.mit.mitmobile2.SliderView.OnSeekListener; public abstract class SliderNewModuleActivity extends NewModuleActivity { protected Context ctx; protected MITSliderTitleBar mSliderTitleBar; protected SliderView mSliderView; abstract protected SliderView.Adapter getSliderAdapter(); protected int mStartPosition; protected int mLastSavedPosition; public static String KEY_POSITION = "start_position"; public static final String KEY_POSITION_SAVED = "saved_start_position"; protected String getCurrentHeaderTitle() { return ""; } protected void onSliderSeek() { // default implementation does nothing } /****************************************************/ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.new_slider); mSliderTitleBar = new MITSliderTitleBar(this); getTitleBar().addSliderBar(mSliderTitleBar); mSliderView = (SliderView) findViewById(R.id.newSliderMainContent); ctx = this; mSliderView.setOnSeekListener(new OnSeekListener() { @Override public void onSeek(SliderView view, Adapter adapter) { mSliderTitleBar.enablePreviousButton(!view.isAtBeginning()); mSliderTitleBar.enableNextButton(!view.isAtEnd()); if (!view.isAtEnd() || !view.isAtBeginning()) { mSliderTitleBar.showPreviousNext(); mSliderTitleBar.setVisibility(View.VISIBLE); } else { mSliderTitleBar.setVisibility(View.GONE); } mSliderTitleBar.setAllTitles(getPreviousTitle(), getCurrentHeaderTitle(), getNextTitle()); onSliderSeek(); } }); reloadAdapter(); mSliderTitleBar.setPreviousNextListener(new OnPreviousNextListener() { @Override public void onPreviousClicked() { mSliderView.slideLeft(); } @Override public void onNextClicked() { mSliderView.slideRight(); } }); } protected void reloadAdapter() { Adapter adapter = getSliderAdapter(); if (adapter != null) { mSliderView.setAdapter(getSliderAdapter()); } } @Override public boolean dispatchKeyEvent(KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT) { mSliderView.slideLeft(); return true; } if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) { mSliderView.slideRight(); return true; } return super.dispatchKeyEvent(event); } @Override protected void onDestroy() { mSliderView.destroy(); System.gc(); super.onDestroy(); } // protected void useSubtitles(String mainTitle) { // mSliderTitleBar.useSubtitleBar(); // mSliderTitleBar.setTitle(mainTitle); // } @Override protected void onResume() { super.onResume(); // not sure why, but sometimes when activities // are resumed it scrolls to the previous FrameLayout // this is a fix for that final int scrollX = mSliderView.getScrollX(); final int scrollY = mSliderView.getScrollY(); new Handler().postAtFrontOfQueue(new Runnable() { @Override public void run() { mSliderView.scrollTo(scrollX, scrollY); } }); } protected void showLoading(String title) { FullScreenLoader loader = (FullScreenLoader) findViewById(R.id.newSliderActivityLoader); loader.setVisibility(View.VISIBLE); loader.showLoading(); mSliderView.setVisibility(View.GONE); // mSliderTitleBar.setTitle(title); } protected void showLoadingError() { FullScreenLoader loader = (FullScreenLoader) findViewById(R.id.newSliderActivityLoader); loader.setVisibility(View.VISIBLE); loader.showError(); mSliderView.setVisibility(View.GONE); } protected void showLoadingCompleted() { FullScreenLoader loader = (FullScreenLoader) findViewById(R.id.newSliderActivityLoader); loader.setVisibility(View.GONE); mSliderView.setVisibility(View.VISIBLE); } @Override public final boolean isScrollable() { return false; } public void refreshScreens() { mSliderView.refreshScreens(); } protected String getPreviousTitle() { return "PREVIOUS"; } protected String getNextTitle() { return "NEXT"; } protected int getPositionValue() { if (mLastSavedPosition > 0) { return mLastSavedPosition; } Bundle extras = getIntent().getExtras(); if (extras != null) { return extras.getInt(KEY_POSITION); } else { return 0; } } }