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 17235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.app.Instrumentation; 18235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.content.Intent; 19235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.content.res.Resources; 20235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.support.v17.leanback.app.GuidedStepFragment; 21235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.support.v17.leanback.tests.R; 22235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.support.v17.leanback.widget.GuidanceStylist; 23235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.support.v17.leanback.widget.GuidedAction; 24235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.support.v17.leanback.widget.GuidedDatePickerAction; 25235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.support.v17.leanback.widget.VerticalGridView; 26235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.support.v17.leanback.widget.picker.DatePicker; 27235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.test.ActivityInstrumentationTestCase2; 28235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.util.Log; 29235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.view.KeyEvent; 30235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.view.View; 31235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.view.ViewGroup; 32235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport android.widget.LinearLayout; 33235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 34235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport java.text.SimpleDateFormat; 35235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport java.util.ArrayList; 36235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport java.util.Calendar; 37235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport java.util.Date; 38235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiriimport java.util.List; 39235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 40235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiripublic class GuidedDatePickerTest extends 41235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri ActivityInstrumentationTestCase2<GuidedStepAttributesTestActivity> { 42235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 43235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri static final long TRANSITION_LENGTH = 1000; 44235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri static long VERTICAL_SCROLL_WAIT = 500; 45235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri static long HORIZONTAL_SCROLL_WAIT = 500; 46235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri static final long FINAL_WAIT = 3000; 47235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 48235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri static final String TAG = "GuidedDatePickerTest"; 49235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 50235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private static final int DAY_INDEX = 0; 51235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private static final int MONTH_INDEX = 1; 52235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private static final int YEAR_INDEX = 2; 53235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Instrumentation mInstrumentation; 54235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestActivity mActivity; 55235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 56235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri public GuidedDatePickerTest() { 57235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri super(GuidedStepAttributesTestActivity.class); 58235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 59235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 60235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private void initActivity(Intent intent) { 61235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 62235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri setActivityIntent(intent); 63235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mActivity = getActivity(); 64235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri try { 65235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(2000); 66235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } catch(InterruptedException e) { 67235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri e.printStackTrace(); 68235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 69235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 70235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 71235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private void scrollOnField(int field, int[] columnIndices, DatePicker mPickerView, 72235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int SCROLL_DIR) throws Throwable { 73235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 74235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri final GuidedStepFragment mFragment = (GuidedStepFragment) 75235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mActivity.getGuidedStepTestFragment(); 76235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 77235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int mColDayIndex = columnIndices[0]; 78235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int mColMonthIndex = columnIndices[1]; 79235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int mColYearIndex = columnIndices[2]; 80235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int columnIndex = -1; 81235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri switch (field) { 82235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case Calendar.DAY_OF_MONTH: 83235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri columnIndex = mColDayIndex; 84235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri break; 85235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case Calendar.MONTH: 86235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri columnIndex = mColMonthIndex; 87235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri break; 88235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case Calendar.YEAR: 89235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri columnIndex = mColYearIndex; 90235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 91235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 92235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 93235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri LinearLayout columnsLayout = (LinearLayout) mPickerView.getChildAt(0); 94235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 95235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int focusedFieldPos = columnsLayout.indexOfChild(columnsLayout.getFocusedChild()); 96235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (focusedFieldPos == -1) { 97235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri sendKeys(KeyEvent.KEYCODE_DPAD_CENTER); 98235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 99235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 100235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri focusedFieldPos = columnsLayout.indexOfChild(columnsLayout.getFocusedChild()); 101235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri assertTrue("Date field could not be focused!", (focusedFieldPos != -1)); 102235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 103235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // following is to skip the separator fields "/" which are unfocusable but counted as 104235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // children of columnsLayout 105235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri switch (focusedFieldPos) { 106235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case 0: 107235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri focusedFieldPos = 0; 108235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri break; 109235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case 2: 110235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri focusedFieldPos = 1; 111235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri break; 112235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri case 4: 113235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri focusedFieldPos = 2; 114235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 115235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 116235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // now scroll right or left to the corresponding date field as indicated by the input field 117235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int horizontalScrollOffset = columnIndex - focusedFieldPos; 118235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 119235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int horizontalScrollDir = KeyEvent.KEYCODE_DPAD_RIGHT; 120235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (horizontalScrollOffset < 0) { 121235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri horizontalScrollOffset = -horizontalScrollOffset; 122235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri horizontalScrollDir = KeyEvent.KEYCODE_DPAD_LEFT; 123235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 124235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri for(int i = 0; i < horizontalScrollOffset; i++) { 125235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri sendKeys(horizontalScrollDir); 126235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(HORIZONTAL_SCROLL_WAIT); 127235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 128235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 129235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 130235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar currentActionCal = Calendar.getInstance(); 131235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentActionCal.setTimeInMillis(mPickerView.getDate()); 132235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 133235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar minCal = Calendar.getInstance(); 134235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.setTimeInMillis(mPickerView.getMinDate()); 135235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 136235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar maxCal = Calendar.getInstance(); 137235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxCal.setTimeInMillis(mPickerView.getMaxDate()); 138235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 139235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 140235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int prevColumnVal = -1; 141235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int currentColumnVal = mPickerView.getColumnAt(columnIndex).getCurrentValue(); 142235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri while( currentColumnVal != prevColumnVal ){ 143235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri assertTrue(getActivity().getString(R.string.datepicker_test_wrong_day_value), 144235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mPickerView.getColumnAt(mColDayIndex).getCurrentValue() == 145235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentActionCal.get(Calendar.DAY_OF_MONTH) 146235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri ); 147235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri assertTrue(getActivity().getString(R.string.datepicker_test_wrong_month_value), 148235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mPickerView.getColumnAt(mColMonthIndex).getCurrentValue() == 149235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentActionCal.get(Calendar.MONTH) 150235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri ); 151235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri assertTrue(getActivity().getString(R.string.datepicker_test_wrong_year_value), 152235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mPickerView.getColumnAt(mColYearIndex).getCurrentValue() == 153235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentActionCal.get(Calendar.YEAR) 154235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri ); 155235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 156235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int offset = SCROLL_DIR == KeyEvent.KEYCODE_DPAD_DOWN ? 1 : -1; 157235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri addDate(currentActionCal, field, offset, minCal, maxCal); 158235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 159235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri sendKeys(SCROLL_DIR); 160235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(VERTICAL_SCROLL_WAIT); 161235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 162235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri prevColumnVal = currentColumnVal; 163235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentColumnVal = mPickerView.getColumnAt(columnIndex).getCurrentValue(); 164235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 165235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 166235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 167235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private void addDate(Calendar mCurrentDate, int field, int offset, 168235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar mMinDate, Calendar mMaxDate) { 169235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int maxOffset = -1; 170235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int actualMinFieldValue, actualMaxFieldValue; 171235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 172235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if ( field == Calendar.YEAR ) { 173235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMinFieldValue = mMinDate.get(Calendar.YEAR); 174235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMaxFieldValue = mMaxDate.get(Calendar.YEAR); 175235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } else { 176235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMinFieldValue = mCurrentDate.getActualMinimum(field); 177235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMaxFieldValue = mCurrentDate.getActualMaximum(field); 178235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 179235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 180235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if ( offset > 0 ) { 181235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxOffset = Math.min( 182235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMaxFieldValue - mCurrentDate.get(field), offset); 183235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mCurrentDate.add(field, maxOffset); 184235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (mCurrentDate.after(mMaxDate)) { 185235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mCurrentDate.setTimeInMillis(mMaxDate.getTimeInMillis()); 186235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 187235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } else { 188235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxOffset = Math.max( 189235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actualMinFieldValue - mCurrentDate.get(field), offset); 190235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mCurrentDate.add(field, Math.max(offset, maxOffset)); 191235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (mCurrentDate.before(mMinDate)) { 192235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mCurrentDate.setTimeInMillis(mMinDate.getTimeInMillis()); 193235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 194235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 195235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 196235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 197235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri public void testDifferentMonthLengths() throws Throwable { 198235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 199235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mInstrumentation = getInstrumentation(); 200235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Intent intent = new Intent(mInstrumentation.getContext(), 201235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestActivity.class); 202235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Resources res = mInstrumentation.getContext().getResources(); 203235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 204235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri final int NUM_DATE_ACTIONS = 1; 205235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 206235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri String title = "Date Picker Transition Test"; 207235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri String breadcrumb = "Month Transition Test Demo"; 208235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri String description = "Testing the transition between longer to shorter months"; 209235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 210235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri breadcrumb, null); 211235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 212235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 213235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 214235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar cal = Calendar.getInstance(); 215235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 216235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri cal.set(Calendar.YEAR, 2016); 217235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri cal.set(Calendar.MONTH, Calendar.JANUARY); 218235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri cal.set(Calendar.DAY_OF_MONTH, 30); 219235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Date initialDate = cal.getTime(); 220235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 221235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction action = new GuidedDatePickerAction.Builder( 222235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mInstrumentation.getContext()) 223235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(0) 224235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title("Date") 225235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(initialDate.getTime()) 226235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("DMY") 227235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 228235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 229235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(action); 230235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 231235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.clear(); 232235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 233235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 234235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 235235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri initActivity(intent); 236235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 237235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri DatePicker mPickerView = (DatePicker) mActivity.findViewById( 238235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri R.id.guidedactions_activator_item); 239235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 240235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri final GuidedStepFragment mFragment = (GuidedStepFragment) mActivity. 241235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri getGuidedStepTestFragment(); 242235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri traverseMonths(mPickerView, (GuidedDatePickerAction) actionList.get(0)); 243235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(FINAL_WAIT); 244235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 245235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 246235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private void traverseMonths(DatePicker mPickerView, GuidedDatePickerAction dateAction) 247235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri throws Throwable{ 248235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 249235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri final GuidedStepFragment mFragment = (GuidedStepFragment) 250235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mActivity.getGuidedStepTestFragment(); 251235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 252235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar currentActionCal = Calendar.getInstance(); 253235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentActionCal.setTimeInMillis(dateAction.getDate()); 254235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 255235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri sendKeys(KeyEvent.KEYCODE_DPAD_CENTER); 256235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 257235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 258235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int prevMonth = -1; 259235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int currentMonth = mPickerView.getColumnAt(MONTH_INDEX).getCurrentValue(); 260235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri while (currentMonth != prevMonth) { 261235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int prevDayOfMonth = -1; 262235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int currentDayOfMonth = mPickerView.getColumnAt(DAY_INDEX).getCurrentValue(); 263235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // scroll down the days till reaching the last day of month 264235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri while (currentDayOfMonth != prevDayOfMonth) { 265235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri sendKeys(KeyEvent.KEYCODE_DPAD_DOWN); 266235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(VERTICAL_SCROLL_WAIT); 267235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri prevDayOfMonth = currentDayOfMonth; 268235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentDayOfMonth = mPickerView.getColumnAt(DAY_INDEX).getCurrentValue(); 269235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 270235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int oldDayValue = mPickerView.getColumnAt(DAY_INDEX).getCurrentValue(); 271235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int oldMonthValue = mPickerView.getColumnAt(MONTH_INDEX).getCurrentValue(); 272235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // increment the month 273235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri sendKeys(KeyEvent.KEYCODE_DPAD_RIGHT); 274235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(VERTICAL_SCROLL_WAIT); 275235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 276235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri sendKeys(KeyEvent.KEYCODE_DPAD_DOWN); 277235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 278235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 279235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int newDayValue = mPickerView.getColumnAt(DAY_INDEX).getCurrentValue(); 280235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int newMonthValue = mPickerView.getColumnAt(MONTH_INDEX).getCurrentValue(); 281235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri verifyMonthTransition(currentActionCal, 282235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri oldDayValue, oldMonthValue, newDayValue, newMonthValue); 283235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 284235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri sendKeys(KeyEvent.KEYCODE_DPAD_LEFT); 285235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 286235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri prevMonth = currentMonth; 287235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentMonth = newMonthValue; 288235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 289235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 290235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 291235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 292235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private void verifyMonthTransition(Calendar currentCal, int oldDayValue, int oldMonthValue, 293235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int newDayValue, int newMonthValue) { 294235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 295235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (oldMonthValue == newMonthValue) 296235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri return; 297235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 298235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentCal.set(Calendar.DAY_OF_MONTH, 1); 299235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentCal.set(Calendar.MONTH, oldMonthValue); 300235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int expectedOldDayValue = currentCal.getActualMaximum(Calendar.DAY_OF_MONTH); 301235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentCal.set(Calendar.MONTH, newMonthValue); 302235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int numDaysInNewMonth = currentCal.getActualMaximum(Calendar.DAY_OF_MONTH); 303235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int expectedNewDayValue = (expectedOldDayValue <= numDaysInNewMonth) ? 304235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri expectedOldDayValue : numDaysInNewMonth; 305235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 306235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri assertTrue(getActivity().getString( 307235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri R.string.datepicker_test_transition_error1, oldMonthValue), 308235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri oldDayValue == expectedOldDayValue 309235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri ); 310235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri assertTrue(getActivity().getString( 311235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri R.string.datepicker_test_transition_error2, newDayValue, newMonthValue), 312235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri newDayValue == expectedNewDayValue 313235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri ); 314235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 315235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 316235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri public void testDateRanges() throws Throwable { 317235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 318235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mInstrumentation = getInstrumentation(); 319235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Intent intent = new Intent(mInstrumentation.getContext(), 320235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestActivity.class); 321235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Resources res = mInstrumentation.getContext().getResources(); 322235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 323235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 324235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 325235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar currCal = Calendar.getInstance(); 326235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currCal.set(Calendar.YEAR, 2016); 327235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currCal.set(Calendar.MONTH, Calendar.JULY); 328235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currCal.set(Calendar.DAY_OF_MONTH, 15); 329235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 330235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar minCal = Calendar.getInstance(); 331235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.YEAR, 2014); 332235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.MONTH, Calendar.OCTOBER); 333235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.DAY_OF_MONTH, 20); 334235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 335235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar maxCal = Calendar.getInstance(); 336235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxCal.set(Calendar.YEAR, 2018); 337235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxCal.set(Calendar.MONTH, Calendar.FEBRUARY); 338235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxCal.set(Calendar.DAY_OF_MONTH, 10); 339235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 340235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri String title = "Date Picker Range Test"; 341235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri String breadcrumb = "Date Picker Range Test Demo"; 342235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri String description = ""; 343235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 344235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri breadcrumb, null); 345235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 346235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 347235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 348235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // testing different date formats and the correctness of range changes as we scroll 349235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction dateAction1 = new GuidedDatePickerAction.Builder( 350235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mInstrumentation.getContext()) 351235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(0) 352235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title(res.getString(R.string.datepicker_with_range_title, 353235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(minCal.getTime()), 354235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(maxCal.getTime()))) 355235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .multilineDescription(true) 356235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(currCal.getTimeInMillis()) 357235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("MDY") 358235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .minDate(minCal.getTimeInMillis()) 359235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .maxDate(maxCal.getTimeInMillis()) 360235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 361235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 362235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction dateAction2 = new GuidedDatePickerAction.Builder( 363235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mInstrumentation.getContext()) 364235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(1) 365235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title(res.getString(R.string.datepicker_with_range_title, 366235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(minCal.getTimeInMillis()), 367235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(maxCal.getTimeInMillis()))) 368235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .multilineDescription(true) 369235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(currCal.getTimeInMillis()) 370235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("DMY") 371235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .minDate(minCal.getTimeInMillis()) 372235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .maxDate(maxCal.getTimeInMillis()) 373235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 374235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 375235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // testing date ranges when Year is equal 376235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.YEAR, maxCal.get(Calendar.YEAR)); 377235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int minMonth = Math.min(minCal.get(Calendar.MONTH), maxCal.get(Calendar.MONTH)); 378235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int maxMonth = Math.max(minCal.get(Calendar.MONTH), maxCal.get(Calendar.MONTH)); 379235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.MONTH, minMonth); 380235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxCal.set(Calendar.MONTH, maxMonth); 381235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 382235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction dateAction3 = new GuidedDatePickerAction.Builder( 383235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mInstrumentation.getContext()) 384235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(2) 385235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title(res.getString(R.string.datepicker_with_range_title, 386235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(minCal.getTimeInMillis()), 387235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(maxCal.getTimeInMillis()))) 388235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .multilineDescription(true) 389235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(currCal.getTimeInMillis()) 390235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("DMY") 391235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .minDate(minCal.getTimeInMillis()) 392235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .maxDate(maxCal.getTimeInMillis()) 393235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 394235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 395235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 396235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // testing date ranges when both Month and Year are equal 397235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.MONTH, maxCal.get(Calendar.MONTH)); 398235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int minDay = Math.min(minCal.get(Calendar.DAY_OF_MONTH), maxCal.get(Calendar.DAY_OF_MONTH)); 399235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int maxDay = Math.max(minCal.get(Calendar.DAY_OF_MONTH), maxCal.get(Calendar.DAY_OF_MONTH)); 400235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.DAY_OF_MONTH, minDay); 401235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri maxCal.set(Calendar.DAY_OF_MONTH, maxDay); 402235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 403235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction dateAction4 = new GuidedDatePickerAction.Builder( 404235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mInstrumentation.getContext()) 405235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(3) 406235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title(res.getString(R.string.datepicker_with_range_title, 407235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(minCal.getTimeInMillis()), 408235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(maxCal.getTimeInMillis()))) 409235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .multilineDescription(true) 410235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(currCal.getTimeInMillis()) 411235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("DMY") 412235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .minDate(minCal.getTimeInMillis()) 413235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .maxDate(maxCal.getTimeInMillis()) 414235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 415235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 416235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 417235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // testing date ranges when all fields are equal 418235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri minCal.set(Calendar.DAY_OF_MONTH, maxCal.get(Calendar.DAY_OF_MONTH)); 419235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 420235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedDatePickerAction dateAction5 = new GuidedDatePickerAction.Builder( 421235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mInstrumentation.getContext()) 422235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .id(4) 423235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .title(res.getString(R.string.datepicker_with_range_title, 424235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(minCal.getTimeInMillis()), 425235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateFormat.format(maxCal.getTimeInMillis()))) 426235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .multilineDescription(true) 427235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .date(currCal.getTimeInMillis()) 428235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .datePickerFormat("DMY") 429235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .minDate(minCal.getTimeInMillis()) 430235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .maxDate(maxCal.getTimeInMillis()) 431235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .build(); 432235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 433235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(dateAction1); 434235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(dateAction2); 435235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(dateAction3); 436235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(dateAction4); 437235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri actionList.add(dateAction5); 438235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 439235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.clear(); 440235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 441235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 442235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 443235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri initActivity(intent); 444235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 445235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri final GuidedStepFragment mFragment = (GuidedStepFragment) mActivity. 446235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri getGuidedStepTestFragment(); 447235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 448235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri scrollToMinAndMaxDates(new int[] {1, 0, 2}, dateAction1); 449235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri scrollToMinAndMaxDates(new int[] {0, 1, 2}, dateAction2); 450235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri scrollToMinAndMaxDates(new int[] {0, 1, 2}, dateAction3); 451235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri scrollToMinAndMaxDates(new int[] {0, 1, 2}, dateAction4); 452235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri scrollToMinAndMaxDates(new int[] {0, 1, 2}, dateAction5); 453235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 454235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(FINAL_WAIT); 455235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 456235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 457235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri private void scrollToMinAndMaxDates(int[] columnIndices, GuidedDatePickerAction dateAction) 458235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri throws Throwable{ 459235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 460235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri final GuidedStepFragment mFragment = (GuidedStepFragment) 461235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mActivity.getGuidedStepTestFragment(); 462235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 463235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri VerticalGridView guidedActionsList = (VerticalGridView) 464235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri mActivity.findViewById(R.id.guidedactions_list); 465235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 466235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int currSelectedAction = mFragment.getSelectedActionPosition(); 467235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // scroll up/down to the requested action 468235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri long verticalScrollOffset = dateAction.getId() - currSelectedAction; 469235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 470235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri int verticalScrollDir = KeyEvent.KEYCODE_DPAD_DOWN; 471235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri if (verticalScrollOffset < 0) { 472235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri verticalScrollOffset= -verticalScrollOffset; 473235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri verticalScrollDir = KeyEvent.KEYCODE_DPAD_UP; 474235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 475235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri for(int i = 0; i < verticalScrollOffset; i++) { 476235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri sendKeys(verticalScrollDir); 477235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 478235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 479235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 480235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri assertTrue("The wrong action was selected!", mFragment.getSelectedActionPosition() == 481235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.getId()); 482235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri DatePicker mPickerView = (DatePicker) mFragment.getActionItemView((int) dateAction.getId()) 483235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri .findViewById(R.id.guidedactions_activator_item); 484235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 485235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Calendar currentActionCal = Calendar.getInstance(); 486235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri currentActionCal.setTimeInMillis(dateAction.getDate()); 487235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 488235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 489235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // scrolling to the minimum date 490235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 491235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri scrollOnField(Calendar.YEAR, columnIndices, mPickerView, KeyEvent.KEYCODE_DPAD_UP); 492235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 493235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 494235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri scrollOnField(Calendar.MONTH, columnIndices, mPickerView, KeyEvent.KEYCODE_DPAD_UP); 495235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 496235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 497235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri scrollOnField(Calendar.DAY_OF_MONTH, columnIndices, mPickerView, KeyEvent.KEYCODE_DPAD_UP); 498235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 499235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 500235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(VERTICAL_SCROLL_WAIT); 501235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 502235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri // now scrolling to the maximum date 503235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 504235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri scrollOnField(Calendar.YEAR, columnIndices, mPickerView, KeyEvent.KEYCODE_DPAD_DOWN); 505235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 506235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 507235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri scrollOnField(Calendar.MONTH, columnIndices, mPickerView, KeyEvent.KEYCODE_DPAD_DOWN); 508235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 509235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 510235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri scrollOnField(Calendar.DAY_OF_MONTH, columnIndices, mPickerView, KeyEvent.KEYCODE_DPAD_DOWN); 511235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri dateAction.setDate(mPickerView.getDate()); 512235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 513235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri sendKeys(KeyEvent.KEYCODE_DPAD_CENTER); 514235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 515235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri } 516235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 517235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri} 518