package com.tyczj.extendedcalendarview;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Set;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
import android.content.Context;
import android.text.format.Time;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class CalendarAdapter extends BaseAdapter{
static final int FIRST_DAY_OF_WEEK =0;
Context context;
Calendar cal;
public String[] days;
// OnAddNewEventClick mAddEvent;
ArrayList<Day> dayList = new ArrayList<Day>();
public CalendarAdapter(Context context, Calendar cal){
this.cal = cal;
this.context = context;
cal.set(Calendar.DAY_OF_MONTH, 1);
refreshDays();
}
@Override
public int getCount() {
return days.length;
}
@Override
public Object getItem(int position) {
return dayList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
public int getPrevMonth(){
if(cal.get(Calendar.MONTH) == cal.getActualMinimum(Calendar.MONTH)){
cal.set(Calendar.YEAR, cal.get(Calendar.YEAR-1));
}else{
}
int month = cal.get(Calendar.MONTH);
if(month == 0){
return month = 11;
}
return month-1;
}
public int getMonth(){
return cal.get(Calendar.MONTH);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View v = convertView;
LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(position >= 0 && position < 7){
v = vi.inflate(R.layout.day_of_week, null);
TextView day = (TextView)v.findViewById(R.id.textView1);
if(position == 0){
day.setText(R.string.sunday);
}else if(position == 1){
day.setText(R.string.monday);
}else if(position == 2){
day.setText(R.string.tuesday);
}else if(position == 3){
day.setText(R.string.wednesday);
}else if(position == 4){
day.setText(R.string.thursday);
}else if(position == 5){
day.setText(R.string.friday);
}else if(position == 6){
day.setText(R.string.saturday);
}
}else{
v = vi.inflate(R.layout.day_view, null);
TextView dayTV = (TextView)v.findViewById(R.id.textView1);
RelativeLayout rl = (RelativeLayout)v.findViewById(R.id.rl);
ImageView iv = (ImageView)v.findViewById(R.id.imageView1);
ImageView blue = (ImageView)v.findViewById(R.id.imageView2);
ImageView purple = (ImageView)v.findViewById(R.id.imageView3);
ImageView green = (ImageView)v.findViewById(R.id.imageView4);
ImageView orange = (ImageView)v.findViewById(R.id.imageView5);
ImageView red = (ImageView)v.findViewById(R.id.imageView6);
blue.setVisibility(View.VISIBLE);
purple.setVisibility(View.VISIBLE);
green.setVisibility(View.VISIBLE);
purple.setVisibility(View.VISIBLE);
orange.setVisibility(View.VISIBLE);
red.setVisibility(View.VISIBLE);
iv.setVisibility(View.VISIBLE);
dayTV.setVisibility(View.VISIBLE);
rl.setVisibility(View.VISIBLE);
Day day = dayList.get(position);
if(day.getNumOfEvenets() > 0){
Set<Integer> colors = day.getColors();
iv.setVisibility(View.INVISIBLE);
blue.setVisibility(View.INVISIBLE);
purple.setVisibility(View.INVISIBLE);
green.setVisibility(View.INVISIBLE);
purple.setVisibility(View.INVISIBLE);
orange.setVisibility(View.INVISIBLE);
red.setVisibility(View.INVISIBLE);
if(colors.contains(0)){
iv.setVisibility(View.VISIBLE);
}
if(colors.contains(2)){
blue.setVisibility(View.VISIBLE);
}
if(colors.contains(4)){
purple.setVisibility(View.VISIBLE);
}
if(colors.contains(5)){
green.setVisibility(View.VISIBLE);
}
if(colors.contains(3)){
orange.setVisibility(View.VISIBLE);
}
if(colors.contains(1)){
red.setVisibility(View.VISIBLE);
}
}else{
iv.setVisibility(View.INVISIBLE);
blue.setVisibility(View.INVISIBLE);
purple.setVisibility(View.INVISIBLE);
green.setVisibility(View.INVISIBLE);
purple.setVisibility(View.INVISIBLE);
orange.setVisibility(View.INVISIBLE);
red.setVisibility(View.INVISIBLE);
}
if(day.getDay() == 0){
rl.setVisibility(View.GONE);
}else{
dayTV.setVisibility(View.VISIBLE);
dayTV.setText(String.valueOf(day.getDay()));
}
}
return v;
}
public void refreshDays()
{
// clear items
dayList.clear();
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH)+7;
int firstDay = (int)cal.get(Calendar.DAY_OF_WEEK);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
TimeZone tz = TimeZone.getDefault();
// figure size of the array
if(firstDay==1){
days = new String[lastDay+(FIRST_DAY_OF_WEEK*6)];
}
else {
days = new String[lastDay+firstDay-(FIRST_DAY_OF_WEEK+1)];
}
int j=FIRST_DAY_OF_WEEK;
// populate empty days before first real day
if(firstDay>1) {
for(j=0;j<(firstDay-FIRST_DAY_OF_WEEK)+7;j++) {
days[j] = "";
Day d = new Day(context,0,0,0);
dayList.add(d);
}
}
else {
for(j=0;j<(FIRST_DAY_OF_WEEK*6)+7;j++) {
days[j] = "";
Day d = new Day(context,0,0,0);
dayList.add(d);
}
j=FIRST_DAY_OF_WEEK*6+1; // sunday => 1, monday => 7
}
// populate days
int dayNumber = 1;
if(j>0 && dayList.size() > 0 && j != 1){
dayList.remove(j-1);
}
for(int i=j-1;i<days.length;i++) {
Day d = new Day(context,dayNumber,year,month);
Calendar cTemp = Calendar.getInstance();
cTemp.set(year, month, dayNumber);
int startDay = Time.getJulianDay(cTemp.getTimeInMillis(), TimeUnit.MILLISECONDS.toSeconds(tz.getOffset(cTemp.getTimeInMillis())));
d.setAdapter(this);
d.setStartDay(startDay);
days[i] = ""+dayNumber;
dayNumber++;
dayList.add(d);
}
}
// public abstract static class OnAddNewEventClick{
// public abstract void onAddNewEventClick();
// }
}