/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.reminders;
import java.util.Date;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.Spinner;
import com.timsu.astrid.R;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.activity.AstridActivity;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.repeats.RepeatControlSet;
import com.todoroo.astrid.service.StatisticsConstants;
import com.todoroo.astrid.service.StatisticsService;
import com.todoroo.astrid.ui.NumberPicker;
/**
* This activity is launched when a user opens up a notification from the
* tray. It launches the appropriate activity based on the passed in parameters.
*
* @author timsu
*
*/
public class NotificationFragment extends TaskListFragment {
// --- constants
/** task id from notification */
public static final String TOKEN_ID = "id"; //$NON-NLS-1$
// --- implementation
private long taskId;
/* (non-Javadoc)
* @see com.todoroo.astrid.activity.TaskListActivity#onActivityCreated(android.os.Bundle)
*/
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
protected void onTaskCompleted(Task item) {
StatisticsService.reportEvent(StatisticsConstants.TASK_COMPLETED_NOTIFICATION);
}
@Override
protected void initializeData() {
displayNotificationPopup();
super.initializeData();
}
/**
* Set up the UI for this activity
*/
private void displayNotificationPopup() {
// hide quick add
getView().findViewById(R.id.taskListFooter).setVisibility(View.GONE);
String title = extras.getString(Notifications.EXTRAS_TEXT);
taskId = extras.getLong(TOKEN_ID);
new ReminderDialog((AstridActivity) getActivity(), taskId, title).show();
}
public static class SnoozeDialog extends FrameLayout implements DialogInterface.OnClickListener {
LinearLayout snoozePicker;
NumberPicker snoozeValue;
Spinner snoozeUnits;
SnoozeCallback snoozeCallback;
public SnoozeDialog(Activity activity, SnoozeCallback callback) {
super(activity);
this.snoozeCallback = callback;
LayoutInflater mInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mInflater.inflate(R.layout.snooze_dialog, this, true);
snoozePicker = (LinearLayout) findViewById(R.id.snoozePicker);
snoozeValue = (NumberPicker) findViewById(R.id.numberPicker);
snoozeUnits = (Spinner) findViewById(R.id.numberUnits);
snoozeValue.setIncrementBy(1);
snoozeValue.setRange(1, 99);
snoozeUnits.setSelection(RepeatControlSet.INTERVAL_HOURS);
snoozeUnits.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
AndroidUtilities.hideSoftInputForViews(getContext(), snoozePicker);
return false;
}
});
}
@Override
public void onClick(DialogInterface dialog, int which) {
long time = DateUtilities.now();
int value = snoozeValue.getCurrent();
switch(snoozeUnits.getSelectedItemPosition()) {
case RepeatControlSet.INTERVAL_DAYS:
time += value * DateUtilities.ONE_DAY;
break;
case RepeatControlSet.INTERVAL_HOURS:
time += value * DateUtilities.ONE_HOUR;
break;
case RepeatControlSet.INTERVAL_MINUTES:
time += value * DateUtilities.ONE_MINUTE;
break;
case RepeatControlSet.INTERVAL_WEEKS:
time += value * 7 * DateUtilities.ONE_DAY;
break;
case RepeatControlSet.INTERVAL_MONTHS:
time = DateUtilities.addCalendarMonthsToUnixtime(time, 1);
break;
case RepeatControlSet.INTERVAL_YEARS:
time = DateUtilities.addCalendarMonthsToUnixtime(time, 12);
break;
}
snoozeCallback.snoozeForTime(time);
}
}
/**
* Snooze and re-trigger this alarm
*/
public static void snooze(Activity activity, OnTimeSetListener onTimeSet, SnoozeCallback snoozeCallback) {
if(Preferences.getBoolean(R.string.p_rmd_snooze_dialog, false)) {
Date now = new Date();
now.setHours(now.getHours() + 1);
int hour = now.getHours();
int minute = now.getMinutes();
TimePickerDialog tpd = new TimePickerDialog(activity, onTimeSet, hour, minute,
DateUtilities.is24HourFormat(activity));
tpd.show();
tpd.setOwnerActivity(activity);
} else {
SnoozeDialog sd = new SnoozeDialog(activity, snoozeCallback);
new AlertDialog.Builder(activity)
.setTitle(R.string.rmd_NoA_snooze)
.setView(sd)
.setPositiveButton(android.R.string.ok, sd)
.setNegativeButton(android.R.string.cancel, null)
.show().setOwnerActivity(activity);
}
}
}