package net.basilwang; import static net.basilwang.dao.Preferences.LOGON_ACCOUNT_ID; import java.util.List; import net.basilwang.dao.CurriculumService; import net.basilwang.dao.Preferences; import net.basilwang.dao.SemesterService; import net.basilwang.entity.Curriculum; import net.basilwang.entity.Semester; import net.basilwang.listener.ShowTipListener; import net.basilwang.utils.CurriculumUtils; import net.basilwang.utils.PreferenceUtils; import net.basilwang.utils.TipUtils; import net.youmi.android.AdManager; import net.youmi.android.AdView; import android.content.Context; import android.graphics.Color; import android.os.Bundle; import android.os.Parcelable; import android.preference.PreferenceManager; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.text.format.DateUtils; import android.text.format.Time; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import net.basilwang.R; import br.com.dina.ui.model.ViewItem; import br.com.dina.ui.widget.UITableView; import com.actionbarsherlock.app.SherlockFragment; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import com.actionbarsherlock.view.SubMenu; public class CurriculumViewPagerFragment extends SherlockFragment implements ShowTipListener { static final String TAG = "CurriculumViewPagerFragment"; public static final String TimerSet = null; private ViewPager dayPager; // private UITableView mTableView; private DayViewPagerAdapter dayAdapter; private int focusedPage = 0; // private int today; private int mWeekDay; // 2012-06-07 basilwang change when tapped // private Time timeSelected = new Time(); // 2012-06-07 basilwang won't change private Time todayTime = new Time(); private CurriculumService curriculumService; private Time showFromTime = new Time(); private Time dueTime = new Time(); private int weekSpan; private int allSemesterWeekSpan; private class DayViewPagerAdapter extends PagerAdapter { ViewPager container; private View addDayViewAt(int position, Time time) { View v = CurriculumViewPagerFragment.this.getActivity() .getLayoutInflater() .inflate(R.layout.dayview, container, false); v.setTag(time); container.addView(v, position); if (net.basilwang.utils.DateUtils.isSameDay(time, todayTime)) { reloadData(dayPager.getChildAt(1)); } return v; } @Override public void destroyItem(View container, int position, Object object) { ((ViewPager) container).removeViewAt(position); } @Override public void finishUpdate(View container) { } @Override public int getCount() { return 3; } @Override public Object instantiateItem(View container, int position) { this.container = (ViewPager) container; // 2012-12-01 basilwang use timeSelected temporarily and COPY // todayTime Time timeSelected = new Time(todayTime); timeSelected.monthDay = todayTime.monthDay + (position - 1); // add the offset from the center time timeSelected.normalize(true); // day += (position - 1); // add the offset from the center time // int day=today+(position-1); return addDayViewAt(position, timeSelected); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } private View removeDayViewAt(ViewPager container, int position) { final View mv = (View) container.getChildAt(position); container.removeViewAt(position); return mv; } @Override public void restoreState(Parcelable state, ClassLoader loader) { } @Override public Parcelable saveState() { return null; } @Override public void startUpdate(View container) { } } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { // if (Preferences.isWeekViewUnlocked(this.getActivity())) { SubMenu sub = menu.addSubMenu("周/天"); sub.setIcon(R.drawable.viewswitch); sub.getItem().setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); // } super.onCreateOptionsMenu(menu, inflater); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { showTipIfNecessary(); // setContentView(R.layout.curriculum_viewpager); // 2012-06-07 basilwang get current week number; // timeSelected.setToNow(); todayTime.setToNow(); mWeekDay = todayTime.weekDay; // 2012-12-01 basilwang load from db Semester semester = new SemesterService(getActivity()) .getSemesterByName(PreferenceUtils.getPreferSemester(this .getActivity())); showFromTime.setToNow(); long millis = semester.getBeginDate(); if (millis != 0) { showFromTime.set(millis); } long duemillis = semester.getEndDate(); if (duemillis != 0) { dueTime.set(duemillis); } allSemesterWeekSpan = net.basilwang.utils.DateUtils.getWeekSpan( showFromTime, dueTime); View v = inflater.inflate(R.layout.curriculum_viewpager, container, false); if (!Preferences.isAdClosed(this.getActivity())) { // 应用Id 应用密码 广告请求间隔(s) 测试模式 AdManager.init(this.getActivity(), "2fc95b356bb979ae", "8b94f727980f7158", 30, false); LinearLayout adViewLayout = (LinearLayout) v .findViewById(R.id.adViewLayout); adViewLayout.addView(new AdView(this.getActivity()), new LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); } curriculumService = new CurriculumService(this.getActivity()); dayAdapter = new DayViewPagerAdapter(); dayPager = (ViewPager) v.findViewById(R.id.pager); dayPager.setAdapter(dayAdapter); dayPager.setCurrentItem(1, false); dayPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageScrollStateChanged(int state) { if (state == ViewPager.SCROLL_STATE_IDLE) { final Time oldLeftTime = (Time) (((View) dayPager .getChildAt(0)).getTag()); final Time oldCenterTime = (Time) (((View) dayPager .getChildAt(1)).getTag()); Time oldRightTime; if (dayPager.getChildAt(2) != null) oldRightTime = (Time) (((View) dayPager.getChildAt(2)) .getTag()); else oldRightTime = new Time(); // Log.v("test", oldLeftDay + "" + oldCenterDay + "" // + oldRightDay); if (focusedPage == 0) { // HistoryMonthActivity.this.setTitle(Utils // .formatMonthYear(HistoryMonthActivity.this, // oldTopTime)); Time mTime = new Time(oldLeftTime); mTime.monthDay -= 1; mTime.normalize(true); // : load and switch shown events ((View) dayPager.getChildAt(0)).setTag(mTime); ((View) dayPager.getChildAt(1)).setTag(oldLeftTime); ((View) dayPager.getChildAt(2)).setTag(oldCenterTime); } else if (focusedPage == 2) { // HistoryMonthActivity.this.setTitle(Utils // .formatMonthYear(HistoryMonthActivity.this, // oldBottomTime)); Time mTime = new Time(oldRightTime); mTime.monthDay += 1; mTime.normalize(true); // : load and switch shown events ((View) dayPager.getChildAt(0)).setTag(oldCenterTime); ((View) dayPager.getChildAt(1)).setTag(oldRightTime); ((View) dayPager.getChildAt(2)).setTag(mTime); } // always set to middle page to continue to be able to // scroll up/down dayPager.setCurrentItem(1, false); reloadData(dayPager.getChildAt(1)); } } @Override public void onPageSelected(int position) { focusedPage = position; // View fragment=dayPager.getChildAt(position); // TextView tv=(TextView)fragment.findViewById(R.id.test); // tv.setText(fragment.getTag().toString()); // ListView // list=(ListView)fragment.findViewById(R.id.dayviewlist); // CurriculumAdapter adapter = new // CurriculumAdapter(Integer.valueOf(fragment.getTag().toString()), // CurriculumViewPagerActivity.this); // list.setAdapter(adapter); } }); return v; } @Override public void onCreate(Bundle savedInstanceState) { // 2012-07-11 basilwang has its own menu this.setHasOptionsMenu(true); super.onCreate(savedInstanceState); } private void reloadData(View fragment) { CharSequence value; Time mTime = (Time) (fragment.getTag()); weekSpan = net.basilwang.utils.DateUtils.getWeekSpan(showFromTime, mTime); int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_ABBREV_MONTH; value = DateUtils.formatDateTime(this.getActivity(), mTime.toMillis(true), flags); mWeekDay = mTime.weekDay; String content = null; TextView tv = (TextView) fragment.findViewById(R.id.dayofweek); switch (mWeekDay) { case 1: content = this.getActivity().getString(R.string.day1); break; case 2: content = this.getActivity().getString(R.string.day2); break; case 3: content = this.getActivity().getString(R.string.day3); break; case 4: content = this.getActivity().getString(R.string.day4); break; case 5: content = this.getActivity().getString(R.string.day5); break; case 6: content = this.getActivity().getString(R.string.day6); break; case 0: content = this.getActivity().getString(R.string.day7); mWeekDay = 7; break; } // 2012-12-01 basilwang judge if in vacation UITableView mTableView = (UITableView) fragment .findViewById(R.id.tableView); if (!isVacation()) { tv.setText(value + " " + content + "第" + weekSpan + "周"); populateList(mTableView, fragment, filterCurriculum(getCurriculumsByWeek())); } else { tv.setText(value + " " + content + "假期中"); populateList(mTableView, fragment, getCurriculumsByWeek()); } mTableView.commit(); } protected void populateList(UITableView mTableView, View parent, List<Curriculum> curriculumList) { // 2012-5-27 basilwang must clear list when change view pager mTableView.clear(); LayoutInflater mInflater = (LayoutInflater) this.getActivity() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (curriculumList.size() == 0) { addViewItem(mTableView, mInflater, getResources().getString(R.string.norecord)); } else { for (Curriculum c : curriculumList) { addViewItem(mTableView, mInflater, c.getRawInfo()); } } } private List<Curriculum> filterCurriculum(List<Curriculum> curriculumList) { if (curriculumList.size() != 0) { CurriculumUtils.filterCurriclumsByWeek(weekSpan, curriculumList); } return curriculumList; } /** * Base on current week, get this week's curriculums * */ private List<Curriculum> getCurriculumsByWeek() { int accountId = PreferenceManager.getDefaultSharedPreferences( this.getActivity()).getInt(LOGON_ACCOUNT_ID, 0); String semesterValue = PreferenceManager.getDefaultSharedPreferences( this.getActivity()).getString(Preferences.CURRICULUM_TO_SHOW, ""); List<Curriculum> curriculumList = this.curriculumService .getCurriculumListByDay(semesterValue, mWeekDay, accountId); return curriculumList; } private void addViewItem(UITableView mTableView, LayoutInflater mInflater, String text) { RelativeLayout v = (RelativeLayout) mInflater.inflate( R.layout.custom_view3, null); TextView txtView = (TextView) v.findViewById(R.id.title); txtView.setText(text); // 2012-12-01 basilwang set gray if in vacation if (isVacation()) { txtView.setTextColor(Color.GRAY); } ViewItem v2 = new ViewItem(v); v2.setClickable(false); mTableView.addViewItem(v2); } private boolean isVacation() { return (weekSpan < 1 || weekSpan > allSemesterWeekSpan); } @Override public void showTipIfNecessary() { int dayViewTip = PreferenceManager.getDefaultSharedPreferences( this.getActivity()).getInt(Preferences.WEEK_VIEW_TIP_SHOW, 0); if (dayViewTip == 0) { TipUtils.showTipIfNecessary(this.getActivity(), R.drawable.viewswitch_tip, this); } } @Override public void dismissTip() { PreferenceUtils.modifyIntValueInPreferences(getActivity(), Preferences.WEEK_VIEW_TIP_SHOW, 1); } }