Implemented Event Click Listener

This commit is contained in:
Caesar2011
2018-08-01 00:26:15 +02:00
parent 1d1bfff85c
commit 2b4e923cef
7 changed files with 58 additions and 27 deletions

View File

@@ -1,6 +1,8 @@
package de.sebse.fuplanner.fragments; package de.sebse.fuplanner.fragments;
import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.graphics.RectF;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
@@ -13,7 +15,6 @@ import java.util.Calendar;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import de.sebse.fuplanner.MainActivity;
import de.sebse.fuplanner.R; import de.sebse.fuplanner.R;
import de.sebse.fuplanner.services.KVV.KVV; import de.sebse.fuplanner.services.KVV.KVV;
import de.sebse.fuplanner.services.KVV.types.Event; import de.sebse.fuplanner.services.KVV.types.Event;
@@ -34,7 +35,7 @@ import de.sebse.fuplanner.tools.ui.weekview.WeekViewEvent;
* create an instance of this fragment. * create an instance of this fragment.
* *
*/ */
public class ScheduleFragment extends Fragment implements MonthLoader.MonthChangeListener, WeekView.ScrollListener, WeekView.DoubleTapListener { public class ScheduleFragment extends Fragment implements MonthLoader.MonthChangeListener, WeekView.ScrollListener, WeekView.DoubleTapListener, WeekView.EventClickListener {
private MainAcitivityListener mListener; private MainAcitivityListener mListener;
private WeekView mWeekView; private WeekView mWeekView;
private final Logger log = new Logger(this); private final Logger log = new Logger(this);
@@ -58,8 +59,8 @@ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChang
} }
public void invalidate(boolean forceRefresh) { public void invalidate(boolean forceRefresh) {
if (getActivity() != null) { if (mListener != null) {
KVV kvv = ((MainActivity) getActivity()).getKVV(); KVV kvv = mListener.getKVV();
kvv.getModuleList((Modules success) -> { kvv.getModuleList((Modules success) -> {
mModules = success; mModules = success;
final int[] i = {0}; final int[] i = {0};
@@ -85,7 +86,8 @@ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChang
mWeekView = v.findViewById(R.id.weekView); mWeekView = v.findViewById(R.id.weekView);
mWeekView.setMonthChangeListener(this); mWeekView.setMonthChangeListener(this);
mWeekView.setScrollListener(this); mWeekView.setScrollListener(this);
mWeekView.setEventDoubleTapListener(this); mWeekView.setDoubleTapListener(this);
mWeekView.setOnEventClickListener(this);
invalidate(false); invalidate(false);
return v; return v;
} }
@@ -122,14 +124,13 @@ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChang
while (it_modEvents.hasNext()) { while (it_modEvents.hasNext()) {
Event e = it_modEvents.next(); Event e = it_modEvents.next();
Calendar ende = Calendar.getInstance(); Calendar end = Calendar.getInstance();
ende.setTimeInMillis(e.getEndDate()); end.setTimeInMillis(e.getEndDate());
Calendar start = Calendar.getInstance(); Calendar start = Calendar.getInstance();
start.setTimeInMillis(e.getStartDate()); start.setTimeInMillis(e.getStartDate());
WeekViewEvent weekViewEvent = new WeekViewEvent(e.getId(), e.getTitle(), start.get(Calendar.YEAR), start.get(Calendar.MONTH) + 1, start.get(Calendar.DAY_OF_MONTH), start.get(Calendar.HOUR_OF_DAY), start.get(Calendar.MINUTE), ende.get(Calendar.YEAR), ende.get(Calendar.MONTH) + 1, ende.get(Calendar.DAY_OF_MONTH), ende.get(Calendar.HOUR_OF_DAY), ende.get(Calendar.MINUTE)); WeekViewEvent weekViewEvent = new WeekViewEvent(e.getModuleId()+"/"+e.getId(), e.getTitle(), e.getLocation(), start, end);
weekViewEvent.setColor(e.getColor()); weekViewEvent.setColor(e.getColor());
weekViewEvent.setLocation(e.getLocation());
events.add(weekViewEvent); events.add(weekViewEvent);
} }
} }
@@ -137,15 +138,12 @@ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChang
} }
return events; return events;
//(List<? extends WeekViewEvent>) new WeekViewEvent(l,"Test", 2018, 7, 3,15,00,2018, 7, 3, 20,00);
//int id, String title, int startYear, int startMonth, int startDay, int startHour, int startMinute, int endYear, int endMonth, int endDay, int endHour, int endMinute
} }
@Override @Override
public void onFirstVisibleDayChanged(Calendar newFirstVisibleDay, Calendar oldFirstVisibleDay) { public void onFirstVisibleDayChanged(Calendar newFirstVisibleDay, Calendar oldFirstVisibleDay) {
Calendar newLastVisibleDay = (Calendar) newFirstVisibleDay.clone(); Calendar newLastVisibleDay = (Calendar) newFirstVisibleDay.clone();
newLastVisibleDay.add(Calendar.HOUR, 24*mWeekView.getNumberOfVisibleDays()); newLastVisibleDay.add(Calendar.HOUR, 24*mWeekView.getNumberOfVisibleDays());
//mListener.onScheduleFragmentInteraction(newFirstVisibleDay, newLastVisibleDay);
mListener.onTitleTextChange(getResources().getString(R.string.date_scale, DateUtils.getModifiedDate(newFirstVisibleDay.getTimeInMillis()), DateUtils.getModifiedDate(newLastVisibleDay.getTimeInMillis()))); mListener.onTitleTextChange(getResources().getString(R.string.date_scale, DateUtils.getModifiedDate(newFirstVisibleDay.getTimeInMillis()), DateUtils.getModifiedDate(newLastVisibleDay.getTimeInMillis())));
} }
@@ -155,7 +153,7 @@ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChang
} }
@Override @Override
public void mOnDoubleTapListener(Calendar time) { public void onDoubleTapListener(Calendar time) {
Calendar firstVisibleDay = mWeekView.getFirstVisibleDay(); Calendar firstVisibleDay = mWeekView.getFirstVisibleDay();
Calendar c = Calendar.getInstance(); Calendar c = Calendar.getInstance();
c.set(firstVisibleDay.get(Calendar.YEAR), firstVisibleDay.get(Calendar.MONTH), firstVisibleDay.get(Calendar.DAY_OF_MONTH), 0,0 ); c.set(firstVisibleDay.get(Calendar.YEAR), firstVisibleDay.get(Calendar.MONTH), firstVisibleDay.get(Calendar.DAY_OF_MONTH), 0,0 );
@@ -174,6 +172,32 @@ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChang
} }
} }
mWeekView.goToDate(firstVisibleDay); mWeekView.goToDate(firstVisibleDay);
}
@Override
public void onEventClick(WeekViewEvent event, RectF eventRect) {
String[] idParts = event.getIdentifier().split("/");
String moduleId = idParts[0];
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext());
if (mListener != null) {
KVV kvv = mListener.getKVV();
kvv.getModuleList((Modules success) -> {
Modules.Module module = success.get(moduleId);
String moduleName = module.title;
alertDialogBuilder
.setTitle(event.getName())
.setMessage(
getResources().getString(R.string.module_name, moduleName) + "\n" +
getResources().getString(R.string.location_name, event.getLocation()) + "\n" +
getResources().getString(R.string.date_scale, DateUtils.getModifiedTime(getContext(), event.getStartTime().getTimeInMillis()), DateUtils.getModifiedTime(getContext(), event.getEndTime().getTimeInMillis()+1))
)
.setCancelable(true)
.setNeutralButton(R.string.close, (dialog, id) -> dialog.cancel());
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}, log::e);
}
} }
} }

