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.Window; 2155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.hierarchyviewer.device.DeviceBridge; 2255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 2355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport java.io.BufferedWriter; 2455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport java.io.IOException; 2555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport java.io.OutputStreamWriter; 2655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport java.net.InetSocketAddress; 2755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport java.net.Socket; 2855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 2955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectpublic class ViewManager { 305542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet public static void invalidate(IDevice device, Window window, String params) { 3155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sendCommand("INVALIDATE", device, window, params); 3255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 3355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 345542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet public static void requestLayout(IDevice device, Window window, String params) { 3555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sendCommand("REQUEST_LAYOUT", device, window, params); 3655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 3755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 383fe16ced4294bdeeab31008e93b5e2d004da7437Chet Haase public static void outputDisplayList(IDevice device, Window window, String params) { 393fe16ced4294bdeeab31008e93b5e2d004da7437Chet Haase sendCommand("OUTPUT_DISPLAYLIST", device, window, params); 403fe16ced4294bdeeab31008e93b5e2d004da7437Chet Haase } 413fe16ced4294bdeeab31008e93b5e2d004da7437Chet Haase 425542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet private static void sendCommand(String command, IDevice device, Window window, String params) { 4355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Socket socket = null; 4455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project BufferedWriter out = null; 4555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 4655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 4755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project socket = new Socket(); 4855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project socket.connect(new InetSocketAddress("127.0.0.1", 4955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DeviceBridge.getDeviceLocalPort(device))); 5055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 5155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 5255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 5355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project out.write(command + " " + window.encode() + " " + params); 5455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project out.newLine(); 5555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project out.flush(); 5655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } catch (IOException e) { 5755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Empty 5855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } finally { 5955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 6055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (out != null) { 6155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project out.close(); 6255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 6355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (socket != null) { 6455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project socket.close(); 6555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 6655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } catch (IOException ex) { 6755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ex.printStackTrace(); 6855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 6955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 7055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 7155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project} 72