Fix for three issues

- fling task adapter showed old junk
- timer would show wrong time when remoteview reinstantiated
- due date filter was wrong
pull/14/head
Tim Su 16 years ago
parent 579551e2cf
commit 728e1bb2f4

@ -101,6 +101,8 @@
<data android:mimeType="vnd.android.cursor.item/task" />
</intent-filter>
</activity>
<!-- Activity for preferences -->
<activity android:name="com.todoroo.astrid.activity.EditPreferences" />
<!-- ======================================================= Receivers = -->

@ -5,9 +5,9 @@ package com.todoroo.andlib.sql;
public final class Functions {
public static String caseStatement(Criterion when, Object ifTrue, Object ifFalse) {
return new StringBuilder("CASE WHEN ").
return new StringBuilder("(CASE WHEN ").
append(when.toString()).append(" THEN ").append(value(ifTrue)).
append(" ELSE ").append(value(ifFalse)).append(" END").toString();
append(" ELSE ").append(value(ifFalse)).append(" END)").toString();
}
private static String value(Object value) {

@ -23,6 +23,7 @@ import android.text.InputType;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.TextView;
import com.todoroo.andlib.service.Autowired;
@ -253,4 +254,26 @@ public class AndroidUtilities {
fos.close();
}
}
/**
* Find a child view of a certain type
* @param view
* @param type
* @return first view (by DFS) if found, or null if none
*/
public static <TYPE> TYPE findViewByType(View view, Class<TYPE> type) {
if(view == null)
return null;
if(type.isInstance(view))
return (TYPE) view;
if(view instanceof ViewGroup) {
ViewGroup group = (ViewGroup) view;
for(int i = 0; i < group.getChildCount(); i++) {
TYPE v = findViewByType(group.getChildAt(i), type);
if(v != null)
return v;
}
}
return null;
}
}

@ -95,7 +95,7 @@ public final class CoreFilterExposer extends BroadcastReceiver {
new QueryTemplate().where(Criterion.and(TaskCriteria.isActive(),
TaskCriteria.isVisible())).
orderBy(Order.asc(Functions.caseStatement(Task.DUE_DATE.eq(0),
Long.MAX_VALUE, Task.DUE_DATE) + "+" + Task.IMPORTANCE)), //$NON-NLS-1$
DateUtilities.now()*2, Task.DUE_DATE) + "+" + Task.IMPORTANCE)), //$NON-NLS-1$
null);
dueDate.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.tango_calendar)).getBitmap();

@ -10,6 +10,7 @@ import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.SystemClock;
import android.text.format.DateUtils;
import android.widget.RemoteViews;
import com.timsu.astrid.R;
@ -62,11 +63,16 @@ public class TimerDecorationExposer extends BroadcastReceiver {
if(task.getValue(Task.TIMER_START) != 0) {
decoration.color = TIMING_BG_COLOR;
elapsed += DateUtilities.now() - task.getValue(Task.TIMER_START);
decoration.decoration.setChronometer(R.id.timer, SystemClock.elapsedRealtime() -
elapsed, null, true);
} else {
// if timer is not started, make the chronometer just a text label,
// since we don't want the time to be displayed relative to elapsed
String format = buildFormat(elapsed);
decoration.decoration.setChronometer(R.id.timer, SystemClock.elapsedRealtime() -
elapsed, format, false);
}
// update timer
decoration.decoration.setChronometer(R.id.timer, SystemClock.elapsedRealtime() -
elapsed, null, decoration.color != 0);
// transmit
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_DECORATIONS);
@ -76,4 +82,8 @@ public class TimerDecorationExposer extends BroadcastReceiver {
context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
}
private String buildFormat(long elapsed) {
return DateUtils.formatElapsedTime(elapsed / 1000L);
}
}

@ -15,12 +15,12 @@ import android.graphics.Color;
import android.graphics.Paint;
import android.text.Html;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnClickListener;
import android.view.View.OnCreateContextMenuListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.CheckBox;
@ -300,6 +300,10 @@ public class TaskAdapter extends CursorAdapter {
viewHolder.extendedDetails.setVisibility(View.GONE);
viewHolder.actions.setVisibility(View.GONE);
}
} else {
long taskId = viewHolder.task.getId();
detailManager.reset(viewHolder, taskId);
decorationManager.reset(viewHolder, taskId);
}
}
@ -393,8 +397,8 @@ public class TaskAdapter extends CursorAdapter {
if(details == null || viewHolder.task.getId() != taskId)
return;
TextView view = extended ? viewHolder.extendedDetails : viewHolder.details;
reset(viewHolder, taskId);
if(details.isEmpty() || (extended && expanded != taskId)) {
view.setVisibility(View.GONE);
return;
}
view.setVisibility(View.VISIBLE);
@ -411,6 +415,11 @@ public class TaskAdapter extends CursorAdapter {
view.setText(string.trim());
}
@Override
void reset(ViewHolder viewHolder, long taskId) {
TextView view = extended ? viewHolder.extendedDetails : viewHolder.details;
view.setVisibility(View.GONE);
}
}
/**
@ -432,11 +441,7 @@ public class TaskAdapter extends CursorAdapter {
if(decorations == null || viewHolder.task.getId() != taskId)
return;
if(viewHolder.decorations != null) {
for(View view : viewHolder.decorations)
viewHolder.taskRow.removeView(view);
}
viewHolder.view.setBackgroundColor(Color.TRANSPARENT);
reset(viewHolder, taskId);
if(decorations.size() == 0)
return;
@ -462,6 +467,15 @@ public class TaskAdapter extends CursorAdapter {
i++;
}
}
@Override
void reset(ViewHolder viewHolder, long taskId) {
if(viewHolder.decorations != null) {
for(View view : viewHolder.decorations)
viewHolder.taskRow.removeView(view);
}
viewHolder.view.setBackgroundColor(Color.TRANSPARENT);
}
}
/**
@ -483,12 +497,7 @@ public class TaskAdapter extends CursorAdapter {
if(actions == null || viewHolder.task.getId() != taskId)
return;
if(expanded != taskId) {
viewHolder.actions.setVisibility(View.GONE);
return;
}
viewHolder.actions.setVisibility(View.VISIBLE);
viewHolder.actions.removeAllViews();
reset(viewHolder, taskId);
LinearLayout.LayoutParams params =
new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
@ -516,6 +525,16 @@ public class TaskAdapter extends CursorAdapter {
}
}
@Override
void reset(ViewHolder viewHolder, long taskId) {
if(expanded != taskId) {
viewHolder.actions.setVisibility(View.GONE);
return;
}
viewHolder.actions.setVisibility(View.VISIBLE);
viewHolder.actions.removeAllViews();
}
}
/* ======================================================================
@ -675,6 +694,9 @@ public class TaskAdapter extends CursorAdapter {
/** updates the given view */
abstract void draw(ViewHolder viewHolder, long taskId, Collection<TYPE> list);
/** resets the view as if there was nothing */
abstract void reset(ViewHolder viewHolder, long taskId);
/** on receive an intent */
public void addNew(long taskId, String addOn, TYPE item) {
if(item == null)

Loading…
Cancel
Save