Skip to content

Commit 6e9b3c6

Browse files
ldjcmuafohrman
authored andcommitted
In MaterialDatePicker after rotation, open to the same page if it was changed via swipe
PiperOrigin-RevId: 266462896
1 parent fb272f8 commit 6e9b3c6

File tree

3 files changed

+22
-19
lines changed

3 files changed

+22
-19
lines changed

lib/java/com/google/android/material/picker/MaterialCalendar.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,7 @@ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
398398
} else {
399399
currentItem = getLayoutManager().findLastVisibleItemPosition();
400400
}
401+
current = monthsPagerAdapter.getPageMonth(currentItem);
401402
monthDropSelect.setText(monthsPagerAdapter.getPageTitle(currentItem));
402403
}
403404

tests/javatests/com/google/android/material/picker/MaterialDatePickerPagesTest.java

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,13 @@
1515
*/
1616
package com.google.android.material.picker;
1717

18+
import static com.google.android.material.picker.MaterialDatePickerTestUtils.findFirstVisibleItem;
1819
import static org.hamcrest.Matchers.lessThan;
1920
import static org.junit.Assert.assertEquals;
2021
import static org.junit.Assert.assertThat;
2122

2223
import androidx.fragment.app.FragmentManager;
2324
import androidx.appcompat.app.AppCompatActivity;
24-
import androidx.recyclerview.widget.LinearLayoutManager;
25-
import androidx.recyclerview.widget.RecyclerView;
2625
import androidx.test.espresso.IdlingRegistry;
2726
import androidx.test.platform.app.InstrumentationRegistry;
2827
import androidx.test.rule.ActivityTestRule;
@@ -73,7 +72,7 @@ public void calendarSwipeCappedAtStart() {
7372
MaterialDatePickerTestUtils.swipeEarlier(dialogFragment);
7473
MaterialDatePickerTestUtils.swipeEarlier(dialogFragment);
7574

76-
assertEquals(start, findFirstVisibleItem());
75+
assertEquals(start, findFirstVisibleItem(dialogFragment));
7776
}
7877

7978
@Test
@@ -82,12 +81,12 @@ public void calendarSwipeCappedAtEnd() {
8281
MaterialDatePickerTestUtils.swipeLater(dialogFragment);
8382
MaterialDatePickerTestUtils.swipeLater(dialogFragment);
8483
MaterialDatePickerTestUtils.swipeLater(dialogFragment);
85-
assertEquals(end, findFirstVisibleItem());
84+
assertEquals(end, findFirstVisibleItem(dialogFragment));
8685
}
8786

8887
@Test
8988
public void calendarOpensOnCurrent() {
90-
assertEquals(opening, findFirstVisibleItem());
89+
assertEquals(opening, findFirstVisibleItem(dialogFragment));
9190
}
9291

9392
@Test
@@ -119,14 +118,6 @@ public void changingSelectorToDayMaintainsCurrentMonth() {
119118
MaterialDatePickerTestUtils.clickNext();
120119
MaterialDatePickerTestUtils.clickSelectorToggle();
121120
MaterialDatePickerTestUtils.clickSelectorToggle();
122-
assertEquals(findFirstVisibleItem(), opening.monthsLater(1));
123-
}
124-
125-
private Month findFirstVisibleItem() {
126-
RecyclerView recyclerView =
127-
dialogFragment.getView().findViewWithTag(MaterialCalendar.MONTHS_VIEW_GROUP_TAG);
128-
MonthsPagerAdapter monthsPagerAdapter = (MonthsPagerAdapter) recyclerView.getAdapter();
129-
return monthsPagerAdapter.getPageMonth(
130-
((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition());
121+
assertEquals(findFirstVisibleItem(dialogFragment), opening.monthsLater(1));
131122
}
132123
}

tests/javatests/com/google/android/material/picker/MaterialDatePickerTestUtils.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import static org.hamcrest.core.IsEqual.equalTo;
3030

3131
import android.app.Activity;
32+
import androidx.annotation.VisibleForTesting;
3233
import androidx.fragment.app.DialogFragment;
3334
import androidx.fragment.app.Fragment;
3435
import androidx.fragment.app.FragmentManager;
@@ -47,6 +48,8 @@
4748

4849
public final class MaterialDatePickerTestUtils {
4950

51+
@VisibleForTesting public static final Month OPENING = Month.create(2018, Calendar.APRIL);
52+
5053
private MaterialDatePickerTestUtils() {}
5154

5255
private static final ViewInteraction onMonthsGroup =
@@ -68,9 +71,8 @@ public static MaterialDatePicker<Long> showDatePicker(
6871

6972
Month start = Month.create(1900, Calendar.JANUARY);
7073
Month end = Month.create(2100, Calendar.DECEMBER);
71-
Month current = Month.create(2018, Calendar.APRIL);
7274
CalendarConstraints calendarConstraints =
73-
new CalendarConstraints.Builder().setStart(start).setEnd(end).setOpening(current).build();
75+
new CalendarConstraints.Builder().setStart(start).setEnd(end).setOpening(OPENING).build();
7476

7577
return showDatePicker(activityTestRule, themeResId, calendarConstraints);
7678
}
@@ -107,9 +109,8 @@ public static MaterialDatePicker<Pair<Long, Long>> showRangePicker(
107109
ActivityTestRule<? extends AppCompatActivity> activityTestRule, int themeResId) {
108110
Month start = Month.create(1900, Calendar.JANUARY);
109111
Month end = Month.create(2100, Calendar.DECEMBER);
110-
Month current = Month.create(2018, Calendar.APRIL);
111112
CalendarConstraints calendarConstraints =
112-
new CalendarConstraints.Builder().setStart(start).setEnd(end).setOpening(current).build();
113+
new CalendarConstraints.Builder().setStart(start).setEnd(end).setOpening(OPENING).build();
113114
return showRangePicker(activityTestRule, themeResId, calendarConstraints);
114115
}
115116

@@ -187,7 +188,8 @@ static void clickSelectorToggle() {
187188
InstrumentationRegistry.getInstrumentation().waitForIdleSync();
188189
}
189190

190-
static void swipeEarlier(DialogFragment dialogFragment) {
191+
@VisibleForTesting
192+
public static void swipeEarlier(DialogFragment dialogFragment) {
191193
int orientation = getOrientation(dialogFragment);
192194
if (orientation == LinearLayoutManager.HORIZONTAL) {
193195
onMonthsGroup.perform(swipeRight());
@@ -235,6 +237,15 @@ static void hideAllEditTextCursors(View view) {
235237
}
236238
}
237239

240+
@VisibleForTesting
241+
public static Month findFirstVisibleItem(DialogFragment dialogFragment) {
242+
RecyclerView recyclerView =
243+
dialogFragment.getView().findViewWithTag(MaterialCalendar.MONTHS_VIEW_GROUP_TAG);
244+
MonthsPagerAdapter monthsPagerAdapter = (MonthsPagerAdapter) recyclerView.getAdapter();
245+
return monthsPagerAdapter.getPageMonth(
246+
((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition());
247+
}
248+
238249
private static int getOrientation(DialogFragment dialogFragment) {
239250
return ((LinearLayoutManager) getMonthsViewGroup(dialogFragment).getLayoutManager())
240251
.getOrientation();

0 commit comments

Comments
 (0)