Android Open Source - Android-Calendar-Sync Calendar Adapter






From Project

Back to project page Android-Calendar-Sync.

License

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.

Java Source Code

/*
 * 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;
  }

}




Java Source Code List

com.examples.android.calendar.CalendarAdapter.java
com.examples.android.calendar.CalendarView.java
com.examples.android.calendar.Utility.java