alamkanak / Android-Week-View

Android Week View is an android library to display calendars (week view or day view) within the app. It supports custom styling.
Apache License 2.0
3.42k stars 1.23k forks source link

notifyDatasetChanged not refreshing the calendar view #510

Open bharathnr21 opened 6 years ago

bharathnr21 commented 6 years ago
I am calling getWeekView.notifyDatasetChanged () on OnActivtiyResult after adding the new event, but it is not showing the newly added event in the calendar view.

public class CalendarActivity extends MainActivity  {

private List<WeekViewEvent> events = new ArrayList<WeekViewEvent>();
boolean calledNetwork = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    extras = getIntent().getExtras();
    if(extras != null){
        deviceId = extras.getString("device_id");
        deviceName = extras.getString("device_name");
        Log.d(LOG,deviceId);
    }
}

@Override
public List<? extends WeekViewEvent> onMonthChange(int newYear, int newMonth) {

    eventLists = new ArrayList<>();

    if (!calledNetwork) {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        MyJsonService service = retrofit.create(MyJsonService.class);
        Call<CalendarList> call = service.listEvents(deviceId);
        call.enqueue(new Callback<CalendarList>() {
            @Override
            public void onResponse(Call<CalendarList> call, retrofit2.Response<CalendarList> response) {
                eventLists = response.body().getData();
                Log.d(LOG,eventLists.toString());
                for(int i=0;i<eventLists.size();i++){
                       String calendarId = eventLists.get(i).getCalendarId();
                       String title = eventLists.get(i).getTitle();
                       String startYear = eventLists.get(i).getStartYear();
                       String startMonth = eventLists.get(i).getStartMonth();
                       String startDay = eventLists.get(i).getStartDay();
                       String startHour= eventLists.get(i).getStartHour();
                       String startMinute = eventLists.get(i).getStartMinute();
                       String endYear = eventLists.get(i).getEndYear();
                       String endMonth = eventLists.get(i).getEndMonth();
                       String endDay = eventLists.get(i).getEndDay();
                       String endHour = eventLists.get(i).getEndHour();
                       String endMinute = eventLists.get(i).getEndMinute();
                       setCalendarEvents(calendarId,title,Integer.parseInt(startYear),Integer.parseInt(startMonth),Integer.parseInt(startDay),Integer.parseInt(startHour),Integer.parseInt(startMinute),Integer.parseInt(endYear),Integer.parseInt(endMonth),Integer.parseInt(endDay),Integer.parseInt(endHour),Integer.parseInt(endMinute));
                }
                getWeekView().notifyDatasetChanged();

            }

            @Override
            public void onFailure(Call call, Throwable t) {
                Log.e("EVENTS_ERROR", t.toString());
            }
        });

        calledNetwork = true;
    }

    List<WeekViewEvent> matchedEvents = new ArrayList<WeekViewEvent>();
    for (WeekViewEvent event : events) {
        if (eventMatches(event, newYear, newMonth)) {
            matchedEvents.add(event);
        }
    }

    return matchedEvents;

}

private boolean eventMatches(WeekViewEvent event, int year, int month) {
    return (event.getStartTime().get(Calendar.YEAR) == year && event.getStartTime().get(Calendar.MONTH) == month - 1) || (event.getEndTime().get(Calendar.YEAR) == year && event.getEndTime().get(Calendar.MONTH) == month - 1);
}

public List<WeekViewEvent> setCalendarEvents(String id, String name, int startYear, int startMonth, int startDay, int startHour, int startMinute, int endYear, int endMonth, int endDay, int endHour, int endMinute){

    events.add( new WeekViewEvent(id,name,startYear,startMonth,startDay,startHour,startMinute,endYear,endMonth,endDay,endHour,endMinute));
    return  events;

}

