Skip to content

Commit

Permalink
Strike through title of canceled events in all views (Etar-Group#278)
Browse files Browse the repository at this point in the history
  • Loading branch information
MathieuSchopfer committed May 16, 2020
1 parent 91105f0 commit 4647f82
Show file tree
Hide file tree
Showing 7 changed files with 90 additions and 33 deletions.
7 changes: 7 additions & 0 deletions src/com/android/calendar/DayView.java
Original file line number Diff line number Diff line change
Expand Up @@ -2800,6 +2800,13 @@ private StaticLayout getEventLayout(StaticLayout[] layouts, int i, Event event,
break;
}

if (event.status == Events.STATUS_CANCELED) {
// Strike event title if its status is `canceled`
paint.setStrikeThruText(true);
} else {
paint.setStrikeThruText(false);
}

// Leave a one pixel boundary on the left and right of the rectangle for the event
layout = new StaticLayout(bob, 0, bob.length(), new TextPaint(paint), r.width(),
Alignment.ALIGN_NORMAL, 1.0f, 0.0f, true, null, r.width());
Expand Down
47 changes: 28 additions & 19 deletions src/com/android/calendar/EventInfoFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.Uri;
Expand Down Expand Up @@ -228,16 +229,17 @@ private enum ShareType {
Calendars.CALENDAR_ACCESS_LEVEL, // 10
Events.CALENDAR_COLOR, // 11
Events.EVENT_COLOR, // 12
Events.HAS_ATTENDEE_DATA, // 13
Events.ORGANIZER, // 14
Events.HAS_ALARM, // 15
Calendars.MAX_REMINDERS, // 16
Calendars.ALLOWED_REMINDERS, // 17
Events.CUSTOM_APP_PACKAGE, // 18
Events.CUSTOM_APP_URI, // 19
Events.DTEND, // 20
Events.DURATION, // 21
Events.ORIGINAL_SYNC_ID // 22 do not remove; used in DeleteEventHelper
Events.STATUS, // 13
Events.HAS_ATTENDEE_DATA, // 14
Events.ORGANIZER, // 15
Events.HAS_ALARM, // 16
Calendars.MAX_REMINDERS, // 17
Calendars.ALLOWED_REMINDERS, // 18
Events.CUSTOM_APP_PACKAGE, // 19
Events.CUSTOM_APP_URI, // 20
Events.DTEND, // 21
Events.DURATION, // 22
Events.ORIGINAL_SYNC_ID // 23 do not remove; used in DeleteEventHelper
};
private static final int EVENT_INDEX_ID = 0;
private static final int EVENT_INDEX_TITLE = 1;
Expand All @@ -252,15 +254,16 @@ private enum ShareType {
private static final int EVENT_INDEX_ACCESS_LEVEL = 10;
private static final int EVENT_INDEX_CALENDAR_COLOR = 11;
private static final int EVENT_INDEX_EVENT_COLOR = 12;
private static final int EVENT_INDEX_HAS_ATTENDEE_DATA = 13;
private static final int EVENT_INDEX_ORGANIZER = 14;
private static final int EVENT_INDEX_HAS_ALARM = 15;
private static final int EVENT_INDEX_MAX_REMINDERS = 16;
private static final int EVENT_INDEX_ALLOWED_REMINDERS = 17;
private static final int EVENT_INDEX_CUSTOM_APP_PACKAGE = 18;
private static final int EVENT_INDEX_CUSTOM_APP_URI = 19;
private static final int EVENT_INDEX_DTEND = 20;
private static final int EVENT_INDEX_DURATION = 21;
private static final int EVENT_INDEX_STATUS = 13;
private static final int EVENT_INDEX_HAS_ATTENDEE_DATA = 14;
private static final int EVENT_INDEX_ORGANIZER = 15;
private static final int EVENT_INDEX_HAS_ALARM = 16;
private static final int EVENT_INDEX_MAX_REMINDERS = 17;
private static final int EVENT_INDEX_ALLOWED_REMINDERS = 18;
private static final int EVENT_INDEX_CUSTOM_APP_PACKAGE = 19;
private static final int EVENT_INDEX_CUSTOM_APP_URI = 20;
private static final int EVENT_INDEX_DTEND = 21;
private static final int EVENT_INDEX_DURATION = 22;
private static final String[] ATTENDEES_PROJECTION = new String[] {
Attendees._ID, // 0
Attendees.ATTENDEE_NAME, // 1
Expand Down Expand Up @@ -1475,6 +1478,12 @@ private void updateEvent(View view) {
setTextCommon(view, R.id.title, eventName);
}

Integer status = mEventCursor.getInt(EVENT_INDEX_STATUS);
if (status == Events.STATUS_CANCELED) {
TextView textView = (TextView) view.findViewById(R.id.title);
textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}

// When
// Set the date and repeats (if any)
String localTimezone = Utils.getTimeZone(mActivity, mTZUpdater);
Expand Down
7 changes: 7 additions & 0 deletions src/com/android/calendar/agenda/AgendaAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Paint;
import android.provider.CalendarContract.Events;
import android.provider.CalendarContract.Attendees;
import android.text.TextUtils;
import android.text.format.DateFormat;
Expand Down Expand Up @@ -151,6 +153,11 @@ public void bindView(View view, Context context, Cursor cursor) {
}
}

int status = cursor.getInt(AgendaWindowAdapter.INDEX_STATUS);
if (status == Events.STATUS_CANCELED) {
holder.title.setPaintFlags(holder.title.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}

TextView title = holder.title;
TextView when = holder.when;
TextView where = holder.where;
Expand Down
22 changes: 12 additions & 10 deletions src/com/android/calendar/agenda/AgendaWindowAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,11 +89,12 @@ public class AgendaWindowAdapter extends BaseAdapter
public static final int INDEX_EVENT_ID = 9;
public static final int INDEX_START_DAY = 10;
public static final int INDEX_END_DAY = 11;
public static final int INDEX_SELF_ATTENDEE_STATUS = 12;
public static final int INDEX_ORGANIZER = 13;
public static final int INDEX_OWNER_ACCOUNT = 14;
public static final int INDEX_CAN_ORGANIZER_RESPOND= 15;
public static final int INDEX_TIME_ZONE = 16;
public static final int INDEX_STATUS = 12;
public static final int INDEX_SELF_ATTENDEE_STATUS = 13;
public static final int INDEX_ORGANIZER = 14;
public static final int INDEX_OWNER_ACCOUNT = 15;
public static final int INDEX_CAN_ORGANIZER_RESPOND= 16;
public static final int INDEX_TIME_ZONE = 17;
static final boolean BASICLOG = false;
static final boolean DEBUGLOG = false;
private static final String TAG = "AgendaWindowAdapter";
Expand All @@ -114,11 +115,12 @@ public class AgendaWindowAdapter extends BaseAdapter
Instances.EVENT_ID, // 9
Instances.START_DAY, // 10 Julian start day
Instances.END_DAY, // 11 Julian end day
Instances.SELF_ATTENDEE_STATUS, // 12
Instances.ORGANIZER, // 13
Instances.OWNER_ACCOUNT, // 14
Instances.CAN_ORGANIZER_RESPOND, // 15
Instances.EVENT_TIMEZONE, // 16
Instances.STATUS, // 12
Instances.SELF_ATTENDEE_STATUS, // 13
Instances.ORGANIZER, // 14
Instances.OWNER_ACCOUNT, // 15
Instances.CAN_ORGANIZER_RESPOND, // 16
Instances.EVENT_TIMEZONE, // 17
};
// Listview may have a bug where the index/position is not consistent when there's a header.
// position == positionInListView - OFF_BY_ONE_BUG
Expand Down
31 changes: 27 additions & 4 deletions src/com/android/calendar/month/MonthWeekEventsView.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.provider.CalendarContract.Attendees;
import android.provider.CalendarContract.Events;
import android.text.DynamicLayout;
import android.text.Layout;
import android.text.TextPaint;
Expand Down Expand Up @@ -1500,6 +1501,10 @@ public FormattedEvent(Event event, EventFormat format, BoundariesSetter boundari
mEvent = event;
}

protected boolean isCanceled() {
return mEvent.status == Events.STATUS_CANCELED;
}

protected boolean isDeclined() {
return mEvent.selfAttendeeStatus == Attendees.ATTENDEE_STATUS_DECLINED;
}
Expand Down Expand Up @@ -1573,19 +1578,37 @@ protected CharSequence getFormattedText(CharSequence text, int span) {
}

protected Paint getTextPaint() {

TextPaint paint;

if (!isAttendeeStatusInvited() && mEvent.drawAsAllday()){
// Text color needs to contrast with solid background.
return mSolidBackgroundEventPaint;
paint = mSolidBackgroundEventPaint;
} else if (isDeclined()) {
// Use "declined event" color.
return mDeclinedEventPaint;
paint = mDeclinedEventPaint;
} else if (mEvent.drawAsAllday()) {
// Text inside frame is same color as frame.
mFramedEventPaint.setColor(getRectangleColor());
return mFramedEventPaint;
paint = mFramedEventPaint;
}

// Use generic event text color.
return mEventPaint;
paint = mEventPaint;

if (isCanceled()) {
// Strike event title if its status is `canceled`
// (copy current Paint to conserve other formatting)
TextPaint canceledPaint;
canceledPaint = new TextPaint();
canceledPaint.set(paint);
canceledPaint.setStrikeThruText(true);
return canceledPaint;
} else {
paint.setStrikeThruText(false);
}

return paint;
}

protected void drawText(Canvas canvas, ViewDetailsPreferences.Preferences preferences, int day) {
Expand Down
3 changes: 3 additions & 0 deletions src/com/android/calendar/widget/CalendarAppWidgetModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,7 @@ static class EventInfo {
String where;
int visibTitle; // Visibility value for Title textview (View.GONE or View.VISIBLE)
String title;
int status;
int selfAttendeeStatus;

long id;
Expand Down Expand Up @@ -301,6 +302,8 @@ public String toString() {
builder.append(where);
builder.append(", color=");
builder.append(String.format("0x%x", color));
builder.append(", status=");
builder.append(status);
builder.append(", selfAttendeeStatus=");
builder.append(selfAttendeeStatus);
builder.append("]");
Expand Down
6 changes: 6 additions & 0 deletions src/com/android/calendar/widget/CalendarAppWidgetService.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,12 @@
import android.content.res.Resources;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Handler;
import android.provider.CalendarContract.Attendees;
import android.provider.CalendarContract.Calendars;
import android.provider.CalendarContract.Events;
import android.provider.CalendarContract.Instances;
import androidx.core.content.ContextCompat;
import android.text.format.DateUtils;
Expand Down Expand Up @@ -354,6 +356,10 @@ public RemoteViews getViewAt(int position) {
views.setInt(R.id.agenda_item_color, "setColorFilter", displayColor);
}

if (eventInfo.status == Events.STATUS_CANCELED) {
views.setInt(R.id.title, "setPaintFlags", Paint.STRIKE_THRU_TEXT_FLAG);
}

long start = eventInfo.start;
long end = eventInfo.end;
// An element in ListView.
Expand Down

0 comments on commit 4647f82

Please sign in to comment.