Avoid self-recursion if client calls init() from date listener

BUG: 18736166
Change-Id: Ibe04040356f4a3e4479ea55c53a0e167144ff877
diff --git a/core/java/android/widget/DatePickerCalendarDelegate.java b/core/java/android/widget/DatePickerCalendarDelegate.java
index 54c4505..e75643ab 100644
--- a/core/java/android/widget/DatePickerCalendarDelegate.java
+++ b/core/java/android/widget/DatePickerCalendarDelegate.java
@@ -372,10 +372,9 @@
         mCurrentDate.set(Calendar.MONTH, monthOfYear);
         mCurrentDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
 
-        onDateChanged(false);
-
-        // Set the listener last so that we don't call it.
         mDateChangedListener = callBack;
+
+        onDateChanged(false, false);
     }
 
     @Override
@@ -384,11 +383,11 @@
         mCurrentDate.set(Calendar.MONTH, month);
         mCurrentDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
 
-        onDateChanged(false);
+        onDateChanged(false, true);
     }
 
-    private void onDateChanged(boolean fromUser) {
-        if (mDateChangedListener != null) {
+    private void onDateChanged(boolean fromUser, boolean callbackToClient) {
+        if (callbackToClient && mDateChangedListener != null) {
             final int year = mCurrentDate.get(Calendar.YEAR);
             final int monthOfYear = mCurrentDate.get(Calendar.MONTH);
             final int dayOfMonth = mCurrentDate.get(Calendar.DAY_OF_MONTH);
@@ -432,7 +431,7 @@
         }
         if (mCurrentDate.before(mTempDate)) {
             mCurrentDate.setTimeInMillis(minDate);
-            onDateChanged(false);
+            onDateChanged(false, true);
         }
         mMinDate.setTimeInMillis(minDate);
         mDayPickerView.setMinDate(minDate);
@@ -453,7 +452,7 @@
         }
         if (mCurrentDate.after(mTempDate)) {
             mCurrentDate.setTimeInMillis(maxDate);
-            onDateChanged(false);
+            onDateChanged(false, true);
         }
         mMaxDate.setTimeInMillis(maxDate);
         mDayPickerView.setMaxDate(maxDate);
@@ -592,7 +591,7 @@
     public void onYearSelected(int year) {
         adjustDayInMonthIfNeeded(mCurrentDate.get(Calendar.MONTH), year);
         mCurrentDate.set(Calendar.YEAR, year);
-        onDateChanged(true);
+        onDateChanged(true, true);
 
         // Auto-advance to month and day view.
         setCurrentView(MONTH_AND_DAY_VIEW);
@@ -665,7 +664,7 @@
         @Override
         public void onDaySelected(DayPickerView view, Calendar day) {
             mCurrentDate.setTimeInMillis(day.getTimeInMillis());
-            onDateChanged(true);
+            onDateChanged(true, true);
         }
     };