public List<WeekViewEvent> setCalendarEvents(String day,String month,String year,String startHour,String startMinute,String startSeconds,String endHour,String endMinute,String endSeconds,String id,String title){

   /* Calendar startTime = Calendar.getInstance();
    startTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(startHour));
    startTime.set(Calendar.MINUTE, Integer.parseInt(startMinute));
    startTime.set(Calendar.MONTH, Integer.parseInt(month));
    startTime.set(Calendar.YEAR, Integer.parseInt(year));
    startTime.set(Calendar.DAY_OF_MONTH,Integer.parseInt(day));

    Calendar endTime = (Calendar) startTime.clone();
    endTime.add(Calendar.HOUR, Integer.parseInt(endHour));
    endTime.set(Calendar.MONTH, Integer.parseInt(month));
    event = new WeekViewEvent(id, getEventTitle(startTime), startTime, endTime);
    event.setColor(getResources().getColor(R.color.event_color_01));
    events.add(event);

    Log.d("EVENTS",""+events.get(0));*/

    Calendar now = Calendar.getInstance();
    Calendar startTime = (Calendar) now.clone();
  //  startTime.setTimeInMillis(starttime);
    startTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(startHour));
    startTime.set(Calendar.MINUTE, Integer.parseInt(startMinute));
    startTime.set(Calendar.MONTH, Integer.parseInt(month));
    startTime.set(Calendar.YEAR, Integer.parseInt(year));
    startTime.set(Calendar.DAY_OF_MONTH,Integer.parseInt(day));
    Calendar endTime = (Calendar) startTime.clone();
    //endTime.setTimeInMillis(endtime);
    endTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(endHour));
    endTime.set(Calendar.MINUTE, Integer.parseInt(endMinute));
    endTime.set(Calendar.MONTH, Integer.parseInt(month));
    endTime.set(Calendar.DAY_OF_MONTH,Integer.parseInt(day));

    // Create an week view event.
    WeekViewEvent weekViewEvent = new WeekViewEvent();
    weekViewEvent.setName(title);
    weekViewEvent.setStartTime(startTime);
    weekViewEvent.setEndTime(endTime);
    weekViewEvent.setColor(Color.parseColor("#F8B552"));

    return events;
}

@Override
public void onEventClick(WeekViewEvent event, RectF eventRect) {
    Toast.makeText(this, "Clicked " + event.getName(), Toast.LENGTH_SHORT).show();
}

@Override
public void onEventLongPress(WeekViewEvent event, RectF eventRect) {
    Toast.makeText(this, "Long pressed event: " + event.getName(), Toast.LENGTH_SHORT).show();
}

@Override
public void onEmptyViewLongPress(Calendar time) {
    SimpleDateFormat dateFormatDate = new SimpleDateFormat("EEE,MMMM d,yyyy", Locale.ENGLISH);
    SimpleDateFormat dateFormatTime = new SimpleDateFormat("hh:mm a",Locale.ENGLISH);

    Calendar endtime = Calendar.getInstance();
    endtime.setTime(time.getTime());
    endtime.add(Calendar.HOUR,1);

    Log.d("START_DATE",""+dateFormatDate.format(time.getTime()));
    Log.d("START_TIME",""+dateFormatTime.format(time.getTime()));
    Log.d("END_DATE",""+dateFormatDate.format(time.getTime()));
    Log.d("END_TIME",""+dateFormatTime.format(endtime.getTime()));
    Intent intent = new Intent(CalendarActivity.this,AddCalendarEventActivtiy.class);
    intent.putExtra("device_id",deviceId);
    intent.putExtra("device_name",deviceName);
    intent.putExtra("start_date",dateFormatDate.format(time.getTime()));
    intent.putExtra("start_time",dateFormatTime.format(time.getTime()));
    intent.putExtra("end_date",dateFormatDate.format(time.getTime()));
    intent.putExtra("end_time",dateFormatTime.format(endtime.getTime()));
    startActivityForResult(intent,REQUEST_SUCCESS);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode != REQUEST_FAILURE ){
        if (requestCode == resultCode){
            if(data !=null) {
                HashMap<String, String> result = (HashMap<String, String>) data.getSerializableExtra("result");
                Log.d("Result", result.get("event_title"));
                getWeekView().notifyDatasetChanged();

            }
        }
    }else{
        Log.d("FAILURE","FAILURE");

    }

}