diff --git a/androidgcs/res/layout/object_browser.xml b/androidgcs/res/layout/object_browser.xml index 9c7456915..67dc0af76 100644 --- a/androidgcs/res/layout/object_browser.xml +++ b/androidgcs/res/layout/object_browser.xml @@ -2,6 +2,56 @@ - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/androidgcs/res/layout/pfd.xml b/androidgcs/res/layout/pfd.xml index 191a80eb9..5291f2724 100644 --- a/androidgcs/res/layout/pfd.xml +++ b/androidgcs/res/layout/pfd.xml @@ -1,8 +1,30 @@ - - - + + + + + + + + + + + + + diff --git a/androidgcs/src/org/openpilot/androidgcs/ObjectBrowser.java b/androidgcs/src/org/openpilot/androidgcs/ObjectBrowser.java index a6ed177a2..1a7495ada 100644 --- a/androidgcs/src/org/openpilot/androidgcs/ObjectBrowser.java +++ b/androidgcs/src/org/openpilot/androidgcs/ObjectBrowser.java @@ -16,8 +16,12 @@ import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.ListView; import android.widget.Spinner; +import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; @@ -27,6 +31,7 @@ import org.openpilot.uavtalk.UAVObject; public class ObjectBrowser extends ObjectManagerActivity implements OnSharedPreferenceChangeListener { private final String TAG = "ObjectBrower"; + int selected_index = -1; boolean connected; SharedPreferences prefs; ArrayAdapter adapter; @@ -35,10 +40,15 @@ public class ObjectBrowser extends ObjectManagerActivity implements OnSharedPref final Handler uavobjHandler = new Handler(); final Runnable updateText = new Runnable() { public void run() { - Log.d(TAG,"Update"); - update(); + updateObject(); } }; + + private final Observer updatedObserver = new Observer() { + public void update(Observable observable, Object data) { + uavobjHandler.post(updateText); + } + }; /** Called when the activity is first created. */ @Override @@ -47,20 +57,48 @@ public class ObjectBrowser extends ObjectManagerActivity implements OnSharedPref setContentView(R.layout.object_browser); prefs = PreferenceManager.getDefaultSharedPreferences(this); prefs.registerOnSharedPreferenceChangeListener(this); - - Spinner objectFilter = (Spinner) findViewById(R.id.object_list_filter); } @Override void onOPConnected() { Toast.makeText(this,"Telemetry estabilished",Toast.LENGTH_SHORT); Log.d(TAG, "onOPConnected()"); + + OnCheckedChangeListener checkListener = new OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + updateList(); + } + }; + + ((CheckBox) findViewById(R.id.dataCheck)).setOnCheckedChangeListener(checkListener); + ((CheckBox) findViewById(R.id.settingsCheck)).setOnCheckedChangeListener(checkListener); + + updateList(); + } + + /** + * Populate the list of UAVO objects based on the selected filter + */ + private void updateList() { + // Disconnect any previous signals + if (selected_index > 0) + allObjects.get(selected_index).removeUpdatedObserver(updatedObserver); + selected_index = -1; + + boolean includeData = ((CheckBox) findViewById(R.id.dataCheck)).isChecked(); + boolean includeSettings = ((CheckBox) findViewById(R.id.settingsCheck)).isChecked(); List> allobjects = objMngr.getDataObjects(); allObjects = new ArrayList(); ListIterator> li = allobjects.listIterator(); while(li.hasNext()) { - allObjects.addAll(li.next()); + List objects = li.next(); + if(includeSettings && objects.get(0).isSettings()) + allObjects.addAll(objects); + else if (includeData && !objects.get(0).isSettings()) + allObjects.addAll(objects); } adapter = new ArrayAdapter(this,R.layout.object_view, allObjects); @@ -70,29 +108,25 @@ public class ObjectBrowser extends ObjectManagerActivity implements OnSharedPref objects.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView parent, View view, int position, long id) { - /*Toast.makeText(getApplicationContext(), ((TextView) view).getText(), - Toast.LENGTH_SHORT).show();*/ - Intent intent = new Intent(ObjectBrowser.this, ObjectEditor.class); - intent.putExtra("org.openpilot.androidgcs.ObjectName", allObjects.get(position).getName()); - intent.putExtra("org.openpilot.androidgcs.ObjectId", allObjects.get(position).getObjID()); - intent.putExtra("org.openpilot.androidgcs.InstId", allObjects.get(position).getInstID()); - startActivity(intent); + + if (selected_index > 0) + allObjects.get(selected_index).removeUpdatedObserver(updatedObserver); + + selected_index = position; + allObjects.get(position).addUpdatedObserver(updatedObserver); + updateObject(); } }); - - - UAVObject obj = objMngr.getObject("SystemStats"); - if(obj != null) - obj.addUpdatedObserver(new Observer() { - public void update(Observable observable, Object data) { - uavobjHandler.post(updateText); - } - }); - + } - - public void update() { - adapter.notifyDataSetChanged(); + + private void updateObject() { + //adapter.notifyDataSetChanged(); + TextView text = (TextView) findViewById(R.id.object_information); + if (selected_index >= 0 && selected_index < allObjects.size()) + text.setText(allObjects.get(selected_index).toStringData()); + else + Log.d(TAG,"Update called but invalid index: " + selected_index); } public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, diff --git a/androidgcs/src/org/openpilot/uavtalk/UAVObject.java b/androidgcs/src/org/openpilot/uavtalk/UAVObject.java index 28c279040..087d2b808 100644 --- a/androidgcs/src/org/openpilot/uavtalk/UAVObject.java +++ b/androidgcs/src/org/openpilot/uavtalk/UAVObject.java @@ -52,6 +52,11 @@ public abstract class UAVObject { } private CallbackListener updatedListeners = new CallbackListener(this); + public void removeUpdatedObserver(Observer o) { + synchronized(updatedListeners) { + updatedListeners.deleteObserver(o); + } + } public void addUpdatedObserver(Observer o) { synchronized(updatedListeners) { updatedListeners.addObserver(o); @@ -730,14 +735,14 @@ public abstract class UAVObject { */ @Override public String toString() { - return toStringBrief() + toStringData(); + return toStringBrief(); // + toStringData(); } /** * Return a string with the object information (only the header) */ public String toStringBrief() { - return getName() + " (" + Integer.toHexString(getObjID()) + " " + Integer.toHexString(getInstID()) + " " + getNumBytes() + ")\n"; + return getName(); // + " (" + Integer.toHexString(getObjID()) + " " + Integer.toHexString(getInstID()) + " " + getNumBytes() + ")\n"; } /** diff --git a/androidgcs/src/org/openpilot/uavtalk/UAVObjectField.java b/androidgcs/src/org/openpilot/uavtalk/UAVObjectField.java index 3ed221079..af707d3a0 100644 --- a/androidgcs/src/org/openpilot/uavtalk/UAVObjectField.java +++ b/androidgcs/src/org/openpilot/uavtalk/UAVObjectField.java @@ -469,7 +469,11 @@ public class UAVObjectField { public String toString() { String sout = new String(); - sout += name + ": " + data.toString() + " (" + units + ")\n"; + sout += name + ": " + getValue().toString(); + if (units.length() > 0) + sout += " (" + units + ")\n"; + else + sout += "\n"; return sout; }