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