Stundenplan wird nun angezeit, aber noch probleme mit dem refresh

This commit is contained in:
Joshua
2018-07-04 17:47:10 +02:00
parent 966d25a038
commit 376c132c9a
3 changed files with 157 additions and 8 deletions

View File

@@ -1,14 +1,37 @@
package de.sebse.fuplanner.fragments; package de.sebse.fuplanner.fragments;
import android.content.Context; import android.content.Context;
import android.graphics.RectF;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.alamkanak.weekview.MonthLoader;
import com.alamkanak.weekview.WeekView;
import com.alamkanak.weekview.WeekViewEvent;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
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.types.Event;
import de.sebse.fuplanner.services.KVV.types.Modules;
import de.sebse.fuplanner.tools.logging.Logger;
import de.sebse.fuplanner.tools.network.NetworkCallback;
import de.sebse.fuplanner.tools.network.NetworkError;
import de.sebse.fuplanner.tools.network.NetworkErrorCallback;
/** /**
* A simple {@link Fragment} subclass. * A simple {@link Fragment} subclass.
@@ -18,7 +41,7 @@ import de.sebse.fuplanner.R;
* Use the {@link ScheduleFragment#newInstance} factory method to * Use the {@link ScheduleFragment#newInstance} factory method to
* create an instance of this fragment. * create an instance of this fragment.
*/ */
public class ScheduleFragment extends Fragment { public class ScheduleFragment extends Fragment implements WeekView.EventClickListener, MonthLoader.MonthChangeListener, WeekView.EventLongPressListener {
// TODO: Rename parameter arguments, choose names that match // TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1"; private static final String ARG_PARAM1 = "param1";
@@ -29,6 +52,11 @@ public class ScheduleFragment extends Fragment {
private String mParam2; private String mParam2;
private OnFragmentInteractionListener mListener; private OnFragmentInteractionListener mListener;
private WeekView mWeekView;
private Logger log = new Logger(this);
private ArrayList<WeekViewEvent> a = new ArrayList<>();
private HashSet<Integer> addedIds = new HashSet<>();
private Modules mModules = null;
public ScheduleFragment() { public ScheduleFragment() {
// Required empty public constructor // Required empty public constructor
@@ -59,15 +87,64 @@ public class ScheduleFragment extends Fragment {
mParam1 = getArguments().getString(ARG_PARAM1); mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2); mParam2 = getArguments().getString(ARG_PARAM2);
} }
a.add(new WeekViewEvent(1,"Das ist Test und der wird hoffentlich nicht doppelt", 2018, 10, 3,15,00,2018, 10, 3, 20,00));
a.add(new WeekViewEvent(1,"Das ist Test und der wird hoffentlich nicht doppelt", 2018, 7, 3,15,00,2018, 7, 3, 20,00));
if (getActivity() != null) {
KVV kvv = ((MainActivity) getActivity()).getKVV();
kvv.getModuleList((Modules success) -> {
mModules = success;
log.d("Modules in onCreate", mModules.size());
final int[] i = {0};
Iterator<Modules.Module> it = mModules.iterator();
while (it.hasNext()) {
Modules.Module module = it.next();
log.d("onCreate Module gefunden", module.toString());
kvv.getModuleEvents(module, success1 -> {
log.d("getModuleEvents gefunden");
i[0]++;
log.d("mModules.size() und i", mModules.size(), i[0]);
if (i[0] >= mModules.size()){
if (mWeekView != null){
log.d("refreshDrawableState");
mWeekView.invalidate();
mWeekView.refreshDrawableState();
}
}
}, error1 -> log.e(error1));
}
}, error -> log.e(error));
}
} }
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
// Inflate the layout for this fragment // Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_schedule, container, false); View v = inflater.inflate(R.layout.fragment_schedule, container, false);
// Get a reference for the week view in the layout.
mWeekView = (WeekView) v.findViewById(R.id.weekView);
// Set an action when any event is clicked.
mWeekView.setOnEventClickListener(this::onEventClick);
// The week view has infinite scrolling horizontally. We have to provide the events of a
// month every time the month changes on the week view.
mWeekView.setMonthChangeListener(this::onMonthChange);
// Set long press listener for events.
mWeekView.setEventLongPressListener(this::onEventLongPress);
return v;
} }
// TODO: Rename method, update argument and hook method into UI event // TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) { public void onButtonPressed(Uri uri) {
if (mListener != null) { if (mListener != null) {
@@ -92,6 +169,60 @@ public class ScheduleFragment extends Fragment {
mListener = null; mListener = null;
} }
@Override
public void onEventClick(WeekViewEvent event, RectF eventRect) {
}
@Override
public List<? extends WeekViewEvent> onMonthChange(int newYear, int newMonth) {
//log.d("onMonthChange aufgerufen", mModules != null);
ArrayList<WeekViewEvent> events = new ArrayList<>();
if (mModules != null){
Iterator<Modules.Module> it = mModules.iterator();
while (it.hasNext()) {
Modules.Module mod = it.next();
//log.d("null vieleicht", mod.events);
if (mod.events != null){
//log.d("mod in onMonthChange", mod.events.toString());
Iterator<Event> it_modEvents = mod.events.getEventsOfMonth(newYear, newMonth);
while (it_modEvents.hasNext()){
Event e = it_modEvents.next();
//log.d("Event in while", e.toString());
Calendar ende = Calendar.getInstance();
ende.setTimeInMillis(e.getEndDate());
Calendar start = Calendar.getInstance();
start.setTimeInMillis(e.getStartDate());
//log.d("Event?%:", startDate.toString(), "aufgeteilt",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) );
//log.d("Event?%:ende", endDate.toString(), "aufgeteilt",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) );
//LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
events.add(new WeekViewEvent(1,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)));
}
}
}
}
log.d("onMonthChange_aufgerufen", newYear, newMonth);
//a.add(new WeekViewEvent(2,"Das ist Test und der wird hoffentlich nicht doppelt", 2018, 7, 3,15,00,2018, 7, 3, 20,00));
return events;//(List<? extends WeekViewEvent>) new WeekViewEvent(l,"Test", 2018, 7, 3,15,00,2018, 7, 3, 20,00);
//int startYear, int startMonth, int startDay, int startHour, int startMinute, int endYear, int endMonth, int endDay, int endHour, int endMinute
}
@Override
public void onEventLongPress(WeekViewEvent event, RectF eventRect) {
}
/** /**
* This interface must be implemented by activities that contain this * This interface must be implemented by activities that contain this
* fragment to allow an interaction in this fragment to be communicated * fragment to allow an interaction in this fragment to be communicated

View File

@@ -6,10 +6,11 @@ import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import de.sebse.fuplanner.services.KVV.types.Event; import de.sebse.fuplanner.services.KVV.types.Event;
import de.sebse.fuplanner.tools.logging.Logger;
public class EventList extends ArrayList<Event> { public class EventList extends ArrayList<Event> {
private int split = 0; private int split = 0;
private Logger log = new Logger(this);
public Event getPast(int index) { public Event getPast(int index) {
if (split < 0) if (split < 0)
sort(); sort();
@@ -78,9 +79,10 @@ public class EventList extends ArrayList<Event> {
@Override @Override
public Event next() { public Event next() {
if (hasNext()) { if (hasNext()) {
i[0]++; log.d("Event hasnext", hasNext());
return EventList.this.get(i[0]); return EventList.this.get(i[0]++);
} else { } else {
log.d("Event null", hasNext());
return null; return null;
} }
} }

View File

@@ -3,12 +3,28 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".fragments.ScheduleFragment"> tools:context=".fragments.ScheduleFragment">
<!-- TODO: Update blank fragment layout -->
<TextView
<com.alamkanak.weekview.WeekView
android:id="@+id/weekView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" /> app:eventTextColor="@android:color/white"
app:textSize="12sp"
app:hourHeight="60dp"
app:headerColumnPadding="8dp"
app:headerColumnTextColor="#8f000000"
app:headerRowPadding="12dp"
app:columnGap="8dp"
app:noOfVisibleDays="5"
app:headerRowBackgroundColor="#ffefefef"
app:dayBackgroundColor="#05000000"
app:todayBackgroundColor="#1848adff"
app:headerColumnBackground="#ffffffff"/>
</FrameLayout> </FrameLayout>