blob: c5e3add03ca67c761d11e675fae96a287f4c6eae [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;
import java.util.Locale;
/**
* Use this helper anywhere there is a time picker to manage. This helper
* will set time specified in a Calendar object.
*/
public class TimePickerHelper {
public static final int HOUR = 0;
public static final int MINUTE = 1;
public static final int MERIDIEM = 2;
public static String getCurrentHour() throws UiObjectNotFoundException {
return getNumberPickerField(HOUR).getText();
}
public static String getCurrentMinute() throws UiObjectNotFoundException {
return getNumberPickerField(MINUTE).getText();
}
public static String getCurrentMeridiem() throws UiObjectNotFoundException {
return getNumberPickerField(MERIDIEM).getText();
}
public static void incrementHour() throws UiObjectNotFoundException {
incrementHour(1);
}
public static void incrementHour(int count) throws UiObjectNotFoundException {
for (int x = 0; x < count; x++)
getNumberPickerIncrementButton(HOUR).click();
}
public static void decrementHour() throws UiObjectNotFoundException {
decrementHour(1);
}
public static void decrementHour(int count) throws UiObjectNotFoundException {
for (int x = 0; x < count; x++)
getNumberPickerDecrementButton(HOUR).click();
}
public static void incrementMinute() throws UiObjectNotFoundException {
incrementMinute(1);
}
public static void incrementMinute(int count) throws UiObjectNotFoundException {
for (int x = 0; x < count; x++)
getNumberPickerIncrementButton(MINUTE).click();
}
public static void decrementMinute() throws UiObjectNotFoundException {
decrementMinute(1);
}
public static void decrementMinute(int count) throws UiObjectNotFoundException {
for (int x = 0; x < count; x++)
getNumberPickerDecrementButton(MINUTE).click();
}
public static void selectPM() throws UiObjectNotFoundException {
getNumberPicker(MERIDIEM).getChild(new UiSelector().text("PM")).click();
}
public static void selectAM() throws UiObjectNotFoundException {
getNumberPicker(MERIDIEM).getChild(new UiSelector().text("AM")).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 setTime(Calendar cal) throws UiObjectNotFoundException {
// Adjust minutes - increment or decrement using the shortest path
int tpMinute = Integer.parseInt(getCurrentMinute());
int calMinute = cal.get(Calendar.MINUTE);
if (calMinute > tpMinute) {
if (calMinute - tpMinute < 30)
incrementMinute(calMinute - tpMinute);
else
decrementMinute(tpMinute - calMinute + 60);
} else if (tpMinute > calMinute) {
if (tpMinute - calMinute < 30)
decrementMinute(tpMinute - calMinute);
else
incrementMinute(calMinute - tpMinute + 60);
}
// Adjust hour - increment or decrement using the shortest path
int tpHour = Integer.parseInt(getCurrentHour());
int calHour = cal.get(Calendar.HOUR);
if (calHour > tpHour) {
if (calHour - tpHour < 6)
incrementHour(calHour - tpHour);
else
decrementHour(tpHour - calHour + 12);
} else if (tpHour > calHour) {
if (tpHour - calHour < 6)
decrementHour(tpHour - calHour);
else
incrementHour(calHour - tpHour + 12);
}
// Adjust meridiem
String calMer = cal.getDisplayName(Calendar.AM_PM, Calendar.SHORT, Locale.US);
String tpMer = getCurrentMeridiem();
if (tpMer.equalsIgnoreCase(calMer))
return;
if (!calMer.equalsIgnoreCase("AM")) {
selectPM();
} else {
selectAM();
}
}
}