Merged from 2.9.0

------------------------------------------------------------
Use --include-merges or -n0 to see merged revisions.
pull/14/head
Tim Su 15 years ago
parent 7b8f3b3d60
commit 80fca66a3d

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>astrid</name>
<name>astrid-2.9.0</name>
<comment></comment>
<projects>
</projects>

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.timsu.astrid"
android:versionName="2.8.8.1" android:versionCode="116">
android:versionCode="118" android:versionName="2.9.0.1">
<!-- ============================ Metadata ============================ -->
@ -39,7 +39,7 @@
android:label="@string/taskEdit_label">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
@ -47,7 +47,7 @@
<activity android:name=".activities.TagView">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
@ -88,7 +88,7 @@
<receiver android:name=".utilities.StartupReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>

@ -27,9 +27,9 @@
<EditText android:id="@+id/timepicker_input"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:inputType="number"
style="?android:attr/textAppearanceLargeInverse"
android:gravity="center"
android:inputType="phone"
android:textSize="30sp"
android:background="@drawable/timepicker_input"
/>

@ -360,7 +360,7 @@
<string name="notif_definiteDueDate">Termini Absolut!</string>
<string name="notif_preferredDueDate">Termini Objectiu!</string>
<string name="notif_timerStarted">Treballant en:</string>
<string name="notif_tagNotification">Tens %d Tasques etiquetades com %s!</string>
<string name="notif_tagNotification">Tens $NUM etiquetades com $TAG!</string>
<!-- Error Messages -->
<skip/>

@ -365,7 +365,7 @@ d</string>
<string name="notif_definiteDueDate">Absolute Frist!</string>
<string name="notif_preferredDueDate">Zielfrist!</string>
<string name="notif_timerStarted">Arbeite an:</string>
<string name="notif_tagNotification">Du hast %d Aufgabe(n) mit Tags versehen %s!</string>
<string name="notif_tagNotification">Du hast $NUM mit Tags versehen $TAG!</string>
<!-- Error Messages -->
<skip/>

@ -361,7 +361,7 @@
<string name="notif_definiteDueDate">¡Fecha límite absoluta!</string>
<string name="notif_preferredDueDate">¡Fin de fecha límite!</string>
<string name="notif_timerStarted">Trabajando en:</string>
<string name="notif_tagNotification">¡Tienes %d tarea(s) etiquetada(s) %s!</string>
<string name="notif_tagNotification">¡Tienes $NUM etiquetada(s) $TAG!</string>
<!-- Error Messages -->
<skip/>

@ -360,7 +360,7 @@
<string name="notif_definiteDueDate">Date Limite !</string>
<string name="notif_preferredDueDate">Date prévue !</string>
<string name="notif_timerStarted">Travaille sur :</string>
<string name="notif_tagNotification">Vous avez %d tâche(s) avec tags %s !</string>
<string name="notif_tagNotification">Vous avez $NUM avec tags $TAG!</string>
<!-- Error Messages -->
<skip/>

@ -360,7 +360,7 @@
<string name="notif_definiteDueDate">期日!</string>
<string name="notif_preferredDueDate">目標日!</string>
<string name="notif_timerStarted">処理中:</string>
<string name="notif_tagNotification">You have %d task(s) tagged %s!</string>
<string name="notif_tagNotification">'$TAG'とタグ付けされた$NUMがあります!</string>
<!-- Error Messages -->
<skip/>

@ -360,7 +360,7 @@
<string name="notif_definiteDueDate">Абсолютный срок!</string>
<string name="notif_preferredDueDate">Срок цели!</string>
<string name="notif_timerStarted">Работаю над:</string>
<string name="notif_tagNotification">У вас %d задач отмеченных %s!</string>
<string name="notif_tagNotification">У вас $NUM отмеченных $TAG!</string>
<!-- Error Messages -->
<skip/>

@ -383,7 +383,8 @@ Thanks for using Astrid!\n
<string name="notif_definiteDueDate">Absolute Deadline!</string>
<string name="notif_preferredDueDate">Goal Deadline!</string>
<string name="notif_timerStarted">Working on:</string>
<string name="notif_tagNotification">You have %d task(s) tagged %s!</string>
<!-- $NUM is replaced with # of tasks + units, i.e. "1 task", $TAG is replaced with tag name -->
<string name="notif_tagNotification">You have $NUM tagged $TAG!</string>
<!-- Error Messages -->
<skip />

