/*
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Loop Habit Tracker is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.isoron.uhabits.intents;
import android.app.*;
import android.content.*;
import android.net.*;
import android.support.annotation.*;
import org.isoron.uhabits.*;
import org.isoron.uhabits.models.*;
import org.isoron.uhabits.receivers.*;
import javax.inject.*;
import static android.app.PendingIntent.*;
@AppScope
public class PendingIntentFactory
{
private final Context context;
private IntentFactory intentFactory;
@Inject
public PendingIntentFactory(@AppContext Context context,
@NonNull IntentFactory intentFactory)
{
this.context = context;
this.intentFactory = intentFactory;
}
public PendingIntent addCheckmark(@NonNull Habit habit,
@Nullable Long timestamp)
{
Intent checkIntent = new Intent(context, WidgetReceiver.class);
checkIntent.setData(habit.getUri());
checkIntent.setAction(WidgetReceiver.ACTION_ADD_REPETITION);
if (timestamp != null) checkIntent.putExtra("timestamp", timestamp);
return PendingIntent.getBroadcast(context, 1, checkIntent,
FLAG_UPDATE_CURRENT);
}
public PendingIntent dismissNotification(@NonNull Habit habit)
{
Intent deleteIntent = new Intent(context, ReminderReceiver.class);
deleteIntent.setAction(WidgetReceiver.ACTION_DISMISS_REMINDER);
deleteIntent.setData(habit.getUri());
return PendingIntent.getBroadcast(context, 0, deleteIntent,
FLAG_UPDATE_CURRENT);
}
public PendingIntent showHabit(Habit habit)
{
Intent intent = intentFactory.startShowHabitActivity(context, habit);
return android.support.v4.app.TaskStackBuilder
.create(context)
.addNextIntentWithParentStack(intent)
.getPendingIntent(0, FLAG_UPDATE_CURRENT);
}
public PendingIntent showReminder(@NonNull Habit habit,
@Nullable Long reminderTime,
long timestamp)
{
Uri uri = habit.getUri();
Intent intent = new Intent(context, ReminderReceiver.class);
intent.setAction(ReminderReceiver.ACTION_SHOW_REMINDER);
intent.setData(uri);
intent.putExtra("timestamp", timestamp);
intent.putExtra("reminderTime", reminderTime);
int reqCode = ((int) (habit.getId() % Integer.MAX_VALUE)) + 1;
return PendingIntent.getBroadcast(context, reqCode, intent,
FLAG_UPDATE_CURRENT);
}
public PendingIntent snoozeNotification(@NonNull Habit habit)
{
Uri data = habit.getUri();
Intent snoozeIntent = new Intent(context, ReminderReceiver.class);
snoozeIntent.setData(data);
snoozeIntent.setAction(ReminderReceiver.ACTION_SNOOZE_REMINDER);
return PendingIntent.getBroadcast(context, 0, snoozeIntent,
FLAG_UPDATE_CURRENT);
}
public PendingIntent toggleCheckmark(@NonNull Habit habit,
@Nullable Long timestamp)
{
Uri data = habit.getUri();
Intent checkIntent = new Intent(context, WidgetReceiver.class);
checkIntent.setData(data);
checkIntent.setAction(WidgetReceiver.ACTION_TOGGLE_REPETITION);
if (timestamp != null) checkIntent.putExtra("timestamp", timestamp);
return PendingIntent.getBroadcast(context, 2, checkIntent,
FLAG_UPDATE_CURRENT);
}
}