diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java
index 88df9cd..c42b245 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java
@@ -39,7 +39,6 @@ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChang
private WeekView mWeekView;
private Logger log = new Logger(this);
private Modules mModules = null;
- private Calendar firstVisibleDay;
public ScheduleFragment() {
// Required empty public constructor
@@ -133,7 +132,9 @@ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChang
Calendar start = Calendar.getInstance();
start.setTimeInMillis(e.getStartDate());
- events.add(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.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.setColor(e.getColor());
+ events.add(weekViewEvent);
}
}
}
@@ -147,7 +148,6 @@ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChang
@Override
public void onFirstVisibleDayChanged(Calendar newFirstVisibleDay, Calendar oldFirstVisibleDay) {
- firstVisibleDay = newFirstVisibleDay;
Calendar newLastVisibleDay = (Calendar) newFirstVisibleDay.clone();
newLastVisibleDay.add(Calendar.HOUR, 24*mWeekView.getNumberOfVisibleDays());
//mListener.onScheduleFragmentInteraction(newFirstVisibleDay, newLastVisibleDay);
@@ -161,6 +161,7 @@ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChang
@Override
public void mOnDoubleTapListener(Calendar time) {
+ Calendar firstVisibleDay = mWeekView.getFirstVisibleDay();
Calendar c = Calendar.getInstance();
c.set(firstVisibleDay.get(Calendar.YEAR), firstVisibleDay.get(Calendar.MONTH), firstVisibleDay.get(Calendar.DAY_OF_MONTH), 0,0 );
c.add(Calendar.DATE, 2); // die Grenze beim tippen, wann ver nach vorne und wann nach hinten springt
diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVModuleList.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVModuleList.java
index 4bd7d55..8410956 100644
--- a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVModuleList.java
+++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVModuleList.java
@@ -352,9 +352,10 @@ public class KVVModuleList extends HTTPService {
String id = site.getString("eventId");
String type = site.getString("type");
String title = site.getString("title");
+ String siteId = site.getString("siteId");
long duration = site.getLong("duration");
long firstTime = site.getJSONObject("firstTime").getLong("time");
- events.add(new Event(id, type, title, duration, firstTime));
+ events.add(new Event(id, type, title, duration, firstTime, siteId));
}
} catch (JSONException e) {
e.printStackTrace();
diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Event.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Event.java
index a18bb7d..1405fcd 100644
--- a/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Event.java
+++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Event.java
@@ -1,6 +1,12 @@
package de.sebse.fuplanner.services.KVV.types;
import java.io.Serializable;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import de.sebse.fuplanner.tools.ColorRGB;
+import de.sebse.fuplanner.tools.logging.Logger;
public class Event implements Serializable {
private final String id;
@@ -8,13 +14,15 @@ public class Event implements Serializable {
private final String title;
private final long duration;
private final long firstTime;
+ private String siteId;
- public Event(String id, String type, String title, long duration, long firstTime) {
+ public Event(String id, String type, String title, long duration, long firstTime, String siteId) {
this.id = id;
this.type = type;
this.title = title;
this.duration = duration;
this.firstTime = firstTime;
+ this.siteId = siteId;
}
public String getId() {
@@ -37,6 +45,53 @@ public class Event implements Serializable {
return this.firstTime+this.duration;
}
+ public ColorRGB getColor() {
+ MessageDigest digest = null;
+ try {
+ digest = MessageDigest.getInstance("SHA-256");
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ return null;
+ }
+ byte[] encodedHash;
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
+ encodedHash = digest.digest(siteId.getBytes(StandardCharsets.UTF_8));
+ } else {
+ encodedHash = digest.digest(siteId.getBytes());
+ }
+ int h = (0xff & encodedHash[0]) + (0xff & encodedHash[1]) * 255;
+ h = h * 360 / 0xffff;
+ int s = 0xff & encodedHash[2];
+ s = s * 100 / 0xffff;
+ int v = 0xff & encodedHash[3];
+ v = v * 100 / 0xffff;
+
+ // range for more beautiful colors
+ h = h / 30 * 30;
+ s = 100;
+ v = 50;
+
+ return hsvToRgb(h/360.0, s/100.0, v/100.0);
+ }
+
+ public static ColorRGB hsvToRgb(double hue, double saturation, double value) {
+ int h = (int)(hue * 6);
+ double f = hue * 6 - h;
+ double p = value * (1 - saturation);
+ double q = value * (1 - f * saturation);
+ double t = value * (1 - (1 - f) * saturation);
+
+ switch (h) {
+ case 0: return new ColorRGB(value, t, p);
+ case 1: return new ColorRGB(q, value, p);
+ case 2: return new ColorRGB(p, value, t);
+ case 3: return new ColorRGB(p, q, value);
+ case 4: return new ColorRGB(t, p, value);
+ case 5: return new ColorRGB(value, p, q);
+ default: throw new RuntimeException("Something went wrong when converting from HSV to RGB. Input was " + hue + ", " + saturation + ", " + value);
+ }
+ }
+
@Override
public String toString() {
return "ID: "+getId()+
diff --git a/app/src/main/java/de/sebse/fuplanner/tools/Color.java b/app/src/main/java/de/sebse/fuplanner/tools/Color.java
new file mode 100644
index 0000000..fdd2dc4
--- /dev/null
+++ b/app/src/main/java/de/sebse/fuplanner/tools/Color.java
@@ -0,0 +1,7 @@
+package de.sebse.fuplanner.tools;
+
+import android.graphics.Paint;
+
+public interface Color {
+ void setPaintColor(Paint paint);
+}
diff --git a/app/src/main/java/de/sebse/fuplanner/tools/ColorRGB.java b/app/src/main/java/de/sebse/fuplanner/tools/ColorRGB.java
new file mode 100644
index 0000000..b53b361
--- /dev/null
+++ b/app/src/main/java/de/sebse/fuplanner/tools/ColorRGB.java
@@ -0,0 +1,24 @@
+package de.sebse.fuplanner.tools;
+
+import android.graphics.Paint;
+
+public class ColorRGB implements Color {
+ private final int mRed;
+ private final int mGreen;
+ private final int mBlue;
+
+ public ColorRGB(int red, int green, int blue) {
+ this.mRed = red;
+ this.mGreen = green;
+ this.mBlue = blue;
+ }
+
+ public ColorRGB(double red, double green, double blue) {
+ this((int) (red*255), (int) (green*255), (int) (blue*255));
+ }
+
+ @Override
+ public void setPaintColor(Paint paint) {
+ paint.setARGB(255, mRed, mGreen, mBlue);
+ }
+}
diff --git a/app/src/main/java/de/sebse/fuplanner/tools/ColorRes.java b/app/src/main/java/de/sebse/fuplanner/tools/ColorRes.java
new file mode 100644
index 0000000..4d59659
--- /dev/null
+++ b/app/src/main/java/de/sebse/fuplanner/tools/ColorRes.java
@@ -0,0 +1,17 @@
+package de.sebse.fuplanner.tools;
+
+import android.graphics.Paint;
+import android.support.annotation.ColorInt;
+
+public class ColorRes implements Color {
+ @ColorInt private final int mResId;
+
+ public ColorRes(@ColorInt int color) {
+ this.mResId = color;
+ }
+
+ @Override
+ public void setPaintColor(Paint paint) {
+ paint.setColor(mResId);
+ }
+}
diff --git a/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/WeekView.java b/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/WeekView.java
index 07ef4b0..25a770c 100644
--- a/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/WeekView.java
+++ b/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/WeekView.java
@@ -46,6 +46,7 @@ import java.util.List;
import java.util.Locale;
import de.sebse.fuplanner.R;
+import de.sebse.fuplanner.tools.ColorRes;
import de.sebse.fuplanner.tools.DateUtils;
import de.sebse.fuplanner.tools.logging.Logger;
@@ -394,7 +395,7 @@ public class WeekView extends View {
bottom > 0
) {
RectF dayRectF = new RectF(left, top, right, bottom - mCurrentOrigin.y);
- newEvent.setColor(mNewEventColor);
+ newEvent.setColor(new ColorRes(mNewEventColor));
mNewEventRect = new EventRect(newEvent, newEvent, dayRectF);
tempEvents.add(newEvent);
WeekView.this.clearEvents();
@@ -1100,7 +1101,10 @@ public class WeekView extends View {
bottom > mHeaderHeight + mHeaderRowPadding * 2 + mTimeTextHeight / 2 + mHeaderMarginBottom
) {
mEventRects.get(i).rectF = new RectF(left, top, right, bottom);
- mEventBackgroundPaint.setColor(mEventRects.get(i).event.getColor() == 0 ? mDefaultEventColor : mEventRects.get(i).event.getColor());
+ if (mEventRects.get(i).event.getColor() != null)
+ mEventRects.get(i).event.getColor().setPaintColor(mEventBackgroundPaint);
+ else
+ mEventBackgroundPaint.setColor(mDefaultEventColor);
mEventBackgroundPaint.setShader(mEventRects.get(i).event.getShader());
canvas.drawRoundRect(mEventRects.get(i).rectF, mEventCornerRadius, mEventCornerRadius, mEventBackgroundPaint);
float topToUse = top;
@@ -1153,7 +1157,10 @@ public class WeekView extends View {
bottom > 0
) {
mEventRects.get(i).rectF = new RectF(left, top, right, bottom);
- mEventBackgroundPaint.setColor(mEventRects.get(i).event.getColor() == 0 ? mDefaultEventColor : mEventRects.get(i).event.getColor());
+ if (mEventRects.get(i).event.getColor() != null)
+ mEventRects.get(i).event.getColor().setPaintColor(mEventBackgroundPaint);
+ else
+ mEventBackgroundPaint.setColor(mDefaultEventColor);
mEventBackgroundPaint.setShader(mEventRects.get(i).event.getShader());
canvas.drawRoundRect(mEventRects.get(i).rectF, mEventCornerRadius, mEventCornerRadius, mEventBackgroundPaint);
drawEventTitle(mEventRects.get(i).event, mEventRects.get(i).rectF, canvas, top, left);
diff --git a/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/WeekViewEvent.java b/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/WeekViewEvent.java
index 3d279a7..bc75e15 100644
--- a/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/WeekViewEvent.java
+++ b/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/WeekViewEvent.java
@@ -1,12 +1,13 @@
package de.sebse.fuplanner.tools.ui.weekview;
import android.graphics.Shader;
-import android.support.annotation.ColorInt;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
+import de.sebse.fuplanner.tools.Color;
+
import static de.sebse.fuplanner.tools.ui.weekview.WeekViewUtil.isSameDay;
@@ -20,9 +21,7 @@ public class WeekViewEvent {
private Calendar mEndTime;
private String mName;
private String mLocation;
- private
- @ColorInt
- int mColor;
+ private Color mColor;
private boolean mAllDay;
private Shader mShader;
@@ -237,13 +236,11 @@ public class WeekViewEvent {
this.mLocation = location;
}
- public
- @ColorInt
- int getColor() {
+ public Color getColor() {
return mColor;
}
- public void setColor(int color) {
+ public void setColor(Color color) {
this.mColor = color;
}
@@ -307,7 +304,7 @@ public class WeekViewEvent {
endTime.set(Calendar.HOUR_OF_DAY, 23);
endTime.set(Calendar.MINUTE, 59);
WeekViewEvent event1 = new WeekViewEvent(this.getIdentifier(), this.getName(), this.getLocation(), this.getStartTime(), endTime, this.isAllDay());
- event1.setColor(this.getColor());
+ event1.setColor(this.mColor);
events.add(event1);
// Add other days.
@@ -321,7 +318,7 @@ public class WeekViewEvent {
endOfOverDay.set(Calendar.HOUR_OF_DAY, 23);
endOfOverDay.set(Calendar.MINUTE, 59);
WeekViewEvent eventMore = new WeekViewEvent(this.getIdentifier(), this.getName(), null, overDay, endOfOverDay, this.isAllDay());
- eventMore.setColor(this.getColor());
+ eventMore.setColor(this.mColor);
events.add(eventMore);
// Add next day.
@@ -333,7 +330,7 @@ public class WeekViewEvent {
startTime.set(Calendar.HOUR_OF_DAY, 0);
startTime.set(Calendar.MINUTE, 0);
WeekViewEvent event2 = new WeekViewEvent(this.getIdentifier(), this.getName(), this.getLocation(), startTime, this.getEndTime(), this.isAllDay());
- event2.setColor(this.getColor());
+ event2.setColor(this.mColor);
events.add(event2);
} else {
events.add(this);
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index dff9237..9beebeb 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -31,7 +31,7 @@
Vergangene Veranstaltungen
Veranstaltungen
Noten
- Aktuelle Prozentzahl
+ Aktuelle Prozentzahl
Offline-Modus
Aktualisieren fehlgeschlagen…
Hey, schau\' dir die neue KVV App an: %1$s
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 607a07f..d48387a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -37,7 +37,7 @@
Past Events
Events
Gradebook
- Current Percentage
+ Current Percentage
Offline Mode
Refresh failed…
Hey, check out the new KVV app: %1$s