/*
* Copyright (C) 2015 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.switchaccess;
import android.annotation.TargetApi;
import android.graphics.Rect;
import android.os.Build;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityWindowInfo;
import java.util.ArrayList;
import java.util.List;
/**
* Extension of AccessibilityWindowInfo that returns {@code ExtendedNodeCompat} for its root
*/
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public class SwitchAccessWindowInfo {
final AccessibilityWindowInfo mAccessibilityWindowInfo;
final List<AccessibilityWindowInfo> mListOfWindowsAbove;
/**
* Convert a list of standard {@code AccessibilityWindowInfo} objects into a list of
* {@code ExtendedWindowInfo} objects.
*
* @param originalList The original list in Z order (as the framework returns it)
* @return The new list in the same order as the original
*/
static public List<SwitchAccessWindowInfo>
convertZOrderWindowList(List<AccessibilityWindowInfo> originalList) {
List<SwitchAccessWindowInfo> newList = new ArrayList<>(originalList.size());
for (int i = 0; i < originalList.size(); i++) {
newList.add(new SwitchAccessWindowInfo(
originalList.get(i), originalList.subList(0, i)));
}
return newList;
}
/**
* @param accessibilityWindowInfo The windowInfo to wrap
* @param listOfWindowsAbove A list of all windows above this one
*/
public SwitchAccessWindowInfo(AccessibilityWindowInfo accessibilityWindowInfo,
List<AccessibilityWindowInfo> listOfWindowsAbove) {
if (accessibilityWindowInfo == null) {
throw new NullPointerException();
}
mAccessibilityWindowInfo = accessibilityWindowInfo;
mListOfWindowsAbove = listOfWindowsAbove;
}
/**
* @return The root of the window
*/
public SwitchAccessNodeCompat getRoot() {
AccessibilityNodeInfo root = mAccessibilityWindowInfo.getRoot();
return (root == null)
? null : new SwitchAccessNodeCompat((Object) root, mListOfWindowsAbove);
}
/**
* @return The type of the window. See {@link AccessibilityWindowInfo}
*/
public int getType() {
return mAccessibilityWindowInfo.getType();
}
public void getBoundsInScreen(Rect outBounds) {
mAccessibilityWindowInfo.getBoundsInScreen(outBounds);
}
}