DataViewAppointment.java :  » UnTagged » stuassistant » com » stuassistant » mycalendar » dataview » Android Open Source

Android Open Source » UnTagged » stuassistant 
stuassistant » com » stuassistant » mycalendar » dataview » DataViewAppointment.java

package com.stuassistant.mycalendar.dataview;


import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;

import android.database.Cursor;

import com.stuassistant.mycalendar.agenda.AgendaView;
import com.stuassistant.mycalendar.database.DataRowAppointment;
import com.stuassistant.mycalendar.database.Database;
import com.stuassistant.mycalendar.main.Prefs;
import com.stuassistant.mycalendar.main.RepeatData;
import com.stuassistant.mycalendar.main.RepeatDataValue;
import com.stuassistant.mycalendar.main.Utils;


public class DataViewAppointment extends DataView
{
  
  private Calendar calUtilDate = Calendar.getInstance();
  

  private RepeatData repeat = new RepeatData();
  
  
  protected Calendar calStartDateForCache = Calendar.getInstance();  
  protected RepeatDataValue[] vecDateRangeCache = new RepeatDataValue[42];
  
  
  private Calendar date1cmp = Calendar.getInstance();
  private Calendar date2cmp = Calendar.getInstance();
  
  
  private Calendar calItemStartDate = Calendar.getInstance();
  
  
  public class RowsComparator implements Comparator<DataViewItem>
  {
    public int compare(DataViewItem item1, DataViewItem item2)
    {
      date1cmp.setTimeInMillis(item1.GetStartDateAsLong());
      date2cmp.setTimeInMillis(item2.GetStartDateAsLong());

      boolean bAllDay1 = (item1.bAllDay);
      boolean bAllDay2 = (item2.bAllDay);
      
      if (bAllDay1 && bAllDay2) 
      {
        String s1 = item1.sSubject;
        String s2 = item2.sSubject;        
        return s1.compareTo(s2);        
      } else {
        if (bAllDay1)
          return -1;
        if (bAllDay2)
          return 1;
        
        if (Utils.GetTimeAsSeconds(date1cmp) > Utils.GetTimeAsSeconds(date2cmp))
          return 1;
        if (Utils.GetTimeAsSeconds(date1cmp) < Utils.GetTimeAsSeconds(date2cmp))
          return -1;

        if (Utils.GetTimeAsSeconds(date1cmp) == Utils.GetTimeAsSeconds(date2cmp))
        {
          String s1 = item1.sSubject;
          String s2 = item2.sSubject;        
          return s1.compareTo(s2);
        }        
      }
      return 0;
    }    
  };
  
  
  private RowsComparator fnCmp = null;

  
  public DataViewAppointment(Database db, Prefs prefs)
  {
    super(db, prefs);
    sTableName = Database.sTableNameAppointments;
    fnCmp = new RowsComparator();
    
    for (int iDay = 0; iDay < 42; iDay++)
    {
      vecDateRangeCache[iDay] = new RepeatDataValue();
    }
  }

  @Override
  public void AddItem(Cursor cr)
  {
    DataViewItem item = new DataViewItem();
    
    item.lID = cr.getLong(DataRowAppointment.fid.ID);
    item.sSubject = cr.getString(DataRowAppointment.fid.Subject);      
    item.SetStartDate(calUtilDate, cr.getLong(DataRowAppointment.fid.StartDate));    
    item.iDurationInMinutes = cr.getInt(DataRowAppointment.fid.DurationInMinutes);        
    item.bAllDay = (cr.getLong(DataRowAppointment.fid.AllDay) == 1);    
    item.bAlarm = (cr.getLong(DataRowAppointment.fid.Alarm) == 1);
    
    item.iRepeatType = cr.getInt(DataRowAppointment.fid.RepeatType);
    
    if (!cr.isNull(DataRowAppointment.fid.RepeatEvery))
      item.iRepeatEvery = cr.getInt(DataRowAppointment.fid.RepeatEvery);
    
    if (!cr.isNull(DataRowAppointment.fid.RepeatEndOnDate))
      item.lRepeatEndOnDate = cr.getLong(DataRowAppointment.fid.RepeatEndOnDate);
    
    rows.add(item);
  }
  
  @Override
  public void FilterDataForView(DataViewItem item, final Calendar calStartDate, final int agendaViewType)
  {
    
    repeat.SetRepeatTypeAsInt(item.iRepeatType);
    repeat.SetEndOnDate(null);
    repeat.SetEvery(1);
    
    if (item.IsRepeat())
    {
      repeat.SetEvery(item.iRepeatEvery);
      if (item.UseRepeatEndOnDate())
        repeat.SetEndOnDate(item.lRepeatEndOnDate);                
    }
        
    calItemStartDate.setTimeInMillis(item.GetStartDateAsLong());
    calItemStartDate.setFirstDayOfWeek(prefs.iFirstDayOfWeek);
    repeat.SetStartDate(calItemStartDate);
        
    if (agendaViewType != AgendaView.viewMode.NONE)
    {
      item.Clear();
      
      final int iDaysCount = getDaysRangeForView(agendaViewType);
      
      if (iDaysCount == 0)
      {
        
        if (repeat.IsDateEqual(calStartDate))
        {
          item.SetVisibleDay(0);
          item.viewMode = agendaViewType;
        }
        
      } else {
        
        RepeatDataValue dvDate = null;
        
        for (int iDay = 0; iDay < iDaysCount; iDay++)
        {        
          dvDate = vecDateRangeCache[iDay]; 
          
          if (repeat.IsDateEqual(dvDate))
          {
            item.SetVisibleDay(iDay);
            item.viewMode = agendaViewType;
          }
          
        }
        
      }
    }    
    
  }
  
  @Override
  protected void FilterDataPrepare(final Calendar calStartDate, final int agendaViewType)
  {    
    final int iDaysCount = getDaysRangeForView(agendaViewType);
    
    int iDayValue = 1;
  
    if (agendaViewType == AgendaView.viewMode.TODAY_ALARM)
      iDayValue = -1;
    
    calStartDateForCache.setTimeInMillis(calStartDate.getTimeInMillis());
    calStartDateForCache.setFirstDayOfWeek(prefs.iFirstDayOfWeek);

    for (int iDay = 0; iDay < (iDaysCount); iDay++)
    {
      vecDateRangeCache[iDay].getFromCalendar(calStartDateForCache);          
      calStartDateForCache.add(Calendar.DAY_OF_YEAR, iDayValue);
    }
    
  }
  
  @Override
  public void SortView()
  {
    Collections.sort(rows, fnCmp);        
  }
    
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.