Skip to content

Commit e5dce55

Browse files
Single Date Selection added
1 parent 578e80f commit e5dce55

File tree

1 file changed

+73
-50
lines changed

1 file changed

+73
-50
lines changed

rangecalender/src/main/java/com/rangecalender/CalenderDialog.java

Lines changed: 73 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.rangecalender;
22

3+
import android.animation.ObjectAnimator;
34
import android.app.Dialog;
45
import android.content.Context;
56
import android.support.v4.content.ContextCompat;
@@ -30,13 +31,17 @@
3031
import java.util.ArrayList;
3132
import java.util.Calendar;
3233
import java.util.Date;
33-
34+
/**
35+
* @author Palash Dumbare
36+
*
37+
*
38+
* **/
3439
public class CalenderDialog extends Dialog implements CalenderDayClicked, View.OnClickListener, YearPicker {
3540
/**/
3641
private RecyclerView dateList,yearList;
3742
private LinearLayout topBarLayout,topBarMainLayout;
3843
private CardView yearPickerLayout;
39-
private TextView monthYear,previous,next,ok,cancel,fromDateYearTxt,toDateYearTxt,fromDateTxt,toDateTxt;
44+
private TextView monthYear,previous,next,ok,cancel,fromDateYearTxt,toDateYearTxt,fromDateTxt,toDateTxt,tabLine1;
4045
private Calendar calendar;
4146
private Context context;
4247
public int month,year;
@@ -47,15 +52,17 @@ public class CalenderDialog extends Dialog implements CalenderDayClicked, View.O
4752
YearAdapter yearAdapter;
4853
private LinearLayoutManager yearLinearLayoutManager;
4954
private Animation anim;
50-
private int color;
55+
private int color,width;
56+
private boolean setSameDateAsFromDateIfToDateNotSelected;
5157
private final String TAG = CalenderDialog.class.getSimpleName();
5258

5359

54-
public CalenderDialog(Context context, int color, OnDateSelected onDateSelected) {
60+
public CalenderDialog(Context context, int color, boolean setSameDateAsFromDateIfToDateNotSelected, OnDateSelected onDateSelected) {
5561
super(context,android.R.style.Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth);
5662
this.context = context;
5763
this.onDateSelected = onDateSelected;
5864
this.color = color;
65+
this.setSameDateAsFromDateIfToDateNotSelected = setSameDateAsFromDateIfToDateNotSelected;
5966
setContentView(R.layout.calender_dialog);
6067
init();
6168
events();
@@ -97,7 +104,7 @@ private void events() {
97104
}
98105

99106
private void init() {
100-
107+
width = context.getResources().getDisplayMetrics().widthPixels;
101108
previous = findViewById(R.id.previous);
102109
next = findViewById(R.id.next);
103110
ok = findViewById(R.id.OkBtn);
@@ -112,11 +119,14 @@ private void init() {
112119
yearList = findViewById(R.id.yearPicker);
113120
yearPickerLayout = findViewById(R.id.yearPickerLayout);
114121
openYearPicker = findViewById(R.id.openYearPicker);
115-
122+
tabLine1 = findViewById(R.id.tabLine1);
116123
dateList.setLayoutManager(new GridLayoutManager(context,7));
117124
yearLinearLayoutManager = new LinearLayoutManager(context);
118125
yearList.setLayoutManager(yearLinearLayoutManager);
119126

127+
128+
129+
120130
anim = new AlphaAnimation(0.0f, 1.0f);
121131
anim.setDuration(50);
122132
anim.setStartOffset(20);
@@ -143,43 +153,49 @@ private void generateCalender(){
143153
Date toDate = new SimpleDateFormat("dd-MMM-yyyy").parse(toDateStr);
144154
if (calenderAdapter!=null){
145155
if(calenderAdapter.getFromDate() != null && calenderAdapter.getToDate() !=null){
146-
calenderAdapter = new CalenderAdapter(Date_Utils.getDaysBetweenDates(fromDate, toDate), this, calenderAdapter.getFromDate(), calenderAdapter.getToDate());
147-
calenderAdapter.setColor(color);
148-
dateList.setAdapter(calenderAdapter);
156+
calenderAdapter.setCalenders(Date_Utils.getDaysBetweenDates(fromDate, toDate),calenderAdapter.getFromDate(),calenderAdapter.getToDate());
149157
}else if (calenderAdapter.getFromDate() != null) {
150-
calenderAdapter = new CalenderAdapter(Date_Utils.getDaysBetweenDates(fromDate, toDate), this, calenderAdapter.getFromDate(), null);
151-
calenderAdapter.setColor(color);
152-
dateList.setAdapter(calenderAdapter);
158+
calenderAdapter.setCalenders(Date_Utils.getDaysBetweenDates(fromDate, toDate),calenderAdapter.getFromDate(),null);
153159
}else{
154-
calenderAdapter = new CalenderAdapter(Date_Utils.getDaysBetweenDates(fromDate, toDate), this, null, null);
155-
calenderAdapter.setColor(color);
156-
dateList.setAdapter(calenderAdapter);
160+
calenderAdapter.setCalenders(Date_Utils.getDaysBetweenDates(fromDate, toDate),null,null);
157161
}
158162
}else {
159-
calenderAdapter = new CalenderAdapter(Date_Utils.getDaysBetweenDates(fromDate, toDate), this);
163+
calenderAdapter = new CalenderAdapter(this);
160164
calenderAdapter.setColor(color);
165+
calenderAdapter.setCalenders(Date_Utils.getDaysBetweenDates(fromDate, toDate),null,null);
161166
dateList.setAdapter(calenderAdapter);
162167
}
163168
}catch (Exception e){
164169
e.printStackTrace();
165170
}
166171
}
167172

173+
/**
174+
* if user selects any date in calender,callback will be in this method
175+
* **/
168176
@Override
169177
public void onDayClicked( ) {
170178
MyCalender fromDate = calenderAdapter.getFromDate();
171179
MyCalender toDate = calenderAdapter.getToDate();
172180
fromDateYearTxt.setText(String.valueOf(fromDate.getYear()));
173181
fromDateTxt.setText(Date_Utils.addPrefixBeforeDateNumber(fromDate.getDay())+" "+new DateFormatSymbols().getMonths()[fromDate.getMonth()-1]+" "+fromDate.getYear());
174182
if (toDate !=null) {
175-
stopAnimation();
183+
/***
184+
* if todate is null means user has selected toDate ,we will stop the animation if flag of same date was set false
185+
* */
186+
if (!setSameDateAsFromDateIfToDateNotSelected) {
187+
stopAnimation();
188+
}
189+
176190
toDateYearTxt.setText(String.valueOf(toDate.getYear()));
177191
toDateTxt.setText(Date_Utils.addPrefixBeforeDateNumber(toDate.getDay())+" "+new DateFormatSymbols().getMonths()[toDate.getMonth()-1]+" "+toDate.getYear());
178192
}else{
179193
toDateTxt.setText("To Date");
194+
ObjectAnimator animation = ObjectAnimator.ofFloat(tabLine1, "translationX", 350f);
195+
animation.setDuration(500);
196+
animation.start();
180197
}
181198

182-
183199
}
184200

185201

@@ -188,42 +204,50 @@ public void startAnimation(){
188204
}
189205

190206
public void stopAnimation(){
191-
anim.cancel();
207+
anim.cancel();
192208
}
193209

194210

195211

196212

197213
@Override
198214
public void onClick(View v) {
199-
if (v.getId() == R.id.next){
200-
goToNextMonth();
201-
}else if(v.getId() == R.id.previous){
202-
goToPreviousMonth();
203-
}else if(v.getId() == R.id.OkBtn){
204-
try {
205-
if (calenderAdapter.getFromDate() != null && calenderAdapter.getToDate() != null) {
206-
onDateSelected.dateSelectedIs(calenderAdapter.getFromDate().getDate(), calenderAdapter.getToDate().getDate());
207-
cancel();
208-
}else if(calenderAdapter.getFromDate()!=null && calenderAdapter.getToDate() == null){
209-
startAnimation();
210-
}else {
211-
cancel();
212-
}
213-
214-
} catch (ParseException e) {
215-
Toast.makeText(context,e.getMessage(),Toast.LENGTH_SHORT).show();
216-
e.printStackTrace();
217-
}
218-
}else if(v.getId() == R.id.openYearPicker){
219-
yearPickerLayout.setVisibility(View.VISIBLE);
220-
yearPickerLayout.bringToFront();
221-
222-
yearList.scrollToPosition(yearAdapter.getItemCount()-1);
223-
yearList.scrollToPosition(years.indexOf(year+""));
215+
if (v.getId() == R.id.next){
216+
goToNextMonth();
217+
}else if(v.getId() == R.id.previous){
218+
goToPreviousMonth();
219+
}else if(v.getId() == R.id.OkBtn){
220+
try {
221+
if (calenderAdapter.getFromDate() != null && calenderAdapter.getToDate() != null) {
222+
onDateSelected.dateSelectedIs(calenderAdapter.getFromDate().getDate(), calenderAdapter.getToDate().getDate());
223+
cancel();
224+
}else if(calenderAdapter.getFromDate()!=null && calenderAdapter.getToDate() == null){
225+
if (setSameDateAsFromDateIfToDateNotSelected){
226+
/**
227+
* fromDate and to date will be same
228+
*
229+
* */
230+
onDateSelected.dateSelectedIs(calenderAdapter.getFromDate().getDate(), calenderAdapter.getFromDate().getDate());
231+
cancel();
232+
}else {
233+
startAnimation();
234+
}
235+
}else {
236+
cancel();
237+
}
238+
239+
} catch (ParseException e) {
240+
Toast.makeText(context,e.getMessage(),Toast.LENGTH_SHORT).show();
241+
e.printStackTrace();
242+
}
243+
}else if(v.getId() == R.id.openYearPicker){
244+
yearPickerLayout.setVisibility(View.VISIBLE);
245+
yearPickerLayout.bringToFront();
246+
yearList.scrollToPosition(yearAdapter.getItemCount()-1);
247+
yearList.scrollToPosition(years.indexOf(year+""));
224248
}else{
225-
cancel();
226-
}
249+
cancel();
250+
}
227251
}
228252

229253
private void goToPreviousMonth() {
@@ -237,7 +261,7 @@ private void goToPreviousMonth() {
237261
}
238262

239263
private void goToNextMonth() {
240-
if (month!=12) {
264+
if (month!=12) {
241265
month = month + 1;
242266
}else{
243267
month = 1;
@@ -248,8 +272,7 @@ private void goToNextMonth() {
248272

249273

250274
private void setOnUI(){
251-
252-
monthYear.setText(new DateFormatSymbols().getMonths()[month-1]+" "+year);
253-
generateCalender();
275+
monthYear.setText(new DateFormatSymbols().getMonths()[month-1]+" "+year);
276+
generateCalender();
254277
}
255278
}

0 commit comments

Comments
 (0)