blob: 6c7db3a3b3b325e19bce3113d5847210f6db1412 [file] [log] [blame]
/*
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.uiautomator.common.helpers;
import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiObjectNotFoundException;
import com.android.uiautomator.core.UiSelector;
import java.util.Calendar;
/**
* Use this helper anywhere there is a date picker to manage. This helper
* will set date specified in a Calendar object.
*/
public class DatePickerHelper {
public static final int MONTH = 0;
public static final int DAY = 1;
public static final int YEAR = 2;
public static String getCurrentMonth() throws UiObjectNotFoundException {
return getNumberPickerField(MONTH).getText();
}
public static String getCurrentDay() throws UiObjectNotFoundException {
return getNumberPickerField(DAY).getText();
}
public static String getCurrentYear() throws UiObjectNotFoundException {
return getNumberPickerField(YEAR).getText();
}
public static void incrementMonth() throws UiObjectNotFoundException {
incrementMonth(1);
}
public static void incrementMonth(int count) throws UiObjectNotFoundException {
for (int x = 0; x < count; x++)
getNumberPickerIncrementButton(MONTH).click();
}
public static void decrementMonth() throws UiObjectNotFoundException {
decrementMonth(1);
}
public static void decrementMonth(int count) throws UiObjectNotFoundException {
for (int x = 0; x < count; x++)
getNumberPickerDecrementButton(MONTH).click();
}
public static void incrementDay() throws UiObjectNotFoundException {
incrementDay(1);
}
public static void incrementDay(int count) throws UiObjectNotFoundException {
for (int x = 0; x < count; x++)
getNumberPickerIncrementButton(DAY).click();
}
public static void decrementDay() throws UiObjectNotFoundException {
decrementDay(1);
}
public static void decrementDay(int count) throws UiObjectNotFoundException {
for (int x = 0; x < count; x++)
getNumberPickerDecrementButton(DAY).click();
}
public static void incrementYear() throws UiObjectNotFoundException {
incrementYear(1);
}
public static void incrementYear(int count) throws UiObjectNotFoundException {
for (int x = 0; x < count; x++)
getNumberPickerIncrementButton(YEAR).click();
}
public static void decrementYear() throws UiObjectNotFoundException {
decrementYear(1);
}
public static void decrementYear(int count) throws UiObjectNotFoundException {
for (int x = 0; x < count; x++)
getNumberPickerDecrementButton(YEAR).click();
}
public static UiObject getNumberPicker(int instance) {
return new UiObject(new UiSelector().className(
android.widget.NumberPicker.class.getName()).instance(instance));
}
public static UiObject getNumberPickerField(int instance)
throws UiObjectNotFoundException {
return getNumberPicker(instance).getChild(
new UiSelector().className(android.widget.EditText.class.getName()));
}
public static UiObject getNumberPickerDecrementButton(int instance)
throws UiObjectNotFoundException {
return getNumberPicker(instance).getChild(
new UiSelector().className(android.widget.Button.class.getName()).instance(0));
}
public static UiObject getNumberPickerIncrementButton(int instance)
throws UiObjectNotFoundException {
return getNumberPicker(instance).getChild(
new UiSelector().className(android.widget.Button.class.getName()).instance(1));
}
public static void clickDone() throws UiObjectNotFoundException {
new UiObject(new UiSelector().text("Done")).click();
}
public static void setDate(Calendar cal) throws UiObjectNotFoundException {
int calYear = cal.get(Calendar.YEAR);
int calMonth = cal.get(Calendar.MONTH);
int calDay = cal.get(Calendar.DAY_OF_MONTH);
// Adjust day - increment or decrement using the shortest path
// while accounting for number of days in month and considering
// special case for Feb and leap years.
int dpDay = Integer.parseInt(getCurrentDay());
if (calDay > dpDay) {
if (calDay - dpDay < getDaysInMonth(calYear, calMonth) / 2)
incrementDay(calDay - dpDay);
else
decrementDay(dpDay - calDay + getDaysInMonth(calYear, calMonth));
} else if (dpDay > calDay) {
if (dpDay - calDay < getDaysInMonth(calYear, calMonth) / 2)
decrementDay(dpDay - calDay);
else
incrementDay(calDay - dpDay + getDaysInMonth(calYear, calMonth));
}
// Adjust month - increment or decrement using the shortest path
int dpMonth = toMonthNumber(getCurrentMonth());
if (calMonth > dpMonth) {
if (calMonth - dpMonth < 6)
incrementMonth(calMonth - dpMonth);
else
decrementMonth(dpMonth - calMonth + 12);
} else if (dpMonth > calMonth) {
if (dpMonth - calMonth < 6)
decrementMonth(dpMonth - calMonth);
else
incrementMonth(calMonth - dpMonth + 12);
}
// Adjust year
int dpYear = Integer.parseInt(getCurrentYear());
if (calYear > dpYear) {
incrementYear(calYear - dpYear);
} else if (dpYear > calYear) {
decrementYear(dpYear - calYear);
}
}
private static int toMonthNumber(String monthName) {
String months[] = new String[] {"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"};
for (int x = 0; x < months.length; x++) {
if (months[x].contains(monthName))
return x;
}
return 0;
}
/**
* Get the number of days in the month
* @param year
* @param month
* @return
*/
private static int getDaysInMonth(int year, int month) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
return cal.getActualMaximum(Calendar.DAY_OF_MONTH);
}
}