Skip to content

Weekly Calendar #4

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.CalendarAppExample">
<activity android:name=".EventEditActivity"></activity>
<activity android:name=".WeekViewActivity" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
package codewithcal.au.calendarappexample;

import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.time.LocalDate;
import java.util.ArrayList;

class CalendarAdapter extends RecyclerView.Adapter<CalendarViewHolder>
{
private final ArrayList<String> daysOfMonth;
private final ArrayList<LocalDate> days;
private final OnItemListener onItemListener;

public CalendarAdapter(ArrayList<String> daysOfMonth, OnItemListener onItemListener)
public CalendarAdapter(ArrayList<LocalDate> days, OnItemListener onItemListener)
{
this.daysOfMonth = daysOfMonth;
this.days = days;
this.onItemListener = onItemListener;
}

Expand All @@ -27,24 +29,36 @@ public CalendarViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int view
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.calendar_cell, parent, false);
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.height = (int) (parent.getHeight() * 0.166666666);
return new CalendarViewHolder(view, onItemListener);
if(days.size() > 15) //month view
layoutParams.height = (int) (parent.getHeight() * 0.166666666);
else // week view
layoutParams.height = (int) parent.getHeight();

return new CalendarViewHolder(view, onItemListener, days);
}

@Override
public void onBindViewHolder(@NonNull CalendarViewHolder holder, int position)
{
holder.dayOfMonth.setText(daysOfMonth.get(position));
final LocalDate date = days.get(position);
if(date == null)
holder.dayOfMonth.setText("");
else
{
holder.dayOfMonth.setText(String.valueOf(date.getDayOfMonth()));
if(date.equals(CalendarUtils.selectedDate))
holder.parentView.setBackgroundColor(Color.LTGRAY);
}
}

@Override
public int getItemCount()
{
return daysOfMonth.size();
return days.size();
}

public interface OnItemListener
{
void onItemClick(int position, String dayText);
void onItemClick(int position, LocalDate date);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package codewithcal.au.calendarappexample;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;

public class CalendarUtils
{
public static LocalDate selectedDate;

public static String formattedDate(LocalDate date)
{
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMMM yyyy");
return date.format(formatter);
}

public static String formattedTime(LocalTime time)
{
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm:ss a");
return time.format(formatter);
}

public static String monthYearFromDate(LocalDate date)
{
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM yyyy");
return date.format(formatter);
}

public static ArrayList<LocalDate> daysInMonthArray(LocalDate date)
{
ArrayList<LocalDate> daysInMonthArray = new ArrayList<>();
YearMonth yearMonth = YearMonth.from(date);

int daysInMonth = yearMonth.lengthOfMonth();

LocalDate firstOfMonth = CalendarUtils.selectedDate.withDayOfMonth(1);
int dayOfWeek = firstOfMonth.getDayOfWeek().getValue();

for(int i = 1; i <= 42; i++)
{
if(i <= dayOfWeek || i > daysInMonth + dayOfWeek)
daysInMonthArray.add(null);
else
daysInMonthArray.add(LocalDate.of(selectedDate.getYear(),selectedDate.getMonth(),i - dayOfWeek));
}
return daysInMonthArray;
}

public static ArrayList<LocalDate> daysInWeekArray(LocalDate selectedDate)
{
ArrayList<LocalDate> days = new ArrayList<>();
LocalDate current = sundayForDate(selectedDate);
LocalDate endDate = current.plusWeeks(1);

while (current.isBefore(endDate))
{
days.add(current);
current = current.plusDays(1);
}
return days;
}

private static LocalDate sundayForDate(LocalDate current)
{
LocalDate oneWeekAgo = current.minusWeeks(1);

while (current.isAfter(oneWeekAgo))
{
if(current.getDayOfWeek() == DayOfWeek.SUNDAY)
return current;

current = current.minusDays(1);
}

return null;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,28 @@
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.time.LocalDate;
import java.util.ArrayList;

public class CalendarViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
private final ArrayList<LocalDate> days;
public final View parentView;
public final TextView dayOfMonth;
private final CalendarAdapter.OnItemListener onItemListener;
public CalendarViewHolder(@NonNull View itemView, CalendarAdapter.OnItemListener onItemListener)
public CalendarViewHolder(@NonNull View itemView, CalendarAdapter.OnItemListener onItemListener, ArrayList<LocalDate> days)
{
super(itemView);
parentView = itemView.findViewById(R.id.parentView);
dayOfMonth = itemView.findViewById(R.id.cellDayText);
this.onItemListener = onItemListener;
itemView.setOnClickListener(this);
this.days = days;
}

@Override
public void onClick(View view)
{
onItemListener.onItemClick(getAdapterPosition(), (String) dayOfMonth.getText());
onItemListener.onItemClick(getAdapterPosition(), days.get(getAdapterPosition()));
}
}
65 changes: 65 additions & 0 deletions app/src/main/java/codewithcal/au/calendarappexample/Event.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package codewithcal.au.calendarappexample;

import java.time.LocalDate;
import java.time.LocalTime;
import java.util.ArrayList;

public class Event
{
public static ArrayList<Event> eventsList = new ArrayList<>();

public static ArrayList<Event> eventsForDate(LocalDate date)
{
ArrayList<Event> events = new ArrayList<>();

for(Event event : eventsList)
{
if(event.getDate().equals(date))
events.add(event);
}

return events;
}


private String name;
private LocalDate date;
private LocalTime time;

public Event(String name, LocalDate date, LocalTime time)
{
this.name = name;
this.date = date;
this.time = time;
}

public String getName()
{
return name;
}

public void setName(String name)
{
this.name = name;
}

public LocalDate getDate()
{
return date;
}

public void setDate(LocalDate date)
{
this.date = date;
}

public LocalTime getTime()
{
return time;
}

public void setTime(LocalTime time)
{
this.time = time;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package codewithcal.au.calendarappexample;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import java.util.List;

public class EventAdapter extends ArrayAdapter<Event>
{
public EventAdapter(@NonNull Context context, List<Event> events)
{
super(context, 0, events);
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent)
{
Event event = getItem(position);

if (convertView == null)
convertView = LayoutInflater.from(getContext()).inflate(R.layout.event_cell, parent, false);

TextView eventCellTV = convertView.findViewById(R.id.eventCellTV);

String eventTitle = event.getName() +" "+ CalendarUtils.formattedTime(event.getTime());
eventCellTV.setText(eventTitle);
return convertView;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package codewithcal.au.calendarappexample;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import java.time.LocalTime;

public class EventEditActivity extends AppCompatActivity
{
private EditText eventNameET;
private TextView eventDateTV, eventTimeTV;

private LocalTime time;

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event_edit);
initWidgets();
time = LocalTime.now();
eventDateTV.setText("Date: " + CalendarUtils.formattedDate(CalendarUtils.selectedDate));
eventTimeTV.setText("Time: " + CalendarUtils.formattedTime(time));
}

private void initWidgets()
{
eventNameET = findViewById(R.id.eventNameET);
eventDateTV = findViewById(R.id.eventDateTV);
eventTimeTV = findViewById(R.id.eventTimeTV);
}

public void saveEventAction(View view)
{
String eventName = eventNameET.getText().toString();
Event newEvent = new Event(eventName, CalendarUtils.selectedDate, time);
Event.eventsList.add(newEvent);
finish();
}
}
Loading