package pl.llp.aircasting.helper;
import pl.llp.aircasting.R;
import pl.llp.aircasting.event.ui.ViewStreamEvent;
import pl.llp.aircasting.model.Sensor;
import pl.llp.aircasting.model.SensorManager;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.google.common.eventbus.EventBus;
import com.google.inject.Inject;
import org.jetbrains.annotations.Nullable;
import roboguice.inject.InjectResource;
import java.util.Comparator;
import java.util.List;
import static java.util.Collections.sort;
public class SelectSensorHelper {
public static final int DIALOG_ID = 175483;
@InjectResource(R.string.select_sensor) String title;
@Inject SensorManager sensorManager;
@Inject EventBus eventBus;
/**
* Prepare a dialog displaying a list of sensors, allowing the user to select
* one to view
*
* @param context The activity in
*/
public Dialog chooseSensor(final Activity context) {
final List<Sensor> sensors = sortedSensors();
int selected = selectedSensorIndex(sensors);
String[] listItems = listItems(sensors);
return new AlertDialog.Builder(context)
.setTitle(title)
.setSingleChoiceItems(listItems, selected, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Sensor sensor = sensors.get(which);
ViewStreamEvent event = new ViewStreamEvent(sensor);
eventBus.post(event);
context.removeDialog(DIALOG_ID);
}
})
.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
context.removeDialog(DIALOG_ID);
}
})
.create();
}
private String[] listItems(List<Sensor> sensors) {
return Lists.transform(sensors, new Function<Sensor, String>() {
@Override
public String apply(@Nullable Sensor input) {
return input.toString();
}
}).toArray(new String[]{});
}
private int selectedSensorIndex(List<Sensor> sensors)
{
return sensors.indexOf(sensorManager.getVisibleSensor());
}
private List<Sensor> sortedSensors() {
final List<Sensor> sensors = sensorManager.getSensors();
sort(sensors, new Comparator<Sensor>() {
@Override
public int compare(Sensor sensor, Sensor sensor1) {
return sensor.toString().compareTo(sensor1.toString());
}
});
return sensors;
}
}