// Copyright 2013 Square, Inc.
package com.squareup.timessquare;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.FrameLayout;
import android.widget.TextView;
public class CalendarCellView extends FrameLayout {
private static final int[] STATE_SELECTABLE = {
R.attr.tsquare_state_selectable
};
private static final int[] STATE_CURRENT_MONTH = {
R.attr.tsquare_state_current_month
};
private static final int[] STATE_TODAY = {
R.attr.tsquare_state_today
};
private static final int[] STATE_HIGHLIGHTED = {
R.attr.tsquare_state_highlighted
};
private static final int[] STATE_RANGE_FIRST = {
R.attr.tsquare_state_range_first
};
private static final int[] STATE_RANGE_MIDDLE = {
R.attr.tsquare_state_range_middle
};
private static final int[] STATE_RANGE_LAST = {
R.attr.tsquare_state_range_last
};
private boolean isSelectable = false;
private boolean isCurrentMonth = false;
private boolean isToday = false;
private boolean isHighlighted = false;
private RangeState rangeState = RangeState.NONE;
private TextView dayOfMonthTextView;
@SuppressWarnings("UnusedDeclaration") //
public CalendarCellView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setSelectable(boolean isSelectable) {
if (this.isSelectable != isSelectable) {
this.isSelectable = isSelectable;
refreshDrawableState();
}
}
public void setCurrentMonth(boolean isCurrentMonth) {
if (this.isCurrentMonth != isCurrentMonth) {
this.isCurrentMonth = isCurrentMonth;
refreshDrawableState();
}
}
public void setToday(boolean isToday) {
if (this.isToday != isToday) {
this.isToday = isToday;
refreshDrawableState();
}
}
public void setRangeState(RangeState rangeState) {
if (this.rangeState != rangeState) {
this.rangeState = rangeState;
refreshDrawableState();
}
}
public void setHighlighted(boolean isHighlighted) {
if (this.isHighlighted != isHighlighted) {
this.isHighlighted = isHighlighted;
refreshDrawableState();
}
}
public boolean isCurrentMonth() {
return isCurrentMonth;
}
public boolean isToday() {
return isToday;
}
public boolean isSelectable() {
return isSelectable;
}
public boolean isHighlighted() {
return isHighlighted;
}
public RangeState getRangeState() {
return rangeState;
}
@Override protected int[] onCreateDrawableState(int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 5);
if (isSelectable) {
mergeDrawableStates(drawableState, STATE_SELECTABLE);
}
if (isCurrentMonth) {
mergeDrawableStates(drawableState, STATE_CURRENT_MONTH);
}
if (isToday) {
mergeDrawableStates(drawableState, STATE_TODAY);
}
if (isHighlighted) {
mergeDrawableStates(drawableState, STATE_HIGHLIGHTED);
}
if (rangeState == RangeState.FIRST) {
mergeDrawableStates(drawableState, STATE_RANGE_FIRST);
} else if (rangeState == RangeState.MIDDLE) {
mergeDrawableStates(drawableState, STATE_RANGE_MIDDLE);
} else if (rangeState == RangeState.LAST) {
mergeDrawableStates(drawableState, STATE_RANGE_LAST);
}
return drawableState;
}
public void setDayOfMonthTextView(TextView textView) {
dayOfMonthTextView = textView;
}
public TextView getDayOfMonthTextView() {
if (dayOfMonthTextView == null) {
throw new IllegalStateException(
"You have to setDayOfMonthTextView in your custom DayViewAdapter."
);
}
return dayOfMonthTextView;
}
}