1c134b29628280a680fdf2696480166de56074b1eKevin Jin/* 2c134b29628280a680fdf2696480166de56074b1eKevin Jin * Copyright (C) 2013 DroidDriver committers 3c134b29628280a680fdf2696480166de56074b1eKevin Jin * 4c134b29628280a680fdf2696480166de56074b1eKevin Jin * Licensed under the Apache License, Version 2.0 (the "License"); 5c134b29628280a680fdf2696480166de56074b1eKevin Jin * you may not use this file except in compliance with the License. 6c134b29628280a680fdf2696480166de56074b1eKevin Jin * You may obtain a copy of the License at 7c134b29628280a680fdf2696480166de56074b1eKevin Jin * 8c134b29628280a680fdf2696480166de56074b1eKevin Jin * http://www.apache.org/licenses/LICENSE-2.0 9c134b29628280a680fdf2696480166de56074b1eKevin Jin * 10c134b29628280a680fdf2696480166de56074b1eKevin Jin * Unless required by applicable law or agreed to in writing, software 11c134b29628280a680fdf2696480166de56074b1eKevin Jin * distributed under the License is distributed on an "AS IS" BASIS, 12c134b29628280a680fdf2696480166de56074b1eKevin Jin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c134b29628280a680fdf2696480166de56074b1eKevin Jin * See the License for the specific language governing permissions and 14c134b29628280a680fdf2696480166de56074b1eKevin Jin * limitations under the License. 15c134b29628280a680fdf2696480166de56074b1eKevin Jin */ 16c134b29628280a680fdf2696480166de56074b1eKevin Jin 177576fbbba2bf515908b45293b7156b5bfe088938Kevin Jinpackage com.google.android.droiddriver.finders; 18c134b29628280a680fdf2696480166de56074b1eKevin Jin 190858f7292b7e7f32c25662d853c9d8ed8db1403fKevin Jinimport android.graphics.Rect; 200858f7292b7e7f32c25662d853c9d8ed8db1403fKevin Jin 212acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jinimport com.google.android.droiddriver.UiElement; 222acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin 23c134b29628280a680fdf2696480166de56074b1eKevin Jinpublic enum Attribute { 242acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin CHECKABLE("checkable") { 252acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @SuppressWarnings("unchecked") 262acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @Override 272acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin public Boolean getValue(UiElement element) { 282acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin return element.isCheckable(); 292acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin } 302acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin }, 312acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin CHECKED("checked") { 322acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @SuppressWarnings("unchecked") 332acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @Override 342acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin public Boolean getValue(UiElement element) { 352acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin return element.isChecked(); 362acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin } 372acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin }, 382acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin CLASS("class") { 392acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @SuppressWarnings("unchecked") 402acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @Override 412acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin public String getValue(UiElement element) { 422acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin return element.getClassName(); 432acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin } 442acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin }, 452acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin CLICKABLE("clickable") { 462acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @SuppressWarnings("unchecked") 472acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @Override 482acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin public Boolean getValue(UiElement element) { 492acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin return element.isClickable(); 502acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin } 512acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin }, 522acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin CONTENT_DESC("content-desc") { 532acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @SuppressWarnings("unchecked") 542acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @Override 552acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin public String getValue(UiElement element) { 562acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin return element.getContentDescription(); 572acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin } 582acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin }, 592acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin ENABLED("enabled") { 602acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @SuppressWarnings("unchecked") 612acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @Override 622acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin public Boolean getValue(UiElement element) { 632acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin return element.isEnabled(); 642acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin } 652acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin }, 662acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin FOCUSABLE("focusable") { 672acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @SuppressWarnings("unchecked") 682acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @Override 692acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin public Boolean getValue(UiElement element) { 702acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin return element.isFocusable(); 712acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin } 722acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin }, 732acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin FOCUSED("focused") { 742acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @SuppressWarnings("unchecked") 752acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @Override 762acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin public Boolean getValue(UiElement element) { 772acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin return element.isFocused(); 782acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin } 792acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin }, 802acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin LONG_CLICKABLE("long-clickable") { 812acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @SuppressWarnings("unchecked") 822acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @Override 832acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin public Boolean getValue(UiElement element) { 842acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin return element.isLongClickable(); 852acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin } 862acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin }, 872acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin PACKAGE("package") { 882acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @SuppressWarnings("unchecked") 892acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @Override 902acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin public String getValue(UiElement element) { 912acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin return element.getPackageName(); 922acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin } 932acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin }, 942acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin PASSWORD("password") { 952acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @SuppressWarnings("unchecked") 962acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @Override 972acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin public Boolean getValue(UiElement element) { 982acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin return element.isPassword(); 992acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin } 1002acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin }, 1012acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin RESOURCE_ID("resource-id") { 1022acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @SuppressWarnings("unchecked") 1032acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @Override 1042acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin public String getValue(UiElement element) { 1052acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin return element.getResourceId(); 1062acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin } 1072acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin }, 1082acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin SCROLLABLE("scrollable") { 1092acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @SuppressWarnings("unchecked") 1102acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @Override 1112acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin public Boolean getValue(UiElement element) { 1122acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin return element.isScrollable(); 1132acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin } 1142acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin }, 1152acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin SELECTED("selected") { 1162acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @SuppressWarnings("unchecked") 1172acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @Override 1182acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin public Boolean getValue(UiElement element) { 1192acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin return element.isSelected(); 1202acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin } 1212acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin }, 1222acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin TEXT("text") { 1232acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @SuppressWarnings("unchecked") 1242acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @Override 1252acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin public String getValue(UiElement element) { 1262acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin return element.getText(); 1272acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin } 1280858f7292b7e7f32c25662d853c9d8ed8db1403fKevin Jin }, 1290858f7292b7e7f32c25662d853c9d8ed8db1403fKevin Jin BOUNDS("bounds") { 1300858f7292b7e7f32c25662d853c9d8ed8db1403fKevin Jin @SuppressWarnings("unchecked") 1310858f7292b7e7f32c25662d853c9d8ed8db1403fKevin Jin @Override 1320858f7292b7e7f32c25662d853c9d8ed8db1403fKevin Jin public Rect getValue(UiElement element) { 1330858f7292b7e7f32c25662d853c9d8ed8db1403fKevin Jin // TODO: clip by boundsInParent? 1340858f7292b7e7f32c25662d853c9d8ed8db1403fKevin Jin return element.getBounds(); 1350858f7292b7e7f32c25662d853c9d8ed8db1403fKevin Jin } 1362acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin }; 137c134b29628280a680fdf2696480166de56074b1eKevin Jin 138c134b29628280a680fdf2696480166de56074b1eKevin Jin private final String name; 139c134b29628280a680fdf2696480166de56074b1eKevin Jin 140c134b29628280a680fdf2696480166de56074b1eKevin Jin private Attribute(String name) { 141c134b29628280a680fdf2696480166de56074b1eKevin Jin this.name = name; 142c134b29628280a680fdf2696480166de56074b1eKevin Jin } 143c134b29628280a680fdf2696480166de56074b1eKevin Jin 144c134b29628280a680fdf2696480166de56074b1eKevin Jin public String getName() { 145c134b29628280a680fdf2696480166de56074b1eKevin Jin return name; 146c134b29628280a680fdf2696480166de56074b1eKevin Jin } 147c134b29628280a680fdf2696480166de56074b1eKevin Jin 1482acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin public abstract <T> T getValue(UiElement element); 1492acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin 1502acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin @Override 1512acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin public String toString() { 1522acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin return name; 1532acc13e041cb065f90ab7882e095f05cb275dc68Kevin Jin } 154c134b29628280a680fdf2696480166de56074b1eKevin Jin} 155