package com.androsz.electricsleepbeta.app; import android.app.AlertDialog; import android.app.NotificationManager; import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.RatingBar; import android.widget.RatingBar.OnRatingBarChangeListener; import android.widget.Toast; import com.androsz.electricsleepbeta.R; import com.androsz.electricsleepbeta.alarmclock.Alarms; import com.androsz.electricsleepbeta.content.SaveSleepReceiver; public class SaveSleepActivity extends HostActivity implements OnRatingBarChangeListener { public static final String SAVE_SLEEP = "com.androsz.electricsleepbeta.SAVE_SLEEP"; EditText noteEdit; ProgressDialog progress; private float rating = Float.NaN; private final BroadcastReceiver saveCompletedReceiver = new BroadcastReceiver() { @Override public void onReceive(final Context context, final Intent intent) { new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { // makes sure the next alert is set (fixes a bug with // snoozing // disabling repeated alarms) Alarms.setNextAlert(context); final Intent reviewSleepIntent = new Intent(context, ReviewSleepActivity.class); if (!intent.getBooleanExtra(SaveSleepReceiver.EXTRA_SUCCESS, false)) { String why = getString(R.string.could_not_save_sleep) + " "; final String ioException = intent .getStringExtra(SaveSleepReceiver.EXTRA_IO_EXCEPTION); if (ioException != null) { why += ioException; } else { why += getString(R.string.sleep_too_brief_to_analyze); } return why; } final Uri uri = Uri.parse(intent.getStringExtra(SaveSleepReceiver.EXTRA_URI)); if (uri != null) { reviewSleepIntent.setData(uri); } reviewSleepIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(reviewSleepIntent); return null; } @Override protected void onPostExecute(String result) { if (result != null) { trackEvent(result, 0); Toast.makeText(context, result, Toast.LENGTH_LONG).show(); } if (progress != null) { progress.dismiss(); } finish(); } }.execute(); } }; @Override protected int getContentAreaLayoutId() { return R.layout.activity_save_sleep; } @Override // @SuppressWarnings("unchecked") protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); ((RatingBar) findViewById(R.id.save_sleep_rating_bar)).setOnRatingBarChangeListener(this); noteEdit = (EditText) findViewById(R.id.save_sleep_note_edit); getSupportActionBar().setDisplayHomeAsUpEnabled(false); } public void onDiscardClick(final View v) { final AlertDialog.Builder dialog = new AlertDialog.Builder(this) .setMessage(getString(R.string.delete_sleep_record)) .setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() { @Override public void onClick(final DialogInterface dialog, final int id) { final NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancel(getIntent().getExtras().getInt( SleepMonitoringService.EXTRA_ID)); // new Thread(new Runnable(){ // @Override // public void run() { // deleteFile(SleepMonitoringService.SLEEP_DATA); // }}){}.run(); finish(); } }) .setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() { @Override public void onClick(final DialogInterface dialog, final int id) { dialog.cancel(); } }); dialog.show(); } @Override public void onPause() { super.onPause(); unregisterReceiver(saveCompletedReceiver); } @Override public void onRatingChanged(final RatingBar ratingBar, final float rating, final boolean fromUser) { if (fromUser) { this.rating = rating; } } @Override protected void onRestoreInstanceState(final Bundle savedState) { super.onRestoreInstanceState(savedState); rating = savedState.getFloat(SaveSleepReceiver.EXTRA_RATING); } @Override public void onResume() { super.onResume(); registerReceiver(saveCompletedReceiver, new IntentFilter( SaveSleepReceiver.SAVE_SLEEP_COMPLETED)); } public void onSaveClick(final View v) { if (Float.isNaN(rating)) { Toast.makeText(this, R.string.error_not_rated, Toast.LENGTH_SHORT).show(); return; } final Intent saveIntent = new Intent(SaveSleepActivity.SAVE_SLEEP); saveIntent.putExtra(SaveSleepReceiver.EXTRA_NOTE, noteEdit.getText().toString()); saveIntent.putExtra(SaveSleepReceiver.EXTRA_RATING, (int) rating); saveIntent.putExtras(getIntent().getExtras()); // add the sleep history // data v.setEnabled(false); progress = new ProgressDialog(this); progress.setMessage(getString(R.string.saving_sleep)); progress.show(); sendBroadcast(saveIntent); final NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancel(getIntent().getExtras().getInt(SleepMonitoringService.EXTRA_ID)); } @Override protected void onSaveInstanceState(final Bundle outState) { super.onSaveInstanceState(outState); outState.putFloat(SaveSleepReceiver.EXTRA_RATING, rating); } }