Android Open Source - Android-Calendar-Sync Calendar View






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//from  w w w.ja v  a2  s  .  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.Locale;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

/**
 * @author Mukesh Y
 */
public class CalendarView extends Activity {

  public GregorianCalendar month, itemmonth;// calendar instances.

  public CalendarAdapter adapter;// adapter instance
  public Handler handler;// for grabbing some event values for showing the dot
              // marker.
  public ArrayList<String> items; // container to store calendar items which
                  // needs showing the event marker
  ArrayList<String> event;
  LinearLayout rLayout;
  ArrayList<String> date;
  ArrayList<String> desc;

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.calendar);
    Locale.setDefault(Locale.US);

    rLayout = (LinearLayout) findViewById(R.id.text);
    month = (GregorianCalendar) GregorianCalendar.getInstance();
    itemmonth = (GregorianCalendar) month.clone();

    items = new ArrayList<String>();

    adapter = new CalendarAdapter(this, month);

    GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(adapter);

    handler = new Handler();
    handler.post(calendarUpdater);

    TextView title = (TextView) findViewById(R.id.title);
    title.setText(android.text.format.DateFormat.format("MMMM yyyy", month));

    RelativeLayout previous = (RelativeLayout) findViewById(R.id.previous);

    previous.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        setPreviousMonth();
        refreshCalendar();
      }
    });

    RelativeLayout next = (RelativeLayout) findViewById(R.id.next);
    next.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        setNextMonth();
        refreshCalendar();

      }
    });

    gridview.setOnItemClickListener(new OnItemClickListener() {
      public void onItemClick(AdapterView<?> parent, View v,
          int position, long id) {
        // removing the previous view if added
        if (((LinearLayout) rLayout).getChildCount() > 0) {
          ((LinearLayout) rLayout).removeAllViews();
        }
        desc = new ArrayList<String>();
        date = new ArrayList<String>();
        ((CalendarAdapter) parent.getAdapter()).setSelected(v);
        String selectedGridDate = CalendarAdapter.dayString
            .get(position);
        String[] separatedTime = selectedGridDate.split("-");
        String gridvalueString = separatedTime[2].replaceFirst("^0*",
            "");// taking last part of date. ie; 2 from 2012-12-02.
        int gridvalue = Integer.parseInt(gridvalueString);
        // navigate to next or previous month on clicking offdays.
        if ((gridvalue > 10) && (position < 8)) {
          setPreviousMonth();
          refreshCalendar();
        } else if ((gridvalue < 7) && (position > 28)) {
          setNextMonth();
          refreshCalendar();
        }
        ((CalendarAdapter) parent.getAdapter()).setSelected(v);

        for (int i = 0; i < Utility.startDates.size(); i++) {
          if (Utility.startDates.get(i).equals(selectedGridDate)) {
            desc.add(Utility.nameOfEvent.get(i));
          }
        }

        if (desc.size() > 0) {
          for (int i = 0; i < desc.size(); i++) {
            TextView rowTextView = new TextView(CalendarView.this);

            // set some properties of rowTextView or something
            rowTextView.setText("Event:" + desc.get(i));
            rowTextView.setTextColor(Color.BLACK);

            // add the textview to the linearlayout
            rLayout.addView(rowTextView);

          }

        }

        desc = null;

      }

    });
  }

  protected void setNextMonth() {
    if (month.get(GregorianCalendar.MONTH) == month
        .getActualMaximum(GregorianCalendar.MONTH)) {
      month.set((month.get(GregorianCalendar.YEAR) + 1),
          month.getActualMinimum(GregorianCalendar.MONTH), 1);
    } else {
      month.set(GregorianCalendar.MONTH,
          month.get(GregorianCalendar.MONTH) + 1);
    }

  }

  protected void setPreviousMonth() {
    if (month.get(GregorianCalendar.MONTH) == month
        .getActualMinimum(GregorianCalendar.MONTH)) {
      month.set((month.get(GregorianCalendar.YEAR) - 1),
          month.getActualMaximum(GregorianCalendar.MONTH), 1);
    } else {
      month.set(GregorianCalendar.MONTH,
          month.get(GregorianCalendar.MONTH) - 1);
    }

  }

  protected void showToast(String string) {
    Toast.makeText(this, string, Toast.LENGTH_SHORT).show();

  }

  public void refreshCalendar() {
    TextView title = (TextView) findViewById(R.id.title);

    adapter.refreshDays();
    adapter.notifyDataSetChanged();
    handler.post(calendarUpdater); // generate some calendar items

    title.setText(android.text.format.DateFormat.format("MMMM yyyy", month));
  }

  public Runnable calendarUpdater = new Runnable() {

    @Override
    public void run() {
      items.clear();

      // Print dates of the current week
      DateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
      String itemvalue;
      event = Utility.readCalendarEvent(CalendarView.this);
      Log.d("=====Event====", event.toString());
      Log.d("=====Date ARRAY====", Utility.startDates.toString());

      for (int i = 0; i < Utility.startDates.size(); i++) {
        itemvalue = df.format(itemmonth.getTime());
        itemmonth.add(GregorianCalendar.DATE, 1);
        items.add(Utility.startDates.get(i).toString());
      }
      adapter.setItems(items);
      adapter.notifyDataSetChanged();
    }
  };
}




Java Source Code List

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