package com.androsz.electricsleepbeta.app.wizard; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.os.PowerManager; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.PagerAdapter; import android.widget.Button; import com.androsz.electricsleepbeta.R; import com.androsz.electricsleepbeta.app.SettingsActivity; import com.viewpagerindicator.TitleProvider; public class CalibrationWizardActivity extends WizardActivity { public static final int LIGHT_SLEEP_CALIBRATION_INTERVAL = 500; public CalibrateLightSleepFragment calibrateLightSleepFragment; public CheckForScreenBugFragment checkForScreenBugFragment; private static final int FRAG_ABOUT = 0; private static final int FRAG_LIGHT_SLEEP_INSTRUCT = 1; private static final int FRAG_LIGHT_SLEEP = 2; private static final int FRAG_SCREEN_BUG = 3; private static final int FRAG_RESULTS = 4; private boolean mHasUserChangedCalibration; private boolean mHasScreenBugCalibrated; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { mHasUserChangedCalibration = savedInstanceState .getBoolean("mHasUserChangedCalibration"); mHasScreenBugCalibrated = savedInstanceState .getBoolean("mHasScreenBugCalibrated"); } else { mHasUserChangedCalibration = false; mHasScreenBugCalibrated = false; } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean("mHasUserChangedCalibration", mHasUserChangedCalibration); outState.putBoolean("mHasScreenBugCalibrated", mHasScreenBugCalibrated); } private class WizardPagerAdapter extends FragmentPagerAdapter implements TitleProvider { public WizardPagerAdapter(FragmentManager manager) { super(manager); calibrateLightSleepFragment = (CalibrateLightSleepFragment) manager .findFragmentByTag(makeFragmentName(FRAG_LIGHT_SLEEP)); if (calibrateLightSleepFragment == null) { calibrateLightSleepFragment = new CalibrateLightSleepFragment(); } calibrateLightSleepFragment .setCalibratorStateListener(new CalibratorStateListener() { @Override public void onCalibrationComplete(boolean success) { setForwardNavigationEnabled(success); mHasUserChangedCalibration = true; } }); checkForScreenBugFragment = (CheckForScreenBugFragment) manager .findFragmentByTag(makeFragmentName(FRAG_SCREEN_BUG)); if (checkForScreenBugFragment == null) { checkForScreenBugFragment = new CheckForScreenBugFragment(); } checkForScreenBugFragment .setCalibratorStateListener(new CalibratorStateListener() { @Override public void onCalibrationComplete(boolean success) { //onRightButtonClick(null); setForwardNavigationEnabled(success); mHasScreenBugCalibrated = true; } }); } private String[] titles = new String[] { "Calibration", "Placement", "Sensitivity Test", "Standby Test", "Setup Complete" }; @Override public String getTitle(int position) { return titles[position]; } @Override public int getCount() { return titles.length; } @Override public Fragment getItem(int position) { switch (position) { case FRAG_ABOUT: return new CalibrationAboutFragment(); case FRAG_LIGHT_SLEEP_INSTRUCT: return new CalibrateLightSleepInstructionsFragment(); case FRAG_LIGHT_SLEEP: return calibrateLightSleepFragment; case FRAG_SCREEN_BUG: return checkForScreenBugFragment; case FRAG_RESULTS: return new CalibrationResultsFragment(); default: throw new IllegalStateException( "Could not find the correct fragment."); } } } private PagerAdapter mWizardPagerAdapter; @Override protected PagerAdapter getPagerAdapter() { // check if we already have a cached copy, create it if not. if (mWizardPagerAdapter == null) { mWizardPagerAdapter = new WizardPagerAdapter( getSupportFragmentManager()); } return mWizardPagerAdapter; } @Override protected void onFinishWizardActivity() throws IllegalStateException { final SharedPreferences.Editor ed2 = getSharedPreferences( SettingsActivity.PREFERENCES_ENVIRONMENT, Context.MODE_PRIVATE) .edit(); ed2.putInt(SettingsActivity.PREFERENCES_ENVIRONMENT, getResources() .getInteger(R.integer.prefs_version)); ed2.commit(); finish(); } protected void setupNavigationButtons(int index) { super.setupNavigationButtons(index); if (index == FRAG_LIGHT_SLEEP) { setForwardNavigationEnabled(mHasUserChangedCalibration); } else if (index == FRAG_SCREEN_BUG) { setForwardNavigationEnabled(mHasScreenBugCalibrated); } else { setForwardNavigationEnabled(true); } } @Override protected void onUserLeaveHint() { super.onUserLeaveHint(); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); if (calibrateLightSleepFragment != null) { calibrateLightSleepFragment.stopCalibration(this); } if (checkForScreenBugFragment != null && pm.isScreenOn()) { checkForScreenBugFragment.stopCalibration(this); } } @Override protected void onPerformWizardAction(int index) { if (index == FRAG_LIGHT_SLEEP) { if (calibrateLightSleepFragment != null) { calibrateLightSleepFragment.startCalibration(this); } if (checkForScreenBugFragment != null) { checkForScreenBugFragment.stopCalibration(this); } } else if (index == FRAG_SCREEN_BUG && !mHasScreenBugCalibrated) { if (calibrateLightSleepFragment != null) { calibrateLightSleepFragment.stopCalibration(this); } if (checkForScreenBugFragment != null) { checkForScreenBugFragment.startCalibration(this); } } else { // not on a wizard page. stop all. if (calibrateLightSleepFragment != null) { calibrateLightSleepFragment.stopCalibration(this); } if (checkForScreenBugFragment != null) { checkForScreenBugFragment.stopCalibration(this); } } } private void setForwardNavigationEnabled(boolean enabled) { findViewById(R.id.rightButton).setEnabled(enabled); setPagingEnabled(enabled); } @Override protected void onPrepareLastSlide(Button rightButton) { } }