Preference so that smart reminder confirmations can be turned on and off

pull/14/head
Sam Bosley 14 years ago
parent 818487e693
commit 52eff1ff66

@ -20,7 +20,7 @@ import com.todoroo.astrid.service.StatisticsService;
public class ReminderDialog { public class ReminderDialog {
public static Dialog createReminderDialog(final AstridActivity activity, final long taskId, String title) { public static void showReminderDialog(final AstridActivity activity, final long taskId, String title) {
final Dialog d = new Dialog(activity, R.style.ReminderDialog); final Dialog d = new Dialog(activity, R.style.ReminderDialog);
final SnoozeCallback dialogSnooze = new SnoozeCallback() { final SnoozeCallback dialogSnooze = new SnoozeCallback() {
@Override @Override
@ -83,7 +83,8 @@ public class ReminderDialog {
((TextView) d.findViewById(R.id.reminder_message)).setText( ((TextView) d.findViewById(R.id.reminder_message)).setText(
Notifications.getRandomReminder(activity.getResources().getStringArray(R.array.reminder_responses))); Notifications.getRandomReminder(activity.getResources().getStringArray(R.array.reminder_responses)));
return d; d.setOwnerActivity(activity);
d.show();
} }
} }

@ -34,6 +34,15 @@
<include layout="@layout/astrid_speech_bubble"/> <include layout="@layout/astrid_speech_bubble"/>
<CheckBox
android:id="@+id/reminders_should_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:layout_marginBottom="10dip"
android:text="@string/TLA_quickadd_confirm_hide_helpers"
android:visibility="gone"/>
<Button <Button
android:id="@+id/reminder_edit" android:id="@+id/reminder_edit"
android:layout_width="fill_parent" android:layout_width="fill_parent"

@ -196,6 +196,8 @@
<item>36</item> <item>36</item>
<item>48</item> <item>48</item>
</string-array> </string-array>
<string name="p_showSmartConfirmation_key">showSmartConfirmation</string>
<!-- ========================================================= DEFAULTS == --> <!-- ========================================================= DEFAULTS == -->

@ -158,6 +158,8 @@
<string name="TLA_quickadd_confirm_speech_bubble_date">for %s</string> <string name="TLA_quickadd_confirm_speech_bubble_date">for %s</string>
<string name="TLA_quickadd_confirm_hide_helpers">Don\'t display future confirmations</string>
<string-array name="TLA_priority_strings"> <string-array name="TLA_priority_strings">
<item>highest priority</item> <item>highest priority</item>
<item>high priority</item> <item>high priority</item>
@ -447,6 +449,10 @@
<!-- Preference: Task List Font Size Title --> <!-- Preference: Task List Font Size Title -->
<string name="EPr_fontSize_title">Task List Size</string> <string name="EPr_fontSize_title">Task List Size</string>
<!-- Preference: Show confirmation for smart reminders -->
<string name="EPr_showSmartConfirmation_title">Show confirmation for smart reminders</string>
<!-- Preference: Task List Font Size Description --> <!-- Preference: Task List Font Size Description -->
<string name="EPr_fontSize_desc">Font size on the main listing page</string> <string name="EPr_fontSize_desc">Font size on the main listing page</string>

@ -21,6 +21,11 @@
android:key="@string/p_showNotes" android:key="@string/p_showNotes"
android:title="@string/EPr_showNotes_title" android:title="@string/EPr_showNotes_title"
android:defaultValue="false" /> android:defaultValue="false" />
<com.todoroo.astrid.ui.MultilineCheckboxPreference
android:key="@string/p_showSmartConfirmation_key"
android:title="@string/EPr_showSmartConfirmation_title"
android:defaultValue="true"/>
<com.todoroo.astrid.ui.MultilineListPreference <com.todoroo.astrid.ui.MultilineListPreference
android:key="@string/p_theme" android:key="@string/p_theme"
@ -29,6 +34,11 @@
android:title="@string/EPr_theme_title" /> android:title="@string/EPr_theme_title" />
</PreferenceCategory> </PreferenceCategory>
<com.todoroo.astrid.ui.MultilineCheckboxPreference
android:key="@string/p_statistics"
android:title="@string/EPr_statistics_title"
android:defaultValue="true" />
<PreferenceCategory <PreferenceCategory
android:title="@string/EPr_powerpack_header"> android:title="@string/EPr_powerpack_header">
<PreferenceScreen <PreferenceScreen
@ -51,9 +61,5 @@
</PreferenceScreen> </PreferenceScreen>
</PreferenceCategory> </PreferenceCategory>
<com.todoroo.astrid.ui.MultilineCheckboxPreference
android:key="@string/p_statistics"
android:title="@string/EPr_statistics_title"
android:defaultValue="true" />
</PreferenceScreen> </PreferenceScreen>

@ -1,6 +1,5 @@
package com.todoroo.astrid.activity; package com.todoroo.astrid.activity;
import android.app.Dialog;
import android.app.PendingIntent.CanceledException; import android.app.PendingIntent.CanceledException;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
@ -285,9 +284,7 @@ public class AstridActivity extends FragmentActivity
long taskId = customIntent.getLongExtra(NotificationFragment.TOKEN_ID, 0); long taskId = customIntent.getLongExtra(NotificationFragment.TOKEN_ID, 0);
if (taskId > 0) { if (taskId > 0) {
String text = intent.getStringExtra(Notifications.EXTRAS_TEXT); String text = intent.getStringExtra(Notifications.EXTRAS_TEXT);
Dialog d = ReminderDialog.createReminderDialog(AstridActivity.this, taskId, text); ReminderDialog.showReminderDialog(AstridActivity.this, taskId, text);
d.setOwnerActivity(AstridActivity.this);
d.show();
} }
// Remove broadcast // Remove broadcast
@ -305,10 +302,7 @@ public class AstridActivity extends FragmentActivity
long newDueDate = intent.getLongExtra(AstridApiConstants.EXTRAS_NEW_DUE_DATE, 0); long newDueDate = intent.getLongExtra(AstridApiConstants.EXTRAS_NEW_DUE_DATE, 0);
Task task = PluginServices.getTaskService().fetchById(taskId, DateChangedAlerts.REPEAT_RESCHEDULED_PROPERTIES); Task task = PluginServices.getTaskService().fetchById(taskId, DateChangedAlerts.REPEAT_RESCHEDULED_PROPERTIES);
Dialog d = DateChangedAlerts.createRepeatTaskRescheduledDialog(AstridActivity.this, task, oldDueDate, newDueDate); DateChangedAlerts.showRepeatTaskRescheduledDialog(AstridActivity.this, task, oldDueDate, newDueDate);
d.setOwnerActivity(AstridActivity.this);
d.show();
// Do some stuff
} }
} }
} }

