Skip to content

Commit

Permalink
* Add Vacation and Illnes Drawable to Calendar as Span
Browse files Browse the repository at this point in the history
* Some refactoring in naming and PNG's to SVG
  • Loading branch information
StefMa committed May 26, 2016
1 parent 89c3bce commit 26aad9c
Show file tree
Hide file tree
Showing 18 changed files with 146 additions and 16 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
package guru.stefma.timetracking.decorator;

import android.graphics.drawable.Drawable;
import android.support.annotation.IntDef;
import android.text.style.ImageSpan;

import com.prolificinteractive.materialcalendarview.CalendarDay;
import com.prolificinteractive.materialcalendarview.DayViewDecorator;
import com.prolificinteractive.materialcalendarview.DayViewFacade;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.List;

Expand All @@ -13,20 +19,103 @@

public class TimeTrackDecorator implements DayViewDecorator {

private final CalendarDay mDay;
@Retention(RetentionPolicy.SOURCE)
@IntDef({
NORMAL_WORK,
ILLNESS,
VACATION
})
private @interface SpanMode {
}

private CalendarDay mDay;

private List<Work> mDaysToDecorate;

private Drawable mIllnessDrawable;

private Drawable mVacationDrawable;

private Object mTimeTrackSpan;

private final TimeTrackSpan mTimeTrackSpan;
private static final int NORMAL_WORK = 0;

public TimeTrackDecorator(WorkingDay workingDay, List<Work> daysToDecorate) {
private static final int ILLNESS = 1;

private static final int VACATION = 2;

public static TimeTrackDecorator create(WorkingDay workingDay) {
return new TimeTrackDecorator(workingDay);
}

TimeTrackDecorator(WorkingDay workingDay) {
mDay = CalendarViewUtils.from(workingDay);
}

public TimeTrackDecorator withWorkList(List<Work> daysToDecorate) {
mDaysToDecorate = daysToDecorate;
return this;
}

public TimeTrackDecorator illness(Drawable illnessDrawable) {
mIllnessDrawable = illnessDrawable;
return this;
}

public TimeTrackDecorator vacation(Drawable vacationDrawable) {
mVacationDrawable = vacationDrawable;
return this;
}

public TimeTrackDecorator build() {
return new TimeTrackDecorator(mDay, mDaysToDecorate, mIllnessDrawable, mVacationDrawable);
}

List<Float> workHours = new ArrayList<>(daysToDecorate.size());
for (Work workList : daysToDecorate) {
float workHour = workList.getWorkTime();
workHours.add(workHour);
TimeTrackDecorator(CalendarDay day, List<Work> daysToDecorate,
Drawable illness, Drawable vacation) {
mDay = day;

@SpanMode
int spanMode = validateWork(daysToDecorate);
switch (spanMode) {
case NORMAL_WORK:
List<Float> workHours = new ArrayList<>(daysToDecorate.size());
for (Work work : daysToDecorate) {
float workHour = work.getWorkTime();
workHours.add(workHour);
}

mTimeTrackSpan = new TimeTrackSpan(daysToDecorate.size(), workHours);
break;
case ILLNESS:
illness.setBounds(0, 0, illness.getIntrinsicWidth(),
illness.getIntrinsicHeight());
mTimeTrackSpan = new ImageSpan(illness);
break;
case VACATION:
vacation.setBounds(0, 0, illness.getIntrinsicWidth(),
vacation.getIntrinsicHeight());
mTimeTrackSpan = new ImageSpan(vacation);
break;
}

mTimeTrackSpan = new TimeTrackSpan(daysToDecorate.size(), workHours);
}

@SpanMode
private int validateWork(List<Work> daysToDecorate) {
if (daysToDecorate.size() > 1) {
return NORMAL_WORK;
}
if (daysToDecorate.size() == 1) {
Work work = daysToDecorate.get(0);
if (work.getIllness()) {
return ILLNESS;
}
if (work.getVacation()) {
return VACATION;
}
}
return NORMAL_WORK;
}

@Override
Expand Down
18 changes: 16 additions & 2 deletions app/src/main/java/guru/stefma/timetracking/main/MainActivity.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package guru.stefma.timetracking.main;

import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.graphics.drawable.VectorDrawableCompat;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
Expand All @@ -20,10 +22,10 @@
import java.util.List;

import guru.stefma.restapi.objects.WorkList;
import guru.stefma.timetracking.timetrack.AddTimeTrackActivity;
import guru.stefma.timetracking.R;
import guru.stefma.timetracking.settings.SettingsActivity;
import guru.stefma.timetracking.decorator.TimeTrackDecorator;
import guru.stefma.timetracking.settings.SettingsActivity;
import guru.stefma.timetracking.timetrack.AddTimeTrackActivity;

public class MainActivity extends AppCompatActivity implements MainView {

Expand Down Expand Up @@ -115,4 +117,16 @@ public void setDecorators(List<TimeTrackDecorator> decorators) {
mCalendarView.addDecorators(decorators);
mCalendarView.invalidateDecorators();
}

@Override
public Drawable getVacationDrawable() {
return VectorDrawableCompat.create(getResources(),
R.drawable.ic_vacation_white_24dp, getTheme());
}

@Override
public Drawable getIllnessDrawable() {
return VectorDrawableCompat.create(getResources(),
R.drawable.ic_illness_white_24dp, getTheme());
}
}
13 changes: 10 additions & 3 deletions app/src/main/java/guru/stefma/timetracking/main/MainPresenter.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package guru.stefma.timetracking.main;

import android.content.Intent;
import android.graphics.drawable.Drawable;

import com.prolificinteractive.materialcalendarview.CalendarDay;
import com.prolificinteractive.materialcalendarview.MaterialCalendarView;
Expand All @@ -16,10 +17,10 @@
import guru.stefma.restapi.objects.WorkingDay;
import guru.stefma.restapi.objects.WorkingList;
import guru.stefma.restapi.objects.WorkingMonth;
import guru.stefma.timetracking.timetrack.AddTimeTrackActivity;
import guru.stefma.timetracking.BuildConfig;
import guru.stefma.timetracking.CalendarViewUtils;
import guru.stefma.timetracking.decorator.TimeTrackDecorator;
import guru.stefma.timetracking.timetrack.AddTimeTrackActivity;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
Expand Down Expand Up @@ -99,11 +100,17 @@ public void onFailure(Call<WorkingList> call, Throwable t) {
private List<TimeTrackDecorator> createDecorators() {
List<WorkList> workList = mWorkingList.getWorkList();
List<TimeTrackDecorator> decorators = new ArrayList<>();
Drawable vacationDrawable = mView.getVacationDrawable();
Drawable illnessDrawable = mView.getIllnessDrawable();
for (WorkList workL : workList) {
WorkingDay workingDay = workL.getWorkingDay();
List<Work> workingDays = workL.getWorkList();
TimeTrackDecorator decorator = new TimeTrackDecorator(workingDay, workingDays);
decorators.add(decorator);
TimeTrackDecorator trackDecorator = TimeTrackDecorator.create(workingDay)
.withWorkList(workingDays)
.illness(illnessDrawable)
.vacation(vacationDrawable)
.build();
decorators.add(trackDecorator);
}
return decorators;
}
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/java/guru/stefma/timetracking/main/MainView.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package guru.stefma.timetracking.main;

import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;

import com.prolificinteractive.materialcalendarview.CalendarDay;
Expand All @@ -21,4 +22,7 @@ interface MainView {

void setDecorators(List<TimeTrackDecorator> decorators);

Drawable getVacationDrawable();

Drawable getIllnessDrawable();
}
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ private boolean checkIfAllTimeTrackViewsReady() {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.addtimetrack, menu);
menuInflater.inflate(R.menu.addtimetrack_menu, menu);
mSaveAction = menu.findItem(R.id.addtimetrack_save_action);
MenuItem deleteAction = menu.findItem(R.id.addtimetrack_delete_action);
deleteAction.setVisible(mWorkList.getWorkList() != null);
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_illness_white_24dp.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#FFF"
android:pathData="M17.73,12.02l3.98,-3.98c0.39,-0.39 0.39,-1.02 0,-1.41l-4.34,-4.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-3.98,3.98L8,2.29C7.8,2.1 7.55,2 7.29,2c-0.25,0 -0.51,0.1 -0.7,0.29L2.25,6.63c-0.39,0.39 -0.39,1.02 0,1.41l3.98,3.98L2.25,16c-0.39,0.39 -0.39,1.02 0,1.41l4.34,4.34c0.39,0.39 1.02,0.39 1.41,0l3.98,-3.98 3.98,3.98c0.2,0.2 0.45,0.29 0.71,0.29 0.26,0 0.51,-0.1 0.71,-0.29l4.34,-4.34c0.39,-0.39 0.39,-1.02 0,-1.41l-3.99,-3.98zM12,9c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM7.29,10.96L3.66,7.34l3.63,-3.63 3.62,3.62 -3.62,3.63zM10,13c-0.55,0 -1,-0.45 -1,-1s0.45,-1 1,-1 1,0.45 1,1 -0.45,1 -1,1zM12,15c-0.55,0 -1,-0.45 -1,-1s0.45,-1 1,-1 1,0.45 1,1 -0.45,1 -1,1zM14,11c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM16.66,20.34l-3.63,-3.62 3.63,-3.63 3.62,3.62 -3.62,3.63z"/>
</vector>
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_vacation_white_24dp.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFF"
android:pathData="M2.5,19h19v2h-19zM22.07,9.64c-0.21,-0.8 -1.04,-1.28 -1.84,-1.06L14.92,10l-6.9,-6.43 -1.93,0.51 4.14,7.17 -4.97,1.33 -1.97,-1.54 -1.45,0.39 1.82,3.16 0.77,1.33 1.6,-0.43 5.31,-1.42 4.35,-1.16L21,11.49c0.81,-0.23 1.28,-1.05 1.07,-1.85z"/>
</vector>
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,10 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/addtimetrack_illness_action"
android:icon="@drawable/ic_hospital_illness_white_24dp"
android:title="@string/addtimetrack_menu_illness"
app:showAsAction="never"/>
<item
android:id="@+id/addtimetrack_vacation_action"
android:icon="@drawable/ic_flight_vacation_white_24dp"
android:title="@string/addtimetrack_menu_vacation"
app:showAsAction="never"/>
<item
Expand Down

0 comments on commit 26aad9c

Please sign in to comment.