Properly disconnect the sdk controller when needed.

This is a temporary fix before we move to a full service.

Also package the MT controller app in the SDK.

Change-Id: Ib8a11f3b69d5545c9f428cbf65b27d903699e7b8
diff --git a/apps/SdkController/SdkControllerLib/src/com/android/tools/sdkcontroller/lib/Emulator.java b/apps/SdkController/SdkControllerLib/src/com/android/tools/sdkcontroller/lib/Emulator.java
index bb5bec8..d1c9669 100755
--- a/apps/SdkController/SdkControllerLib/src/com/android/tools/sdkcontroller/lib/Emulator.java
+++ b/apps/SdkController/SdkControllerLib/src/com/android/tools/sdkcontroller/lib/Emulator.java
@@ -86,6 +86,8 @@
     private boolean mIsDisconnected = false;

     /** Exit I/O loop flag. */

     private boolean mExitIoLoop = false;

+    /** Disconnect flag. */

+    private boolean mDisconnect = false;

 

     /***************************************************************************

      * EmulatorChannel - Base class for sync / async channels.

@@ -536,6 +538,15 @@
         constructEmulator(port, ctype);

     }

 

+

+    /**

+     * Disconnects the emulator.

+     */

+    public void disconnect() {

+        mDisconnect = true;

+        mSelector.wakeup();

+    }

+

     /**

      * Constructs Emulator instance.

      *

@@ -698,7 +709,9 @@
             // Check mExitIoLoop before calling 'select', and after in order to

             // detect condition when mSelector has been waken up to exit the

             // I/O loop.

-            while (!mExitIoLoop && mSelector.select() >= 0 && !mExitIoLoop) {

+            while (!mExitIoLoop && !mDisconnect &&

+                    mSelector.select() >= 0 &&

+                    !mExitIoLoop && !mDisconnect) {

                 Set<SelectionKey> readyKeys = mSelector.selectedKeys();

                 Iterator<SelectionKey> i = readyKeys.iterator();

                 while (i.hasNext()) {

diff --git a/apps/SdkController/SdkControllerMultitouch/src/com/android/tools/sdkcontroller/sdkcontrollermultitouch/SdkControllerMultitouchActivity.java b/apps/SdkController/SdkControllerMultitouch/src/com/android/tools/sdkcontroller/sdkcontrollermultitouch/SdkControllerMultitouchActivity.java
index ce4ac1d..5d5f2ef 100644
--- a/apps/SdkController/SdkControllerMultitouch/src/com/android/tools/sdkcontroller/sdkcontrollermultitouch/SdkControllerMultitouchActivity.java
+++ b/apps/SdkController/SdkControllerMultitouch/src/com/android/tools/sdkcontroller/sdkcontrollermultitouch/SdkControllerMultitouchActivity.java
@@ -122,6 +122,14 @@
         mView = (MultiTouchView) findViewById(R.id.imageView);
         getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
 
+        // Create listener for touch events.
+        mTouchListener = new TouchListener();
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+
         // Instantiate emulator connector.
         try {
             mEmulator = new Emulator(Emulator.MULTITOUCH_PORT,
@@ -131,8 +139,17 @@
             finish();
         }
 
-        // Create listener for touch events.
-        mTouchListener = new TouchListener();
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+
+        if (mEmulator != null) {
+            mEmulator.setOnEmulatorListener(null);
+            mEmulator.disconnect();
+            mEmulator = null;
+        }
     }
 
     /**
diff --git a/build/tools.atree b/build/tools.atree
index 8fc262c..03868e2 100644
--- a/build/tools.atree
+++ b/build/tools.atree
@@ -146,9 +146,7 @@
 prebuilts/tools/common/proguard/proguard4.7/src/proguard/ant/task.properties  tools/proguard/ant/task.properties
 
 # SDK Controller
-#sdk/apps/SdkController       tools/apps/SdkController
-sdk/apps/SdkController/SdkControllerLib       tools/apps/SdkController/SdkControllerLib
-sdk/apps/SdkController/SdkControllerSensor    tools/apps/SdkController/SdkControllerSensor
+sdk/apps/SdkController       tools/apps/SdkController
 
 # tools specific support jar
 framework/annotations.jar   tools/support/annotations.jar