package com.asp.radiorake;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.asp.radiorake.recording.RecordingBroadcastReceiver;
import com.aspillai.R;
import java.io.IOException;
public class AlarmHelper {
private static final String TAG = "com.asp.radiorake.AlarmHelper";
// Table not zero indexed, so starts at 1
public static final int ONE_OFF_SCHEDULED_RECORDING = 1;
public static final int DAILY_SCHEDULED_RECORDING = 2;
public static final int WEEKLY_SCHEDULED_RECORDING = 3;
public static void setAlarm(Context context, long databaseId, long stationId, long typeId, long startDateTime, long endDateTime) {
DatabaseHelper databaseHelper = prepareDatabaseHelper(context);
RadioDetails radioDetails = databaseHelper.getRadioDetail(stationId);
databaseHelper.close();
radioDetails.setRecordingType(typeId);
radioDetails.setDuration(endDateTime - startDateTime);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, RecordingBroadcastReceiver.class);
intent.setType(String.valueOf(databaseId));
intent.putExtra(context.getString(R.string.timed_recorder_service_database_id_key), databaseId);
intent.putExtra(context.getString(R.string.radio_details_name_key), radioDetails.getStationName());
intent.putExtra(context.getString(R.string.radio_details_stream_url_key), radioDetails.getStreamUrl());
intent.putExtra(context.getString(R.string.radio_details_playlist_url_key), radioDetails.getPlaylistUrl());
intent.putExtra(context.getString(R.string.timed_recorder_service_recording_duration), (endDateTime - startDateTime));
intent.putExtra(context.getString(R.string.timed_recorder_service_operation_key), typeId);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
switch ((int) typeId) {
case ONE_OFF_SCHEDULED_RECORDING:
alarmManager.set(AlarmManager.RTC_WAKEUP, startDateTime, pendingIntent);
break;
case DAILY_SCHEDULED_RECORDING:
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, startDateTime, AlarmManager.INTERVAL_DAY, pendingIntent);
break;
case WEEKLY_SCHEDULED_RECORDING:
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, startDateTime, AlarmManager.INTERVAL_DAY * 7, pendingIntent);
break;
}
}
public static void cancelAlarm(Context context, long databaseId) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, RecordingBroadcastReceiver.class);
intent.setType(String.valueOf(databaseId));
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.cancel(pendingIntent);
Log.d(TAG, "Cancelled alarm id " + databaseId);
}
private static DatabaseHelper prepareDatabaseHelper(Context context) {
DatabaseHelper dbHelper = new DatabaseHelper(context);
try {
dbHelper.openDataBase();
} catch (IOException e) {
Log.e(TAG, "IOException thrown when trying to access DB", e);
}
return dbHelper;
}
}