View File

@@ -8,21 +8,21 @@ import java.security.NoSuchAlgorithmException;
import de.sebse.fuplanner.tools.ColorRGB; import de.sebse.fuplanner.tools.ColorRGB;
public class Event implements Serializable { public class Event implements Serializable {
private final String siteId;
private final String id; private final String id;
private final String type; private final String type;
private final String title; private final String title;
private final long duration; private final long duration;
private final long firstTime; private final long firstTime;
private final String siteId;
private final String location; private final String location;
public Event(String id, String type, String title, long duration, long firstTime, String siteId, String location) { public Event(String id, String type, String title, long duration, long firstTime, String siteId, String location) {
this.siteId = siteId;
this.id = id; this.id = id;
this.type = type; this.type = type;
this.title = title; this.title = title;
this.duration = duration; this.duration = duration;
this.firstTime = firstTime; this.firstTime = firstTime;
this.siteId = siteId;
this.location = location this.location = location
.replace(" Übungsraum", "") .replace(" Übungsraum", "")
.replace(" Konferenzraum", "") .replace(" Konferenzraum", "")
@@ -53,6 +53,10 @@ public class Event implements Serializable {
return location; return location;
} }
public String getModuleId() {
return siteId;
}
public ColorRGB getColor() { public ColorRGB getColor() {
MessageDigest digest; MessageDigest digest;
try { try {

View File

@@ -182,11 +182,10 @@ public class WeekView extends View {
// Listeners. // Listeners.
private EventClickListener mEventClickListener; private EventClickListener mEventClickListener;
private EventLongPressListener mEventLongPressListener; private EventLongPressListener mEventLongPressListener;
private GestureDetector.OnDoubleTapListener mOnDoubleTapListener;//////////////////////////////////////////////////////
private WeekViewLoader mWeekViewLoader; private WeekViewLoader mWeekViewLoader;
private EmptyViewClickListener mEmptyViewClickListener; private EmptyViewClickListener mEmptyViewClickListener;
private EmptyViewLongPressListener mEmptyViewLongPressListener; private EmptyViewLongPressListener mEmptyViewLongPressListener;
private DoubleTapListener mDoubleTapListener; ////////////////////////////// private DoubleTapListener mDoubleTapListener;
private DateTimeInterpreter mDateTimeInterpreter; private DateTimeInterpreter mDateTimeInterpreter;
private ScrollListener mScrollListener; private ScrollListener mScrollListener;
private AddEventClickListener mAddEventClickListener; private AddEventClickListener mAddEventClickListener;
@@ -307,7 +306,7 @@ public class WeekView extends View {
public boolean onDoubleTap(MotionEvent e){ public boolean onDoubleTap(MotionEvent e){
Calendar selectedTime = getTimeFromPoint(e.getX(), e.getY()); Calendar selectedTime = getTimeFromPoint(e.getX(), e.getY());
if (selectedTime != null && mDoubleTapListener != null) { if (selectedTime != null && mDoubleTapListener != null) {
mDoubleTapListener.mOnDoubleTapListener((Calendar) selectedTime.clone()); mDoubleTapListener.onDoubleTapListener((Calendar) selectedTime.clone());
} }
return super.onDoubleTap(e); return super.onDoubleTap(e);
} }
@@ -1583,15 +1582,15 @@ public class WeekView extends View {
return mEventLongPressListener; return mEventLongPressListener;
} }
public GestureDetector.OnDoubleTapListener getEventDoubleTapListener() { public DoubleTapListener getDoubleTapListener() {
return mOnDoubleTapListener; return mDoubleTapListener;
} }
public void setEventLongPressListener(EventLongPressListener eventLongPressListener) { public void setEventLongPressListener(EventLongPressListener eventLongPressListener) {
this.mEventLongPressListener = eventLongPressListener; this.mEventLongPressListener = eventLongPressListener;
} }
public void setEventDoubleTapListener(DoubleTapListener eventDoubleTapListener) { public void setDoubleTapListener(DoubleTapListener eventDoubleTapListener) {
this.mDoubleTapListener = eventDoubleTapListener; this.mDoubleTapListener = eventDoubleTapListener;
} }
@@ -2747,7 +2746,7 @@ public class WeekView extends View {
* *
* @param time: {@link Calendar} object set with the date and time of the long pressed position on the view. * @param time: {@link Calendar} object set with the date and time of the long pressed position on the view.
*/ */
void mOnDoubleTapListener(Calendar time); void onDoubleTapListener(Calendar time);
} }
public interface ScrollListener { public interface ScrollListener {

View File

@@ -50,6 +50,8 @@ public class WeekViewEvent {
this.mStartTime.set(Calendar.DAY_OF_MONTH, startDay); this.mStartTime.set(Calendar.DAY_OF_MONTH, startDay);
this.mStartTime.set(Calendar.HOUR_OF_DAY, startHour); this.mStartTime.set(Calendar.HOUR_OF_DAY, startHour);
this.mStartTime.set(Calendar.MINUTE, startMinute); this.mStartTime.set(Calendar.MINUTE, startMinute);
this.mStartTime.set(Calendar.SECOND, 0);
this.mStartTime.set(Calendar.MILLISECOND, 0);
this.mEndTime = Calendar.getInstance(); this.mEndTime = Calendar.getInstance();
this.mEndTime.set(Calendar.YEAR, endYear); this.mEndTime.set(Calendar.YEAR, endYear);
@@ -57,6 +59,8 @@ public class WeekViewEvent {
this.mEndTime.set(Calendar.DAY_OF_MONTH, endDay); this.mEndTime.set(Calendar.DAY_OF_MONTH, endDay);
this.mEndTime.set(Calendar.HOUR_OF_DAY, endHour); this.mEndTime.set(Calendar.HOUR_OF_DAY, endHour);
this.mEndTime.set(Calendar.MINUTE, endMinute); this.mEndTime.set(Calendar.MINUTE, endMinute);
this.mEndTime.set(Calendar.SECOND, 0);
this.mEndTime.set(Calendar.MILLISECOND, 0);
this.mName = name; this.mName = name;
} }

View File

@@ -38,4 +38,6 @@
<string name="refresh">"Aktualisieren"</string> <string name="refresh">"Aktualisieren"</string>
<string name="go_to_today">Heute</string> <string name="go_to_today">Heute</string>
<string name="canteens">Kantinen</string> <string name="canteens">Kantinen</string>
<string name="location_name">Ort: %1$s</string>
<string name="module_name">Modul: %1$s</string>
</resources> </resources>

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="grade_separator">/</string>
</resources>

View File

@@ -43,5 +43,7 @@
<string name="canteens">Canteens</string> <string name="canteens">Canteens</string>
<string name="prices" translatable="false">%1$.2f€ / %2$.2f€ / %3$.2f€</string> <string name="prices" translatable="false">%1$.2f€ / %2$.2f€ / %3$.2f€</string>
<string name="price" translatable="false">%1$.2f€</string> <string name="price" translatable="false">%1$.2f€</string>
<string name="grade_separator" translatable="false"> / </string> <string name="grade_separator">/</string>
<string name="location_name">Location: %1$s</string>
<string name="module_name">Module: %1$s</string>
</resources> </resources>