package es.jonatantierno.scrumdailytimer; import roboguice.activity.RoboFragmentActivity; import roboguice.inject.InjectView; import android.media.MediaPlayer; import android.os.Build; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.View; import android.view.WindowManager; import android.widget.Toast; import com.google.inject.Inject; /** * Main Activity containing a view pager. */ public class MainActivity extends RoboFragmentActivity { private MediaPlayer mAlarmPlayer; @InjectView(R.id.pager) ViewPager mPager; @Inject ScrumTimer mScrumTimer; final ViewPager.OnPageChangeListener mPagerListener; ChronoFragment mChronoFragment; ResultsFragment mResultsFragment; // Exit when back pressed twice. This resets when the user taps. private boolean mBackPressedOnce = false; void resetBackPresses() { mBackPressedOnce = false; } public MainActivity() { mPagerListener = new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int i) { // Results if (i == 1) { mChronoFragment.storeSlotTime(); mChronoFragment.pauseTickSound(); mResultsFragment.displayData(mChronoFragment); mScrumTimer.configure(mResultsFragment); } else { // i = 0 -> Chrono fragment if (mScrumTimer.isStopped()) { // Restart meeting. restartMeeting(); } else { // Continue meeting. mScrumTimer.configure(mChronoFragment); } } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // Nothing to do } @Override public void onPageScrollStateChanged(int scrollState) { // Hide totalTimeTextView so that swipe view is seen properly. View totalTimeTextView = MainActivity.this.findViewById(R.id.totalTimeTextView); switch (scrollState) { case ViewPager.SCROLL_STATE_DRAGGING: totalTimeTextView.setVisibility(View.GONE); break; case ViewPager.SCROLL_STATE_IDLE: totalTimeTextView.setVisibility(View.VISIBLE); break; default: break; } } }; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Ensure screen does not turn off this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setContentView(R.layout.activity_main); ChronoPagerAdapter adapter = new ChronoPagerAdapter(getSupportFragmentManager(), this); mChronoFragment = adapter.mChronoFragment; mResultsFragment = adapter.mResultsFragment; mPager.setAdapter(adapter); mPager.setOnPageChangeListener(mPagerListener); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { mPager.setPageTransformer(true, new EndMeetingPageTransformer()); } } protected void onResume() { super.onResume(); // Lights out mode mPager.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE); mBackPressedOnce = false; }; /** * For testing. * * @return listener that receives the page change. */ OnPageChangeListener getPagerListener() { return mPagerListener; } @Override public void onBackPressed() { if (mChronoFragment.isBackPressReset) { mChronoFragment.isBackPressReset = false; mBackPressedOnce = false; } if (mBackPressedOnce) { super.onBackPressed(); } else { mBackPressedOnce = true; Toast toast = Toast.makeText(this, R.string.press_back_again, Toast.LENGTH_SHORT); toast.show(); } } // Finish meeting, do not restart. public void endMeeting() { mChronoFragment.onStop(); } /** * Call to end the meeting and restart. */ public void restartMeeting() { mChronoFragment.onStart(); mChronoFragment.onResume(); } }