package com.byagowi.persiancalendar.view.fragment;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.widget.AppCompatImageView;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.byagowi.persiancalendar.Constants;
import com.byagowi.persiancalendar.R;
import com.byagowi.persiancalendar.adapter.MonthAdapter;
import com.byagowi.persiancalendar.entity.DayEntity;
import com.byagowi.persiancalendar.util.Utils;
import java.util.List;
import calendar.PersianDate;
public class MonthFragment extends Fragment implements View.OnClickListener {
private Utils utils;
private CalendarFragment calendarFragment;
private PersianDate persianDate;
private int offset;
private MonthAdapter adapter;
@Override
public View onCreateView(
LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
utils = Utils.getInstance(getContext());
View view = inflater.inflate(R.layout.fragment_month, container, false);
offset = getArguments().getInt(Constants.OFFSET_ARGUMENT);
List<DayEntity> days = utils.getDays(offset);
AppCompatImageView prev = (AppCompatImageView) view.findViewById(R.id.prev);
AppCompatImageView next = (AppCompatImageView) view.findViewById(R.id.next);
prev.setOnClickListener(this);
next.setOnClickListener(this);
persianDate = utils.getToday();
int month = persianDate.getMonth() - offset;
month -= 1;
int year = persianDate.getYear();
year = year + (month / 12);
month = month % 12;
if (month < 0) {
year -= 1;
month += 12;
}
month += 1;
persianDate.setMonth(month);
persianDate.setYear(year);
persianDate.setDayOfMonth(1);
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.RecyclerView);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getContext(), 7);
recyclerView.setLayoutManager(layoutManager);
adapter = new MonthAdapter(getContext(), this, days);
recyclerView.setAdapter(adapter);
calendarFragment = (CalendarFragment) getActivity()
.getSupportFragmentManager()
.findFragmentByTag(CalendarFragment.class.getName());
if (offset == 0 && calendarFragment.getViewPagerPosition() == offset) {
calendarFragment.selectDay(utils.getToday());
updateTitle();
}
LocalBroadcastManager.getInstance(getContext()).registerReceiver(setCurrentMonthReceiver,
new IntentFilter(Constants.BROADCAST_INTENT_TO_MONTH_FRAGMENT));
return view;
}
private BroadcastReceiver setCurrentMonthReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int value = intent.getExtras().getInt(Constants.BROADCAST_FIELD_TO_MONTH_FRAGMENT);
if (value == offset) {
updateTitle();
int day = intent.getExtras().getInt(Constants.BROADCAST_FIELD_SELECT_DAY);
if (day != -1) {
adapter.selectDay(day);
}
utils.checkYearAndWarnIfNeeded(persianDate.getYear());
} else if (value == Constants.BROADCAST_TO_MONTH_FRAGMENT_RESET_DAY) {
adapter.clearSelectedDay();
}
}
};
@Override
public void onDestroy() {
LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(setCurrentMonthReceiver);
super.onDestroy();
}
public void onClickItem(PersianDate day) {
calendarFragment.selectDay(day);
}
public void onLongClickItem(PersianDate day) {
calendarFragment.addEventOnCalendar(day);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.next:
calendarFragment.changeMonth(1);
break;
case R.id.prev:
calendarFragment.changeMonth(-1);
break;
}
}
private void updateTitle() {
utils.setActivityTitleAndSubtitle(
getActivity(),
utils.getMonthName(persianDate),
utils.formatNumber(persianDate.getYear()));
}
}