diff --git a/.idea/misc.xml b/.idea/misc.xml
index a8cce1b..4e024a8 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -25,5 +25,5 @@
-
+
\ No newline at end of file
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 3cda9a1..3c63246 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java
@@ -19,7 +19,7 @@ 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.DateUtils;
+import de.sebse.fuplanner.tools.UtilsDate;
import de.sebse.fuplanner.tools.MainAcitivityListener;
import de.sebse.fuplanner.tools.logging.Logger;
import de.sebse.fuplanner.tools.ui.weekview.MonthLoader;
@@ -144,7 +144,7 @@ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChang
public void onFirstVisibleDayChanged(Calendar newFirstVisibleDay, Calendar oldFirstVisibleDay) {
Calendar newLastVisibleDay = (Calendar) newFirstVisibleDay.clone();
newLastVisibleDay.add(Calendar.HOUR, 24*mWeekView.getNumberOfVisibleDays());
- mListener.onTitleTextChange(getResources().getString(R.string.date_scale, DateUtils.getModifiedDate(newFirstVisibleDay.getTimeInMillis()), DateUtils.getModifiedDate(newLastVisibleDay.getTimeInMillis())));
+ mListener.onTitleTextChange(getResources().getString(R.string.date_scale, UtilsDate.getModifiedDate(newFirstVisibleDay.getTimeInMillis()), UtilsDate.getModifiedDate(newLastVisibleDay.getTimeInMillis())));
}
@@ -191,7 +191,7 @@ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChang
.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))
+ getResources().getString(R.string.date_scale, UtilsDate.getModifiedTime(getContext(), event.getStartTime().getTimeInMillis()), UtilsDate.getModifiedTime(getContext(), event.getEndTime().getTimeInMillis()+1))
)
.setCancelable(true)
.setNeutralButton(R.string.close, (dialog, id) -> dialog.cancel());
diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/canteen/DaySwitcherAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/canteen/DaySwitcherAdapter.java
index 5b0f492..e46ed31 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/canteen/DaySwitcherAdapter.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/canteen/DaySwitcherAdapter.java
@@ -5,7 +5,7 @@ import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import de.sebse.fuplanner.services.Canteen.types.Canteen;
-import de.sebse.fuplanner.tools.DateUtils;
+import de.sebse.fuplanner.tools.UtilsDate;
class DaySwitcherAdapter extends FragmentStatePagerAdapter {
private Canteen mCanteen = null;
@@ -39,7 +39,7 @@ class DaySwitcherAdapter extends FragmentStatePagerAdapter {
// Returns the page title for the top indicator
@Override
public CharSequence getPageTitle(int position) {
- return DateUtils.getModifiedDate(mCanteen.get(position).getCalendar().getTimeInMillis());
+ return UtilsDate.getModifiedDate(mCanteen.get(position).getCalendar().getTimeInMillis());
}
}
diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/canteen/MealAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/canteen/MealAdapter.java
index dfa0d54..a308ddd 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/canteen/MealAdapter.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/canteen/MealAdapter.java
@@ -1,19 +1,20 @@
package de.sebse.fuplanner.fragments.canteen;
import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.BaseExpandableListAdapter;
import de.sebse.fuplanner.R;
import de.sebse.fuplanner.services.Canteen.types.Day;
import de.sebse.fuplanner.services.Canteen.types.Meal;
import de.sebse.fuplanner.tools.Preferences;
import de.sebse.fuplanner.tools.ui.ItemViewHolder;
-import de.sebse.fuplanner.tools.ui.StringViewHolder;
+import de.sebse.fuplanner.tools.ui.MealViewHolder;
-class MealAdapter extends BaseExpandableListAdapter {
+class MealAdapter extends RecyclerView.Adapter {
private Day mDay = null;
private final Context mContext;
@@ -22,7 +23,51 @@ class MealAdapter extends BaseExpandableListAdapter {
mContext = context;
}
+ @NonNull
@Override
+ public MealViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
+ View view = LayoutInflater.from(viewGroup.getContext())
+ .inflate(R.layout.list_canteen_items, viewGroup, false);
+ return new MealViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull MealViewHolder viewHolder, int i) {
+ Meal meal = getItem(i);
+ viewHolder.mTitle.setText(meal.getName());
+ String value;
+ switch (Preferences.getString(mContext, R.array.pref_price_group)) {
+ case "student":
+ value = mContext.getString(R.string.price, meal.getPriceStdnt());
+ break;
+ case "employee":
+ value = mContext.getString(R.string.price, meal.getPriceEmply());
+ break;
+ case "other":
+ value = mContext.getString(R.string.price, meal.getPriceOther());
+ break;
+ default:
+ value = mContext.getString(R.string.prices, meal.getPriceStdnt(), meal.getPriceEmply(), meal.getPriceOther());
+ }
+ viewHolder.mSubTitle.setText(value);
+ }
+
+ public Meal getItem(int groupPosition) {
+ if (this.mDay != null)
+ return this.mDay.get(groupPosition);
+ else
+ return null;
+ }
+
+ @Override
+ public int getItemCount() {
+ if (this.mDay != null)
+ return this.mDay.size();
+ else
+ return 0;
+ }
+
+ /*@Override
public String getChild(int groupPosition, int childPosititon) {
StringBuilder sb = new StringBuilder();
sb.append("\n\n");
@@ -88,12 +133,12 @@ class MealAdapter extends BaseExpandableListAdapter {
Meal meal = getGroup(groupPosition);
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.list_all_items, parent, false);
+ .inflate(R.layout.list_canteen_items, parent, false);
}
ItemViewHolder itemHolder = new ItemViewHolder(convertView);
- itemHolder.mTitle.setText(meal.getName());
- itemHolder.mSubLeft.setText(meal.getCategory());
+ //itemHolder.mTitle.setText(meal.getName());
+ //itemHolder.mSubLeft.setText(meal.getCategory());
String value;
switch (Preferences.getString(mContext, R.array.pref_price_group)) {
case "student":
@@ -108,7 +153,7 @@ class MealAdapter extends BaseExpandableListAdapter {
default:
value = mContext.getString(R.string.prices, meal.getPriceStdnt(), meal.getPriceEmply(), meal.getPriceOther());
}
- itemHolder.mSubRight.setText(value);
+ //itemHolder.mSubRight.setText(value);
return convertView;
}
@@ -121,7 +166,7 @@ class MealAdapter extends BaseExpandableListAdapter {
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
- }
+ }*/
public void setDay(Day day) {
this.mDay = day;
diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/canteen/MealFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/canteen/MealFragment.java
index bc80061..51ffb8f 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/canteen/MealFragment.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/canteen/MealFragment.java
@@ -6,6 +6,7 @@ import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
+import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -69,9 +70,9 @@ public class MealFragment extends Fragment {
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
- View view = inflater.inflate(R.layout.fragment_expandable_list_view, container, false);
+ View view = inflater.inflate(R.layout.fragment_recycler_view, container, false);
// Set the adapter
- ExpandableListView expandableListView = view.findViewById(R.id.list);
+ RecyclerView expandableListView = view.findViewById(R.id.list);
adapter = new MealAdapter(getContext());
expandableListView.setAdapter(adapter);
diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAnnounceAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAnnounceAdapter.java
index ac8d30f..26562e7 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAnnounceAdapter.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAnnounceAdapter.java
@@ -10,7 +10,7 @@ import java.util.ArrayList;
import de.sebse.fuplanner.R;
import de.sebse.fuplanner.services.KVV.types.Announcement;
import de.sebse.fuplanner.services.KVV.types.Modules;
-import de.sebse.fuplanner.tools.DateUtils;
+import de.sebse.fuplanner.tools.UtilsDate;
import de.sebse.fuplanner.tools.ui.ItemViewHolder;
import de.sebse.fuplanner.tools.ui.StringViewHolder;
@@ -89,7 +89,7 @@ class ModDetailAnnounceAdapter extends BaseExpandableListAdapter {
ItemViewHolder itemHolder = new ItemViewHolder(convertView);
itemHolder.mTitle.setText(announce.getTitle());
itemHolder.mSubLeft.setText(announce.getCreatedBy());
- itemHolder.mSubRight.setText(DateUtils.getModifiedDateTime(parent.getContext(), announce.getCreatedOn()));
+ itemHolder.mSubRight.setText(UtilsDate.getModifiedDateTime(parent.getContext(), announce.getCreatedOn()));
return convertView;
}
diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAssignmentAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAssignmentAdapter.java
index cc0bdb8..431a8d5 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAssignmentAdapter.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAssignmentAdapter.java
@@ -8,7 +8,7 @@ import android.widget.BaseExpandableListAdapter;
import de.sebse.fuplanner.R;
import de.sebse.fuplanner.services.KVV.types.Assignment;
import de.sebse.fuplanner.services.KVV.types.Modules;
-import de.sebse.fuplanner.tools.DateUtils;
+import de.sebse.fuplanner.tools.UtilsDate;
import de.sebse.fuplanner.tools.ui.ItemViewHolder;
import de.sebse.fuplanner.tools.ui.StringViewHolder;
@@ -92,7 +92,7 @@ class ModDetailAssignmentAdapter extends BaseExpandableListAdapter {
itemHolder.mSubLeft.setText(itemHolder.mView.getResources().getText(R.string.open));
else
itemHolder.mSubLeft.setText(itemHolder.mView.getResources().getText(R.string.closed));
- itemHolder.mSubRight.setText(DateUtils.getModifiedDateTime(parent.getContext(), assignment.getDueDate()));
+ itemHolder.mSubRight.setText(UtilsDate.getModifiedDateTime(parent.getContext(), assignment.getDueDate()));
return convertView;
}
diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailEventAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailEventAdapter.java
index e7d6390..63f92bd 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailEventAdapter.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailEventAdapter.java
@@ -13,7 +13,7 @@ import java.util.ArrayList;
import de.sebse.fuplanner.R;
import de.sebse.fuplanner.services.KVV.types.Event;
import de.sebse.fuplanner.services.KVV.types.Modules;
-import de.sebse.fuplanner.tools.DateUtils;
+import de.sebse.fuplanner.tools.UtilsDate;
import de.sebse.fuplanner.tools.ui.CustomViewHolder;
import de.sebse.fuplanner.tools.ui.ItemViewHolder;
@@ -114,14 +114,14 @@ class ModDetailEventAdapter extends RecyclerView.Adapter {
if (mListener != null) mListener.gotoFragmentPart(section, index);
});
@@ -154,7 +154,7 @@ class ModDetailOverviewAdapter extends RecyclerView.Adapter {
if (mListener != null) mListener.gotoFragmentPart(section, index);
});
@@ -165,14 +165,14 @@ class ModDetailOverviewAdapter extends RecyclerView.Adapter {
+ if(isExpanded()) collapse();
+ else expand();
+ };
+
+ public ExpandableCardView(Context context) {
+ super(context);
+ }
+
+ public ExpandableCardView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+
+ initAttributes(context, attrs);
+ initView(context);
+ }
+
+ public ExpandableCardView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+
+ initAttributes(context, attrs);
+ initView(context);
+ }
+
+ private void initView(Context context){
+ //Inflating View
+ LayoutInflater inflater = (LayoutInflater) context
+ .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ if (inflater == null) throw new AssertionError();
+ inflater.inflate(R.layout.expandable_cardview, this);
+ }
+
+ private void initAttributes(Context context, AttributeSet attrs){
+ TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ExpandableCardView);
+ title = typedArray.getString(R.styleable.ExpandableCardView_title);
+ //iconDrawable = typedArray.getDrawable(R.styleable.ExpandableCardView_icon);
+ innerViewRes = typedArray.getResourceId(R.styleable.ExpandableCardView_inner_view, View.NO_ID);
+ outerViewRes = typedArray.getResourceId(R.styleable.ExpandableCardView_outer_view, View.NO_ID);
+ expandOnClick = typedArray.getBoolean(R.styleable.ExpandableCardView_expandOnClick, false);
+ animDuration = typedArray.getInteger(R.styleable.ExpandableCardView_animationDuration, DEFAULT_ANIM_DURATION);
+ startExpanded = typedArray.getBoolean(R.styleable.ExpandableCardView_startExpanded, false);
+ typedArray.recycle();
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+
+ arrowBtn = findViewById(R.id.arrow);
+ //textViewTitle = findViewById(R.id.title);
+ //headerIcon = findViewById(R.id.icon);
+
+ //Setting attributes
+ /*if(!TextUtils.isEmpty(title)) textViewTitle.setText(title);
+
+ if(iconDrawable != null){
+ headerIcon.setVisibility(VISIBLE);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+ headerIcon.setBackground(iconDrawable);
+ }
+ }*/
+
+ card = findViewById(R.id.card);
+
+ setInnerView(innerViewRes);
+ setOuterView(outerViewRes);
+
+ containerView = findViewById(R.id.viewContainer);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ setElevation(UtilsUi.convertDpToPixels(getContext(), 4));
+ }
+
+ if(startExpanded){
+ setAnimDuration(0);
+ expand();
+ setAnimDuration(animDuration);
+ }
+
+ if(expandOnClick){
+ card.setOnClickListener(defaultClickListener);
+ arrowBtn.setOnClickListener(defaultClickListener);
+ }
+
+ }
+
+ public void expand() {
+
+ final int initialHeight = card.getHeight();
+
+ if(!isMoving()) {
+ previousHeight = initialHeight;
+ }
+
+ card.measure(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
+ int targetHeight = card.getMeasuredHeight();
+
+ if(targetHeight - initialHeight != 0) {
+ animateViews(initialHeight,
+ targetHeight - initialHeight,
+ EXPANDING);
+ }
+ }
+
+ public void collapse() {
+ int initialHeight = card.getMeasuredHeight();
+
+ if(initialHeight - previousHeight != 0) {
+ animateViews(initialHeight,
+ initialHeight - previousHeight,
+ COLLAPSING);
+ }
+
+ }
+
+ public boolean isExpanded() {
+ return isExpanded;
+ }
+
+ private void animateViews(final int initialHeight, final int distance, final int animationType){
+
+ Animation expandAnimation = new Animation() {
+ @Override
+ protected void applyTransformation(float interpolatedTime, Transformation t) {
+ if (interpolatedTime == 1){
+ //Setting isExpanding/isCollapsing to false
+ isExpanding = false;
+ isCollapsing = false;
+
+ if(listener != null){
+ if(animationType == EXPANDING){
+ listener.onExpandChanged(card,true);
+ }
+ else{
+ listener.onExpandChanged(card,false);
+ }
+ }
+ }
+
+ card.getLayoutParams().height = animationType == EXPANDING ? (int) (initialHeight + (distance * interpolatedTime)) :
+ (int) (initialHeight - (distance * interpolatedTime));
+ card.findViewById(R.id.viewContainer).requestLayout();
+
+ containerView.getLayoutParams().height = animationType == EXPANDING ? (int) (initialHeight + (distance * interpolatedTime)) :
+ (int) (initialHeight - (distance * interpolatedTime));
+
+ }
+
+ @Override
+ public boolean willChangeBounds() {
+ return true;
+ }
+ };
+
+ RotateAnimation arrowAnimation = animationType == EXPANDING ?
+ new RotateAnimation(0,180,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
+ 0.5f) :
+ new RotateAnimation(180,0,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
+ 0.5f);
+
+ arrowAnimation.setFillAfter(true);
+
+
+ arrowAnimation.setDuration(animDuration);
+ expandAnimation.setDuration(animDuration);
+
+ isExpanding = animationType == EXPANDING;
+ isCollapsing = animationType == COLLAPSING;
+
+ startAnimation(expandAnimation);
+ //Log.d("SO","Started animation: "+ (animationType == EXPANDING ? "Expanding" : "Collapsing"));
+ arrowBtn.startAnimation(arrowAnimation);
+ isExpanded = animationType == EXPANDING;
+
+ }
+
+ private boolean isExpanding(){
+ return isExpanding;
+ }
+
+ private boolean isCollapsing(){
+ return isCollapsing;
+ }
+
+ private boolean isMoving(){
+ return isExpanding() || isCollapsing();
+ }
+
+ public void setOnExpandedListener(OnExpandedListener listener) {
+ this.listener = listener;
+ }
+
+ public void removeOnExpandedListener(){
+ this.listener = null;
+ }
+
+ /*public void setTitle(String title){
+ if(textViewTitle != null) textViewTitle.setText(title);
+ }
+
+ public void setTitle(int resId){
+ if(textViewTitle != null) textViewTitle.setText(resId);
+ }
+
+ public void setIcon(Drawable drawable){
+ if(headerIcon != null){
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+ headerIcon.setBackground(drawable);
+ }
+ iconDrawable = drawable;
+ }
+ }
+
+ public void setIcon(int resId){
+ if(headerIcon != null){
+ iconDrawable = ContextCompat.getDrawable(getContext(), resId);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+ headerIcon.setBackground(iconDrawable);
+ }
+ }
+ }*/
+
+ private void setInnerView(int resId){
+ ViewStub stub = findViewById(R.id.viewStub);
+ stub.setLayoutResource(resId);
+ stub.inflate();
+ }
+
+ private void setOuterView(int resId){
+ ViewStub stub = findViewById(R.id.headerStub);
+ stub.setLayoutResource(resId);
+ View view = stub.inflate();
+ }
+
+
+ @Override
+ public void setOnClickListener(@Nullable OnClickListener l) {
+ if(arrowBtn != null) arrowBtn.setOnClickListener(l);
+ super.setOnClickListener(l);
+ }
+
+ public long getAnimDuration() {
+ return animDuration;
+ }
+
+ public void setAnimDuration(long animDuration) {
+ this.animDuration = animDuration;
+ }
+
+
+ /**
+ * Interfaces
+ */
+
+ public interface OnExpandedListener {
+
+ void onExpandChanged(View v, boolean isExpanded);
+
+ }
+
+}
+
+
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 212f53b..31ecfbe 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
@@ -9,7 +9,6 @@ import android.graphics.Paint;
import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.RectF;
-import android.graphics.Region;
import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
@@ -47,7 +46,7 @@ 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.UtilsDate;
import de.sebse.fuplanner.tools.logging.Logger;
import static de.sebse.fuplanner.tools.ui.weekview.WeekViewUtil.daysBetween;
@@ -741,7 +740,8 @@ public class WeekView extends View {
canvas.drawRect(0, mHeaderHeight + mHeaderRowPadding * 2, mHeaderColumnWidth, getHeight(), mHeaderColumnBackgroundPaint);
// Clip to paint in left column only.
- canvas.clipRect(0, mHeaderHeight + mHeaderRowPadding * 2, mHeaderColumnWidth, getHeight(), Region.Op.REPLACE);
+ canvas.save();
+ canvas.clipRect(0, mHeaderHeight + mHeaderRowPadding * 2, mHeaderColumnWidth, getHeight());
for (int i = 0; i < getNumberOfPeriods(); i++) {
// If we are showing half hours (eg. 5:30am), space the times out by half the hour height
@@ -768,6 +768,7 @@ public class WeekView extends View {
if (top < getHeight())
canvas.drawText(time, mTimeTextWidth + mHeaderColumnPadding, top + mTimeTextHeight, mTimeTextPaint);
}
+ canvas.restore();
}
private void drawHeaderRowAndEvents(Canvas canvas) {
@@ -852,7 +853,8 @@ public class WeekView extends View {
}
// Clip to paint events only.
- canvas.clipRect(mHeaderColumnWidth, mHeaderHeight + mHeaderRowPadding * 2 + mHeaderMarginBottom + mTimeTextHeight / 2, getWidth(), getHeight(), Region.Op.REPLACE);
+ canvas.save();
+ canvas.clipRect(mHeaderColumnWidth, mHeaderHeight + mHeaderRowPadding * 2 + mHeaderMarginBottom + mTimeTextHeight / 2, getWidth(), getHeight());
// Iterate through each day.
Calendar oldFirstVisibleDay = mFirstVisibleDay;
@@ -954,13 +956,17 @@ public class WeekView extends View {
// In the next iteration, start from the next day.
startPixel += mWidthPerDay + mColumnGap;
}
+ canvas.restore();
// Hide everything in the first cell (top left corner).
- canvas.clipRect(0, 0, mTimeTextWidth + mHeaderColumnPadding * 2, mHeaderHeight + mHeaderRowPadding * 2, Region.Op.REPLACE);
+ canvas.save();
+ canvas.clipRect(0, 0, mTimeTextWidth + mHeaderColumnPadding * 2, mHeaderHeight + mHeaderRowPadding * 2);
canvas.drawRect(0, 0, mTimeTextWidth + mHeaderColumnPadding * 2, mHeaderHeight + mHeaderRowPadding * 2, mHeaderBackgroundPaint);
+ canvas.restore();
// Clip to paint header row only.
- canvas.clipRect(mHeaderColumnWidth, 0, getWidth(), mHeaderHeight + mHeaderRowPadding * 2, Region.Op.REPLACE);
+ canvas.save();
+ canvas.clipRect(mHeaderColumnWidth, 0, getWidth(), mHeaderHeight + mHeaderRowPadding * 2);
// Draw the header background.
canvas.drawRect(0, 0, getWidth(), mHeaderHeight + mHeaderRowPadding * 2, mHeaderBackgroundPaint);
@@ -985,6 +991,7 @@ public class WeekView extends View {
drawAllDayEvents(day, startPixel, canvas);
startPixel += mWidthPerDay + mColumnGap;
}
+ canvas.restore();
}
@@ -1645,7 +1652,7 @@ public class WeekView extends View {
@Override
public String interpretDate(Calendar date) {
try {
- return DateUtils.getModifiedDate(getContext(), date.getTimeInMillis(), "EEE dd.M").toUpperCase();
+ return UtilsDate.getModifiedDate(getContext(), date.getTimeInMillis(), "EEE dd.M").toUpperCase();
} catch (Exception e) {
e.printStackTrace();
return "";
diff --git a/app/src/main/res/drawable/arrow_down.xml b/app/src/main/res/drawable/arrow_down.xml
new file mode 100644
index 0000000..cd729bc
--- /dev/null
+++ b/app/src/main/res/drawable/arrow_down.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/expandable_cardview.xml b/app/src/main/res/layout/expandable_cardview.xml
new file mode 100644
index 0000000..14d1cd9
--- /dev/null
+++ b/app/src/main/res/layout/expandable_cardview.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/list_canteen_header.xml b/app/src/main/res/layout/list_canteen_header.xml
new file mode 100644
index 0000000..83a728c
--- /dev/null
+++ b/app/src/main/res/layout/list_canteen_header.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/list_canteen_items.xml b/app/src/main/res/layout/list_canteen_items.xml
new file mode 100644
index 0000000..a9a76cd
--- /dev/null
+++ b/app/src/main/res/layout/list_canteen_items.xml
@@ -0,0 +1,17 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/list_modetails_gradebook.xml b/app/src/main/res/layout/list_moddetails_gradebook.xml
similarity index 100%
rename from app/src/main/res/layout/list_modetails_gradebook.xml
rename to app/src/main/res/layout/list_moddetails_gradebook.xml
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 3848982..e223039 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -62,4 +62,13 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 7adfc41..f2fbbb9 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -5,4 +5,8 @@
16dp
170dp
16dp
+
+
+ 50dp
+ 10dp
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 605d3a5..2799bbe 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -20,4 +20,14 @@
- @color/colorFUBlue
+
+
+