Added a ring 5 times setting to Astrid, and now a notification if your volume is muted and you launch astrid

pull/14/head
Tim Su 14 years ago
parent 91b84d2a53
commit 2ddc0429f2

@ -149,7 +149,10 @@ public final class Task extends AbstractModel {
public static final int NOTIFY_AFTER_DEADLINE = 1 << 2;
/** reminder mode non-stop */
public static final int NOTIFY_NONSTOP = 1 << 3;
public static final int NOTIFY_MODE_NONSTOP = 1 << 3;
/** reminder mode five times (exclusive with non-stop) */
public static final int NOTIFY_MODE_FIVE = 1 << 4;
// --- importance settings (note: importance > 3 are supported via plugin)

@ -13,13 +13,13 @@ import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.activity.ShortcutActivity;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.reminders.Notifications;
import com.todoroo.astrid.utility.Constants;
import com.todoroo.andlib.utility.Preferences;
/**
* Receiver is activated when Locale conditions are triggered
@ -91,7 +91,7 @@ public class LocaleReceiver extends BroadcastReceiver {
Intent notifyIntent = ShortcutActivity.createIntent(filter);
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Notifications.showNotification(Constants.NOTIFICATION_LOCALE,
notifyIntent, 0, notificationTitle, reminder, false);
notifyIntent, 0, notificationTitle, reminder, 1);
Preferences.setLong(preferenceKey, DateUtilities.now());
} finally {

@ -145,7 +145,9 @@ public class Notifications extends BroadcastReceiver {
// read properties
String taskTitle = task.getValue(Task.TITLE);
boolean nonstopMode = task.getFlag(Task.REMINDER_FLAGS, Task.NOTIFY_NONSTOP);
boolean nonstopMode = task.getFlag(Task.REMINDER_FLAGS, Task.NOTIFY_MODE_NONSTOP);
boolean ringFiveMode = task.getFlag(Task.REMINDER_FLAGS, Task.NOTIFY_MODE_FIVE);
int ringTimes = nonstopMode ? -1 : (ringFiveMode ? 5 : 1);
// update last reminder time
task.setValue(Task.REMINDER_LAST, DateUtilities.now());
@ -160,16 +162,17 @@ public class Notifications extends BroadcastReceiver {
notifyIntent.putExtra(NotificationActivity.TOKEN_ID, id);
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
showNotification((int)id, notifyIntent, type, title, text, nonstopMode);
showNotification((int)id, notifyIntent, type, title, text, ringTimes);
return true;
}
/**
* Shows an Astrid notification. Pulls in ring tone and quiet hour settings
* from preferences. You can make it say anything you like.
* @param ringTimes number of times to ring (-1 = nonstop)
*/
public static void showNotification(int notificationId, Intent intent, int type, String title,
String text, boolean nonstopMode) {
String text, int ringTimes) {
Context context = ContextManager.getContext();
if(notificationManager == null)
notificationManager = new AndroidNotificationManager(context);
@ -178,7 +181,7 @@ public class Notifications extends BroadcastReceiver {
boolean quietHours = false;
int quietHoursStart = Preferences.getIntegerFromString(R.string.p_rmd_quietStart, -1);
int quietHoursEnd = Preferences.getIntegerFromString(R.string.p_rmd_quietEnd, -1);
if(quietHoursStart != -1 && quietHoursEnd != -1 && !nonstopMode) {
if(quietHoursStart != -1 && quietHoursEnd != -1 && ringTimes >= 0) {
int hour = new Date().getHours();
if(quietHoursStart <= quietHoursEnd) {
if(hour >= quietHoursStart && hour < quietHoursEnd)
@ -235,7 +238,7 @@ public class Notifications extends BroadcastReceiver {
// if non-stop mode is activated, set up the flags for insistent
// notification, and increase the volume to full volume, so the user
// will actually pay attention to the alarm
if(nonstopMode && (type != ReminderService.TYPE_RANDOM)) {
if(ringTimes < 0 && (type != ReminderService.TYPE_RANDOM)) {
notification.flags |= Notification.FLAG_INSISTENT;
notification.audioStreamType = AudioManager.STREAM_ALARM;
audioManager.setStreamVolume(AudioManager.STREAM_ALARM,
@ -243,6 +246,9 @@ public class Notifications extends BroadcastReceiver {
voiceReminder = false;
} else {
notification.audioStreamType = AudioManager.STREAM_NOTIFICATION;
if(ringTimes > 3)
audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION,
audioManager.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION), 0);
}
// quiet hours = no sound
@ -283,9 +289,13 @@ public class Notifications extends BroadcastReceiver {
if(Constants.DEBUG)
Log.w("Astrid", "Logging notification: " + text); //$NON-NLS-1$ //$NON-NLS-2$
notificationManager.notify(notificationId, notification);
for(int i = 0; i < Math.max(ringTimes, 1); i++) {
notificationManager.notify(notificationId, notification);
AndroidUtilities.sleepDeep(500);
}
if (voiceReminder) {
AndroidUtilities.sleepDeep(1000);
AndroidUtilities.sleepDeep(2000);
for(int i = 0; i < 50; i++) {
AndroidUtilities.sleepDeep(500);
if(audioManager.getMode() != AudioManager.MODE_RINGTONE)

@ -90,6 +90,9 @@
<!-- Quick Add Edit Box Hint-->
<string name="TLA_quick_add_hint">Add to this list...</string>
<!-- Notification Volumne notification-->
<string name="TLA_notification_volume_low">Notifications are muted. You won\'t be able to hear Astrid!</string>
<!-- ====================================================== TaskAdapter == -->
<!-- Format string to indicate task is hidden (%s => task name) -->

@ -21,11 +21,14 @@
<!-- Task Edit: Reminder alarm clock label -->
<string name="TEA_reminder_alarm_label">Ring/Vibrate Type:</string>
<!-- Task Edit: Reminder alarm clock toggle: off -->
<string name="TEA_reminder_alarm_off">Ring Once</string>
<!-- Task Edit: Reminder mode: ring once -->
<string name="TEA_reminder_mode_once">Ring Once</string>
<!-- Task Edit: Reminder alarm clock toggle: on -->
<string name="TEA_reminder_alarm_on">Ring Until I Dismiss Alarm</string>
<!-- Task Edit: Reminder mode: ring five times -->
<string name="TEA_reminder_mode_five">Ring Five Times</string>
<!-- Task Edit: Reminder mode: ring nonstop -->
<string name="TEA_reminder_mode_nonstop">Ring Until I Dismiss Alarm</string>
<string-array name="TEA_reminder_random">
<!-- random reminder choices for task edit page. -->

@ -304,7 +304,7 @@ public final class TaskEditActivity extends TabActivity {
});
}
controls.add( new ReminderControlSet(R.id.reminder_due,
controls.add(new ReminderControlSet(R.id.reminder_due,
R.id.reminder_overdue, R.id.reminder_alarm));
controls.add(new RandomReminderControlSet(R.id.reminder_random,
R.id.reminder_random_interval));
@ -1293,8 +1293,9 @@ public final class TaskEditActivity extends TabActivity {
mode = (Spinner)findViewById(modeId);
String[] list = new String[] {
getString(R.string.TEA_reminder_alarm_off),
getString(R.string.TEA_reminder_alarm_on),
getString(R.string.TEA_reminder_mode_once),
getString(R.string.TEA_reminder_mode_five),
getString(R.string.TEA_reminder_mode_nonstop),
};
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(
TaskEditActivity.this, android.R.layout.simple_spinner_item, list);
@ -1311,8 +1312,13 @@ public final class TaskEditActivity extends TabActivity {
during.setChecked((flags & Task.NOTIFY_AT_DEADLINE) > 0);
after.setChecked((flags &
Task.NOTIFY_AFTER_DEADLINE) > 0);
mode.setSelection((flags &
Task.NOTIFY_NONSTOP) > 0 ? 1 : 0);
if((flags & Task.NOTIFY_MODE_NONSTOP) > 0)
mode.setSelection(2);
else if((flags & Task.NOTIFY_MODE_FIVE) > 0)
mode.setSelection(1);
else
mode.setSelection(0);
}
public int getValue() {
@ -1321,8 +1327,13 @@ public final class TaskEditActivity extends TabActivity {
value |= Task.NOTIFY_AT_DEADLINE;
if(after.isChecked())
value |= Task.NOTIFY_AFTER_DEADLINE;
if(mode.getSelectedItemPosition() == 1)
value |= Task.NOTIFY_NONSTOP;
value &= ~(Task.NOTIFY_MODE_FIVE | Task.NOTIFY_MODE_NONSTOP);
if(mode.getSelectedItemPosition() == 2)
value |= Task.NOTIFY_MODE_NONSTOP;
else if(mode.getSelectedItemPosition() == 1)
value |= Task.NOTIFY_MODE_FIVE;
return value;
}

@ -6,6 +6,7 @@ import java.util.List;
import org.weloveastrid.rmilk.MilkUtilities;
import android.Manifest;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
@ -16,7 +17,9 @@ import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.media.AudioManager;
import android.util.Log;
import android.widget.Toast;
import com.timsu.astrid.R;
import com.todoroo.andlib.service.Autowired;
@ -81,6 +84,13 @@ public class StartupService {
if(hasStartedUp)
return;
if(context instanceof Activity) {
AudioManager audioManager = (AudioManager)context.getSystemService(
Context.AUDIO_SERVICE);
if(audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) == 0)
Toast.makeText(context, R.string.TLA_notification_volume_low, Toast.LENGTH_LONG).show();
}
// set uncaught exception handler
Thread.setDefaultUncaughtExceptionHandler(new TodorooUncaughtExceptionHandler());

Loading…
Cancel
Save