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;
}