package com.p_v.flexiblecalendar; import android.content.Context; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import com.p_v.flexiblecalendar.view.BaseCellView; import com.p_v.flexiblecalendar.view.IWeekCellViewDrawer; import com.p_v.fliexiblecalendar.R; import java.text.DateFormatSymbols; /** * @author p-v */ public class WeekdayNameDisplayAdapter extends ArrayAdapter<WeekdayNameDisplayAdapter.WeekDay> { private IWeekCellViewDrawer cellViewDrawer; private WeekDay[] weekDayArray; public WeekdayNameDisplayAdapter(Context context, int textViewResourceId, int startDayOfTheWeek) { super(context, textViewResourceId); initializeWeekDays(startDayOfTheWeek); } @Override public WeekDay getItem(int position) { return weekDayArray[position]; } @Override public int getCount() { return weekDayArray.length; } @Override public View getView(int position, View convertView, ViewGroup parent) { BaseCellView cellView = cellViewDrawer.getCellView(position, convertView, parent); if (cellView == null) { LayoutInflater inflater = LayoutInflater.from(getContext()); cellView = (BaseCellView) inflater.inflate(R.layout.square_cell_layout, null); } WeekDay weekDay = getItem(position); String weekdayName = cellViewDrawer.getWeekDayName(weekDay.index, weekDay.displayValue); //adding 1 as week days starts from 1 in Calendar if (TextUtils.isEmpty(weekdayName)) { weekdayName = weekDay.displayValue; } cellView.setText(weekdayName); return cellView; } private void initializeWeekDays(int startDayOfTheWeek) { DateFormatSymbols symbols = new DateFormatSymbols(FlexibleCalendarHelper.getLocale(getContext())); String[] weekDayList = symbols.getShortWeekdays(); // weekday list has 8 elements weekDayArray = new WeekDay[7]; //reordering array based on the start day of the week for (int i = 1; i < weekDayList.length; i++) { WeekDay weekDay = new WeekDay(); weekDay.index = i; weekDay.displayValue = weekDayList[i]; int tempVal = i - startDayOfTheWeek; weekDayArray[tempVal < 0 ? 7 + tempVal : tempVal] = weekDay; } } @Override public boolean isEnabled(int position) { return false; } public void setCellView(IWeekCellViewDrawer cellView) { this.cellViewDrawer = cellView; } public IWeekCellViewDrawer getCellViewDrawer() { return cellViewDrawer; } public void setStartDayOfTheWeek(int startDayOfTheWeek) { initializeWeekDays(startDayOfTheWeek); this.notifyDataSetChanged(); } public class WeekDay { int index; String displayValue; } }