1235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri/* 2235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * Copyright (C) 2016 The Android Open Source Project 3235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * 4235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * in compliance with the License. You may obtain a copy of the License at 6235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * 7235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * http://www.apache.org/licenses/LICENSE-2.0 8235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * 9235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * Unless required by applicable law or agreed to in writing, software distributed under the License 10235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * or implied. See the License for the specific language governing permissions and limitations under 12235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * the License. 13235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri */ 14235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 15ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.leanback.app.wizard; 16235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 173103f63e99d47573823957f7aa34308555873221Aurimas Liutikasimport static org.junit.Assert.assertTrue; 183103f63e99d47573823957f7aa34308555873221Aurimas Liutikas 1923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiriimport android.content.Context; 20235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.content.Intent; 21235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.content.res.Resources; 223103f63e99d47573823957f7aa34308555873221Aurimas Liutikasimport android.support.test.InstrumentationRegistry; 2335232c6eaeb9b99f390cb8ef0ac83bf45fa0b3faAurimas Liutikasimport android.support.test.filters.LargeTest; 243103f63e99d47573823957f7aa34308555873221Aurimas Liutikasimport android.support.test.rule.ActivityTestRule; 253103f63e99d47573823957f7aa34308555873221Aurimas Liutikasimport android.support.test.runner.AndroidJUnit4; 268619e0ef7062b6a714f22af993e4b440fae7ef08Aurimas Liutikasimport android.util.Log; 278619e0ef7062b6a714f22af993e4b440fae7ef08Aurimas Liutikasimport android.view.KeyEvent; 288619e0ef7062b6a714f22af993e4b440fae7ef08Aurimas Liutikasimport android.widget.LinearLayout; 298619e0ef7062b6a714f22af993e4b440fae7ef08Aurimas Liutikas 30ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.app.GuidedStepFragment; 31ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.test.R; 32ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.GuidanceStylist; 33ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.GuidedAction; 34ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.GuidedDatePickerAction; 35ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.VerticalGridView; 36ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.picker.DatePicker; 373103f63e99d47573823957f7aa34308555873221Aurimas Liutikas 3823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiriimport org.junit.Before; 3923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiriimport org.junit.Rule; 4023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiriimport org.junit.Test; 4123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiriimport org.junit.runner.RunWith; 42235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 43235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport java.text.SimpleDateFormat; 44235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport java.util.ArrayList; 45235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport java.util.Calendar; 46235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport java.util.Date; 47235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport java.util.List; 48235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 4935232c6eaeb9b99f390cb8ef0ac83bf45fa0b3faAurimas Liutikas@LargeTest 5023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri@RunWith(AndroidJUnit4.class) 5123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiripublic class GuidedDatePickerTest { 52235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 53235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri static final long TRANSITION_LENGTH = 1000; 54235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri static long VERTICAL_SCROLL_WAIT = 500; 55235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri static long HORIZONTAL_SCROLL_WAIT = 500; 5623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri static final long FINAL_WAIT = 1000; 57235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 58235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri static final String TAG = "GuidedDatePickerTest"; 59235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 60235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private static final int DAY_INDEX = 0; 61235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private static final int MONTH_INDEX = 1; 62235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private static final int YEAR_INDEX = 2; 6323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 6423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Rule 653103f63e99d47573823957f7aa34308555873221Aurimas Liutikas public ActivityTestRule<GuidedStepAttributesTestActivity> activityTestRule = 663103f63e99d47573823957f7aa34308555873221Aurimas Liutikas new ActivityTestRule<>(GuidedStepAttributesTestActivity.class, false, false); 6723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 68235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestActivity mActivity; 69235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 70235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 71235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private void initActivity(Intent intent) { 7223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mActivity = activityTestRule.launchActivity(intent); 73235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri try { 74235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(2000); 75235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } catch(InterruptedException e) { 76235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri e.printStackTrace(); 77235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 7823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 79235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 80235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 8123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Context mContext; 8223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Before 8323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void setUp() { 8423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext = InstrumentationRegistry.getInstrumentation().getTargetContext();; 8523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 86235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 8723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public static void sendKey(int keyCode) { 8823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri InstrumentationRegistry.getInstrumentation().sendKeyDownUpSync(keyCode); 8923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 90235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 9123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri private int getColumnIndexForDateField(int field, int[] columnIndices) { 92235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int mColDayIndex = columnIndices[0]; 93235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int mColMonthIndex = columnIndices[1]; 94235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int mColYearIndex = columnIndices[2]; 95235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int columnIndex = -1; 96235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri switch (field) { 97235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case Calendar.DAY_OF_MONTH: 98235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri columnIndex = mColDayIndex; 99235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri break; 100235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case Calendar.MONTH: 101235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri columnIndex = mColMonthIndex; 102235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri break; 103235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case Calendar.YEAR: 104235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri columnIndex = mColYearIndex; 105235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 10623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri return columnIndex; 10723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 108235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 10923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri private void horizontalScrollToDateField(int field, int[] columnIndices, 11023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker pickerView) throws Throwable{ 11123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri int columnIndex = getColumnIndexForDateField(field, columnIndices); 112235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 11323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri LinearLayout columnsLayout = (LinearLayout) pickerView.getChildAt(0); 114235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 115235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int focusedFieldPos = columnsLayout.indexOfChild(columnsLayout.getFocusedChild()); 116235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (focusedFieldPos == -1) { 11723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 118235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 119235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 120235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri focusedFieldPos = columnsLayout.indexOfChild(columnsLayout.getFocusedChild()); 121235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri assertTrue("Date field could not be focused!", (focusedFieldPos != -1)); 122235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 123235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // following is to skip the separator fields "/" which are unfocusable but counted as 124235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // children of columnsLayout 125235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri switch (focusedFieldPos) { 126235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case 0: 127235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri focusedFieldPos = 0; 128235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri break; 129235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case 2: 130235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri focusedFieldPos = 1; 131235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri break; 132235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case 4: 133235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri focusedFieldPos = 2; 134235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 135235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 136235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // now scroll right or left to the corresponding date field as indicated by the input field 137235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int horizontalScrollOffset = columnIndex - focusedFieldPos; 138235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 139235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int horizontalScrollDir = KeyEvent.KEYCODE_DPAD_RIGHT; 140235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (horizontalScrollOffset < 0) { 141235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri horizontalScrollOffset = -horizontalScrollOffset; 142235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri horizontalScrollDir = KeyEvent.KEYCODE_DPAD_LEFT; 143235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 144235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri for(int i = 0; i < horizontalScrollOffset; i++) { 14523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(horizontalScrollDir); 146235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(HORIZONTAL_SCROLL_WAIT); 147235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 148235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 14923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 15023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 15123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri /** 15223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri * Scrolls vertically all the way up or down (depending on the provided scrollDir parameter) 15323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri * to fieldValue if it's not equal to -1; otherwise, the scrolling goes all the way to the end. 15423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri * @param field The date field over which the scrolling is performed 15523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri * @param fieldValue The field value to scroll to or -1 if the scrolling should go all the way. 15623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri * @param columnIndices The date field indices corresponding to day, month, and the year 15723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri * @param pickerView The DatePicker view. 15823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri * @param scrollDir The direction of scrolling to reach the desired field value. 15923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri * @throws Throwable 16023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri */ 16123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri private void verticalScrollToFieldValue(int field, int fieldValue, int[] columnIndices, 16223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker pickerView, int scrollDir) 16323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri throws Throwable { 16423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 16523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri int columnIndex = getColumnIndexForDateField(field, columnIndices); 16623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri int colDayIndex = columnIndices[0]; 16723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri int colMonthIndex = columnIndices[1]; 16823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri int colYearIndex = columnIndices[2]; 16923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 17023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri horizontalScrollToDateField(field, columnIndices, pickerView); 171235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 172235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar currentActionCal = Calendar.getInstance(); 17323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri currentActionCal.setTimeInMillis(pickerView.getDate()); 174235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 175235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar minCal = Calendar.getInstance(); 17623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri minCal.setTimeInMillis(pickerView.getMinDate()); 177235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 178235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar maxCal = Calendar.getInstance(); 17923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri maxCal.setTimeInMillis(pickerView.getMaxDate()); 180235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 181235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 182235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int prevColumnVal = -1; 18323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri int currentColumnVal = pickerView.getColumnAt(columnIndex).getCurrentValue(); 18423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri while( currentColumnVal != prevColumnVal && currentColumnVal != fieldValue){ 18523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri assertTrue(mContext.getString(R.string.datepicker_test_wrong_day_value), 1863103f63e99d47573823957f7aa34308555873221Aurimas Liutikas pickerView.getColumnAt(colDayIndex).getCurrentValue() 1873103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == currentActionCal.get(Calendar.DAY_OF_MONTH) 188235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri ); 18923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri assertTrue(mContext.getString(R.string.datepicker_test_wrong_month_value), 1903103f63e99d47573823957f7aa34308555873221Aurimas Liutikas pickerView.getColumnAt(colMonthIndex).getCurrentValue() 1913103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == currentActionCal.get(Calendar.MONTH) 192235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri ); 19323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri assertTrue(mContext.getString(R.string.datepicker_test_wrong_year_value), 1943103f63e99d47573823957f7aa34308555873221Aurimas Liutikas pickerView.getColumnAt(colYearIndex).getCurrentValue() 1953103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == currentActionCal.get(Calendar.YEAR) 196235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri ); 197235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 19823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri int offset = scrollDir == KeyEvent.KEYCODE_DPAD_DOWN ? 1 : -1; 199235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri addDate(currentActionCal, field, offset, minCal, maxCal); 200235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 20123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(scrollDir); 202235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(VERTICAL_SCROLL_WAIT); 203235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 204235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri prevColumnVal = currentColumnVal; 20523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri currentColumnVal = pickerView.getColumnAt(columnIndex).getCurrentValue(); 206235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 207235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 208235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 209235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private void addDate(Calendar mCurrentDate, int field, int offset, 210235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar mMinDate, Calendar mMaxDate) { 211235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int maxOffset = -1; 212235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int actualMinFieldValue, actualMaxFieldValue; 213235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 214235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if ( field == Calendar.YEAR ) { 215235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMinFieldValue = mMinDate.get(Calendar.YEAR); 216235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMaxFieldValue = mMaxDate.get(Calendar.YEAR); 217235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } else { 218235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMinFieldValue = mCurrentDate.getActualMinimum(field); 219235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMaxFieldValue = mCurrentDate.getActualMaximum(field); 220235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 221235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 222235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if ( offset > 0 ) { 223235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxOffset = Math.min( 224235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMaxFieldValue - mCurrentDate.get(field), offset); 225235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mCurrentDate.add(field, maxOffset); 226235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (mCurrentDate.after(mMaxDate)) { 227235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mCurrentDate.setTimeInMillis(mMaxDate.getTimeInMillis()); 228235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 229235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } else { 230235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxOffset = Math.max( 231235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMinFieldValue - mCurrentDate.get(field), offset); 232235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mCurrentDate.add(field, Math.max(offset, maxOffset)); 233235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (mCurrentDate.before(mMinDate)) { 234235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mCurrentDate.setTimeInMillis(mMinDate.getTimeInMillis()); 235235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 236235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 237235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 238235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 23923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 24023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testJanuaryToFebruaryTransitionForLeapYear() throws Throwable { 24123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 24223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 24323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 24423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String title = "Date Picker Transition Test"; 24523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String breadcrumb = "Month Transition Test Demo"; 24623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String description = "Testing the transition from Jan to Feb (leap year)"; 24723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 24823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri breadcrumb, null); 24923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 25023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 25123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 25223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Calendar cal = Calendar.getInstance(); 25323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 25423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.YEAR, 2016); // 2016 is a leap year 25523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.MONTH, Calendar.JANUARY); 25623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 25723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Date initialDate = cal.getTime(); 25823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 25923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction action = new GuidedDatePickerAction.Builder( 26023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 26123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .id(0) 26223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .title("Date") 26323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .date(initialDate.getTime()) 26423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .datePickerFormat("DMY") 26523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .build(); 26623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 26723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri actionList.add(action); 26823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 26923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.clear(); 27023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 27123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 27223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 27323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri initActivity(intent); 27423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 27523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker mPickerView = (DatePicker) mActivity.findViewById( 27623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri R.id.guidedactions_activator_item); 277235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 27823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.MONTH, Calendar.FEBRUARY, new int[] {0, 1, 2}, 27923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mPickerView, KeyEvent.KEYCODE_DPAD_DOWN); 28023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 28123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testJanuaryToFebruaryTransitionForLeapYear() Execution time: " + executionTime); 28223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 28323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 284235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 28523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 28623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testFebruaryToMarchTransitionForLeapYear() throws Throwable { 28723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 28823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 289235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 290235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri String title = "Date Picker Transition Test"; 291235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri String breadcrumb = "Month Transition Test Demo"; 29223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String description = "Testing the transition from Feb to Mar (leap year)"; 293235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 294235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri breadcrumb, null); 295235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 296235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 297235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 298235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar cal = Calendar.getInstance(); 299235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 300235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri cal.set(Calendar.YEAR, 2016); 30123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.MONTH, Calendar.FEBRUARY); 30223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 30323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Date initialDate = cal.getTime(); 30423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 30523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction action = new GuidedDatePickerAction.Builder( 30623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 30723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .id(0) 30823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .title("Date") 30923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .date(initialDate.getTime()) 31023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .datePickerFormat("DMY") 31123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .build(); 31223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 31323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri actionList.add(action); 31423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 31523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.clear(); 31623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 31723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 31823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 31923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri initActivity(intent); 32023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 32123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker mPickerView = (DatePicker) mActivity.findViewById( 32223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri R.id.guidedactions_activator_item); 32323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 32423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.MONTH, Calendar.MARCH, new int[] {0, 1, 2}, 32523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mPickerView, KeyEvent.KEYCODE_DPAD_DOWN); 32623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 32723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testFebruaryToMarchTransition() Execution time: " + executionTime); 32823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 32923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 33023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 33123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 33223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testJanuaryToFebruaryTransitionForNonLeapYear() throws Throwable { 33323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 33423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 33523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 33623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String title = "Date Picker Transition Test"; 33723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String breadcrumb = "Month Transition Test Demo"; 33823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String description = "Testing the transition from Jan to Feb (nonleap year)"; 33923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 34023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri breadcrumb, null); 34123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 34223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 34323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 34423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Calendar cal = Calendar.getInstance(); 34523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 34623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.YEAR, 2017); // 2017 is a leap year 347235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri cal.set(Calendar.MONTH, Calendar.JANUARY); 34823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 34923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Date initialDate = cal.getTime(); 35023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 35123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction action = new GuidedDatePickerAction.Builder( 35223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 35323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .id(0) 35423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .title("Date") 35523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .date(initialDate.getTime()) 35623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .datePickerFormat("DMY") 35723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .build(); 35823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 35923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri actionList.add(action); 36023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 36123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.clear(); 36223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 36323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 36423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 36523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri initActivity(intent); 36623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 36723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker mPickerView = (DatePicker) mActivity.findViewById( 36823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri R.id.guidedactions_activator_item); 36923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 37023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.MONTH, Calendar.FEBRUARY, new int[] {0, 1, 2}, 37123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mPickerView, KeyEvent.KEYCODE_DPAD_DOWN); 37223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 37323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testJanuaryToFebruaryTransition() Execution time: " + executionTime); 37423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 37523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 37623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 37723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 37823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testFebruaryToMarchTransitionForNonLeapYear() throws Throwable { 37923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 38023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 38123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 38223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String title = "Date Picker Transition Test"; 38323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String breadcrumb = "Month Transition Test Demo"; 38423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String description = "Testing the transition from Feb to Mar (nonleap year)"; 38523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 38623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri breadcrumb, null); 38723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 38823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 38923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 39023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Calendar cal = Calendar.getInstance(); 39123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 39223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.YEAR, 2017); 39323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.MONTH, Calendar.FEBRUARY); 39423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 39523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Date initialDate = cal.getTime(); 39623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 39723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction action = new GuidedDatePickerAction.Builder( 39823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 39923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .id(0) 40023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .title("Date") 40123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .date(initialDate.getTime()) 40223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .datePickerFormat("DMY") 40323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .build(); 40423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 40523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri actionList.add(action); 40623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 40723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.clear(); 40823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 40923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 41023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 41123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri initActivity(intent); 41223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 41323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker mPickerView = (DatePicker) mActivity.findViewById( 41423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri R.id.guidedactions_activator_item); 41523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 41623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.MONTH, Calendar.MARCH, new int[] {0, 1, 2}, 41723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mPickerView, KeyEvent.KEYCODE_DPAD_DOWN); 41823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 41923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testFebruaryToMarchTransition() Execution time: " + executionTime); 42023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 42123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 42223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 42323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 42423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testDecemberToNovemberTransition() throws Throwable { 42523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 42623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 42723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 42823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String title = "Date Picker Transition Test"; 42923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String breadcrumb = "Month Transition Test Demo"; 43023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String description = "Testing the transition from Dec to Nov"; 43123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 43223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri breadcrumb, null); 43323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 43423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 43523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 43623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Calendar cal = Calendar.getInstance(); 43723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 43823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.YEAR, 2016); 43923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.MONTH, Calendar.DECEMBER); 44023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 44123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Date initialDate = cal.getTime(); 44223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 44323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction action = new GuidedDatePickerAction.Builder( 44423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 44523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .id(0) 44623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .title("Date") 44723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .date(initialDate.getTime()) 44823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .datePickerFormat("DMY") 44923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .build(); 45023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 45123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri actionList.add(action); 45223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 45323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.clear(); 45423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 45523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 45623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 45723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri initActivity(intent); 45823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 45923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker mPickerView = (DatePicker) mActivity.findViewById( 46023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri R.id.guidedactions_activator_item); 46123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 46223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.MONTH, Calendar.NOVEMBER, new int[] {0, 1, 2}, 46323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mPickerView, KeyEvent.KEYCODE_DPAD_UP); 46423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 46523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testDecemberToNovember() Execution time: " + executionTime); 46623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 46723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 46823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 46923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 47023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testNovemberToOctoberTransition() throws Throwable { 47123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 47223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 47323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 47423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String title = "Date Picker Transition Test"; 47523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String breadcrumb = "Month Transition Test Demo"; 47623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String description = "Testing the transition from Nov to Oct"; 47723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 47823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri breadcrumb, null); 47923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 48023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 48123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 48223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Calendar cal = Calendar.getInstance(); 48323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 48423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.YEAR, 2016); 48523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.MONTH, Calendar.NOVEMBER); 48623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 487235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Date initialDate = cal.getTime(); 488235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 489235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction action = new GuidedDatePickerAction.Builder( 49023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 491235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(0) 492235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title("Date") 493235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(initialDate.getTime()) 494235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("DMY") 495235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 496235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 497235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(action); 498235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 499235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.clear(); 500235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 501235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 502235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 503235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri initActivity(intent); 504235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 505235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri DatePicker mPickerView = (DatePicker) mActivity.findViewById( 506235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri R.id.guidedactions_activator_item); 507235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 50823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.MONTH, Calendar.OCTOBER, new int[] {0, 1, 2}, 50923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mPickerView, KeyEvent.KEYCODE_DPAD_UP); 51023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 51123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testNovemberToOctober() Execution time: " + executionTime); 51223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 51323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 51423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 51523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 51623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testLeapToNonLeapYearTransition() throws Throwable { 51723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 51823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 51923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 52023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String title = "Date Picker Transition Test"; 52123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String breadcrumb = "Leap Year Transition Test Demo"; 52223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String description = "Testing Feb transition from leap to nonlneap year"; 52323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 52423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri breadcrumb, null); 52523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 52623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 52723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 52823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Calendar cal = Calendar.getInstance(); 52923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 53023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.YEAR, 2016); // 2016 is a leap year 53123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.MONTH, Calendar.FEBRUARY); 53223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 53323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Date initialDate = cal.getTime(); 53423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 53523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction action = new GuidedDatePickerAction.Builder( 53623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 53723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .id(0) 53823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .title("Date") 53923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .date(initialDate.getTime()) 54023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .datePickerFormat("DMY") 54123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .build(); 54223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 54323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri actionList.add(action); 54423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 54523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.clear(); 54623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 54723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 54823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 54923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri initActivity(intent); 55023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 55123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker mPickerView = (DatePicker) mActivity.findViewById( 55223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri R.id.guidedactions_activator_item); 55323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 55423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.YEAR, 2017, new int[] {0, 1, 2}, 55523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mPickerView, KeyEvent.KEYCODE_DPAD_DOWN); 55623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 55723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testLeapToNonLeapYearTransition() Execution time: " + executionTime); 55823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 55923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 56023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 56123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 56223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testNonLeapToLeapYearTransition() throws Throwable { 56323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 56423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 56523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 56623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String title = "Date Picker Transition Test"; 56723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String breadcrumb = "Leap Year Transition Test Demo"; 56823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String description = "Testing Feb transition from nonleap to leap year"; 56923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 57023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri breadcrumb, null); 57123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 57223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 57323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 57423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Calendar cal = Calendar.getInstance(); 57523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 57623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.YEAR, 2017); // 2017 is a non-leap year 57723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.MONTH, Calendar.FEBRUARY); 57823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 57923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Date initialDate = cal.getTime(); 58023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 58123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction action = new GuidedDatePickerAction.Builder( 58223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 58323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .id(0) 58423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .title("Date") 58523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .date(initialDate.getTime()) 58623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .datePickerFormat("DMY") 58723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .build(); 58823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 58923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri actionList.add(action); 59023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 59123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.clear(); 59223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 59323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 59423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 59523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri initActivity(intent); 59623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 59723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker mPickerView = (DatePicker) mActivity.findViewById( 59823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri R.id.guidedactions_activator_item); 59923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 60023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.YEAR, 2016, new int[] {0, 1, 2}, 60123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mPickerView, KeyEvent.KEYCODE_DPAD_UP); 60223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 60323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testNonLeapToLeapYearTransition() Execution time: " + executionTime); 604235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(FINAL_WAIT); 605235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 606235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 607235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private void traverseMonths(DatePicker mPickerView, GuidedDatePickerAction dateAction) 60823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri throws Throwable { 609235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 610235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri final GuidedStepFragment mFragment = (GuidedStepFragment) 611235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mActivity.getGuidedStepTestFragment(); 612235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 613235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar currentActionCal = Calendar.getInstance(); 614235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentActionCal.setTimeInMillis(dateAction.getDate()); 615235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 61623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 617235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 618235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 619235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int prevMonth = -1; 620235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int currentMonth = mPickerView.getColumnAt(MONTH_INDEX).getCurrentValue(); 621235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri while (currentMonth != prevMonth) { 622235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int prevDayOfMonth = -1; 623235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int currentDayOfMonth = mPickerView.getColumnAt(DAY_INDEX).getCurrentValue(); 624235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // scroll down the days till reaching the last day of month 625235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri while (currentDayOfMonth != prevDayOfMonth) { 62623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_DOWN); 627235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(VERTICAL_SCROLL_WAIT); 628235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri prevDayOfMonth = currentDayOfMonth; 629235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentDayOfMonth = mPickerView.getColumnAt(DAY_INDEX).getCurrentValue(); 630235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 631235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int oldDayValue = mPickerView.getColumnAt(DAY_INDEX).getCurrentValue(); 632235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int oldMonthValue = mPickerView.getColumnAt(MONTH_INDEX).getCurrentValue(); 633235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // increment the month 63423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_RIGHT); 635235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(VERTICAL_SCROLL_WAIT); 636235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 63723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_DOWN); 638235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 639235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 640235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int newDayValue = mPickerView.getColumnAt(DAY_INDEX).getCurrentValue(); 641235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int newMonthValue = mPickerView.getColumnAt(MONTH_INDEX).getCurrentValue(); 642235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri verifyMonthTransition(currentActionCal, 643235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri oldDayValue, oldMonthValue, newDayValue, newMonthValue); 644235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 64523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_LEFT); 646235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 647235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri prevMonth = currentMonth; 648235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentMonth = newMonthValue; 649235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 650235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 651235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 652235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 65323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 654235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private void verifyMonthTransition(Calendar currentCal, int oldDayValue, int oldMonthValue, 655235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int newDayValue, int newMonthValue) { 656235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 657235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (oldMonthValue == newMonthValue) 658235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri return; 659235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 660235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentCal.set(Calendar.DAY_OF_MONTH, 1); 661235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentCal.set(Calendar.MONTH, oldMonthValue); 662235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int expectedOldDayValue = currentCal.getActualMaximum(Calendar.DAY_OF_MONTH); 663235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentCal.set(Calendar.MONTH, newMonthValue); 664235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int numDaysInNewMonth = currentCal.getActualMaximum(Calendar.DAY_OF_MONTH); 6653103f63e99d47573823957f7aa34308555873221Aurimas Liutikas int expectedNewDayValue = (expectedOldDayValue <= numDaysInNewMonth) 6663103f63e99d47573823957f7aa34308555873221Aurimas Liutikas ? expectedOldDayValue : numDaysInNewMonth; 667235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 66823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri assertTrue(mContext.getString( 669235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri R.string.datepicker_test_transition_error1, oldMonthValue), 670235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri oldDayValue == expectedOldDayValue 671235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri ); 67223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri assertTrue(mContext.getString( 673235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri R.string.datepicker_test_transition_error2, newDayValue, newMonthValue), 674235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri newDayValue == expectedNewDayValue 675235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri ); 676235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 677235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 67823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 67923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testDateRangesMDYFormat() throws Throwable { 68023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 68123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 68223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 68323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction[] datePickerActions = setupDateActionsForMinAndMaxRangeTests(); 68423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 68523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri scrollToMinAndMaxDates(new int[] {1, 0, 2}, datePickerActions[0]); 68623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 68723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testDateRangesMDYFormat() Execution time: " + executionTime); 68823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 68923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 69023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 69123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testDateRangesDMYFormat() throws Throwable { 69223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 69323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 69423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 69523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction[] datePickerActions = setupDateActionsForMinAndMaxRangeTests(); 69623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "setup dateactions complete!"); 69723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri scrollToMinAndMaxDates(new int[] {0, 1, 2}, datePickerActions[1]); 69823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 69923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testDateRangesDMYFormat() Execution time: " + executionTime); 70023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 70123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 70223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 70323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 70423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testDateRangesWithYearEqual() throws Throwable { 70523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 70623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 70723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 70823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction[] datePickerActions = setupDateActionsForMinAndMaxRangeTests(); 70923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 71023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri scrollToMinAndMaxDates(new int[] {0, 1, 2}, datePickerActions[2]); 71123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 71223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testDateRangesWithYearEqual() Execution time: " + executionTime); 71323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 71423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 71523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 71623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 71723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testDateRangesWithMonthAndYearEqual() throws Throwable { 71823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 71923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 72023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 72123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction[] datePickerActions = setupDateActionsForMinAndMaxRangeTests(); 72223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 72323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri scrollToMinAndMaxDates(new int[] {0, 1, 2}, datePickerActions[3]); 72423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 72523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testDateRangesWithMonthAndYearEqual() Execution time: " + executionTime); 72623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 72723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 72823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 72923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 73023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testDateRangesWithAllFieldsEqual() throws Throwable { 73123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 73223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 733235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 73423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction[] datePickerActions = setupDateActionsForMinAndMaxRangeTests(); 73523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 73623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri scrollToMinAndMaxDates(new int[] {0, 1, 2}, datePickerActions[4]); 73723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 73823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testDateRangesWithAllFieldsEqual() Execution time: " + executionTime); 73923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 74023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 74123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 74223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri private GuidedDatePickerAction[] setupDateActionsForMinAndMaxRangeTests() { 74323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 74423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Resources res = mContext.getResources(); 745235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 746235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 747235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 748235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar currCal = Calendar.getInstance(); 749235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currCal.set(Calendar.YEAR, 2016); 750235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currCal.set(Calendar.MONTH, Calendar.JULY); 751235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currCal.set(Calendar.DAY_OF_MONTH, 15); 752235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 753235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar minCal = Calendar.getInstance(); 754235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.YEAR, 2014); 755235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.MONTH, Calendar.OCTOBER); 756235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.DAY_OF_MONTH, 20); 757235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 758235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar maxCal = Calendar.getInstance(); 759235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxCal.set(Calendar.YEAR, 2018); 760235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxCal.set(Calendar.MONTH, Calendar.FEBRUARY); 761235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxCal.set(Calendar.DAY_OF_MONTH, 10); 762235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 763235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri String title = "Date Picker Range Test"; 764235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri String breadcrumb = "Date Picker Range Test Demo"; 765235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri String description = ""; 766235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 767235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri breadcrumb, null); 768235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 769235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 770235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 771235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // testing different date formats and the correctness of range changes as we scroll 772235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction dateAction1 = new GuidedDatePickerAction.Builder( 77323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 774235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(0) 775235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title(res.getString(R.string.datepicker_with_range_title, 776235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(minCal.getTime()), 777235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(maxCal.getTime()))) 778235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .multilineDescription(true) 779235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(currCal.getTimeInMillis()) 780235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("MDY") 781235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .minDate(minCal.getTimeInMillis()) 782235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .maxDate(maxCal.getTimeInMillis()) 783235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 784235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 785235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction dateAction2 = new GuidedDatePickerAction.Builder( 78623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 787235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(1) 788235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title(res.getString(R.string.datepicker_with_range_title, 789235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(minCal.getTimeInMillis()), 790235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(maxCal.getTimeInMillis()))) 791235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .multilineDescription(true) 792235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(currCal.getTimeInMillis()) 793235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("DMY") 794235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .minDate(minCal.getTimeInMillis()) 795235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .maxDate(maxCal.getTimeInMillis()) 796235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 797235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 798235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // testing date ranges when Year is equal 799235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.YEAR, maxCal.get(Calendar.YEAR)); 800235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int minMonth = Math.min(minCal.get(Calendar.MONTH), maxCal.get(Calendar.MONTH)); 801235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int maxMonth = Math.max(minCal.get(Calendar.MONTH), maxCal.get(Calendar.MONTH)); 802235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.MONTH, minMonth); 803235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxCal.set(Calendar.MONTH, maxMonth); 804235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 805235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction dateAction3 = new GuidedDatePickerAction.Builder( 80623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 807235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(2) 808235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title(res.getString(R.string.datepicker_with_range_title, 809235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(minCal.getTimeInMillis()), 810235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(maxCal.getTimeInMillis()))) 811235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .multilineDescription(true) 812235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(currCal.getTimeInMillis()) 813235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("DMY") 814235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .minDate(minCal.getTimeInMillis()) 815235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .maxDate(maxCal.getTimeInMillis()) 816235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 817235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 818235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 819235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // testing date ranges when both Month and Year are equal 820235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.MONTH, maxCal.get(Calendar.MONTH)); 821235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int minDay = Math.min(minCal.get(Calendar.DAY_OF_MONTH), maxCal.get(Calendar.DAY_OF_MONTH)); 822235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int maxDay = Math.max(minCal.get(Calendar.DAY_OF_MONTH), maxCal.get(Calendar.DAY_OF_MONTH)); 823235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.DAY_OF_MONTH, minDay); 824235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxCal.set(Calendar.DAY_OF_MONTH, maxDay); 825235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 826235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction dateAction4 = new GuidedDatePickerAction.Builder( 82723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 828235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(3) 829235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title(res.getString(R.string.datepicker_with_range_title, 830235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(minCal.getTimeInMillis()), 831235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(maxCal.getTimeInMillis()))) 832235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .multilineDescription(true) 833235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(currCal.getTimeInMillis()) 834235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("DMY") 835235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .minDate(minCal.getTimeInMillis()) 836235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .maxDate(maxCal.getTimeInMillis()) 837235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 838235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 839235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 840235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // testing date ranges when all fields are equal 841235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.DAY_OF_MONTH, maxCal.get(Calendar.DAY_OF_MONTH)); 842235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 843235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction dateAction5 = new GuidedDatePickerAction.Builder( 84423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 845235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(4) 846235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title(res.getString(R.string.datepicker_with_range_title, 847235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(minCal.getTimeInMillis()), 848235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(maxCal.getTimeInMillis()))) 849235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .multilineDescription(true) 850235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(currCal.getTimeInMillis()) 851235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("DMY") 852235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .minDate(minCal.getTimeInMillis()) 853235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .maxDate(maxCal.getTimeInMillis()) 854235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 855235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 856235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(dateAction1); 857235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(dateAction2); 858235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(dateAction3); 859235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(dateAction4); 860235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(dateAction5); 861235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 862235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.clear(); 863235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 864235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 865235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 866235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri initActivity(intent); 86723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri return new GuidedDatePickerAction[] {dateAction1, dateAction2, dateAction3, dateAction4, 86823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri dateAction5}; 869235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 870235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 871235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private void scrollToMinAndMaxDates(int[] columnIndices, GuidedDatePickerAction dateAction) 872235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri throws Throwable{ 873235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 874235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri final GuidedStepFragment mFragment = (GuidedStepFragment) 875235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mActivity.getGuidedStepTestFragment(); 876235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 877235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri VerticalGridView guidedActionsList = (VerticalGridView) 878235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mActivity.findViewById(R.id.guidedactions_list); 879235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 880235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int currSelectedAction = mFragment.getSelectedActionPosition(); 881235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // scroll up/down to the requested action 882235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri long verticalScrollOffset = dateAction.getId() - currSelectedAction; 883235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 884235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int verticalScrollDir = KeyEvent.KEYCODE_DPAD_DOWN; 885235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (verticalScrollOffset < 0) { 886235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri verticalScrollOffset= -verticalScrollOffset; 887235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri verticalScrollDir = KeyEvent.KEYCODE_DPAD_UP; 888235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 889235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri for(int i = 0; i < verticalScrollOffset; i++) { 89023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(verticalScrollDir); 891235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 892235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 893235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 8943103f63e99d47573823957f7aa34308555873221Aurimas Liutikas assertTrue("The wrong action was selected!", mFragment.getSelectedActionPosition() 8953103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == dateAction.getId()); 896235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri DatePicker mPickerView = (DatePicker) mFragment.getActionItemView((int) dateAction.getId()) 897235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .findViewById(R.id.guidedactions_activator_item); 898235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 899235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar currentActionCal = Calendar.getInstance(); 900235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentActionCal.setTimeInMillis(dateAction.getDate()); 901235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 902235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 903235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // scrolling to the minimum date 904235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 90523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.YEAR, -1, columnIndices, mPickerView, 90623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri KeyEvent.KEYCODE_DPAD_UP); 907235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 908235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 90923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.MONTH, -1, columnIndices, mPickerView, 91023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri KeyEvent.KEYCODE_DPAD_UP); 911235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 912235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 91323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.DAY_OF_MONTH, -1, columnIndices, mPickerView, 91423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri KeyEvent.KEYCODE_DPAD_UP); 915235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 916235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 917235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(VERTICAL_SCROLL_WAIT); 918235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 919235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // now scrolling to the maximum date 920235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 92123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.YEAR, -1, columnIndices, mPickerView, 92223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri KeyEvent.KEYCODE_DPAD_DOWN); 923235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 924235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 92523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.MONTH, -1, columnIndices, mPickerView, 92623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri KeyEvent.KEYCODE_DPAD_DOWN); 927235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 928235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 92923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.DAY_OF_MONTH, -1, columnIndices, mPickerView, 93023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri KeyEvent.KEYCODE_DPAD_DOWN); 931235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 932235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 93323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 934235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 935235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 936235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 937235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri} 938