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) {
}
}