/* * Copyright (C) 2011 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.chimpchat.core; import com.android.chimpchat.ChimpManager; import com.google.common.collect.Lists; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; /* A class for querying a view object by its id */ public class ChimpView implements IChimpView { private static final Logger LOG = Logger.getLogger(ChimpView.class.getName()); public static final String ACCESSIBILITY_IDS = "accessibilityids"; public static final String VIEW_ID = "viewid"; private String viewType; private List<String> ids; private ChimpManager manager; public ChimpView(String viewType, List<String> ids) { this.viewType = viewType; this.ids = ids; } public void setManager(ChimpManager manager) { this.manager = manager; } private String queryView(String query) { try { return manager.queryView(viewType, ids, query); } catch(IOException e) { LOG.log(Level.SEVERE, "Error querying view: " + e.getMessage()); return ""; } } /** * Get the coordinates for the view with the given id. * @return a ChimpRect object with the coordinates for the corners of the view */ public ChimpRect getLocation() { List<String> result = Lists.newArrayList(queryView("getlocation").split(" ")); if (result.size() == 4) { try { int left = Integer.parseInt(result.get(0)); int top = Integer.parseInt(result.get(1)); int width = Integer.parseInt(result.get(2)); int height = Integer.parseInt(result.get(3)); return new ChimpRect(left, top, left+width, top+height); } catch (NumberFormatException e) { return new ChimpRect(); } } return new ChimpRect(); } /** * Retrieve the text contained by the view * @return the text contained by the view */ public String getText() { return queryView("gettext"); } /** * Get the class of the view * @return the class name of the view */ public String getViewClass(){ return queryView("getclass"); } /** * Get the checked status of the view. * @return true if the view is checked, false otherwise */ public boolean getChecked(){ return Boolean.valueOf(queryView("getchecked").trim()); } /** * Get whether the view is enabled or not. * @return true if the view is enabled, false otherwise */ public boolean getEnabled(){ return Boolean.valueOf(queryView("getenabled").trim()); } /** * Get the selected status of the view. * @return true if the view is selected, false otherwise */ public boolean getSelected(){ return Boolean.valueOf(queryView("getselected").trim()); } /** * Set the selected status of the view. * @param selected the select status to set for the view */ public void setSelected(boolean selected) { queryView("setselected " + selected); } /** * Get the focused status of the view. * @return true if the view is focused, false otherwise */ public boolean getFocused(){ return Boolean.valueOf(queryView("getselected").trim()); } /** * Set the focused status of the view. * @param focused the focus status to set for the view */ public void setFocused(boolean focused) { queryView("setfocused " + focused); } /** * Get the parent of the view. * @return the parent of the view */ public IChimpView getParent() { List<String> results = Lists.newArrayList(queryView("getparent").split(" ")); if (results.size() == 2) { ChimpView parent = new ChimpView(ChimpView.ACCESSIBILITY_IDS, results); parent.setManager(manager); return parent; } return null; } /** * Gets the children of the view. * @return the children of the view as a List of IChimpViews */ public List<IChimpView> getChildren() { List<String> results = Lists.newArrayList(queryView("getchildren").split(" ")); /* We make sure this has an even number of results because we don't necessarily know how * many children there are, but we know all children will return a pair of accessibility ids */ if (results.size() % 2 == 0) { List<IChimpView> children = new ArrayList<IChimpView>(); for (int i = 0; i < results.size()/2; i++) { List<String> ids = Lists.newArrayList(results.get(2 * i), results.get(2 * i + 1)); ChimpView child = new ChimpView(ChimpView.ACCESSIBILITY_IDS, ids); child.setManager(manager); children.add(child); } return children; } return new ArrayList<IChimpView>(); } /** * Gets the accessibility ids of the current view * @return the accessibility ids of the current view. Its returned as a two-item array of ints * with first int being the window id, and the second int being the accessibility view id. */ public int[] getAccessibilityIds() { List<String> results = Lists.newArrayList(queryView("getaccessibilityids").split(" ")); if (results.size() == 2) { int[] accessibilityIds = new int[2]; try { accessibilityIds[0] = Integer.parseInt(results.get(0)); accessibilityIds[1] = Integer.parseInt(results.get(1)); return accessibilityIds; } catch (NumberFormatException e) { LOG.log(Level.SEVERE, "Error retrieving accesibility ids: " + e.getMessage()); } } int[] empty = {0,0}; return empty; } }