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 a341ec6..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"); @@ -92,8 +137,8 @@ class MealAdapter extends BaseExpandableListAdapter { } 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 5c9bd7c..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; @@ -1653,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 index 0552d62..a9a76cd 100644 --- a/app/src/main/res/layout/list_canteen_items.xml +++ b/app/src/main/res/layout/list_canteen_items.xml @@ -1,51 +1,17 @@ - - + app:title="Passengers" + app:outer_view="@layout/list_canteen_header" + app:inner_view="@layout/list_all_show_more" + app:expandOnClick="true" + app:animationDuration="300" + app:startExpanded="false" /> + \ No newline at end of file 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 + + +