19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.ddm; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.dalvik.ddmc.Chunk; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.dalvik.ddmc.ChunkHandler; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.dalvik.ddmc.DdmServer; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.nio.ByteBuffer; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Track our app name. We don't (currently) handle any inbound packets. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class DdmHandleAppName extends ChunkHandler { 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CHUNK_APNM = type("APNM"); 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private volatile static String mAppName = ""; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static DdmHandleAppName mInstance = new DdmHandleAppName(); 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* singleton, do not instantiate */ 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private DdmHandleAppName() {} 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Register for the messages we're interested in. 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void register() {} 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when the DDM server connects. The handler is allowed to 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * send messages to the server. 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void connected() {} 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when the DDM server disconnects. Can be used to disable 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * periodic transmissions or clean up saved state. 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void disconnected() {} 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Handle a chunk of data. 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Chunk handleChunk(Chunk request) { 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the application name. Called when we get named, which may be 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * before or after DDMS connects. For the latter we need to send up 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an APNM message. 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 72d693dfa75b7a156898890014e7192a792314b757Siva Velusamy public static void setAppName(String name, int userId) { 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name == null || name.length() == 0) 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAppName = name; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // if DDMS is already connected, send the app name up 79d693dfa75b7a156898890014e7192a792314b757Siva Velusamy sendAPNM(name, userId); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static String getAppName() { 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mAppName; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Send an APNM (APplication NaMe) chunk. 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 89d693dfa75b7a156898890014e7192a792314b757Siva Velusamy private static void sendAPNM(String appName, int userId) { 9043a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato if (false) 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v("ddm", "Sending app name"); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 93d693dfa75b7a156898890014e7192a792314b757Siva Velusamy ByteBuffer out = ByteBuffer.allocate( 94d693dfa75b7a156898890014e7192a792314b757Siva Velusamy 4 /* appName's length */ 95d693dfa75b7a156898890014e7192a792314b757Siva Velusamy + appName.length()*2 /* appName */ 96d693dfa75b7a156898890014e7192a792314b757Siva Velusamy + 4 /* userId */); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.order(ChunkHandler.CHUNK_ORDER); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.putInt(appName.length()); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project putString(out, appName); 100d693dfa75b7a156898890014e7192a792314b757Siva Velusamy out.putInt(userId); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Chunk chunk = new Chunk(CHUNK_APNM, out); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DdmServer.sendChunk(chunk); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 108