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