Back to project page Android-Calendar-Sync.
The source code is released under:
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Defi...
If you think the Android project Android-Calendar-Sync listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/* * Copyright (C) 2014 Mukesh Y authors// www. j a va2s . c om * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.examples.android.calendar; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.GregorianCalendar; import java.util.List; import java.util.Locale; import android.content.Context; import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; /** * @author Mukesh Y */ public class CalendarAdapter extends BaseAdapter { private Context mContext; private java.util.Calendar month; public GregorianCalendar pmonth; // calendar instance for previous month /** * calendar instance for previous month for getting complete view */ public GregorianCalendar pmonthmaxset; private GregorianCalendar selectedDate; int firstDay; int maxWeeknumber; int maxP; int calMaxP; int lastWeekDay; int leftDays; int mnthlength; String itemvalue, curentDateString; DateFormat df; private ArrayList<String> items; public static List<String> dayString; private View previousView; public CalendarAdapter(Context c, GregorianCalendar monthCalendar) { CalendarAdapter.dayString = new ArrayList<String>(); Locale.setDefault(Locale.US); month = monthCalendar; selectedDate = (GregorianCalendar) monthCalendar.clone(); mContext = c; month.set(GregorianCalendar.DAY_OF_MONTH, 1); this.items = new ArrayList<String>(); df = new SimpleDateFormat("yyyy-MM-dd", Locale.US); curentDateString = df.format(selectedDate.getTime()); refreshDays(); } public void setItems(ArrayList<String> items) { for (int i = 0; i != items.size(); i++) { if (items.get(i).length() == 1) { items.set(i, "0" + items.get(i)); } } this.items = items; } public int getCount() { return dayString.size(); } public Object getItem(int position) { return dayString.get(position); } public long getItemId(int position) { return 0; } // create a new view for each item referenced by the Adapter public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; TextView dayView; if (convertView == null) { // if it's not recycled, initialize some // attributes LayoutInflater vi = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.calendar_item, null); } dayView = (TextView) v.findViewById(R.id.date); // separates daystring into parts. String[] separatedTime = dayString.get(position).split("-"); // taking last part of date. ie; 2 from 2012-12-02 String gridvalue = separatedTime[2].replaceFirst("^0*", ""); // checking whether the day is in current month or not. if ((Integer.parseInt(gridvalue) > 1) && (position < firstDay)) { // setting offdays to white color. dayView.setTextColor(Color.WHITE); dayView.setClickable(false); dayView.setFocusable(false); } else if ((Integer.parseInt(gridvalue) < 7) && (position > 28)) { dayView.setTextColor(Color.WHITE); dayView.setClickable(false); dayView.setFocusable(false); } else { // setting curent month's days in blue color. dayView.setTextColor(Color.BLUE); } if (dayString.get(position).equals(curentDateString)) { setSelected(v); previousView = v; } else { v.setBackgroundResource(R.drawable.list_item_background); } dayView.setText(gridvalue); // create date string for comparison String date = dayString.get(position); if (date.length() == 1) { date = "0" + date; } String monthStr = "" + (month.get(GregorianCalendar.MONTH) + 1); if (monthStr.length() == 1) { monthStr = "0" + monthStr; } // show icon if date is not empty and it exists in the items array ImageView iw = (ImageView) v.findViewById(R.id.date_icon); if (date.length() > 0 && items != null && items.contains(date)) { iw.setVisibility(View.VISIBLE); } else { iw.setVisibility(View.INVISIBLE); } return v; } public View setSelected(View view) { if (previousView != null) { previousView.setBackgroundResource(R.drawable.list_item_background); } previousView = view; view.setBackgroundResource(R.drawable.calendar_cel_selectl); return view; } public void refreshDays() { // clear items items.clear(); dayString.clear(); Locale.setDefault(Locale.US); pmonth = (GregorianCalendar) month.clone(); // month start day. ie; sun, mon, etc firstDay = month.get(GregorianCalendar.DAY_OF_WEEK); // finding number of weeks in current month. maxWeeknumber = month.getActualMaximum(GregorianCalendar.WEEK_OF_MONTH); // allocating maximum row number for the gridview. mnthlength = maxWeeknumber * 7; maxP = getMaxP(); // previous month maximum day 31,30.... calMaxP = maxP - (firstDay - 1);// calendar offday starting 24,25 ... /** * Calendar instance for getting a complete gridview including the three * month's (previous,current,next) dates. */ pmonthmaxset = (GregorianCalendar) pmonth.clone(); /** * setting the start date as previous month's required date. */ pmonthmaxset.set(GregorianCalendar.DAY_OF_MONTH, calMaxP + 1); /** * filling calendar gridview. */ for (int n = 0; n < mnthlength; n++) { itemvalue = df.format(pmonthmaxset.getTime()); pmonthmaxset.add(GregorianCalendar.DATE, 1); dayString.add(itemvalue); } } private int getMaxP() { int maxP; if (month.get(GregorianCalendar.MONTH) == month .getActualMinimum(GregorianCalendar.MONTH)) { pmonth.set((month.get(GregorianCalendar.YEAR) - 1), month.getActualMaximum(GregorianCalendar.MONTH), 1); } else { pmonth.set(GregorianCalendar.MONTH, month.get(GregorianCalendar.MONTH) - 1); } maxP = pmonth.getActualMaximum(GregorianCalendar.DAY_OF_MONTH); return maxP; } }