@ -61,6 +61,7 @@ import com.timsu.astrid.data.tag.TagIdentifier;
import com.timsu.astrid.data.tag.TagModelForView;
import com.timsu.astrid.data.task.TaskIdentifier;
import com.timsu.astrid.utilities.DialogUtilities;
import com.timsu.astrid.utilities.Preferences;
/**
@ -79,15 +80,15 @@ public class TagListSubActivity extends SubActivity {
private static final int CONTEXT_SHOWHIDE_ID = Menu.FIRST + 12;
private static final int CONTEXT_SHORTCUT_ID = Menu.FIRST + 13;
private ListView listView;
private LinkedList<TagModelForView> tagArray;
protected ListView listView;
protected LinkedList<TagModelForView> tagArray;
HashMap<TagModelForView, Integer> tagToTaskCount;
private Handler handler;
private TextView loadingText;
private boolean untaggedTagDisplayed;
protected Handler handler;
protected TextView loadingText;
protected boolean untaggedTagDisplayed;
private static SortMode sortMode = SortMode.SIZE;
private static boolean sortReverse = false;
protected static SortMode sortMode = SortMode.SIZE;
protected static boolean sortReverse = false;
public TagListSubActivity(TaskList parent, int code, View view) {
super(parent, code, view);
@ -102,11 +103,12 @@ public class TagListSubActivity extends SubActivity {
// time to go!
new Thread(new Runnable() {
public void run() {
loadTagListSort();
fillData();
}
}).start();
FlurryAgent.onEvent("view-tags");
FlurryAgent.onEvent("view-tags"); //$NON-NLS-1$
}
// --- stuff for sorting
@ -179,10 +181,36 @@ public class TagListSubActivity extends SubActivity {
Collections.reverse(tagArray);
}
/** Save the sorting mode to the preferences */
private void saveTagListSort() {
int sortId = sortMode.ordinal() + 1;
if (sortReverse)
sortId *= -1;
Preferences.setTagListSort(getParent(), sortId);
}
/** Save the sorting mode to the preferences */
protected void loadTagListSort() {
try {
int sortId = Preferences.getTagListSort(getParent());
if (sortId == 0)
return;
sortReverse = sortId < 0;
sortId = Math.abs(sortId) - 1;
sortMode = SortMode.values()[sortId];
} catch (Exception e) {
// do nothing
}
}
// --- fill data
/** Fill in the Tag List with our tags */
private synchronized void fillData() {
protected synchronized void fillData() {
try {
tagArray = getTagController().getAllTags();
@ -190,10 +218,10 @@ public class TagListSubActivity extends SubActivity {
} catch (StaleDataException e) {
// happens when you rotate the screen while the thread is
// still running. i don't think it's avoidable?
Log.w("astrid", "StaleDataException", e);
Log.w("astrid", "StaleDataException", e); //$NON-NLS-1$ //$NON-NLS-2$
return;
} catch (Exception e) {
Log.e("astrid", "Error loading list", e);
Log.e("astrid", "Error loading list", e); //$NON-NLS-1$ //$NON-NLS-2$
}
handler.post(new Runnable() {
@ -212,7 +240,7 @@ public class TagListSubActivity extends SubActivity {
}
/** Set up list handlers and adapter. run on the UI thread */
private void setUpListUI(ListAdapter adapter) {
protected void setUpListUI(ListAdapter adapter) {
// set up the title
Resources r = getResources();
int tags = tagArray.size();
@ -324,6 +352,7 @@ public class TagListSubActivity extends SubActivity {
sortMode = SortMode.ALPHA;
sortReverse = false;
}
saveTagListSort();
fillData();
return true;
case MENU_SORT_SIZE_ID:
@ -333,6 +362,7 @@ public class TagListSubActivity extends SubActivity {
sortMode = SortMode.SIZE;
sortReverse = false;
}
saveTagListSort();
fillData();
return true;
case CONTEXT_CREATE_ID:
@ -361,7 +391,7 @@ public class TagListSubActivity extends SubActivity {
Intent shortcutIntent = new Intent(Intent.ACTION_VIEW);
shortcutIntent.setComponent(new ComponentName(
getParent().getApplicationContext(), TagView.class));
shortcutIntent.setData(Uri.parse("tag:" + tag.getTagIdentifier().getId()));
shortcutIntent.setData(Uri.parse("tag:" + tag.getTagIdentifier().getId())); //$NON-NLS-1$
Intent createShortcutIntent = new Intent();
createShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
@ -371,12 +401,12 @@ public class TagListSubActivity extends SubActivity {
// add the @ sign if the task starts with a letter, for clarity
if(Character.isLetterOrDigit(label.charAt(0)))
label = "@" + label;
label = "@" + label; //$NON-NLS-1$
createShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, label);
createShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON,
((BitmapDrawable)r.getDrawable(R.drawable.icon_tag)).getBitmap());
createShortcutIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
createShortcutIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); //$NON-NLS-1$
getParent().sendBroadcast(createShortcutIntent);
Toast.makeText(getParent(), R.string.tagList_shortcut_created, Toast.LENGTH_SHORT).show();
@ -454,7 +484,7 @@ public class TagListSubActivity extends SubActivity {
else
name.setTextColor(r.getColor(android.R.color.white));
} catch (Exception e) {
Log.e("astrid", "Error loading tag list", e);
Log.e("astrid", "Error loading tag list", e); //$NON-NLS-1$ //$NON-NLS-2$
}
}
}

@ -37,6 +37,7 @@ import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
@ -136,6 +137,7 @@ public class TaskEdit extends TaskModificationTabbedActivity<TaskModelForEdit> {
private AlertController alertController;
private List<TagModelForView> tags;
private List<TagIdentifier> taskTags;
private int nameEditInputType;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -168,6 +170,10 @@ public class TaskEdit extends TaskModificationTabbedActivity<TaskModelForEdit> {
setUpUIComponents();
setUpListeners();
// hack to disable name input box until user requests it
nameEditInputType = name.getInputType();
name.setInputType(InputType.TYPE_NULL);
}
@Override
@ -198,6 +204,7 @@ public class TaskEdit extends TaskModificationTabbedActivity<TaskModelForEdit> {
FlurryAgent.onEvent("edit-task");
name.setText(model.getName());
}
if(model.getName().length() > 0)
setTitle(new StringBuilder().
append(r.getString(R.string.taskEdit_titlePrefix)).
@ -264,6 +271,7 @@ public class TaskEdit extends TaskModificationTabbedActivity<TaskModelForEdit> {
repeatInterval.setSelection(repeatInfo.getInterval().ordinal());
} else
setRepeatValue(0);
}
/** Save task model from values in UI components */
@ -478,6 +486,14 @@ public class TaskEdit extends TaskModificationTabbedActivity<TaskModelForEdit> {
repeatValueClick();
}
});
name.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
name.setInputType(nameEditInputType);
}
});
}
/** Set up the repeat value button */

