155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project/* 255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * 455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * you may not use this file except in compliance with the License. 655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * You may obtain a copy of the License at 755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * 855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * 1055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * See the License for the specific language governing permissions and 1455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * limitations under the License. 1555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 1655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectpackage com.android.hierarchyviewer.scene; 1855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 195542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohetimport com.android.ddmlib.IDevice; 2055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.hierarchyviewer.device.DeviceBridge; 2155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.hierarchyviewer.device.Window; 2255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 2355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport java.io.BufferedReader; 2455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport java.io.BufferedWriter; 2555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport java.io.IOException; 2655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport java.io.InputStreamReader; 2755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport java.io.OutputStreamWriter; 2855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport java.net.InetSocketAddress; 2955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport java.net.Socket; 3055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport java.util.ArrayList; 3155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 3255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectpublic class WindowsLoader { 338390291ef57f66762af079bec951145dfcfd1b27Romain Guy public static Window[] loadWindows(IDevice device, int protocol, int server) { 3455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Socket socket = null; 3555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project BufferedReader in = null; 3655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project BufferedWriter out = null; 378390291ef57f66762af079bec951145dfcfd1b27Romain Guy System.out.println("protocol = " + protocol); 388390291ef57f66762af079bec951145dfcfd1b27Romain Guy System.out.println("version = " + server); 3955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 4055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ArrayList<Window> windows = new ArrayList<Window>(); 4155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 4255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project socket = new Socket(); 4355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project socket.connect(new InetSocketAddress("127.0.0.1", 4455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DeviceBridge.getDeviceLocalPort(device))); 4555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 4655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 4755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 4855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 4955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project out.write("LIST"); 5055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project out.newLine(); 5155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project out.flush(); 5255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 5355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project String line; 5455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project while ((line = in.readLine()) != null) { 5555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if ("DONE.".equalsIgnoreCase(line)) { 5655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project break; 5755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 5855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 5955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int index = line.indexOf(' '); 6055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (index != -1) { 618390291ef57f66762af079bec951145dfcfd1b27Romain Guy String windowId = line.substring(0, index); 628390291ef57f66762af079bec951145dfcfd1b27Romain Guy 638390291ef57f66762af079bec951145dfcfd1b27Romain Guy int id; 648390291ef57f66762af079bec951145dfcfd1b27Romain Guy if (server > 2) { 658390291ef57f66762af079bec951145dfcfd1b27Romain Guy id = (int) Long.parseLong(windowId, 16); 668390291ef57f66762af079bec951145dfcfd1b27Romain Guy } else { 678390291ef57f66762af079bec951145dfcfd1b27Romain Guy id = Integer.parseInt(windowId, 16); 688390291ef57f66762af079bec951145dfcfd1b27Romain Guy } 698390291ef57f66762af079bec951145dfcfd1b27Romain Guy 708390291ef57f66762af079bec951145dfcfd1b27Romain Guy Window w = new Window(line.substring(index + 1), id); 7155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project windows.add(w); 7255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 7355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 7455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 7555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return windows.toArray(new Window[windows.size()]); 7655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } catch (IOException e) { 7755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Empty 7855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } finally { 7955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 8055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (out != null) { 8155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project out.close(); 8255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 8355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (in != null) { 8455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project in.close(); 8555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 8655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (socket != null) { 8755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project socket.close(); 8855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 8955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } catch (IOException ex) { 9055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ex.printStackTrace(); 9155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 9255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 9355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 9455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return new Window[0]; 9555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 9655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project} 97