Change the test to user the listener mechanism

this is to avoid the precision issue with the coordinates

DO NOT MERGE

Change-Id: Icfab3fa6fd0a331aef12ee71c73bac04dc9685be
diff --git a/tools/emulator/test-apps/GpsLocationTest/src/com/android/emulator/gps/test/GpsLocationTest.java b/tools/emulator/test-apps/GpsLocationTest/src/com/android/emulator/gps/test/GpsLocationTest.java
index c0ea0fa..6eb3834 100644
--- a/tools/emulator/test-apps/GpsLocationTest/src/com/android/emulator/gps/test/GpsLocationTest.java
+++ b/tools/emulator/test-apps/GpsLocationTest/src/com/android/emulator/gps/test/GpsLocationTest.java
@@ -17,24 +17,30 @@
 
 import android.content.Context;
 import android.location.Location;
+import android.location.LocationListener;
 import android.location.LocationManager;
+import android.os.Bundle;
+import android.os.HandlerThread;
 import android.test.AndroidTestCase;
 
+import junit.framework.Assert;
+
 /**
  * GPS Location Test
  *
  * Test the GPS API by verifying the previously set location
  */
-public class GpsLocationTest extends AndroidTestCase {
+public class GpsLocationTest extends AndroidTestCase implements LocationListener {
 
     private LocationManager locationManager;
-
+    private Location mLocation;
     /**
      * Prior to running this test the GPS location must be set to the following
      * longitude and latitude coordinates via the geo fix command
      */
     private static final double LONGITUDE = -122.08345770835876;
     private static final double LATITUDE = 37.41991859119417;
+    private static final int TIMEOUT = 5000;
 
     @Override
     protected void setUp() throws Exception {
@@ -48,9 +54,37 @@
      * via geo fix command
      */
     public void testCurrentLocationGivenLocation(){
-        Location lastLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
-        assertNotNull(lastLocation);
-        assertEquals(lastLocation.getLongitude(), LONGITUDE);
-        assertEquals(lastLocation.getLatitude(), LATITUDE);
+        try{
+            synchronized ( this ){
+                HandlerThread handlerThread = new HandlerThread("testLocationUpdates");
+                handlerThread.start();
+                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this,
+                        handlerThread.getLooper());
+                this.wait(TIMEOUT);
+            }
+        }catch ( InterruptedException ie){
+            ie.printStackTrace();
+            Assert.fail();
+        }
+        assertNotNull(mLocation);
+        assertEquals(new Float(LONGITUDE), new Float(mLocation.getLongitude()));
+        assertEquals(new Float(LATITUDE), new Float(mLocation.getLatitude()));
+        locationManager.removeUpdates(this);
+    }
+
+    public void onLocationChanged(Location location) {
+        synchronized ( this ){
+            mLocation=location;
+            this.notify();
+        }
+    }
+
+    public void onProviderDisabled(String arg0) {
+    }
+
+    public void onProviderEnabled(String arg0) {
+    }
+
+    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
     }
 }