package uk.org.smithfamily.mslogger; import java.util.HashMap; import java.util.Map; import java.util.Observable; import uk.org.smithfamily.mslogger.ecuDef.Megasquirt; import uk.org.smithfamily.mslogger.ecuDef.OutputChannel; import uk.org.smithfamily.mslogger.log.DebugLogManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.util.Log; public class DataManager extends Observable { private final Map<String, OutputChannel> dataChannels = new HashMap<String, OutputChannel>(); private static DataManager instance = new DataManager(); private boolean disabled = true; private DataManager() { final IntentFilter dataFilter = new IntentFilter(Megasquirt.NEW_DATA); final IntentFilter connectionFilter = new IntentFilter(Megasquirt.CONNECTED); final IntentFilter disconnectionFilter = new IntentFilter(Megasquirt.DISCONNECTED); ApplicationSettings.INSTANCE.getContext().registerReceiver(mReceiver, dataFilter); ApplicationSettings.INSTANCE.getContext().registerReceiver(mReceiver, connectionFilter); ApplicationSettings.INSTANCE.getContext().registerReceiver(mReceiver, disconnectionFilter); } public static DataManager getInstance() { return instance; } public void tickle() { setChanged(); notifyObservers(); } private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(final Context context, final Intent intent) { final String action = intent.getAction(); if (action.equals(Megasquirt.NEW_DATA)) { disabled = false; } else if (action.equals(Megasquirt.CONNECTED)) { disabled = false; } else if (action.equals(Megasquirt.DISCONNECTED)) { disabled = true; } tickle(); } }; public Map<String, OutputChannel> getOutputChannels() { return dataChannels; } public void addOutputChannel(final OutputChannel o) { dataChannels.put(o.getName(), o); } public double getField(final String channelName) { double value = 0; final OutputChannel oc = dataChannels.get(channelName); if (oc == null) { DebugLogManager.INSTANCE.log("Invalid output channel " + channelName, Log.DEBUG); return value; } value = oc.getValue(); return value; } public boolean isDisabled() { return disabled; } }