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:
parent
61f407a6d2
commit
b6a3f7e1af
5 changed files with 95 additions and 4 deletions
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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>
|
Loading…
Reference in a new issue