1/*
2 * Copyright (C) 2013 DroidDriver committers
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.google.android.droiddriver.finders;
18
19import android.graphics.Rect;
20
21import com.google.android.droiddriver.UiElement;
22
23public enum Attribute {
24  CHECKABLE("checkable") {
25    @SuppressWarnings("unchecked")
26    @Override
27    public Boolean getValue(UiElement element) {
28      return element.isCheckable();
29    }
30  },
31  CHECKED("checked") {
32    @SuppressWarnings("unchecked")
33    @Override
34    public Boolean getValue(UiElement element) {
35      return element.isChecked();
36    }
37  },
38  CLASS("class") {
39    @SuppressWarnings("unchecked")
40    @Override
41    public String getValue(UiElement element) {
42      return element.getClassName();
43    }
44  },
45  CLICKABLE("clickable") {
46    @SuppressWarnings("unchecked")
47    @Override
48    public Boolean getValue(UiElement element) {
49      return element.isClickable();
50    }
51  },
52  CONTENT_DESC("content-desc") {
53    @SuppressWarnings("unchecked")
54    @Override
55    public String getValue(UiElement element) {
56      return element.getContentDescription();
57    }
58  },
59  ENABLED("enabled") {
60    @SuppressWarnings("unchecked")
61    @Override
62    public Boolean getValue(UiElement element) {
63      return element.isEnabled();
64    }
65  },
66  FOCUSABLE("focusable") {
67    @SuppressWarnings("unchecked")
68    @Override
69    public Boolean getValue(UiElement element) {
70      return element.isFocusable();
71    }
72  },
73  FOCUSED("focused") {
74    @SuppressWarnings("unchecked")
75    @Override
76    public Boolean getValue(UiElement element) {
77      return element.isFocused();
78    }
79  },
80  LONG_CLICKABLE("long-clickable") {
81    @SuppressWarnings("unchecked")
82    @Override
83    public Boolean getValue(UiElement element) {
84      return element.isLongClickable();
85    }
86  },
87  PACKAGE("package") {
88    @SuppressWarnings("unchecked")
89    @Override
90    public String getValue(UiElement element) {
91      return element.getPackageName();
92    }
93  },
94  PASSWORD("password") {
95    @SuppressWarnings("unchecked")
96    @Override
97    public Boolean getValue(UiElement element) {
98      return element.isPassword();
99    }
100  },
101  RESOURCE_ID("resource-id") {
102    @SuppressWarnings("unchecked")
103    @Override
104    public String getValue(UiElement element) {
105      return element.getResourceId();
106    }
107  },
108  SCROLLABLE("scrollable") {
109    @SuppressWarnings("unchecked")
110    @Override
111    public Boolean getValue(UiElement element) {
112      return element.isScrollable();
113    }
114  },
115  SELECTED("selected") {
116    @SuppressWarnings("unchecked")
117    @Override
118    public Boolean getValue(UiElement element) {
119      return element.isSelected();
120    }
121  },
122  TEXT("text") {
123    @SuppressWarnings("unchecked")
124    @Override
125    public String getValue(UiElement element) {
126      return element.getText();
127    }
128  },
129  BOUNDS("bounds") {
130    @SuppressWarnings("unchecked")
131    @Override
132    public Rect getValue(UiElement element) {
133      // TODO: clip by boundsInParent?
134      return element.getBounds();
135    }
136  };
137
138  private final String name;
139
140  private Attribute(String name) {
141    this.name = name;
142  }
143
144  public String getName() {
145    return name;
146  }
147
148  public abstract <T> T getValue(UiElement element);
149
150  @Override
151  public String toString() {
152    return name;
153  }
154}
155