package com.handsomezhou.futurerecenttimeselect.view;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import kankan.wheel.widget.OnWheelClickedListener;
import kankan.wheel.widget.OnWheelScrollListener;
import kankan.wheel.widget.WheelView;
import kankan.wheel.widget.adapters.ArrayWheelAdapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import com.handsomezhou.futurerecenttimeselect.model.TimeItemIndex;
import com.handsomezhou.futurerecenttimeselect.util.TimeItemUtil;
import com.handsomezhou.futurerecenttimeselect.util.TimeUtil;
import com.handsomezhou.futurerecenttimeselect.util.ViewUtil;
import com.handsomezhou.futurerecenttimeselectview.R;
public class FutureRecentTimeView extends LinearLayout{
public static final String TAG="FutureRecentTimeView";
public static final int WHEEL_VIEW_VISIBLE_ITEMS=7;
private Context mContext;
private OnFutureRecentTimeView mOnFutureRecentTimeView;
private View mFutureRecentTimeView;
private int mDayOfYear=0;
// private String[] mDayStrings;
private List<String> mDayList;
private List<String> mHourList;
private List<String> mMinuteList;
private ArrayWheelAdapter<String> mDayWheelAdapter;
private ArrayWheelAdapter<String> mHourWheelAdapter;
private ArrayWheelAdapter<String> mMinuteWheelAdapter;
private WheelView mDayWheelView;
private WheelView mHourWheelView;
private WheelView mMinuteWheelView;
private TimeItemIndex mLastTimeItem;
private TimeItemIndex mCurrentItem;
public interface OnFutureRecentTimeView{
void onTimeChanged(TimeItemIndex timeItemIndex);
}
public FutureRecentTimeView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext=context;
initData();
initView();
initListener();
}
public OnFutureRecentTimeView getOnFutureRecentTimeView() {
return mOnFutureRecentTimeView;
}
public void setOnFutureRecentTimeView(OnFutureRecentTimeView onFutureRecentTimeView) {
mOnFutureRecentTimeView = onFutureRecentTimeView;
}
public int getDayItemIndex(){
int dayItemIndex=mDayWheelView.getCurrentItem();
return dayItemIndex;
}
public int getHouItemIndex(){
int hourItemIndex=mHourWheelView.getCurrentItem();
return hourItemIndex;
}
public int getMinuteItemIndex(){
int minuteItemIndex=mMinuteWheelView.getCurrentItem();
return minuteItemIndex;
}
private void initData(){
initDayList();
initHourList();
initMinuteList();
mLastTimeItem=new TimeItemIndex();
mCurrentItem=new TimeItemIndex();
return;
}
@SuppressLint("SimpleDateFormat")
private void initDayList(){
mDayOfYear=TimeUtil.getDayOfYear();
if(null==mDayList){
mDayList=new ArrayList<String>();
}
mDayList.clear();
mDayList.add(mContext.getString(R.string.now));
mDayList.add(mContext.getString(R.string.today));
long currentTimeMillis=System.currentTimeMillis();
String dateFromat=mContext.getString(R.string.date_fromat);
SimpleDateFormat df = new SimpleDateFormat(dateFromat);
long oneDayTimeMillis=TimeUtil.HOUR_PER_DAY*TimeUtil.MINUTE_PER_HOUR*TimeUtil.SECOND_PER_MINUTE*TimeUtil.MILLISECOND_PER_SECOND;
for(int i=0; i<TimeItemUtil.DAY_WHEEL_VIEW_ITEMS-2; i++){
mDayList.add(df.format(new Date(currentTimeMillis+oneDayTimeMillis*(i+1))));
}
}
private void initHourList(){
if(null==mHourList){
mHourList=new ArrayList<String>();
}
mHourList.clear();
String hourSuffix=mContext.getString(R.string.hour_suffix);
for(int i=0; i<TimeItemUtil.HOUR_WHEEL_VIEW_ITEMS; i++){
int currentItemValue=TimeItemUtil.HOUR_START_VALUE+(i*TimeItemUtil.HOUR_INTERVAL);
mHourList.add(currentItemValue+hourSuffix);
}
return;
}
private void initMinuteList(){
if(null==mMinuteList){
mMinuteList=new ArrayList<String>();
}
mMinuteList.clear();
String minuteSuffix=mContext.getString(R.string.minute_suffix);
for(int i=0; i<TimeItemUtil.MINUTE_WHEEL_VIEW_ITEMS; i++){
int currentItemValue=TimeItemUtil.MINUTE_START_VALUE+(i*TimeItemUtil.MINUTE_INTERVAL);
mMinuteList.add(currentItemValue+minuteSuffix);
}
return;
}
public void updateView(){
correctTheTime();
}
private void initView(){
// LayoutInflater inflater = LayoutInflater.from(mContext);
LayoutInflater inflater=(LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mFutureRecentTimeView = inflater.inflate(R.layout.future_recent_time_layout,this);
mDayWheelView=(WheelView) mFutureRecentTimeView.findViewById(R.id.day_wheel_view);
mDayWheelView.setVisibleItems(WHEEL_VIEW_VISIBLE_ITEMS);
mDayWheelAdapter=new ArrayWheelAdapter<String>(mContext, (String[])mDayList.toArray(new String[mDayList.size()]));
mDayWheelAdapter.setItemResource(R.layout.wheel_text_item);
mDayWheelAdapter.setItemTextResource(R.id.text);
mDayWheelView.setViewAdapter(mDayWheelAdapter);
mDayWheelView.setCurrentItem(mCurrentItem.getDayItemIndex());//init today index
mHourWheelView=(WheelView) mFutureRecentTimeView.findViewById(R.id.hour_wheel_view);
mHourWheelView.setVisibleItems(WHEEL_VIEW_VISIBLE_ITEMS);
mHourWheelAdapter=new ArrayWheelAdapter<String>(mContext, (String[])mHourList.toArray(new String[mHourList.size()]));
mHourWheelAdapter.setItemResource(R.layout.wheel_text_item);
mHourWheelAdapter.setItemTextResource(R.id.text);
mHourWheelView.setViewAdapter(mHourWheelAdapter);
mMinuteWheelView=(WheelView) mFutureRecentTimeView.findViewById(R.id.minute_wheel_view);
mMinuteWheelView.setVisibleItems(WHEEL_VIEW_VISIBLE_ITEMS);
mMinuteWheelAdapter=new ArrayWheelAdapter<String>(mContext, (String[])mMinuteList.toArray(new String[mMinuteList.size()]));
mMinuteWheelAdapter.setItemResource(R.layout.wheel_text_item);
mMinuteWheelAdapter.setItemTextResource(R.id.text);
mMinuteWheelView.setViewAdapter(mMinuteWheelAdapter);
return;
}
private void initListener(){
//mDayWheelView.seton
mDayWheelView.addScrollingListener(dayWheelViewScrollListener);
mDayWheelView.addClickingListener(dayWheelClickedListener);
//mDayWheelView.addChangingListener(dayWheelViewChangedListener);
mHourWheelView.addScrollingListener(hourWheelViewScrollListener);
mHourWheelView.addClickingListener(hourWheelClickedListener);
mMinuteWheelView.addScrollingListener(minuteWheelViewScrollListener);
mMinuteWheelView.addClickingListener(minuteWheelClickedListener);
correctTheTime();
return;
}
/* private OnWheelChangedListener dayWheelViewChangedListener=new OnWheelChangedListener() {
@Override
public void onChanged(WheelView wheel, int oldValue, int newValue) {
Log.i(TAG, "oldValue["+oldValue+"]newValue["+newValue+"]");
}
};*/
private OnWheelScrollListener dayWheelViewScrollListener=new OnWheelScrollListener() {
@Override
public void onScrollingStarted(WheelView wheel) {
if(null==wheel){
return;
}
//Log.i(TAG, "onScrollingStarted");
mLastTimeItem.setDayItemIndex(wheel.getCurrentItem());
}
@Override
public void onScrollingFinished(WheelView wheel) {
if(null==wheel){
return;
}
//Log.i(TAG, "TimeUtil.getDayOfYear() "+TimeUtil.getDayOfYear()+";"+mDayOfYear+" mDayOfYear");
if(TimeUtil.getDayOfYear()!=mDayOfYear){//refresh day data
initDayList();
mDayWheelAdapter.set((String[])mDayList.toArray(new String[mDayList.size()]));
}
mCurrentItem.setDayItemIndex(wheel.getCurrentItem());
refreshNowWheelView();
if(mCurrentItem.getDayItemIndex()==mLastTimeItem.getDayItemIndex()){
return;
}
correctTheTime();
//Log.i(TAG, "onScrollingFinished mDayLastItem["+mDayLastItem+"]"+"mDayCurrentItem["+mDayCurrentItem+"]");
}
};
private OnWheelClickedListener dayWheelClickedListener=new OnWheelClickedListener() {
@Override
public void onItemClicked(WheelView wheel, int itemIndex) {
if(null==wheel){
return;
}
Log.i(TAG, "wheel.getCurrentItem() "+wheel.getCurrentItem()+" itemIndex "+itemIndex);
mLastTimeItem.setDayItemIndex(mDayWheelView.getCurrentItem());
mDayWheelView.setCurrentItem(itemIndex);
mCurrentItem.setDayItemIndex(itemIndex);
refreshNowWheelView();
if(mCurrentItem.getDayItemIndex()==mLastTimeItem.getDayItemIndex()){
return;
}
correctTheTime();
}
};
private OnWheelScrollListener hourWheelViewScrollListener=new OnWheelScrollListener() {
@Override
public void onScrollingStarted(WheelView wheel) {
if(null==wheel){
return;
}
mLastTimeItem.setHourItemIndex(wheel.getCurrentItem());
}
@Override
public void onScrollingFinished(WheelView wheel) {
if(null==wheel){
return;
}
mCurrentItem.setHourItemIndex(wheel.getCurrentItem());
if(mCurrentItem.getHourItemIndex()==mLastTimeItem.getHourItemIndex()){
return;
}
correctTheTime();
//Log.i(TAG, "onScrollingFinished mHourLastItem["+mHourLastItem+"]"+"mHourCurrentItem["+mHourCurrentItem+"]");
}
};
private OnWheelClickedListener hourWheelClickedListener=new OnWheelClickedListener() {
@Override
public void onItemClicked(WheelView wheel, int itemIndex) {
if(null==wheel){
return;
}
Log.i(TAG, "wheel.getCurrentItem() "+wheel.getCurrentItem()+" itemIndex "+itemIndex);
mLastTimeItem.setHourItemIndex(mHourWheelView.getCurrentItem());
mHourWheelView.setCurrentItem(itemIndex);
mCurrentItem.setHourItemIndex(itemIndex);
if(mCurrentItem.getHourItemIndex()==mLastTimeItem.getHourItemIndex()){
return;
}
correctTheTime();
}
};
private OnWheelScrollListener minuteWheelViewScrollListener=new OnWheelScrollListener() {
@Override
public void onScrollingStarted(WheelView wheel) {
if(null==wheel){
return;
}
mLastTimeItem.setMinuteItemIndex(wheel.getCurrentItem());
}
@Override
public void onScrollingFinished(WheelView wheel) {
if(null==wheel){
return;
}
mCurrentItem.setMinuteItemIndex(wheel.getCurrentItem());
if(mCurrentItem.getMinuteItemIndex()==mLastTimeItem.getMinuteItemIndex()){
return;
}
correctTheTime();
//Log.i(TAG, "onScrollingFinished mMinuteLastItem["+mMinuteLastItem+"]"+"mMinuteCurrentItem["+mMinuteCurrentItem+"]");
}
};
private OnWheelClickedListener minuteWheelClickedListener=new OnWheelClickedListener() {
@Override
public void onItemClicked(WheelView wheel, int itemIndex) {
if(null==wheel){
return;
}
Log.i(TAG, "wheel.getCurrentItem() "+wheel.getCurrentItem()+" itemIndex "+itemIndex);
mLastTimeItem.setMinuteItemIndex(wheel.getCurrentItem());
mMinuteWheelView.setCurrentItem(itemIndex);
mCurrentItem.setMinuteItemIndex(itemIndex);
if(mCurrentItem.getMinuteItemIndex()==mLastTimeItem.getMinuteItemIndex()){
return;
}
correctTheTime();
}
};
private void correctTheTime() {
TimeItemIndex currentItem = null;
currentItem = new TimeItemIndex();
currentItem.setDayItemIndex(mDayWheelView.getCurrentItem());
currentItem.setHourItemIndex(mHourWheelView.getCurrentItem());
currentItem.setMinuteItemIndex(mMinuteWheelView.getCurrentItem());
//Log.i(TAG,currentItem.getDayItemIndex()+";"+currentItem.getHourItemIndex()+";" +currentItem.getMinuteItemIndex());
TimeItemIndex correctItem=TimeItemUtil.correctTheTimeItem(currentItem);
//Log.i(TAG,correctItem.getDayItemIndex()+";"+correctItem.getHourItemIndex()+";" +correctItem.getMinuteItemIndex());
if(null!=correctItem){
refreshWheelView(correctItem);
}
}
private void refreshNowWheelView(){
if(mCurrentItem.getDayItemIndex()==0){//now
ViewUtil.hideView(mHourWheelView);
ViewUtil.hideView(mMinuteWheelView);
}else{//not now
ViewUtil.showView(mHourWheelView);
ViewUtil.showView(mMinuteWheelView);
}
return;
}
private void refreshWheelView(TimeItemIndex timeItem){
if(null==timeItem){
return;
}
//Log.i(TAG, "updateView...["+timeItem.getDayItemIndex()+"]["+timeItem.getHourItemIndex()+"]["+timeItem.getMinuteItemIndex()+"]");
mDayWheelView.setCurrentItem(timeItem.getDayItemIndex());
mHourWheelView.setCurrentItem(timeItem.getHourItemIndex());
mMinuteWheelView.setCurrentItem(timeItem.getMinuteItemIndex());
//Log.i(TAG, "updateView===["+mDayWheelView.getCurrentItem()+"]["+mHourWheelView.getCurrentItem()+"]["+mMinuteWheelView.getCurrentItem()+"]");
}
}