package com.androsz.electricsleepbeta.app.wizard; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.View; import android.view.WindowManager; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import com.androsz.electricsleepbeta.R; import com.androsz.electricsleepbeta.app.SettingsActivity; import com.androsz.electricsleepbeta.app.SleepActivity; import com.androsz.electricsleepbeta.app.SleepMonitoringService; import com.androsz.electricsleepbeta.widget.DecimalSeekBar; import com.androsz.electricsleepbeta.widget.SleepChart; import com.androsz.electricsleepbeta.widget.VerticalSeekBar; public class CalibrateLightSleepFragment extends Calibrator { private float mAlarmTrigger; private VerticalSeekBar mSeekBar; private View mWarmingUp; SleepChart mSleepChart; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Activity a = getActivity(); if (savedInstanceState != null) { mAlarmTrigger = savedInstanceState.getFloat("mAlarmTrigger"); } else { mAlarmTrigger = a.getSharedPreferences( SettingsActivity.PREFERENCES, 0).getFloat( a.getString(R.string.pref_alarm_trigger_sensitivity), SettingsActivity.DEFAULT_ALARM_SENSITIVITY); } a.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } private void resetViews(final Activity a) { mSleepChart = (SleepChart) a.findViewById(R.id.calibration_sleep_chart); mSleepChart.clear(); mSeekBar = (VerticalSeekBar) a .findViewById(R.id.calibration_level_seekbar); mWarmingUp = a.findViewById(R.id.warming_up_text); mSleepChart.setVisibility(View.INVISIBLE); mSeekBar.setVisibility(View.INVISIBLE); mSleepChart.setCalibrationLevelAndRedraw(mAlarmTrigger); mSeekBar.setMax(SettingsActivity.MAX_ALARM_SENSITIVITY); mSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onProgressChanged(final SeekBar seekBar, final int progress, final boolean fromUser) { if (fromUser) { // if the user scrolls above the bounds of the SeekBar, // progress can be out of bounds. Clamp it. mAlarmTrigger = Math.min( SettingsActivity.MAX_ALARM_SENSITIVITY, progress / DecimalSeekBar.PRECISION); mSleepChart.setCalibrationLevelAndRedraw(mAlarmTrigger); } } @Override public void onStartTrackingTouch(final SeekBar seekBar) { } @Override public void onStopTrackingTouch(final SeekBar seekBar) { saveCalibrationLevel(a); } }); mSeekBar.setProgress(mAlarmTrigger); } private final BroadcastReceiver updateChartReceiver = new BroadcastReceiver() { @Override public void onReceive(final Context context, final Intent intent) { if (mSleepChart != null) { mSleepChart.sync(intent.getDoubleExtra( SleepMonitoringService.EXTRA_X, 0), intent .getDoubleExtra(SleepMonitoringService.EXTRA_Y, 0)); mSleepChart.setVisibility(View.VISIBLE); mSeekBar.setVisibility(View.VISIBLE); mWarmingUp.setVisibility(View.GONE); if (calibrationStateListener != null) { calibrationStateListener.onCalibrationComplete(true); } } } }; @Override public void onResume() { super.onResume(); resetViews(getActivity()); getActivity().registerReceiver(updateChartReceiver, new IntentFilter(SleepActivity.UPDATE_CHART)); } @Override public void onPause() { super.onPause(); Activity a = getActivity(); a.unregisterReceiver(updateChartReceiver); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putFloat("mAlarmTrigger", mAlarmTrigger); } @Override public int getLayoutResourceId() { return R.layout.wizard_calibration_lightsleep; } @Override public void startCalibration(Activity context) { final Intent i = new Intent(context, SleepMonitoringService.class); context.stopService(i); i.putExtra("testModeRate", CalibrationWizardActivity.LIGHT_SLEEP_CALIBRATION_INTERVAL); i.putExtra("alarm", SettingsActivity.MAX_ALARM_SENSITIVITY); context.startService(i); } @Override public void stopCalibration(Activity context) { if (context.stopService(new Intent(context, SleepMonitoringService.class))) { SleepChart sleepChart = (SleepChart) context .findViewById(R.id.calibration_sleep_chart); if (sleepChart != null) { sleepChart.clear(); VerticalSeekBar seekBar = (VerticalSeekBar) context .findViewById(R.id.calibration_level_seekbar); View warmingUp = context.findViewById(R.id.warming_up_text); sleepChart.setVisibility(View.INVISIBLE); seekBar.setVisibility(View.INVISIBLE); warmingUp.setVisibility(View.VISIBLE); } } } private void saveCalibrationLevel(Activity a) { // Save the trigger sensitivity a.getSharedPreferences(SettingsActivity.PREFERENCES, 0) .edit() .putFloat(a.getString(R.string.pref_alarm_trigger_sensitivity), mAlarmTrigger).commit(); } }