package pl.llp.aircasting.activity.extsens;
import pl.llp.aircasting.helper.SettingsHelper;
import pl.llp.aircasting.sensor.ExternalSensorDescriptor;
import android.content.Context;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Maps.newHashMap;
public class ConnectedSensorAdapter extends SensorAdapter
{
SettingsHelper settingsHelper;
ConnectedSensorAdapter(Context context, SettingsHelper settingsHelper)
{
super(context);
this.settingsHelper = settingsHelper;
}
public boolean knows(String address)
{
return containsAddress(address);
}
private boolean containsAddress(String address)
{
for (Map<String, String> keyValues : data)
{
if (address.equalsIgnoreCase(keyValues.get(ADDRESS)))
{
return true;
}
}
return false;
}
@Override
public Map<String, String> remove(int position)
{
Map<String, String> removed = super.remove(position);
notifyDataSetChanged();
updateSettings();
return removed;
}
void updateSettings()
{
Iterator<Map<String,String>> iterator = data.iterator();
List<ExternalSensorDescriptor> sensors = newArrayList();
while (iterator.hasNext())
{
Map<String, String> next = iterator.next();
String address = next.get(ADDRESS);
String name = next.get(NAME);
String action = next.get(ACTION);
sensors.add(sensor(name, address, action));
}
settingsHelper.setExternalSensors(sensors);
}
public void addSensor(ExternalSensorDescriptor sensor)
{
if(!knows(sensor.getAddress()))
{
data.add(sensor.asMap());
}
notifyDataSetChanged();
updateSettings();
}
ExternalSensorDescriptor sensor(String name, String address, String action)
{
return new ExternalSensorDescriptor(name, address, action);
}
public void updatePreviouslyConnected(List<ExternalSensorDescriptor> descriptors)
{
for (ExternalSensorDescriptor sensor : descriptors)
{
if(!containsAddress(sensor.getAddress()))
{
Map<String, String> item = newHashMap();
item.put(ADDRESS, sensor.getAddress());
item.put(NAME, sensor.getName());
item.put(ACTION, sensor.getAction());
data.add(item);
}
}
notifyDataSetChanged();
}
public void disconnect()
{
throw new RuntimeException("Not implemented yet");
}
}