package com.radiusnetworks.ibeacon.client; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import android.util.Log; import com.radiusnetworks.ibeacon.IBeacon; import com.radiusnetworks.ibeacon.IBeaconManager; public class RangingTracker { private static String TAG = "RangingTracker"; private Map<IBeacon,RangedIBeacon> rangedIBeacons = new HashMap<IBeacon,RangedIBeacon>(); public void addIBeacon(IBeacon iBeacon) { if (rangedIBeacons.containsKey(iBeacon)) { RangedIBeacon rangedIBeacon = rangedIBeacons.get(iBeacon); if (IBeaconManager.debug) Log.d(TAG, "adding "+iBeacon.getProximityUuid()+" to existing range for: "+rangedIBeacon.getProximityUuid() ); rangedIBeacon.addRangeMeasurement(iBeacon.getRssi()); } else { if (IBeaconManager.debug) Log.d(TAG, "adding "+iBeacon.getProximityUuid()+" to new rangedIBeacon"); rangedIBeacons.put(iBeacon, new RangedIBeacon(iBeacon)); } } public synchronized Collection<IBeacon> getIBeacons() { ArrayList<IBeacon> iBeacons = new ArrayList<IBeacon>(); Iterator<RangedIBeacon> iterator = rangedIBeacons.values().iterator(); while (iterator.hasNext()) { RangedIBeacon rangedIBeacon = iterator.next(); if (!rangedIBeacon.allMeasurementsExpired()) { iBeacons.add(rangedIBeacon); } } return iBeacons; } }