public void onGpsStatusChanged(int state) {
   GpsStatus gpsStatus = locationManager.getGpsStatus(null);
   if (state == GpsStatus.GPS_EVENT_STOPPED) {
     hasFix = false;
     numSatellites = 0;
     updateSolution(LocationProvider.OUT_OF_SERVICE);
   } else if ((System.currentTimeMillis() - lastFixTimestamp) > 3000) {
     invalidateFix();
   }
   if (state == GpsStatus.GPS_EVENT_STARTED) {
     // FIXME do what's needed
     updateSolution(LocationProvider.AVAILABLE);
   }
   gpsState = state;
   if (state == GpsStatus.GPS_EVENT_SATELLITE_STATUS && gpsStatus != null) {
     for (int j = 0; j < 36; j++) {
       /** Resetting all the satellites to non locked */
       if ((satellites[j] != null)) {
         satellites[j].isLocked(false);
       }
     }
     Iterable<GpsSatellite> andSatellites = gpsStatus.getSatellites();
     Iterator<GpsSatellite> sat = andSatellites.iterator();
     int i = 0;
     while (sat.hasNext()) {
       GpsSatellite satellite = sat.next();
       if (satellites[i] == null) {
         satellites[i] = new Satellite();
       }
       if (i < 36) {
         satellites[i].isLocked(satellite.usedInFix());
         satellites[i].id = i;
         satellites[i].azimut = satellite.getAzimuth();
         satellites[i].elev = satellite.getElevation();
         satellites[i].snr = (int) satellite.getSnr();
         if (satellite.usedInFix()) {
           i++;
         }
       }
     }
     numSatellites = i;
     if (numSatellites > 0) {
       receiverList.receiveSatellites(satellites);
     }
   }
   // updateSolution(state);
 }