diff --git a/res/layout/notification_dialog.xml b/res/layout/notification_dialog.xml
new file mode 100644
index 000000000..68c8ae4bb
--- /dev/null
+++ b/res/layout/notification_dialog.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ce1abaff8..8259fc052 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -371,10 +371,11 @@ Some things you may not know about Astrid:\n
Thanks for using Astrid!\n
+
-It looks like you are using a task killer application! Please add Astrid to
-the exclusion list for your task killer. Otherwise, if Astrid gets killed,
-it will not let you know when your tasks are due.\n
+It looks like you are using an app that can kill processes (%s)! If you can,
+add Astrid to the exclusion list so it doesn\'t get killed. Otherwise,
+Astrid might not let you know when your tasks are due.\n
I Won\'t Kill Astrid!
diff --git a/src/com/timsu/astrid/activities/TaskListSubActivity.java b/src/com/timsu/astrid/activities/TaskListSubActivity.java
index bc371b119..ed05042e0 100644
--- a/src/com/timsu/astrid/activities/TaskListSubActivity.java
+++ b/src/com/timsu/astrid/activities/TaskListSubActivity.java
@@ -29,6 +29,7 @@ import java.util.List;
import java.util.Random;
import android.app.AlertDialog;
+import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
@@ -41,17 +42,21 @@ import android.os.Handler;
import android.util.Log;
import android.view.ContextMenu;
import android.view.KeyEvent;
+import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnClickListener;
import android.view.View.OnCreateContextMenuListener;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
+import android.widget.AdapterView.OnItemClickListener;
import com.flurry.android.FlurryAgent;
import com.timsu.astrid.R;
@@ -453,31 +458,58 @@ public class TaskListSubActivity extends SubActivity {
r.getString(R.string.notify_no)
};
- new AlertDialog.Builder(getParent()).setTitle(
- task.getName()).setIcon(
- android.R.drawable.ic_dialog_info)
- .setSingleChoiceItems(strings, 0, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- switch(which) {
- case 0:
- break;
- case 1:
- task.setProgressPercentage(TaskModelForList.COMPLETE_PERCENTAGE);
- getTaskController().saveTask(task, false);
- break;
- case 2:
- snoozeAlert(task, repeatInterval, flags);
- break;
- case 3:
- TaskList.shouldCloseInstance = true;
- closeActivity();
- break;
- }
- dialog.dismiss();
+ String response;
+ if (Preferences.shouldShowNags(getParent())) {
+ String[] responses = r.getStringArray(R.array.reminder_responses);
+ response = responses[new Random().nextInt(responses.length)];
+ } else
+ response = r.getString(R.string.taskList_nonag_reminder);
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(getParent());
+ final AlertDialog dialog;
+
+ LayoutInflater inflater = (LayoutInflater) getParent().getSystemService(
+ Context.LAYOUT_INFLATER_SERVICE);
+ View dialogView = inflater.inflate(R.layout.notification_dialog, null);
+
+ builder.setTitle(task.getName());
+ builder.setIcon(android.R.drawable.ic_dialog_info);
+ builder.setCancelable(true);
+ builder.setView(dialogView);
+ dialog = builder.create();
+
+ TextView message = (TextView)dialogView.findViewById(R.id.message);
+ message.setText(response);
+ message.setTextSize(18);
+
+ ListView items = (ListView)dialogView.findViewById(R.id.items);
+ items.setAdapter(new ArrayAdapter(getParent(),
+ android.R.layout.simple_list_item_checked, strings));
+ items.setFocusableInTouchMode(true);
+ items.setOnItemClickListener(new OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> arg0, View arg1, int which,
+ long id) {
+ switch(which) {
+ case 0:
+ break;
+ case 1:
+ task.setProgressPercentage(TaskModelForList.COMPLETE_PERCENTAGE);
+ getTaskController().saveTask(task, false);
+ break;
+ case 2:
+ snoozeAlert(task, repeatInterval, flags);
+ break;
+ case 3:
+ TaskList.shouldCloseInstance = true;
+ closeActivity();
+ break;
}
- })
- .show();
+ dialog.dismiss();
+ }
+ });
+
+ dialog.show();
}
/**
diff --git a/src/com/timsu/astrid/utilities/Notifications.java b/src/com/timsu/astrid/utilities/Notifications.java
index c893acafc..8fd112e63 100644
--- a/src/com/timsu/astrid/utilities/Notifications.java
+++ b/src/com/timsu/astrid/utilities/Notifications.java
@@ -463,8 +463,7 @@ public class Notifications extends BroadcastReceiver {
} else {
if (Preferences.shouldVibrate(context)
&& audioManager.shouldVibrate(AudioManager.VIBRATE_TYPE_NOTIFICATION)) {
- Vibrator vibrator = (Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE);
- vibrator.vibrate(new long[] {0, 1000, 500, 1000, 500, 1000}, 0);
+ notification.vibrate = new long[] {0, 1000, 500, 1000, 500, 1000};
} else {
notification.vibrate = null;
}
diff --git a/src/com/timsu/astrid/utilities/StartupReceiver.java b/src/com/timsu/astrid/utilities/StartupReceiver.java
index 03e150182..40a01bef9 100644
--- a/src/com/timsu/astrid/utilities/StartupReceiver.java
+++ b/src/com/timsu/astrid/utilities/StartupReceiver.java
@@ -111,6 +111,7 @@ public class StartupReceiver extends BroadcastReceiver {
continue;
for (String permission : app.requestedPermissions) {
if (Manifest.permission.RESTART_PACKAGES.equals(permission)) {
+ CharSequence appName = app.applicationInfo.loadLabel(pm);
Log.e("astrid", "found task killer: " + app.packageName);
OnClickListener listener = new OnClickListener() {
@@ -124,7 +125,8 @@ public class StartupReceiver extends BroadcastReceiver {
new AlertDialog.Builder(context)
.setTitle(R.string.information_title)
- .setMessage(R.string.task_killer_help)
+ .setMessage(context.getString(R.string.task_killer_help,
+ appName))
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(R.string.task_killer_help_ok, listener)
.show();