package com.asp.radiorake;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.DialogFragment;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CursorAdapter;
import android.widget.DatePicker;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import com.asp.radiorake.utils.DateUtils;
import com.aspillai.R;
import java.io.IOException;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class AddNewScheduledRecordingActivity extends Activity implements View.OnClickListener, DatePickerDialog.OnDateSetListener, TimePickerDialog.OnTimeSetListener {
private long startDateTime = 0;
private long endDateTime = 0;
private static final String TAG = "com.asp.radiorake.AddNewScheduledRecordingActivity";
private boolean editMode = false;
private long scheduledRecordingId;
private int callerId;
private int year;
private int month;
private int day;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_new_scheduled_recording);
Button setStartTimeButton = (Button) findViewById(R.id.add_new_scheduled_recording_set_start_time_button);
Button setEndTimeButton = (Button) findViewById(R.id.add_new_scheduled_recording_set_end_time_button);
Button okButton = (Button) findViewById(R.id.add_new_scheduled_recording_ok_button);
Button cancelButton = (Button) findViewById(R.id.add_new_scheduled_recording_cancel_button);
setStartTimeButton.setOnClickListener(this);
setEndTimeButton.setOnClickListener(this);
okButton.setOnClickListener(this);
cancelButton.setOnClickListener(this);
final DatabaseHelper dbHelper = prepareDatabaseHelper();
Spinner favouriteStationSpinner = (Spinner) findViewById(R.id.add_new_scheduled_recording_favourite_station_spinner);
Cursor favouriteStationCursor = dbHelper.getFavourites();
SimpleCursorAdapter favouriteStationAdapter = new SimpleCursorAdapter(this,
R.layout.add_new_scheduled_recording_favourite_stations,
favouriteStationCursor,
new String[]{DatabaseHelper.FAVOURITES_NAME},
new int[]{R.id.name_entry},
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
favouriteStationAdapter.setDropDownViewResource(R.layout.add_new_scheduled_recording_favourite_stations);
favouriteStationSpinner.setAdapter(favouriteStationAdapter);
Spinner recordingTypeSpinner = (Spinner) findViewById(R.id.add_new_scheduled_recording_recording_type_spinner);
Cursor recordingTypeCursor = dbHelper.getRecordingTypes();
SimpleCursorAdapter recordingTypesAdapter = new SimpleCursorAdapter(this,
R.layout.add_new_scheduled_recording_types,
recordingTypeCursor,
new String[]{DatabaseHelper.RECORDING_TYPES_TYPE},
new int[]{R.id.add_new_scheduled_recording_type_entry},
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
recordingTypesAdapter.setDropDownViewResource(R.layout.add_new_scheduled_recording_types);
recordingTypeSpinner.setAdapter(recordingTypesAdapter);
Bundle bundle = getIntent().getExtras();
if (bundle != null && bundle.containsKey(getString(R.string.edit_scheduled_recording_id))) {
editMode = true;
scheduledRecordingId = bundle.getLong(getString(R.string.edit_scheduled_recording_id));
DatabaseHelper.ScheduledRecording scheduledRecording = dbHelper.GetScheduledRecording(scheduledRecordingId);
favouriteStationSpinner.setSelection(scheduledRecording.station - 1);
recordingTypeSpinner.setSelection(scheduledRecording.type - 1);
startDateTime = scheduledRecording.startDateTime;
((TextView) findViewById(R.id.add_new_scheduled_recording_start_time_text)).setText(DateUtils.getDateTimeString(startDateTime));
endDateTime = scheduledRecording.endDateTime;
((TextView) findViewById(R.id.add_new_scheduled_recording_end_time_text)).setText(DateUtils.getDateTimeString(endDateTime));
}
dbHelper.close();
}
public void onClick(View view) {
Intent listScheduledRecordingsIntent = new Intent(AddNewScheduledRecordingActivity.this, ListScheduledRecordingsActivity.class);
switch (view.getId()) {
case R.id.add_new_scheduled_recording_set_start_time_button:
case R.id.add_new_scheduled_recording_set_end_time_button:
showDatePickerDialog(view);
break;
case R.id.add_new_scheduled_recording_ok_button:
if (this.startDateTime < 1 && this.endDateTime < 1) {
Toast.makeText(this, R.string.add_new_scheduled_recording_start_and_end_time_not_set, Toast.LENGTH_SHORT).show();
break;
}
if (this.startDateTime < 1) {
Toast.makeText(this, R.string.add_new_scheduled_recording_start_time_not_set, Toast.LENGTH_SHORT).show();
break;
}
if (this.endDateTime < 1) {
Toast.makeText(this, R.string.add_new_scheduled_recording_end_time_not_set, Toast.LENGTH_SHORT).show();
break;
}
if (validateStartTimeIsNotAlreadyInUse(this.startDateTime)) {
Toast.makeText(this, R.string.add_new_scheduled_recording_recording_already_scheduled, Toast.LENGTH_SHORT).show();
break;
}
if (editMode) {
updateScheduledRecording();
} else {
addNewScheduledRecording();
}
onBackPressed();
break;
case R.id.add_new_scheduled_recording_cancel_button:
onBackPressed();
break;
}
}
private boolean validateStartTimeIsNotAlreadyInUse(long startDateTime) {
boolean result = false;
DatabaseHelper dbhHelper = prepareDatabaseHelper();
Cursor cursor = dbhHelper.getAllScheduledRecordings();
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
long cursorStartDateTime = cursor.getLong(1);
long cursorEndDateTime = cursor.getLong(2);
if ((startDateTime > cursorStartDateTime && startDateTime < cursorEndDateTime) ||
(startDateTime > cursorStartDateTime && startDateTime < cursorEndDateTime)) {
dbhHelper.close();
return true;
}
cursor.moveToNext();
}
cursor.close();
dbhHelper.close();
return result;
}
private void addNewScheduledRecording() {
// Add to database
DatabaseHelper dbHelper = prepareDatabaseHelper();
Spinner station = (Spinner) findViewById(R.id.add_new_scheduled_recording_favourite_station_spinner);
Spinner type = (Spinner) findViewById(R.id.add_new_scheduled_recording_recording_type_spinner);
long dbId = dbHelper.insertScheduledRecording(startDateTime, endDateTime, station.getSelectedItemPosition() + 1, type.getSelectedItemPosition() + 1);
dbHelper.close();
//Set alarm
AlarmHelper.setAlarm(this, dbId, station.getSelectedItemId(), type.getSelectedItemId(), startDateTime, endDateTime);
}
private void updateScheduledRecording() {
// Add to database
DatabaseHelper dbHelper = prepareDatabaseHelper();
Spinner station = (Spinner) findViewById(R.id.add_new_scheduled_recording_favourite_station_spinner);
Spinner type = (Spinner) findViewById(R.id.add_new_scheduled_recording_recording_type_spinner);
dbHelper.updateScheduledRecording(scheduledRecordingId, startDateTime, endDateTime, station.getSelectedItemPosition() + 1, type.getSelectedItemPosition() + 1);
dbHelper.close();
// Delete old alarm
AlarmHelper.cancelAlarm(this, scheduledRecordingId);
// Set new alarm
AlarmHelper.setAlarm(this, scheduledRecordingId, station.getSelectedItemId(), type.getSelectedItemId(), startDateTime, endDateTime);
}
private DatabaseHelper prepareDatabaseHelper() {
DatabaseHelper dbHelper = new DatabaseHelper(this);
try {
dbHelper.openDataBase();
} catch (IOException e) {
Log.e(TAG, "IOException thrown when trying to access DB", e);
}
return dbHelper;
}
@Override
public void onBackPressed() {
Intent RadioActivityIntent = new Intent(AddNewScheduledRecordingActivity.this, ListScheduledRecordingsActivity.class);
startActivity(RadioActivityIntent);
finish();
}
public void showDatePickerDialog(View v) {
callerId = v.getId();
DialogFragment timeFragment = new TimePickerFragment();
timeFragment.show(getFragmentManager(), "timePicker");
DialogFragment datePickerFragment = new DatePickerFragment();
datePickerFragment.show(getFragmentManager(), "datePicker");
}
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
@Override
public void onTimeSet(TimePicker timePicker, int hour, int minute) {
Calendar date = new GregorianCalendar(this.year, this.month, this.day, hour, minute);
switch (callerId) {
case R.id.add_new_scheduled_recording_set_start_time_button:
startDateTime = date.getTimeInMillis();
((TextView) findViewById(R.id.add_new_scheduled_recording_start_time_text)).setText(DateUtils.getDateTimeString(startDateTime));
break;
case R.id.add_new_scheduled_recording_set_end_time_button:
endDateTime = date.getTimeInMillis();
((TextView) findViewById(R.id.add_new_scheduled_recording_end_time_text)).setText(DateUtils.getDateTimeString(endDateTime));
break;
}
}
}