11package com .rangecalender ;
22
3+ import android .animation .ObjectAnimator ;
34import android .app .Dialog ;
45import android .content .Context ;
56import android .support .v4 .content .ContextCompat ;
3031import java .util .ArrayList ;
3132import java .util .Calendar ;
3233import java .util .Date ;
33-
34+ /**
35+ * @author Palash Dumbare
36+ *
37+ *
38+ * **/
3439public 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