mirror of
https://github.com/MatomoCamp/matomocamp-companion-android.git
synced 2024-09-19 16:13:46 +02:00
Events in progress are now displayed with a contrasted background color
for the time column in TrackScheduleListFragment.
This commit is contained in:
parent
b6bc0ba77b
commit
cb9545230c
4 changed files with 85 additions and 4 deletions
|
@ -9,8 +9,9 @@
|
||||||
android:id="@+id/time"
|
android:id="@+id/time"
|
||||||
android:layout_width="80dp"
|
android:layout_width="80dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="@color/translucent_grey"
|
android:background="@color/schedule_time_background"
|
||||||
android:padding="@dimen/list_item_padding"
|
android:padding="@dimen/list_item_padding"
|
||||||
|
android:textColor="@color/schedule_time_foreground"
|
||||||
android:textSize="@dimen/list_item_small_text_size"
|
android:textSize="@dimen/list_item_small_text_size"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
|
|
@ -5,5 +5,9 @@
|
||||||
<color name="tab_pressed_fosdem">#80a91991</color>
|
<color name="tab_pressed_fosdem">#80a91991</color>
|
||||||
<color name="main_menu_background">#f0fafafa</color>
|
<color name="main_menu_background">#f0fafafa</color>
|
||||||
<color name="translucent_grey">#29000000</color>
|
<color name="translucent_grey">#29000000</color>
|
||||||
|
<color name="schedule_time_background">#29000000</color>
|
||||||
|
<color name="schedule_time_foreground">#d6000000</color>
|
||||||
|
<color name="schedule_time_running_background">#000</color>
|
||||||
|
<color name="schedule_time_running_foreground">#fff</color>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
|
@ -4,9 +4,12 @@ import java.text.DateFormat;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.graphics.Typeface;
|
import android.graphics.Typeface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Message;
|
||||||
import android.support.v4.app.ListFragment;
|
import android.support.v4.app.ListFragment;
|
||||||
import android.support.v4.app.LoaderManager.LoaderCallbacks;
|
import android.support.v4.app.LoaderManager.LoaderCallbacks;
|
||||||
import android.support.v4.content.Loader;
|
import android.support.v4.content.Loader;
|
||||||
|
@ -29,7 +32,7 @@ import be.digitalia.fosdem.model.Event;
|
||||||
import be.digitalia.fosdem.model.Track;
|
import be.digitalia.fosdem.model.Track;
|
||||||
import be.digitalia.fosdem.utils.DateUtils;
|
import be.digitalia.fosdem.utils.DateUtils;
|
||||||
|
|
||||||
public class TrackScheduleListFragment extends ListFragment implements LoaderCallbacks<Cursor> {
|
public class TrackScheduleListFragment extends ListFragment implements Handler.Callback, LoaderCallbacks<Cursor> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface implemented by container activities
|
* Interface implemented by container activities
|
||||||
|
@ -39,11 +42,15 @@ public class TrackScheduleListFragment extends ListFragment implements LoaderCal
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final int EVENTS_LOADER_ID = 1;
|
private static final int EVENTS_LOADER_ID = 1;
|
||||||
|
private static final int REFRESH_TIME_WHAT = 1;
|
||||||
|
private static final long REFRESH_TIME_INTERVAL = 60 * 1000L; // 1min
|
||||||
|
|
||||||
private static final String ARG_DAY = "day";
|
private static final String ARG_DAY = "day";
|
||||||
private static final String ARG_TRACK = "track";
|
private static final String ARG_TRACK = "track";
|
||||||
private static final String ARG_FROM_EVENT_ID = "from_event_id";
|
private static final String ARG_FROM_EVENT_ID = "from_event_id";
|
||||||
|
|
||||||
|
private Day day;
|
||||||
|
private Handler handler;
|
||||||
private TrackScheduleAdapter adapter;
|
private TrackScheduleAdapter adapter;
|
||||||
private Callbacks listener;
|
private Callbacks listener;
|
||||||
private boolean selectionEnabled = false;
|
private boolean selectionEnabled = false;
|
||||||
|
@ -72,6 +79,8 @@ public class TrackScheduleListFragment extends ListFragment implements LoaderCal
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
day = getArguments().getParcelable(ARG_DAY);
|
||||||
|
handler = new Handler(this);
|
||||||
adapter = new TrackScheduleAdapter(getActivity());
|
adapter = new TrackScheduleAdapter(getActivity());
|
||||||
setListAdapter(adapter);
|
setListAdapter(adapter);
|
||||||
|
|
||||||
|
@ -121,9 +130,45 @@ public class TrackScheduleListFragment extends ListFragment implements LoaderCal
|
||||||
getLoaderManager().initLoader(EVENTS_LOADER_ID, null, this);
|
getLoaderManager().initLoader(EVENTS_LOADER_ID, null, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart() {
|
||||||
|
super.onStart();
|
||||||
|
|
||||||
|
// Setup display auto-refresh during the track's day
|
||||||
|
long now = System.currentTimeMillis();
|
||||||
|
long dayStart = day.getDate().getTime();
|
||||||
|
if (now < dayStart) {
|
||||||
|
// Before track day, schedule refresh in the future
|
||||||
|
handler.sendEmptyMessageDelayed(REFRESH_TIME_WHAT, dayStart - now);
|
||||||
|
} else if (now < dayStart + android.text.format.DateUtils.DAY_IN_MILLIS) {
|
||||||
|
// During track day, start refresh immediately
|
||||||
|
adapter.setCurrentTime(now);
|
||||||
|
handler.sendEmptyMessageDelayed(REFRESH_TIME_WHAT, REFRESH_TIME_INTERVAL);
|
||||||
|
} else {
|
||||||
|
// After track day, disable refresh
|
||||||
|
adapter.setCurrentTime(-1L);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStop() {
|
||||||
|
handler.removeMessages(REFRESH_TIME_WHAT);
|
||||||
|
super.onStop();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean handleMessage(Message msg) {
|
||||||
|
switch (msg.what) {
|
||||||
|
case REFRESH_TIME_WHAT:
|
||||||
|
adapter.setCurrentTime(System.currentTimeMillis());
|
||||||
|
handler.sendEmptyMessageDelayed(REFRESH_TIME_WHAT, REFRESH_TIME_INTERVAL);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
|
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
|
||||||
Day day = getArguments().getParcelable(ARG_DAY);
|
|
||||||
Track track = getArguments().getParcelable(ARG_TRACK);
|
Track track = getArguments().getParcelable(ARG_TRACK);
|
||||||
return new TrackScheduleLoader(getActivity(), day, track);
|
return new TrackScheduleLoader(getActivity(), day, track);
|
||||||
}
|
}
|
||||||
|
@ -203,12 +248,29 @@ public class TrackScheduleListFragment extends ListFragment implements LoaderCal
|
||||||
private static final DateFormat TIME_DATE_FORMAT = DateUtils.getTimeDateFormat();
|
private static final DateFormat TIME_DATE_FORMAT = DateUtils.getTimeDateFormat();
|
||||||
|
|
||||||
private final LayoutInflater inflater;
|
private final LayoutInflater inflater;
|
||||||
|
private final int timeBackgroundColor;
|
||||||
|
private final int timeForegroundColor;
|
||||||
|
private final int timeRunningBackgroundColor;
|
||||||
|
private final int timeRunningForegroundColor;
|
||||||
private final int titleTextSize;
|
private final int titleTextSize;
|
||||||
|
private long currentTime = -1L;
|
||||||
|
|
||||||
public TrackScheduleAdapter(Context context) {
|
public TrackScheduleAdapter(Context context) {
|
||||||
super(context, null, 0);
|
super(context, null, 0);
|
||||||
inflater = LayoutInflater.from(context);
|
inflater = LayoutInflater.from(context);
|
||||||
titleTextSize = context.getResources().getDimensionPixelSize(R.dimen.list_item_title_text_size);
|
Resources res = context.getResources();
|
||||||
|
timeBackgroundColor = res.getColor(R.color.schedule_time_background);
|
||||||
|
timeForegroundColor = res.getColor(R.color.schedule_time_foreground);
|
||||||
|
timeRunningBackgroundColor = res.getColor(R.color.schedule_time_running_background);
|
||||||
|
timeRunningForegroundColor = res.getColor(R.color.schedule_time_running_foreground);
|
||||||
|
titleTextSize = res.getDimensionPixelSize(R.dimen.list_item_title_text_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCurrentTime(long time) {
|
||||||
|
if (currentTime != time) {
|
||||||
|
currentTime = time;
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -235,7 +297,17 @@ public class TrackScheduleListFragment extends ListFragment implements LoaderCal
|
||||||
ViewHolder holder = (ViewHolder) view.getTag();
|
ViewHolder holder = (ViewHolder) view.getTag();
|
||||||
Event event = DatabaseManager.toEvent(cursor, holder.event);
|
Event event = DatabaseManager.toEvent(cursor, holder.event);
|
||||||
holder.event = event;
|
holder.event = event;
|
||||||
|
|
||||||
holder.time.setText(TIME_DATE_FORMAT.format(event.getStartTime()));
|
holder.time.setText(TIME_DATE_FORMAT.format(event.getStartTime()));
|
||||||
|
if ((currentTime != -1L) && event.isRunningAtTime(currentTime)) {
|
||||||
|
// Contrast colors for running event
|
||||||
|
holder.time.setBackgroundColor(timeRunningBackgroundColor);
|
||||||
|
holder.time.setTextColor(timeRunningForegroundColor);
|
||||||
|
} else {
|
||||||
|
// Normal colors
|
||||||
|
holder.time.setBackgroundColor(timeBackgroundColor);
|
||||||
|
holder.time.setTextColor(timeForegroundColor);
|
||||||
|
}
|
||||||
|
|
||||||
SpannableString spannableString;
|
SpannableString spannableString;
|
||||||
String eventTitle = event.getTitle();
|
String eventTitle = event.getTitle();
|
||||||
|
|
|
@ -61,6 +61,10 @@ public class Event implements Parcelable {
|
||||||
this.endTime = endTime;
|
this.endTime = endTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isRunningAtTime(long time) {
|
||||||
|
return (startTime != null) && (endTime != null) && (startTime.getTime() < time) && (time < endTime.getTime());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @return The event duration in minutes
|
* @return The event duration in minutes
|
||||||
|
|
Loading…
Reference in a new issue