/* * 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(); } } }