diff --git a/app/src/main/java/com/example/citrusclient/views/CalendarFragment.java b/app/src/main/java/com/example/citrusclient/views/CalendarFragment.java index cc44f19..454fa78 100644 --- a/app/src/main/java/com/example/citrusclient/views/CalendarFragment.java +++ b/app/src/main/java/com/example/citrusclient/views/CalendarFragment.java @@ -1,5 +1,7 @@ package com.example.citrusclient.views; +import android.content.Intent; +import android.graphics.Color; import android.os.Bundle; import androidx.annotation.NonNull; @@ -12,6 +14,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.TableLayout; import android.widget.TableRow; @@ -20,12 +23,19 @@ import com.example.citrusclient.R; import com.example.citrusclient.models.Schedule; import com.example.citrusclient.viewmodels.ScheduleViewModel; +import com.google.android.material.floatingactionbutton.FloatingActionButton; import java.io.ObjectInputStream; +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.YearMonth; import java.util.ArrayList; import java.util.Calendar; import java.util.List; +import android.view.ViewGroup.MarginLayoutParams; +import android.view.ViewGroup.LayoutParams; + /** * A simple {@link Fragment} subclass. * Use the {@link CalendarFragment#newInstance} factory method to @@ -89,23 +99,75 @@ private List scheduleList; ScheduleViewModel scheduleViewModel; + int year; int month; + public TextView[][] calendar(int firstDayOfWeek, int prevMonthDay, int lastDay) { + int curDay = 1; + int d = 1; + int prevDay = prevMonthDay - firstDayOfWeek; + TextView textViews[][] = new TextView[6][7]; + if(firstDayOfWeek == 7) firstDayOfWeek = 0; + for(int i = 0; i < 6; i++) { + for(int j = 0; j < 7; j++){ + if(firstDayOfWeek > 0) { + prevDay++; + textViews[i][j] = new TextView(requireContext()); + textViews[i][j].setTextColor(Color.GRAY); + textViews[i][j].setText("" + prevDay); + firstDayOfWeek--; + } else if(firstDayOfWeek <= 0 && curDay <= lastDay) { + textViews[i][j] = new TextView(requireContext()); + textViews[i][j].setText("" + curDay); + curDay++; + } else if (curDay > lastDay && d <= 43-curDay) { + textViews[i][j] = new TextView(requireContext()); + textViews[i][j].setTextColor(Color.GRAY); + textViews[i][j].setText("" + d); + d++; + } + } + } + return textViews; + } + @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); tableLayout = view.findViewById(R.id.calendarlayout); Calendar calendar = Calendar.getInstance(); - month = calendar.get(Calendar.MONTH) + 1; - int date = calendar.get(Calendar.DATE); - int lastdate = calendar.getActualMaximum(Calendar.DATE); - int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); + year = calendar.get(Calendar.YEAR); //現在の年 + month = calendar.get(Calendar.MONTH) + 1; //現在の月 + + //現在の月の最後の日付を取得 + YearMonth yearMonth = YearMonth.of(year, month); + LocalDate CurLastDay = yearMonth.atEndOfMonth(); + int lastDay = CurLastDay.getDayOfMonth(); + + //前の月の最後の日付を取得 + LocalDate lastDate = LocalDate.of(year, month, 1); + LocalDate lastDayPrevMonth = lastDate.minusDays(1); + int prevMonthDay = lastDayPrevMonth.getDayOfMonth(); + + //指定した年月の一日の曜日を取得 + LocalDate firstDay = LocalDate.of(year, month, 1); + DayOfWeek dayOfWeek = firstDay.getDayOfWeek(); + int firstDayOfWeek = dayOfWeek.getValue(); Button nextMonth = view.findViewById(R.id.nextMonth); Button prevMonth = view.findViewById(R.id.prevMonth); + FloatingActionButton createBook = view.findViewById(R.id.floatingActionButton); TextView curMonth = view.findViewById(R.id.month); curMonth.setText("" + month + "月"); + + createBook.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + ((MainActivity) getActivity()).showFragment(new CreateScheduleFragment()); + } + }); + nextMonth.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -114,6 +176,53 @@ month = 1; } curMonth.setText("" + month + "月"); + //指定した年月の一日の曜日を取得 + LocalDate firstDay = LocalDate.of(year, month, 1); + DayOfWeek dayOfWeek = firstDay.getDayOfWeek(); + int firstDayOfWeek = dayOfWeek.getValue(); + //前の月の最後の日付を取得 + LocalDate lastDate = LocalDate.of(year, month, 1); + LocalDate lastDayPrevMonth = lastDate.minusDays(1); + int prevMonthDay = lastDayPrevMonth.getDayOfMonth(); + //現在の月の最後の日付を取得 + YearMonth yearMonth = YearMonth.of(year, month); + LocalDate CurLastDay = yearMonth.atEndOfMonth(); + int lastDay = CurLastDay.getDayOfMonth(); + + TextView[][] days = calendar(firstDayOfWeek, prevMonthDay, lastDay); + tableLayout.removeAllViews(); + for (int i = 0; i < 6; i++) { + tableRows[i] = new TableRow(requireContext()); + tableLayout.addView(tableRows[i]); + } + for(int i = 0; i < 6; i++) { + for(int j = 0; j < 7; j++) { + LinearLayout layout = new LinearLayout(requireContext()); + layout.setOrientation(LinearLayout.VERTICAL); + RecyclerView recyclerView = new RecyclerView(requireContext()); + recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext())); + recyclerView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); + List schedules = new ArrayList<>(); + schedules.add(new Schedule("abc", "3232", "yyyy", 0, 1)); + schedules.add(new Schedule("123", "3232", "yyyy", 0, 2)); + if(i==2&&j==1)schedules.add(new Schedule("aho", "3232", "yyyy", 0, 5)); + recyclerView.setAdapter(new MyScheduleAdapter(schedules)); + LinearLayout.LayoutParams p = (LinearLayout.LayoutParams) recyclerView.getLayoutParams(); + p.weight = 1; + p.height = -1; + tableRows[i].setLayoutParams(p); + + layout.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT)); + TableRow.LayoutParams p2 = (TableRow.LayoutParams) layout.getLayoutParams(); + p2.weight = 1; + layout.setLayoutParams(p2); + + + layout.addView(days[i][j]); + layout.addView(recyclerView); + tableRows[i].addView(layout); + } + } } }); @@ -125,18 +234,65 @@ month = 12; } curMonth.setText("" + month + "月"); + //指定した年月の一日の曜日を取得 + LocalDate firstDay = LocalDate.of(year, month, 1); + DayOfWeek dayOfWeek = firstDay.getDayOfWeek(); + int firstDayOfWeek = dayOfWeek.getValue(); + //前の月の最後の日付を取得 + LocalDate lastDate = LocalDate.of(year, month, 1); + LocalDate lastDayPrevMonth = lastDate.minusDays(1); + int prevMonthDay = lastDayPrevMonth.getDayOfMonth(); + //現在の月の最後の日付を取得 + YearMonth yearMonth = YearMonth.of(year, month); + LocalDate CurLastDay = yearMonth.atEndOfMonth(); + int lastDay = CurLastDay.getDayOfMonth(); + + TextView[][] days = calendar(firstDayOfWeek, prevMonthDay, lastDay); + tableLayout.removeAllViews(); + for (int i = 0; i < 6; i++) { + tableRows[i] = new TableRow(requireContext()); + tableLayout.addView(tableRows[i]); + } + for(int i = 0; i < 6; i++) { + for(int j = 0; j < 7; j++) { + LinearLayout layout = new LinearLayout(requireContext()); + layout.setOrientation(LinearLayout.VERTICAL); + RecyclerView recyclerView = new RecyclerView(requireContext()); + recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext())); + recyclerView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); + List schedules = new ArrayList<>(); + schedules.add(new Schedule("abc", "3232", "yyyy", 0, 1)); + schedules.add(new Schedule("123", "3232", "yyyy", 0, 2)); + if(i==2&&j==1)schedules.add(new Schedule("aho", "3232", "yyyy", 0, 5)); + recyclerView.setAdapter(new MyScheduleAdapter(schedules)); + LinearLayout.LayoutParams p = (LinearLayout.LayoutParams) recyclerView.getLayoutParams(); + p.weight = 1; + p.height = -1; + tableRows[i].setLayoutParams(p); + + layout.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT)); + TableRow.LayoutParams p2 = (TableRow.LayoutParams) layout.getLayoutParams(); + p2.weight = 1; + layout.setLayoutParams(p2); + + + layout.addView(days[i][j]); + layout.addView(recyclerView); + tableRows[i].addView(layout); + } + } } }); + TextView[][] days = calendar(firstDayOfWeek, prevMonthDay, lastDay); for(int i = 0; i < 6; i++) { tableRows[i] = (TableRow) tableLayout.getChildAt(i); + for(int j = 0; j < 7; j++) { LinearLayout layout = new LinearLayout(requireContext()); layout.setOrientation(LinearLayout.VERTICAL); - TextView textView = new TextView(requireContext()); - textView.setText("" + i); RecyclerView recyclerView = new RecyclerView(requireContext()); recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext())); @@ -151,7 +307,7 @@ layout.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT)); TableRow.LayoutParams p2 = (TableRow.LayoutParams) layout.getLayoutParams(); p2.weight = 1; - layout.addView(textView); + layout.addView(days[i][j]); layout.addView(recyclerView); tableRows[i].addView(layout); }