@ -13,7 +13,6 @@ import org.weloveastrid.rmilk.MilkUtilities;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.Dialog;
import android.app.PendingIntent.CanceledException; import android.app.PendingIntent.CanceledException;
import android.app.SearchManager; import android.app.SearchManager;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
@ -1190,8 +1189,7 @@ public class TaskListFragment extends ListFragment implements OnScrollListener,
} }
private static void showAlertForMarkupTask(AstridActivity activity, Task task, String originalText) { private static void showAlertForMarkupTask(AstridActivity activity, Task task, String originalText) {
Dialog d = DateChangedAlerts.createQuickAddMarkupDialog(activity, task, originalText); DateChangedAlerts.showQuickAddMarkupDialog(activity, task, originalText);
d.show();
} }
@Override @Override

@ -11,6 +11,9 @@ import android.text.TextUtils;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.widget.Button; import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.TextView; import android.widget.TextView;
import com.google.ical.values.Frequency; import com.google.ical.values.Frequency;
@ -18,6 +21,7 @@ import com.google.ical.values.RRule;
import com.timsu.astrid.R; import com.timsu.astrid.R;
import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.activity.AstridActivity; import com.todoroo.astrid.activity.AstridActivity;
import com.todoroo.astrid.core.PluginServices; import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
@ -30,7 +34,20 @@ import com.todoroo.astrid.utility.Flags;
*/ */
public class DateChangedAlerts { public class DateChangedAlerts {
public static Dialog createQuickAddMarkupDialog(final AstridActivity activity, Task task, String originalText) { /** Preference key for how many of these helper dialogs we've shown */
public static final String PREF_NUM_HELPERS_SHOWN = "pref_num_date_helpers"; //$NON-NLS-1$
/** Preference key for whether or not we should show such dialogs */
public static final int PREF_SHOW_HELPERS = R.string.p_showSmartConfirmation_key;
/** Start showing the option to hide future notifs after this many confirmation dialogs */
public static final int HIDE_CHECKBOX_AFTER_SHOWS = 3;
public static void showQuickAddMarkupDialog(final AstridActivity activity, Task task, String originalText) {
if (!Preferences.getBoolean(PREF_SHOW_HELPERS, true))
return;
final Dialog d = new Dialog(activity, R.style.ReminderDialog); final Dialog d = new Dialog(activity, R.style.ReminderDialog);
final long taskId = task.getId(); final long taskId = task.getId();
d.setContentView(R.layout.astrid_reminder_view); d.setContentView(R.layout.astrid_reminder_view);
@ -43,18 +60,9 @@ public class DateChangedAlerts {
((TextView) d.findViewById(R.id.reminder_message)).setText(speechBubbleText, TextView.BufferType.SPANNABLE); ((TextView) d.findViewById(R.id.reminder_message)).setText(speechBubbleText, TextView.BufferType.SPANNABLE);
d.findViewById(R.id.reminder_complete).setOnClickListener(new OnClickListener() { setupOkAndDismissButtons(d);
@Override setupHideCheckbox(d);
public void onClick(View v) {
d.dismiss();
}
});
d.findViewById(R.id.dismiss).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
d.dismiss();
}
});
d.findViewById(R.id.reminder_edit).setOnClickListener(new OnClickListener() { d.findViewById(R.id.reminder_edit).setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
@ -63,7 +71,8 @@ public class DateChangedAlerts {
} }
}); });
return d; d.setOwnerActivity(activity);
d.show();
} }
@ -75,7 +84,10 @@ public class DateChangedAlerts {
Task.HIDE_UNTIL Task.HIDE_UNTIL
}; };
public static Dialog createRepeatTaskRescheduledDialog(final AstridActivity activity, final Task task, final long oldDueDate, final long newDueDate) { public static void showRepeatTaskRescheduledDialog(final AstridActivity activity, final Task task, final long oldDueDate, final long newDueDate) {
if (!Preferences.getBoolean(PREF_SHOW_HELPERS, true))
return;
final Dialog d = new Dialog(activity, R.style.ReminderDialog); final Dialog d = new Dialog(activity, R.style.ReminderDialog);
d.setContentView(R.layout.astrid_reminder_view); d.setContentView(R.layout.astrid_reminder_view);
@ -90,35 +102,56 @@ public class DateChangedAlerts {
((TextView) d.findViewById(R.id.reminder_message)).setText(speechBubbleText); ((TextView) d.findViewById(R.id.reminder_message)).setText(speechBubbleText);
d.findViewById(R.id.reminder_complete).setOnClickListener(new OnClickListener() { setupOkAndDismissButtons(d);
setupHideCheckbox(d);
d.findViewById(R.id.reminder_edit).setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
d.dismiss(); d.dismiss();
task.setValue(Task.DUE_DATE, oldDueDate);
long hideUntil = task.getValue(Task.HIDE_UNTIL);
if (hideUntil > 0)
task.setValue(Task.HIDE_UNTIL, hideUntil - (newDueDate - oldDueDate));
PluginServices.getTaskService().save(task);
Flags.set(Flags.REFRESH);
} }
}); });
d.findViewById(R.id.dismiss).setOnClickListener(new OnClickListener() {
d.setOwnerActivity(activity);
d.show();
}
private static void setupOkAndDismissButtons(final Dialog d) {
d.findViewById(R.id.reminder_complete).setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
d.dismiss(); d.dismiss();
} }
}); });
d.findViewById(R.id.reminder_edit).setOnClickListener(new OnClickListener() { d.findViewById(R.id.dismiss).setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
d.dismiss(); d.dismiss();
task.setValue(Task.DUE_DATE, oldDueDate);
long hideUntil = task.getValue(Task.HIDE_UNTIL);
if (hideUntil > 0)
task.setValue(Task.HIDE_UNTIL, hideUntil - (newDueDate - oldDueDate));
PluginServices.getTaskService().save(task);
Flags.set(Flags.REFRESH);
} }
}); });
return d;
} }
private static void setupHideCheckbox(final Dialog d) {
int numShows = Preferences.getInt(PREF_NUM_HELPERS_SHOWN, 0);
numShows++;
if (numShows >= HIDE_CHECKBOX_AFTER_SHOWS) {
CheckBox checkbox = (CheckBox) d.findViewById(R.id.reminders_should_show);
checkbox.setVisibility(View.VISIBLE);
checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Preferences.setBoolean(PREF_SHOW_HELPERS, !isChecked);
}
});
}
Preferences.setInt(PREF_NUM_HELPERS_SHOWN, numShows);
}
@SuppressWarnings("nls") @SuppressWarnings("nls")

Loading…
Cancel
Save