1a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu/*
2a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu * Copyright (C) 2016 The Android Open Source Project
3a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu *
4a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu * Licensed under the Apache License, Version 2.0 (the "License");
5a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu * you may not use this file except in compliance with the License.
6a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu * You may obtain a copy of the License at
7a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu *
8a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu *      http://www.apache.org/licenses/LICENSE-2.0
9a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu *
10a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu * Unless required by applicable law or agreed to in writing, software
11a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu * distributed under the License is distributed on an "AS IS" BASIS,
12a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu * See the License for the specific language governing permissions and
14a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu * limitations under the License.
15a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu */
16a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu
17a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhupackage android.perftests.utils;
18a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu
19a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhuimport android.view.View;
20a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhuimport android.view.ViewGroup;
21a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu
22a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhuimport java.util.ArrayList;
23a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhuimport java.util.List;
24a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu
25a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhupublic class LayoutUtils {
26a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu
27a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu    private static void recursivelyGather(ViewGroup currentNode, List<View> nodeList) {
28a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu        nodeList.add(currentNode);
29a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu        int count = currentNode.getChildCount();
30a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu        for (int i = 0; i < count; i++) {
31a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu            View view = currentNode.getChildAt(i);
32a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu            if (view instanceof ViewGroup) {
33a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu                recursivelyGather((ViewGroup) view, nodeList);
34a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu            } else {
35a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu                nodeList.add(view);
36a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu            }
37a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu        }
38a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu    }
39a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu
40a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu    /**
41a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu     * Flattern the whole view tree into a list of View.
42a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu     */
43a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu    public static List<View> gatherViewTree(ViewGroup root) {
44a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu        List<View> result = new ArrayList<View>();
45a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu        recursivelyGather(root, result);
46a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu        return result;
47a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu    }
48a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu
49a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu    /**
50a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu     * For every node in the list, call requestLayout.
51a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu     */
52a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu    public static void requestLayoutForAllNodes(List<View> nodeList) {
53a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu        int count = nodeList.size();
54a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu        for (int i = 0; i < count; i++) {
55a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu            nodeList.get(i).requestLayout();
56a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu        }
57a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu    }
58a9cebd628c53b900d48600a5e7ced546c91522e6Teng-Hui Zhu}
59