package farom.iparcos;
import farom.iparcos.R;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import laazotea.indi.client.INDIDevice;
import laazotea.indi.client.INDIDeviceListener;
import laazotea.indi.client.INDIProperty;
import android.os.Bundle;
import android.preference.PreferenceCategory;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.view.View;
/**
* A placeholder fragment containing a simple view.
*/
public class PrefsFragment extends PreferenceFragment implements INDIDeviceListener {
private INDIDevice device = null;
private PreferenceScreen prefScreen;
private HashMap<INDIProperty, PropPref> map;
private HashMap<String, PreferenceCategory> groups;
public void setDevice(INDIDevice dev) {
device = dev;
device.addINDIDeviceListener(this);
map = new HashMap<INDIProperty, PropPref>();
groups = new HashMap<String, PreferenceCategory>();
}
public void finalize() throws Throwable {
super.finalize();
device.removeINDIDeviceListener(this);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.empty_preferences);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
prefScreen = getPreferenceScreen();
if (device != null) {
for (Iterator<String> it = device.getGroupNames().iterator(); it.hasNext();) {
String group = it.next();
addPrefGroup(group);
}
}
}
private void addPrefGroup(String group) {
ArrayList<INDIProperty> props = device.getPropertiesOfGroup(group);
if (props.size() > 0) {
PreferenceCategory prefGroup = new PreferenceCategory(getActivity());
groups.put(group, prefGroup);
prefGroup.setTitle(group);
prefScreen.addPreference(prefGroup);
for (Iterator<INDIProperty> it = props.iterator(); it.hasNext();) {
INDIProperty prop = it.next();
PropPref pref = PropPref.create(getActivity(), prop);
map.put(prop, pref);
prefGroup.addPreference(pref);
}
}
}
@Override
public void messageChanged(INDIDevice arg0) {
// TODO Auto-generated method stub
}
@Override
public void newProperty(INDIDevice arg0, INDIProperty prop) {
String group = prop.getGroup();
PreferenceCategory prefGroup = groups.get(group);
if (prefGroup == null) {
prefGroup = new PreferenceCategory(getActivity());
groups.put(group, prefGroup);
prefGroup.setTitle(group);
prefScreen.addPreference(prefGroup);
}
PropPref pref = PropPref.create(getActivity(), prop);
map.put(prop, pref);
prefGroup.addPreference(pref);
}
@Override
public void removeProperty(INDIDevice arg0, INDIProperty prop) {
PropPref pref = map.get(prop);
if (pref != null) {
String group = prop.getGroup();
PreferenceCategory prefGroup = groups.get(group);
prefGroup.removePreference(pref);
if (prefGroup.getPreferenceCount() == 0) {
prefScreen.removePreference(prefGroup);
groups.remove(group);
}
map.remove(prop);
}
}
}