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 15235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiripackage android.support.v17.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; 26235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.support.v17.leanback.app.GuidedStepFragment; 277d7bf9541e0203ec67df0fe53367e2c126355b9esusnataimport android.support.v17.leanback.test.R; 28235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.support.v17.leanback.widget.GuidanceStylist; 29235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.support.v17.leanback.widget.GuidedAction; 30235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.support.v17.leanback.widget.GuidedDatePickerAction; 31235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.support.v17.leanback.widget.VerticalGridView; 32235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.support.v17.leanback.widget.picker.DatePicker; 33235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.util.Log; 34235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.view.KeyEvent; 35235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.widget.LinearLayout; 363103f63e99d47573823957f7aa34308555873221Aurimas Liutikas 3723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiriimport org.junit.Before; 3823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiriimport org.junit.Rule; 3923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiriimport org.junit.Test; 4023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiriimport org.junit.runner.RunWith; 41235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 42235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport java.text.SimpleDateFormat; 43235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport java.util.ArrayList; 44235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport java.util.Calendar; 45235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport java.util.Date; 46235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport java.util.List; 47235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 4835232c6eaeb9b99f390cb8ef0ac83bf45fa0b3faAurimas Liutikas@LargeTest 4923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri@RunWith(AndroidJUnit4.class) 5023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiripublic class GuidedDatePickerTest { 51235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 52235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri static final long TRANSITION_LENGTH = 1000; 53235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri static long VERTICAL_SCROLL_WAIT = 500; 54235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri static long HORIZONTAL_SCROLL_WAIT = 500; 5523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri static final long FINAL_WAIT = 1000; 56235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 57235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri static final String TAG = "GuidedDatePickerTest"; 58235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 59235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private static final int DAY_INDEX = 0; 60235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private static final int MONTH_INDEX = 1; 61235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private static final int YEAR_INDEX = 2; 6223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 6323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Rule 643103f63e99d47573823957f7aa34308555873221Aurimas Liutikas public ActivityTestRule<GuidedStepAttributesTestActivity> activityTestRule = 653103f63e99d47573823957f7aa34308555873221Aurimas Liutikas new ActivityTestRule<>(GuidedStepAttributesTestActivity.class, false, false); 6623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 67235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestActivity mActivity; 68235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 69235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 70235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private void initActivity(Intent intent) { 7123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mActivity = activityTestRule.launchActivity(intent); 72235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri try { 73235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(2000); 74235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } catch(InterruptedException e) { 75235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri e.printStackTrace(); 76235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 7723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 78235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 79235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 8023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Context mContext; 8123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Before 8223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void setUp() { 8323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext = InstrumentationRegistry.getInstrumentation().getTargetContext();; 8423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 85235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 8623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public static void sendKey(int keyCode) { 8723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri InstrumentationRegistry.getInstrumentation().sendKeyDownUpSync(keyCode); 8823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 89235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 9023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri private int getColumnIndexForDateField(int field, int[] columnIndices) { 91235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int mColDayIndex = columnIndices[0]; 92235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int mColMonthIndex = columnIndices[1]; 93235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int mColYearIndex = columnIndices[2]; 94235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int columnIndex = -1; 95235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri switch (field) { 96235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case Calendar.DAY_OF_MONTH: 97235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri columnIndex = mColDayIndex; 98235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri break; 99235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case Calendar.MONTH: 100235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri columnIndex = mColMonthIndex; 101235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri break; 102235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case Calendar.YEAR: 103235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri columnIndex = mColYearIndex; 104235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 10523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri return columnIndex; 10623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 107235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 10823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri private void horizontalScrollToDateField(int field, int[] columnIndices, 10923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker pickerView) throws Throwable{ 11023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri int columnIndex = getColumnIndexForDateField(field, columnIndices); 111235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 11223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri LinearLayout columnsLayout = (LinearLayout) pickerView.getChildAt(0); 113235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 114235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int focusedFieldPos = columnsLayout.indexOfChild(columnsLayout.getFocusedChild()); 115235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (focusedFieldPos == -1) { 11623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 117235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 118235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 119235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri focusedFieldPos = columnsLayout.indexOfChild(columnsLayout.getFocusedChild()); 120235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri assertTrue("Date field could not be focused!", (focusedFieldPos != -1)); 121235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 122235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // following is to skip the separator fields "/" which are unfocusable but counted as 123235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // children of columnsLayout 124235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri switch (focusedFieldPos) { 125235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case 0: 126235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri focusedFieldPos = 0; 127235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri break; 128235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case 2: 129235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri focusedFieldPos = 1; 130235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri break; 131235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case 4: 132235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri focusedFieldPos = 2; 133235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 134235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 135235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // now scroll right or left to the corresponding date field as indicated by the input field 136235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int horizontalScrollOffset = columnIndex - focusedFieldPos; 137235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 138235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int horizontalScrollDir = KeyEvent.KEYCODE_DPAD_RIGHT; 139235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (horizontalScrollOffset < 0) { 140235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri horizontalScrollOffset = -horizontalScrollOffset; 141235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri horizontalScrollDir = KeyEvent.KEYCODE_DPAD_LEFT; 142235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 143235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri for(int i = 0; i < horizontalScrollOffset; i++) { 14423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(horizontalScrollDir); 145235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(HORIZONTAL_SCROLL_WAIT); 146235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 147235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 14823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 14923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 15023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri /** 15123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri * Scrolls vertically all the way up or down (depending on the provided scrollDir parameter) 15223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri * to fieldValue if it's not equal to -1; otherwise, the scrolling goes all the way to the end. 15323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri * @param field The date field over which the scrolling is performed 15423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri * @param fieldValue The field value to scroll to or -1 if the scrolling should go all the way. 15523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri * @param columnIndices The date field indices corresponding to day, month, and the year 15623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri * @param pickerView The DatePicker view. 15723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri * @param scrollDir The direction of scrolling to reach the desired field value. 15823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri * @throws Throwable 15923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri */ 16023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri private void verticalScrollToFieldValue(int field, int fieldValue, int[] columnIndices, 16123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker pickerView, int scrollDir) 16223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri throws Throwable { 16323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 16423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri int columnIndex = getColumnIndexForDateField(field, columnIndices); 16523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri int colDayIndex = columnIndices[0]; 16623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri int colMonthIndex = columnIndices[1]; 16723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri int colYearIndex = columnIndices[2]; 16823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 16923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri horizontalScrollToDateField(field, columnIndices, pickerView); 170235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 171235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar currentActionCal = Calendar.getInstance(); 17223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri currentActionCal.setTimeInMillis(pickerView.getDate()); 173235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 174235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar minCal = Calendar.getInstance(); 17523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri minCal.setTimeInMillis(pickerView.getMinDate()); 176235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 177235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar maxCal = Calendar.getInstance(); 17823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri maxCal.setTimeInMillis(pickerView.getMaxDate()); 179235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 180235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 181235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int prevColumnVal = -1; 18223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri int currentColumnVal = pickerView.getColumnAt(columnIndex).getCurrentValue(); 18323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri while( currentColumnVal != prevColumnVal && currentColumnVal != fieldValue){ 18423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri assertTrue(mContext.getString(R.string.datepicker_test_wrong_day_value), 1853103f63e99d47573823957f7aa34308555873221Aurimas Liutikas pickerView.getColumnAt(colDayIndex).getCurrentValue() 1863103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == currentActionCal.get(Calendar.DAY_OF_MONTH) 187235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri ); 18823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri assertTrue(mContext.getString(R.string.datepicker_test_wrong_month_value), 1893103f63e99d47573823957f7aa34308555873221Aurimas Liutikas pickerView.getColumnAt(colMonthIndex).getCurrentValue() 1903103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == currentActionCal.get(Calendar.MONTH) 191235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri ); 19223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri assertTrue(mContext.getString(R.string.datepicker_test_wrong_year_value), 1933103f63e99d47573823957f7aa34308555873221Aurimas Liutikas pickerView.getColumnAt(colYearIndex).getCurrentValue() 1943103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == currentActionCal.get(Calendar.YEAR) 195235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri ); 196235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 19723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri int offset = scrollDir == KeyEvent.KEYCODE_DPAD_DOWN ? 1 : -1; 198235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri addDate(currentActionCal, field, offset, minCal, maxCal); 199235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 20023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(scrollDir); 201235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(VERTICAL_SCROLL_WAIT); 202235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 203235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri prevColumnVal = currentColumnVal; 20423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri currentColumnVal = pickerView.getColumnAt(columnIndex).getCurrentValue(); 205235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 206235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 207235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 208235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private void addDate(Calendar mCurrentDate, int field, int offset, 209235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar mMinDate, Calendar mMaxDate) { 210235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int maxOffset = -1; 211235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int actualMinFieldValue, actualMaxFieldValue; 212235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 213235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if ( field == Calendar.YEAR ) { 214235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMinFieldValue = mMinDate.get(Calendar.YEAR); 215235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMaxFieldValue = mMaxDate.get(Calendar.YEAR); 216235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } else { 217235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMinFieldValue = mCurrentDate.getActualMinimum(field); 218235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMaxFieldValue = mCurrentDate.getActualMaximum(field); 219235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 220235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 221235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if ( offset > 0 ) { 222235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxOffset = Math.min( 223235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMaxFieldValue - mCurrentDate.get(field), offset); 224235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mCurrentDate.add(field, maxOffset); 225235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (mCurrentDate.after(mMaxDate)) { 226235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mCurrentDate.setTimeInMillis(mMaxDate.getTimeInMillis()); 227235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 228235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } else { 229235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxOffset = Math.max( 230235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMinFieldValue - mCurrentDate.get(field), offset); 231235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mCurrentDate.add(field, Math.max(offset, maxOffset)); 232235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (mCurrentDate.before(mMinDate)) { 233235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mCurrentDate.setTimeInMillis(mMinDate.getTimeInMillis()); 234235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 235235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 236235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 237235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 23823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 23923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testJanuaryToFebruaryTransitionForLeapYear() throws Throwable { 24023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 24123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 24223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 24323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String title = "Date Picker Transition Test"; 24423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String breadcrumb = "Month Transition Test Demo"; 24523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String description = "Testing the transition from Jan to Feb (leap year)"; 24623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 24723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri breadcrumb, null); 24823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 24923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 25023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 25123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Calendar cal = Calendar.getInstance(); 25223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 25323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.YEAR, 2016); // 2016 is a leap year 25423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.MONTH, Calendar.JANUARY); 25523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 25623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Date initialDate = cal.getTime(); 25723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 25823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction action = new GuidedDatePickerAction.Builder( 25923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 26023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .id(0) 26123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .title("Date") 26223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .date(initialDate.getTime()) 26323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .datePickerFormat("DMY") 26423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .build(); 26523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 26623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri actionList.add(action); 26723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 26823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.clear(); 26923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 27023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 27123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 27223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri initActivity(intent); 27323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 27423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker mPickerView = (DatePicker) mActivity.findViewById( 27523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri R.id.guidedactions_activator_item); 276235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 27723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.MONTH, Calendar.FEBRUARY, new int[] {0, 1, 2}, 27823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mPickerView, KeyEvent.KEYCODE_DPAD_DOWN); 27923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 28023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testJanuaryToFebruaryTransitionForLeapYear() Execution time: " + executionTime); 28123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 28223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 283235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 28423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 28523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testFebruaryToMarchTransitionForLeapYear() throws Throwable { 28623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 28723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 288235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 289235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri String title = "Date Picker Transition Test"; 290235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri String breadcrumb = "Month Transition Test Demo"; 29123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String description = "Testing the transition from Feb to Mar (leap year)"; 292235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 293235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri breadcrumb, null); 294235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 295235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 296235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 297235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar cal = Calendar.getInstance(); 298235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 299235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri cal.set(Calendar.YEAR, 2016); 30023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.MONTH, Calendar.FEBRUARY); 30123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 30223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Date initialDate = cal.getTime(); 30323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 30423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction action = new GuidedDatePickerAction.Builder( 30523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 30623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .id(0) 30723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .title("Date") 30823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .date(initialDate.getTime()) 30923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .datePickerFormat("DMY") 31023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .build(); 31123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 31223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri actionList.add(action); 31323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 31423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.clear(); 31523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 31623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 31723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 31823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri initActivity(intent); 31923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 32023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker mPickerView = (DatePicker) mActivity.findViewById( 32123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri R.id.guidedactions_activator_item); 32223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 32323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.MONTH, Calendar.MARCH, new int[] {0, 1, 2}, 32423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mPickerView, KeyEvent.KEYCODE_DPAD_DOWN); 32523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 32623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testFebruaryToMarchTransition() Execution time: " + executionTime); 32723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 32823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 32923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 33023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 33123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testJanuaryToFebruaryTransitionForNonLeapYear() throws Throwable { 33223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 33323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 33423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 33523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String title = "Date Picker Transition Test"; 33623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String breadcrumb = "Month Transition Test Demo"; 33723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String description = "Testing the transition from Jan to Feb (nonleap year)"; 33823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 33923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri breadcrumb, null); 34023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 34123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 34223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 34323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Calendar cal = Calendar.getInstance(); 34423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 34523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.YEAR, 2017); // 2017 is a leap year 346235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri cal.set(Calendar.MONTH, Calendar.JANUARY); 34723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 34823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Date initialDate = cal.getTime(); 34923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 35023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction action = new GuidedDatePickerAction.Builder( 35123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 35223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .id(0) 35323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .title("Date") 35423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .date(initialDate.getTime()) 35523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .datePickerFormat("DMY") 35623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .build(); 35723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 35823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri actionList.add(action); 35923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 36023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.clear(); 36123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 36223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 36323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 36423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri initActivity(intent); 36523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 36623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker mPickerView = (DatePicker) mActivity.findViewById( 36723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri R.id.guidedactions_activator_item); 36823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 36923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.MONTH, Calendar.FEBRUARY, new int[] {0, 1, 2}, 37023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mPickerView, KeyEvent.KEYCODE_DPAD_DOWN); 37123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 37223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testJanuaryToFebruaryTransition() Execution time: " + executionTime); 37323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 37423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 37523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 37623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 37723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testFebruaryToMarchTransitionForNonLeapYear() throws Throwable { 37823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 37923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 38023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 38123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String title = "Date Picker Transition Test"; 38223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String breadcrumb = "Month Transition Test Demo"; 38323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String description = "Testing the transition from Feb to Mar (nonleap year)"; 38423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 38523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri breadcrumb, null); 38623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 38723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 38823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 38923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Calendar cal = Calendar.getInstance(); 39023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 39123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.YEAR, 2017); 39223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.MONTH, Calendar.FEBRUARY); 39323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 39423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Date initialDate = cal.getTime(); 39523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 39623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction action = new GuidedDatePickerAction.Builder( 39723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 39823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .id(0) 39923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .title("Date") 40023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .date(initialDate.getTime()) 40123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .datePickerFormat("DMY") 40223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .build(); 40323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 40423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri actionList.add(action); 40523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 40623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.clear(); 40723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 40823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 40923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 41023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri initActivity(intent); 41123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 41223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker mPickerView = (DatePicker) mActivity.findViewById( 41323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri R.id.guidedactions_activator_item); 41423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 41523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.MONTH, Calendar.MARCH, new int[] {0, 1, 2}, 41623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mPickerView, KeyEvent.KEYCODE_DPAD_DOWN); 41723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 41823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testFebruaryToMarchTransition() Execution time: " + executionTime); 41923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 42023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 42123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 42223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 42323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testDecemberToNovemberTransition() throws Throwable { 42423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 42523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 42623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 42723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String title = "Date Picker Transition Test"; 42823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String breadcrumb = "Month Transition Test Demo"; 42923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String description = "Testing the transition from Dec to Nov"; 43023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 43123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri breadcrumb, null); 43223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 43323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 43423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 43523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Calendar cal = Calendar.getInstance(); 43623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 43723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.YEAR, 2016); 43823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.MONTH, Calendar.DECEMBER); 43923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 44023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Date initialDate = cal.getTime(); 44123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 44223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction action = new GuidedDatePickerAction.Builder( 44323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 44423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .id(0) 44523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .title("Date") 44623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .date(initialDate.getTime()) 44723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .datePickerFormat("DMY") 44823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .build(); 44923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 45023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri actionList.add(action); 45123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 45223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.clear(); 45323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 45423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 45523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 45623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri initActivity(intent); 45723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 45823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker mPickerView = (DatePicker) mActivity.findViewById( 45923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri R.id.guidedactions_activator_item); 46023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 46123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.MONTH, Calendar.NOVEMBER, new int[] {0, 1, 2}, 46223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mPickerView, KeyEvent.KEYCODE_DPAD_UP); 46323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 46423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testDecemberToNovember() Execution time: " + executionTime); 46523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 46623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 46723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 46823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 46923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testNovemberToOctoberTransition() throws Throwable { 47023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 47123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 47223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 47323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String title = "Date Picker Transition Test"; 47423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String breadcrumb = "Month Transition Test Demo"; 47523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String description = "Testing the transition from Nov to Oct"; 47623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 47723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri breadcrumb, null); 47823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 47923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 48023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 48123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Calendar cal = Calendar.getInstance(); 48223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 48323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.YEAR, 2016); 48423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.MONTH, Calendar.NOVEMBER); 48523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 486235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Date initialDate = cal.getTime(); 487235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 488235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction action = new GuidedDatePickerAction.Builder( 48923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 490235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(0) 491235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title("Date") 492235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(initialDate.getTime()) 493235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("DMY") 494235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 495235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 496235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(action); 497235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 498235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.clear(); 499235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 500235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 501235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 502235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri initActivity(intent); 503235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 504235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri DatePicker mPickerView = (DatePicker) mActivity.findViewById( 505235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri R.id.guidedactions_activator_item); 506235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 50723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.MONTH, Calendar.OCTOBER, new int[] {0, 1, 2}, 50823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mPickerView, KeyEvent.KEYCODE_DPAD_UP); 50923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 51023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testNovemberToOctober() Execution time: " + executionTime); 51123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 51223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 51323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 51423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 51523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testLeapToNonLeapYearTransition() throws Throwable { 51623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 51723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 51823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 51923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String title = "Date Picker Transition Test"; 52023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String breadcrumb = "Leap Year Transition Test Demo"; 52123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String description = "Testing Feb transition from leap to nonlneap year"; 52223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 52323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri breadcrumb, null); 52423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 52523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 52623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 52723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Calendar cal = Calendar.getInstance(); 52823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 52923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.YEAR, 2016); // 2016 is a leap year 53023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.MONTH, Calendar.FEBRUARY); 53123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 53223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Date initialDate = cal.getTime(); 53323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 53423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction action = new GuidedDatePickerAction.Builder( 53523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 53623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .id(0) 53723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .title("Date") 53823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .date(initialDate.getTime()) 53923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .datePickerFormat("DMY") 54023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .build(); 54123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 54223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri actionList.add(action); 54323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 54423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.clear(); 54523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 54623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 54723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 54823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri initActivity(intent); 54923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 55023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker mPickerView = (DatePicker) mActivity.findViewById( 55123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri R.id.guidedactions_activator_item); 55223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 55323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.YEAR, 2017, new int[] {0, 1, 2}, 55423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mPickerView, KeyEvent.KEYCODE_DPAD_DOWN); 55523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 55623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testLeapToNonLeapYearTransition() Execution time: " + executionTime); 55723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 55823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 55923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 56023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 56123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testNonLeapToLeapYearTransition() throws Throwable { 56223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 56323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 56423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 56523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String title = "Date Picker Transition Test"; 56623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String breadcrumb = "Leap Year Transition Test Demo"; 56723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri String description = "Testing Feb transition from nonleap to leap year"; 56823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 56923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri breadcrumb, null); 57023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 57123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 57223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 57323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Calendar cal = Calendar.getInstance(); 57423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 57523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.YEAR, 2017); // 2017 is a non-leap year 57623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.MONTH, Calendar.FEBRUARY); 57723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 57823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Date initialDate = cal.getTime(); 57923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 58023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction action = new GuidedDatePickerAction.Builder( 58123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 58223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .id(0) 58323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .title("Date") 58423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .date(initialDate.getTime()) 58523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .datePickerFormat("DMY") 58623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri .build(); 58723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 58823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri actionList.add(action); 58923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 59023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.clear(); 59123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 59223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 59323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 59423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri initActivity(intent); 59523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 59623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri DatePicker mPickerView = (DatePicker) mActivity.findViewById( 59723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri R.id.guidedactions_activator_item); 59823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 59923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.YEAR, 2016, new int[] {0, 1, 2}, 60023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mPickerView, KeyEvent.KEYCODE_DPAD_UP); 60123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 60223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testNonLeapToLeapYearTransition() Execution time: " + executionTime); 603235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(FINAL_WAIT); 604235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 605235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 606235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private void traverseMonths(DatePicker mPickerView, GuidedDatePickerAction dateAction) 60723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri throws Throwable { 608235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 609235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri final GuidedStepFragment mFragment = (GuidedStepFragment) 610235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mActivity.getGuidedStepTestFragment(); 611235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 612235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar currentActionCal = Calendar.getInstance(); 613235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentActionCal.setTimeInMillis(dateAction.getDate()); 614235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 61523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 616235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 617235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 618235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int prevMonth = -1; 619235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int currentMonth = mPickerView.getColumnAt(MONTH_INDEX).getCurrentValue(); 620235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri while (currentMonth != prevMonth) { 621235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int prevDayOfMonth = -1; 622235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int currentDayOfMonth = mPickerView.getColumnAt(DAY_INDEX).getCurrentValue(); 623235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // scroll down the days till reaching the last day of month 624235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri while (currentDayOfMonth != prevDayOfMonth) { 62523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_DOWN); 626235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(VERTICAL_SCROLL_WAIT); 627235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri prevDayOfMonth = currentDayOfMonth; 628235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentDayOfMonth = mPickerView.getColumnAt(DAY_INDEX).getCurrentValue(); 629235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 630235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int oldDayValue = mPickerView.getColumnAt(DAY_INDEX).getCurrentValue(); 631235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int oldMonthValue = mPickerView.getColumnAt(MONTH_INDEX).getCurrentValue(); 632235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // increment the month 63323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_RIGHT); 634235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(VERTICAL_SCROLL_WAIT); 635235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 63623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_DOWN); 637235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 638235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 639235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int newDayValue = mPickerView.getColumnAt(DAY_INDEX).getCurrentValue(); 640235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int newMonthValue = mPickerView.getColumnAt(MONTH_INDEX).getCurrentValue(); 641235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri verifyMonthTransition(currentActionCal, 642235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri oldDayValue, oldMonthValue, newDayValue, newMonthValue); 643235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 64423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_LEFT); 645235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 646235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri prevMonth = currentMonth; 647235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentMonth = newMonthValue; 648235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 649235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 650235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 651235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 65223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 653235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private void verifyMonthTransition(Calendar currentCal, int oldDayValue, int oldMonthValue, 654235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int newDayValue, int newMonthValue) { 655235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 656235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (oldMonthValue == newMonthValue) 657235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri return; 658235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 659235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentCal.set(Calendar.DAY_OF_MONTH, 1); 660235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentCal.set(Calendar.MONTH, oldMonthValue); 661235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int expectedOldDayValue = currentCal.getActualMaximum(Calendar.DAY_OF_MONTH); 662235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentCal.set(Calendar.MONTH, newMonthValue); 663235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int numDaysInNewMonth = currentCal.getActualMaximum(Calendar.DAY_OF_MONTH); 6643103f63e99d47573823957f7aa34308555873221Aurimas Liutikas int expectedNewDayValue = (expectedOldDayValue <= numDaysInNewMonth) 6653103f63e99d47573823957f7aa34308555873221Aurimas Liutikas ? expectedOldDayValue : numDaysInNewMonth; 666235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 66723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri assertTrue(mContext.getString( 668235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri R.string.datepicker_test_transition_error1, oldMonthValue), 669235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri oldDayValue == expectedOldDayValue 670235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri ); 67123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri assertTrue(mContext.getString( 672235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri R.string.datepicker_test_transition_error2, newDayValue, newMonthValue), 673235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri newDayValue == expectedNewDayValue 674235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri ); 675235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 676235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 67723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 67823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testDateRangesMDYFormat() throws Throwable { 67923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 68023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 68123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 68223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction[] datePickerActions = setupDateActionsForMinAndMaxRangeTests(); 68323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 68423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri scrollToMinAndMaxDates(new int[] {1, 0, 2}, datePickerActions[0]); 68523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 68623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testDateRangesMDYFormat() Execution time: " + executionTime); 68723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 68823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 68923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 69023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testDateRangesDMYFormat() throws Throwable { 69123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 69223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 69323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 69423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction[] datePickerActions = setupDateActionsForMinAndMaxRangeTests(); 69523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "setup dateactions complete!"); 69623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri scrollToMinAndMaxDates(new int[] {0, 1, 2}, datePickerActions[1]); 69723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 69823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testDateRangesDMYFormat() Execution time: " + executionTime); 69923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 70023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 70123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 70223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 70323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testDateRangesWithYearEqual() throws Throwable { 70423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 70523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 70623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 70723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction[] datePickerActions = setupDateActionsForMinAndMaxRangeTests(); 70823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 70923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri scrollToMinAndMaxDates(new int[] {0, 1, 2}, datePickerActions[2]); 71023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 71123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testDateRangesWithYearEqual() Execution time: " + executionTime); 71223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 71323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 71423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 71523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 71623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testDateRangesWithMonthAndYearEqual() throws Throwable { 71723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 71823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 71923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 72023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction[] datePickerActions = setupDateActionsForMinAndMaxRangeTests(); 72123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 72223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri scrollToMinAndMaxDates(new int[] {0, 1, 2}, datePickerActions[3]); 72323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 72423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testDateRangesWithMonthAndYearEqual() Execution time: " + executionTime); 72523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 72623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 72723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 72823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri @Test 72923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri public void testDateRangesWithAllFieldsEqual() throws Throwable { 73023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 73123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long startTime = System.currentTimeMillis(); 732235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 73323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri GuidedDatePickerAction[] datePickerActions = setupDateActionsForMinAndMaxRangeTests(); 73423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 73523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri scrollToMinAndMaxDates(new int[] {0, 1, 2}, datePickerActions[4]); 73623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri long executionTime = System.currentTimeMillis() - startTime; 73723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Log.d(TAG, "testDateRangesWithAllFieldsEqual() Execution time: " + executionTime); 73823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Thread.sleep(FINAL_WAIT); 73923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri } 74023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri 74123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri private GuidedDatePickerAction[] setupDateActionsForMinAndMaxRangeTests() { 74223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Intent intent = new Intent(); 74323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri Resources res = mContext.getResources(); 744235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 745235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 746235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 747235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar currCal = Calendar.getInstance(); 748235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currCal.set(Calendar.YEAR, 2016); 749235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currCal.set(Calendar.MONTH, Calendar.JULY); 750235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currCal.set(Calendar.DAY_OF_MONTH, 15); 751235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 752235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar minCal = Calendar.getInstance(); 753235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.YEAR, 2014); 754235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.MONTH, Calendar.OCTOBER); 755235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.DAY_OF_MONTH, 20); 756235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 757235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar maxCal = Calendar.getInstance(); 758235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxCal.set(Calendar.YEAR, 2018); 759235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxCal.set(Calendar.MONTH, Calendar.FEBRUARY); 760235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxCal.set(Calendar.DAY_OF_MONTH, 10); 761235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 762235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri String title = "Date Picker Range Test"; 763235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri String breadcrumb = "Date Picker Range Test Demo"; 764235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri String description = ""; 765235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 766235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri breadcrumb, null); 767235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 768235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 769235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 770235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // testing different date formats and the correctness of range changes as we scroll 771235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction dateAction1 = new GuidedDatePickerAction.Builder( 77223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 773235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(0) 774235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title(res.getString(R.string.datepicker_with_range_title, 775235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(minCal.getTime()), 776235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(maxCal.getTime()))) 777235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .multilineDescription(true) 778235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(currCal.getTimeInMillis()) 779235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("MDY") 780235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .minDate(minCal.getTimeInMillis()) 781235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .maxDate(maxCal.getTimeInMillis()) 782235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 783235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 784235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction dateAction2 = new GuidedDatePickerAction.Builder( 78523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 786235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(1) 787235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title(res.getString(R.string.datepicker_with_range_title, 788235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(minCal.getTimeInMillis()), 789235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(maxCal.getTimeInMillis()))) 790235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .multilineDescription(true) 791235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(currCal.getTimeInMillis()) 792235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("DMY") 793235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .minDate(minCal.getTimeInMillis()) 794235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .maxDate(maxCal.getTimeInMillis()) 795235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 796235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 797235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // testing date ranges when Year is equal 798235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.YEAR, maxCal.get(Calendar.YEAR)); 799235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int minMonth = Math.min(minCal.get(Calendar.MONTH), maxCal.get(Calendar.MONTH)); 800235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int maxMonth = Math.max(minCal.get(Calendar.MONTH), maxCal.get(Calendar.MONTH)); 801235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.MONTH, minMonth); 802235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxCal.set(Calendar.MONTH, maxMonth); 803235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 804235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction dateAction3 = new GuidedDatePickerAction.Builder( 80523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 806235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(2) 807235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title(res.getString(R.string.datepicker_with_range_title, 808235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(minCal.getTimeInMillis()), 809235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(maxCal.getTimeInMillis()))) 810235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .multilineDescription(true) 811235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(currCal.getTimeInMillis()) 812235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("DMY") 813235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .minDate(minCal.getTimeInMillis()) 814235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .maxDate(maxCal.getTimeInMillis()) 815235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 816235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 817235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 818235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // testing date ranges when both Month and Year are equal 819235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.MONTH, maxCal.get(Calendar.MONTH)); 820235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int minDay = Math.min(minCal.get(Calendar.DAY_OF_MONTH), maxCal.get(Calendar.DAY_OF_MONTH)); 821235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int maxDay = Math.max(minCal.get(Calendar.DAY_OF_MONTH), maxCal.get(Calendar.DAY_OF_MONTH)); 822235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.DAY_OF_MONTH, minDay); 823235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxCal.set(Calendar.DAY_OF_MONTH, maxDay); 824235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 825235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction dateAction4 = new GuidedDatePickerAction.Builder( 82623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 827235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(3) 828235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title(res.getString(R.string.datepicker_with_range_title, 829235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(minCal.getTimeInMillis()), 830235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(maxCal.getTimeInMillis()))) 831235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .multilineDescription(true) 832235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(currCal.getTimeInMillis()) 833235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("DMY") 834235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .minDate(minCal.getTimeInMillis()) 835235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .maxDate(maxCal.getTimeInMillis()) 836235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 837235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 838235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 839235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // testing date ranges when all fields are equal 840235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.DAY_OF_MONTH, maxCal.get(Calendar.DAY_OF_MONTH)); 841235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 842235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction dateAction5 = new GuidedDatePickerAction.Builder( 84323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri mContext) 844235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(4) 845235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title(res.getString(R.string.datepicker_with_range_title, 846235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(minCal.getTimeInMillis()), 847235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(maxCal.getTimeInMillis()))) 848235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .multilineDescription(true) 849235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(currCal.getTimeInMillis()) 850235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("DMY") 851235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .minDate(minCal.getTimeInMillis()) 852235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .maxDate(maxCal.getTimeInMillis()) 853235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 854235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 855235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(dateAction1); 856235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(dateAction2); 857235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(dateAction3); 858235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(dateAction4); 859235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(dateAction5); 860235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 861235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.clear(); 862235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 863235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 864235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 865235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri initActivity(intent); 86623cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri return new GuidedDatePickerAction[] {dateAction1, dateAction2, dateAction3, dateAction4, 86723cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri dateAction5}; 868235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 869235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 870235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private void scrollToMinAndMaxDates(int[] columnIndices, GuidedDatePickerAction dateAction) 871235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri throws Throwable{ 872235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 873235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri final GuidedStepFragment mFragment = (GuidedStepFragment) 874235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mActivity.getGuidedStepTestFragment(); 875235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 876235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri VerticalGridView guidedActionsList = (VerticalGridView) 877235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mActivity.findViewById(R.id.guidedactions_list); 878235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 879235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int currSelectedAction = mFragment.getSelectedActionPosition(); 880235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // scroll up/down to the requested action 881235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri long verticalScrollOffset = dateAction.getId() - currSelectedAction; 882235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 883235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int verticalScrollDir = KeyEvent.KEYCODE_DPAD_DOWN; 884235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (verticalScrollOffset < 0) { 885235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri verticalScrollOffset= -verticalScrollOffset; 886235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri verticalScrollDir = KeyEvent.KEYCODE_DPAD_UP; 887235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 888235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri for(int i = 0; i < verticalScrollOffset; i++) { 88923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(verticalScrollDir); 890235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 891235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 892235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 8933103f63e99d47573823957f7aa34308555873221Aurimas Liutikas assertTrue("The wrong action was selected!", mFragment.getSelectedActionPosition() 8943103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == dateAction.getId()); 895235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri DatePicker mPickerView = (DatePicker) mFragment.getActionItemView((int) dateAction.getId()) 896235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .findViewById(R.id.guidedactions_activator_item); 897235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 898235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar currentActionCal = Calendar.getInstance(); 899235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentActionCal.setTimeInMillis(dateAction.getDate()); 900235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 901235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 902235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // scrolling to the minimum date 903235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 90423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.YEAR, -1, columnIndices, mPickerView, 90523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri KeyEvent.KEYCODE_DPAD_UP); 906235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 907235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 90823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.MONTH, -1, columnIndices, mPickerView, 90923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri KeyEvent.KEYCODE_DPAD_UP); 910235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 911235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 91223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.DAY_OF_MONTH, -1, columnIndices, mPickerView, 91323cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri KeyEvent.KEYCODE_DPAD_UP); 914235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 915235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 916235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(VERTICAL_SCROLL_WAIT); 917235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 918235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // now scrolling to the maximum date 919235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 92023cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.YEAR, -1, columnIndices, mPickerView, 92123cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri KeyEvent.KEYCODE_DPAD_DOWN); 922235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 923235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 92423cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.MONTH, -1, columnIndices, mPickerView, 92523cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri KeyEvent.KEYCODE_DPAD_DOWN); 926235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 927235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 92823cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri verticalScrollToFieldValue(Calendar.DAY_OF_MONTH, -1, columnIndices, mPickerView, 92923cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri KeyEvent.KEYCODE_DPAD_DOWN); 930235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 931235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 93223cd461516e1cb7862ce49f533178460c73b678bKeyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 933235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 934235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 935235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 936235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri} 937