Merge "Fix up Looper preparation." into mnc-dev
diff --git a/tests/tests/media/src/android/media/cts/EnumDevicesTest.java b/tests/tests/media/src/android/media/cts/EnumDevicesTest.java
index 85bd5e5..f513709 100644
--- a/tests/tests/media/src/android/media/cts/EnumDevicesTest.java
+++ b/tests/tests/media/src/android/media/cts/EnumDevicesTest.java
@@ -37,11 +37,6 @@
     boolean mAddCallbackCalled = false;
     boolean mRemoveCallbackCalled = false;
 
-    static {
-        // We're going to use a Handler
-        Looper.prepare();
-    }
-
     @Override
     protected void setUp() throws Exception {
         super.setUp();
@@ -156,6 +151,23 @@
         }
     }
 
+    /*
+     * tests if the Looper for the current thread has been prepared,
+     * If not, it makes one, prepares it and returns it.
+     * If this returns non-null, the caller is reponsible for calling quit()
+     * on the returned Looper.
+     */
+    private Looper prepareIfNeededLooper() {
+        // non-null Handler
+        Looper myLooper = null;
+        if (Looper.myLooper() == null) {
+            Looper.prepare();
+            myLooper = Looper.myLooper();
+            assertNotNull(myLooper);
+        }
+        return myLooper;
+    }
+    
     public void test_deviceCallback() {
         // null callback?
         mAudioManager.registerAudioDeviceCallback(null,null);
@@ -174,7 +186,8 @@
         // remove twice
         mAudioManager.unregisterAudioDeviceCallback(callback);
 
-        // non-null Handler
+        Looper myLooper = prepareIfNeededLooper();
+        
         mAudioManager.registerAudioDeviceCallback(callback, new Handler());
         // unregister null callback
         mAudioManager.unregisterAudioDeviceCallback(null);
@@ -184,6 +197,10 @@
         mAudioManager.unregisterAudioDeviceCallback(callback);
         // remove twice
         mAudioManager.unregisterAudioDeviceCallback(callback);
+
+        if (myLooper != null) {
+            myLooper.quit();
+        }
     }
 
     //TODO - Need tests for device connect/disconnect callbacks
diff --git a/tests/tests/media/src/android/media/cts/RoutingTest.java b/tests/tests/media/src/android/media/cts/RoutingTest.java
index 6e3c06f..c0e9a3e 100644
--- a/tests/tests/media/src/android/media/cts/RoutingTest.java
+++ b/tests/tests/media/src/android/media/cts/RoutingTest.java
@@ -43,11 +43,6 @@
 
     private AudioManager mAudioManager;
 
-    static {
-        // We're going to use a Handler
-        Looper.prepare();
-    }
-
     @Override
     protected void setUp() throws Exception {
         super.setUp();
@@ -103,6 +98,23 @@
         audioTrack.release();
     }
 
+    /*
+     * tests if the Looper for the current thread has been prepared,
+     * If not, it makes one, prepares it and returns it.
+     * If this returns non-null, the caller is reponsible for calling quit()
+     * on the returned Looper.
+     */
+    private Looper prepareIfNeededLooper() {
+        // non-null Handler
+        Looper myLooper = null;
+        if (Looper.myLooper() == null) {
+            Looper.prepare();
+            myLooper = Looper.myLooper();
+            assertNotNull(myLooper);
+        }
+        return myLooper;
+    }
+
     private class AudioTrackRoutingListener implements AudioTrack.OnRoutingChangedListener {
         public void onRoutingChanged(AudioTrack audioTrack) {}
     }
@@ -122,11 +134,15 @@
 
         audioTrack.removeOnRoutingChangedListener(listener);
 
+        Looper myLooper = prepareIfNeededLooper();
         audioTrack.addOnRoutingChangedListener(listener, new Handler());
 
         audioTrack.removeOnRoutingChangedListener(listener);
 
         audioTrack.release();
+        if (myLooper != null) {
+            myLooper.quit();
+        }
    }
 
     private AudioRecord allocAudioRecord() {
@@ -153,7 +169,6 @@
             // Can't do it so skip this test
             return;
         }
-
         AudioRecord audioRecord = allocAudioRecord();
 
         audioRecord.addOnRoutingChangedListener(null, null);
@@ -168,11 +183,15 @@
 
         audioRecord.removeOnRoutingChangedListener(listener);
 
+        Looper myLooper = prepareIfNeededLooper();
         audioRecord.addOnRoutingChangedListener(listener, new Handler());
 
         audioRecord.removeOnRoutingChangedListener(listener);
 
         audioRecord.release();
+        if (myLooper != null) {
+            myLooper.quit();
+        }
     }
 
     public void test_audioRecord_preferredDevice() {