package com.androsz.electricsleepbeta.content;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.hardware.SensorManager;
import android.os.AsyncTask;
import android.preference.PreferenceManager;
import android.widget.Toast;
import com.androsz.electricsleepbeta.R;
import com.androsz.electricsleepbeta.app.SettingsActivity;
import com.androsz.electricsleepbeta.app.SleepActivity;
import com.androsz.electricsleepbeta.app.SleepMonitoringService;
public class StartSleepReceiver extends BroadcastReceiver {
public final static String EXTRA_AIRPLANE_MODE = "airplaneMode";
public final static String EXTRA_ALARM = "alarm";
public final static String EXTRA_ALARM_WINDOW = "alarmWindow";
public final static String EXTRA_FORCE_SCREEN_ON = "forceScreenOn";
public final static String EXTRA_SENSOR_DELAY = "sensorDelay";
public final static String EXTRA_SILENT_MODE = "silentMode";
public final static String EXTRA_USE_ALARM = "useAlarm";
public final static String START_SLEEP = "com.androsz.electricsleepbeta.START_SLEEP";
public static void enforceCalibrationBeforeStartingSleep(final Context context,
final Intent service, final Intent activity) {
final SharedPreferences userPrefs = context.getSharedPreferences(
SettingsActivity.PREFERENCES_ENVIRONMENT, Context.MODE_PRIVATE);
final int prefsVersion = userPrefs.getInt(SettingsActivity.PREFERENCES_ENVIRONMENT, 0);
String message = "";
if (prefsVersion == 0) {
message = context.getString(R.string.message_not_calibrated);
} else if (prefsVersion != context.getResources().getInteger(R.integer.prefs_version)) {
message = context.getString(R.string.message_prefs_not_compatible);
context.getSharedPreferences(SettingsActivity.PREFERENCES, 0).edit().clear().commit();
PreferenceManager.setDefaultValues(context, SettingsActivity.PREFERENCES, 0,
R.xml.settings, true);
}
if (message.length() > 0) {
message += context.getString(R.string.message_recommend_calibration);
Toast.makeText(context, message, Toast.LENGTH_LONG).show();
} else if (service != null && activity != null) {
context.startService(service);
activity.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(activity);
}
}
@Override
public void onReceive(final Context context, final Intent intent) {
new AsyncTask<Void, Void, Void>() {
Intent serviceIntent;
@Override
protected Void doInBackground(Void... params) {
final SharedPreferences userPrefs = context.getSharedPreferences(
SettingsActivity.PREFERENCES, 0);
final float alarmTriggerSensitivity = userPrefs.getFloat(
context.getString(R.string.pref_alarm_trigger_sensitivity),
SettingsActivity.DEFAULT_ALARM_SENSITIVITY);
final int sensorDelay = Integer.parseInt(userPrefs.getString(
context.getString(R.string.pref_sensor_delay), ""
+ SensorManager.SENSOR_DELAY_NORMAL));
final boolean useAlarm = userPrefs.getBoolean(
context.getString(R.string.pref_use_alarm), false);
final int alarmWindow = Integer.parseInt(userPrefs.getString(
context.getString(R.string.pref_alarm_window), "-1"));
final boolean airplaneMode = userPrefs.getBoolean(
context.getString(R.string.pref_airplane_mode), false);
final boolean silentMode = userPrefs.getBoolean(
context.getString(R.string.pref_silent_mode), false);
final boolean forceScreenOn = userPrefs.getBoolean(
context.getString(R.string.pref_force_screen), false);
serviceIntent = new Intent(context, SleepMonitoringService.class);
serviceIntent.putExtra(EXTRA_ALARM, alarmTriggerSensitivity);
serviceIntent.putExtra(EXTRA_SENSOR_DELAY, sensorDelay);
serviceIntent.putExtra(EXTRA_USE_ALARM, useAlarm);
serviceIntent.putExtra(EXTRA_ALARM_WINDOW, alarmWindow);
serviceIntent.putExtra(EXTRA_AIRPLANE_MODE, airplaneMode);
serviceIntent.putExtra(EXTRA_SILENT_MODE, silentMode);
serviceIntent.putExtra(EXTRA_FORCE_SCREEN_ON, forceScreenOn);
return null;
}
@Override
protected void onPostExecute(Void result) {
enforceCalibrationBeforeStartingSleep(context, serviceIntent, new Intent(context,
SleepActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
}.execute();
}
}