@ -326,15 +326,16 @@ public class TaskListAdapter extends ArrayAdapter<TaskModelForList> {
if(task.getCompletionDate() != null) {
int secondsLeft = (int)((task.getCompletionDate().getTime() -
System.currentTimeMillis()) / 1000);
label.append(r.getString(R.string.taskList_completedPrefix)).
append(" ");
String finishedTime;
if(Math.abs(secondsLeft) < FULL_DATE_THRESHOLD)
label.append(r.getString(R.string.ago_string,
finishedTime = r.getString(R.string.ago_string,
DateUtilities.getDurationString(r,
Math.abs(secondsLeft), 1)));
Math.abs(secondsLeft), 1));
else
label.append(DateUtilities.getFormattedDate(r,
task.getCompletionDate()));
finishedTime = DateUtilities.getFormattedDate(r,
task.getCompletionDate());
label.append(r.getString(R.string.taskList_completedPrefix,
finishedTime));
}
} else {
boolean taskOverdue = false;

@ -174,7 +174,7 @@ public abstract class AbstractTagModel extends AbstractModel {
// --- setters
protected void setName(String name) {
setValues.put(NAME, name);
setValues.put(NAME, name.trim());
}
protected void setNotes(String notes) {

@ -58,8 +58,9 @@ public class LocaleReceiver extends BroadcastReceiver {
int count = TagListSubActivity.countActiveTasks(activeTasks, tasks);
if(count > 0) {
Resources r = context.getResources();
String reminder = r.getString(R.string.notif_tagNotification,
count, tagName);
String reminder = r.getString(R.string.notif_tagNotification).
replace("$NUM", r.getQuantityString(R.plurals.Ntasks, count, count)).
replace("$TAG", tagName);
Notifications.showTagNotification(context, tagId, reminder);
Preferences.setLocaleLastAlertTime(context, tagId,

@ -23,6 +23,7 @@ public class Preferences {
private static final String P_SYNC_LAST_SYNC_ATTEMPT = "lastsyncattempt";
private static final String P_LOCALE_LAST_NOTIFY = "locnot";
private static final String P_DID_ANDROID_AND_ME_SURVEY = "aamsurvey";
private static final String P_TAG_LIST_SORT = "tgsort";
// pref values
public static final int ICON_SET_PINK = 0;
@ -205,6 +206,18 @@ public class Preferences {
editor.commit();
}
/** TagListSort: the sorting method for the tag list */
public static int getTagListSort(Context context) {
return getPrefs(context).getInt(P_TASK_LIST_SORT, 0);
}
/** TagListSort: the sorting method for the tag list */
public static void setTagListSort(Context context, int value) {
Editor editor = getPrefs(context).edit();
editor.putInt(P_TASK_LIST_SORT, value);
editor.commit();
}
// --- synchronization preferences
/** RTM authentication token, or null if doesn't exist */

Loading…
Cancel
Save