1
0
Fork 0
mirror of https://github.com/MatomoCamp/matomocamp-companion-android.git synced 2024-09-19 16:13:46 +02:00

Highlight date-time in bookmarks list for conflicting schedules

Fixes #4
This commit is contained in:
Christophe Beyls 2016-01-06 21:05:07 +01:00
parent 61f407a6d2
commit b6a3f7e1af
5 changed files with 95 additions and 4 deletions

View file

@ -0,0 +1,85 @@
package be.digitalia.fosdem.adapters;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Typeface;
import android.support.annotation.ColorInt;
import android.support.v4.content.ContextCompat;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.view.View;
import java.util.Date;
import be.digitalia.fosdem.R;
import be.digitalia.fosdem.db.DatabaseManager;
import be.digitalia.fosdem.model.Event;
public class BookmarksAdapter extends EventsAdapter {
@ColorInt
private final int errorColor;
public BookmarksAdapter(Context context) {
super(context);
errorColor = ContextCompat.getColor(context, R.color.error_material);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ViewHolder holder = (ViewHolder) view.getTag();
Event event = DatabaseManager.toEvent(cursor, holder.event);
holder.event = event;
holder.title.setText(event.getTitle());
String personsSummary = event.getPersonsSummary();
holder.persons.setText(personsSummary);
holder.persons.setVisibility(TextUtils.isEmpty(personsSummary) ? View.GONE : View.VISIBLE);
holder.trackName.setText(event.getTrack().getName());
Date startTime = event.getStartTime();
Date endTime = event.getEndTime();
String startTimeString = (startTime != null) ? timeDateFormat.format(startTime) : "?";
String endTimeString = (endTime != null) ? timeDateFormat.format(endTime) : "?";
String details = String.format("%1$s, %2$s ― %3$s | %4$s", event.getDay().getShortName(), startTimeString, endTimeString, event.getRoomName());
// Highlight the date and time with error color in case of conflicting schedules
if (isOverlapping(cursor, startTime, endTime)) {
SpannableString detailsSpannable = new SpannableString(details);
int endPosition = details.indexOf(" | ");
detailsSpannable.setSpan(new ForegroundColorSpan(errorColor), 0, endPosition, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
detailsSpannable.setSpan(new StyleSpan(Typeface.BOLD), 0, endPosition, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
holder.details.setText(detailsSpannable);
} else {
holder.details.setText(details);
}
}
/**
* Checks if the current event is overlapping with the previous or next one.
*/
public static boolean isOverlapping(Cursor cursor, Date startTime, Date endTime) {
final int position = cursor.getPosition();
if ((startTime != null) && (position > 0) && cursor.moveToPosition(position - 1)) {
long previousEndTime = DatabaseManager.toEventEndTimeMillis(cursor);
if ((previousEndTime != -1L) && (previousEndTime > startTime.getTime())) {
// The event overlaps with the previous one
return true;
}
}
if ((endTime != null) && (position < (cursor.getCount() - 1)) && cursor.moveToPosition(position + 1)) {
long nextStartTime = DatabaseManager.toEventStartTimeMillis(cursor);
if ((nextStartTime != -1L) && (nextStartTime < endTime.getTime())) {
// The event overlaps with the next one
return true;
}
}
return false;
}
}

View file

@ -20,8 +20,8 @@ import be.digitalia.fosdem.utils.DateUtils;
public class EventsAdapter extends CursorAdapter {
private final LayoutInflater inflater;
private final DateFormat timeDateFormat;
protected final LayoutInflater inflater;
protected final DateFormat timeDateFormat;
private final boolean showDay;
public EventsAdapter(Context context) {
@ -81,7 +81,7 @@ public class EventsAdapter extends CursorAdapter {
holder.details.setText(details);
}
private static class ViewHolder {
protected static class ViewHolder {
TextView title;
TextView persons;
TextView trackName;

View file

@ -713,6 +713,10 @@ public class DatabaseManager {
return cursor.isNull(1) ? -1L : cursor.getLong(1);
}
public static long toEventEndTimeMillis(Cursor cursor) {
return cursor.isNull(2) ? -1L : cursor.getLong(2);
}
public static boolean toBookmarkStatus(Cursor cursor) {
return !cursor.isNull(14);
}

View file

@ -16,6 +16,7 @@ import android.widget.ListView;
import be.digitalia.fosdem.R;
import be.digitalia.fosdem.activities.EventDetailsActivity;
import be.digitalia.fosdem.adapters.BookmarksAdapter;
import be.digitalia.fosdem.adapters.EventsAdapter;
import be.digitalia.fosdem.db.DatabaseManager;
import be.digitalia.fosdem.loaders.SimpleCursorLoader;
@ -42,7 +43,7 @@ public class BookmarksListFragment extends SmoothListFragment implements LoaderC
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adapter = new EventsAdapter(getActivity());
adapter = new BookmarksAdapter(getActivity());
setListAdapter(adapter);
upcomingOnly = getActivity().getPreferences(Context.MODE_PRIVATE).getBoolean(PREF_UPCOMING_ONLY, false);

View file

@ -10,5 +10,6 @@
<color name="translucent_grey">#0c000000</color>
<color name="schedule_time_background">#29000000</color>
<color name="schedule_time_running_background">#d6000000</color>
<color name="error_material">#dd2c00</color>
</resources>