package com.neuron.trafikanten.tasks;
import java.util.ArrayList;
import java.util.Calendar;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.Dialog;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TimePicker;
import com.google.android.AnalyticsUtils;
import com.neuron.trafikanten.dataSets.NotificationData;
import com.neuron.trafikanten.dataSets.RealtimeData;
import com.neuron.trafikanten.dataSets.RouteDeviData;
import com.neuron.trafikanten.dataSets.RouteProposal;
import com.neuron.trafikanten.dataSets.StationData;
import com.neuron.trafikanten.notification.NotificationIntent;
public class NotificationTask implements GenericTask {
//private static final String TAG = "Trafikanten-NotificationTask";
private static int notificationCode = 0;
private Activity activity;
private Dialog dialog;
public void init(Activity activity)
{
this.activity = activity;
AnalyticsUtils.getInstance(activity).trackPageView("/task/notification");
}
public NotificationTask(Activity activity, RealtimeData realtimeData, StationData station, String with, long timeDifference) {
init(activity);
AnalyticsUtils.getInstance(activity).trackEvent("Notification", "Realtime", null, 0);
showDialog(realtimeData.expectedDeparture + timeDifference, new NotificationData(station, realtimeData, 0, with));
}
public NotificationTask(Activity activity, ArrayList<RouteProposal> routeProposalList, int proposalPosition, RouteDeviData deviList, long departure, String with) {
init(activity);
AnalyticsUtils.getInstance(activity).trackEvent("Notification", "Route", null, 0);
showDialog(departure, new NotificationData(routeProposalList, proposalPosition, deviList, departure, 0, with));
}
private void showDialog(final long departure, final NotificationData notificationData) {
dialog = new TimePickerDialog(activity, new OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
/*
* Convert hours/minutes to current date with set presets
*/
final Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(departure);
calendar.add(Calendar.HOUR_OF_DAY, -hourOfDay);
calendar.add(Calendar.MINUTE, -minute);
/*
* Get the data info, construct bundle, and send the data
*/
final Bundle bundle = new Bundle();
notificationData.notifyTime = calendar.getTimeInMillis() ;
bundle.putParcelable(NotificationData.PARCELABLE, notificationData);
// Schedule the alarm
final Intent intent = new Intent(activity, NotificationIntent.class);
intent.putExtras(bundle);
//Log.i(TAG,"Creating notification at " + HelperFunctions.renderAccurate(notificationData.notifyTime));
final PendingIntent notificationIntent = PendingIntent.getBroadcast(activity, notificationCode++, intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarm = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, notificationData.notifyTime, notificationIntent);
}
}, 0, 10, true);
dialog.show();
}
@Override
public void stop() {
dialog.dismiss();
}
}