diff --git a/res/layout/activity_discover.xml b/res/layout/activity_discover.xml
index e78fe84..386bbcf 100644
--- a/res/layout/activity_discover.xml
+++ b/res/layout/activity_discover.xml
@@ -29,12 +29,13 @@
android:text="@string/selectChildDevice"
android:textSize="20sp" />
-
-
+
\ No newline at end of file
diff --git a/res/layout/available_children_list.xml b/res/layout/available_children_list.xml
new file mode 100644
index 0000000..00c8fa6
--- /dev/null
+++ b/res/layout/available_children_list.xml
@@ -0,0 +1,10 @@
+
+
diff --git a/src/protect/babymonitor/DiscoverActivity.java b/src/protect/babymonitor/DiscoverActivity.java
index e625785..3abfff3 100644
--- a/src/protect/babymonitor/DiscoverActivity.java
+++ b/src/protect/babymonitor/DiscoverActivity.java
@@ -24,9 +24,10 @@ import android.net.nsd.NsdServiceInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
-import android.widget.Button;
-import android.widget.TableLayout;
-import android.widget.TableRow;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
public class DiscoverActivity extends Activity
{
@@ -69,6 +70,29 @@ public class DiscoverActivity extends Activity
{
final NsdManager nsdManager = (NsdManager)this.getSystemService(Context.NSD_SERVICE);
+ final ListView serviceTable = (ListView) findViewById(R.id.ServiceTable);
+
+ final ArrayAdapter availableServicesAdapter = new ArrayAdapter(this,
+ R.layout.available_children_list);
+ serviceTable.setAdapter(availableServicesAdapter);
+
+ serviceTable.setOnItemClickListener(new OnItemClickListener()
+ {
+ @Override
+ public void onItemClick(AdapterView> parent, View view,
+ int position, long id)
+ {
+ ServiceInfoWrapper info = (ServiceInfoWrapper) parent.getItemAtPosition(position);
+ Intent i = new Intent(getApplicationContext(), ListenActivity.class);
+ Bundle b = new Bundle();
+ b.putString("address", info.getAddress());
+ b.putInt("port", info.getPort());
+ b.putString("name", info.getName());
+ i.putExtras(b);
+ startActivity(i);
+ }
+ });
+
// Instantiate a new DiscoveryListener
_discoveryListener = new NsdManager.DiscoveryListener()
{
@@ -111,35 +135,7 @@ public class DiscoverActivity extends Activity
@Override
public void run()
{
- final TableLayout serviceTable = (TableLayout) findViewById(R.id.ServiceTable);
- final TableRow row = new TableRow(DiscoverActivity.this.getApplicationContext());
- serviceTable.addView(row);
-
- // If there is more than one service on the network, it will
- // have a number at the end, but will appear as the following:
- // "ProtectBabyMonitor\\032(number)
- // Replace \\032 with a ""
- final String fixedServiceName = serviceInfo.getServiceName().replace("\\\\032", " ");
-
- final Button serviceButton = new Button(DiscoverActivity.this.getApplicationContext());
- serviceButton.setText(fixedServiceName);
- row.addView(serviceButton);
- serviceButton.setTextSize(15);
-
- serviceButton.setOnClickListener(new View.OnClickListener()
- {
- @Override
- public void onClick(View v)
- {
- Intent i = new Intent(getApplicationContext(), ListenActivity.class);
- Bundle b = new Bundle();
- b.putString("address", serviceInfo.getHost().getHostAddress());
- b.putInt("port", serviceInfo.getPort());
- b.putString("name", fixedServiceName);
- i.putExtras(b);
- startActivity(i);
- }
- });
+ availableServicesAdapter.add(new ServiceInfoWrapper(serviceInfo));
}
});
}
@@ -186,3 +182,37 @@ public class DiscoverActivity extends Activity
serviceType, NsdManager.PROTOCOL_DNS_SD, _discoveryListener);
}
}
+
+class ServiceInfoWrapper
+{
+ private NsdServiceInfo _info;
+ public ServiceInfoWrapper(NsdServiceInfo info)
+ {
+ _info = info;
+ }
+
+ public String getAddress()
+ {
+ return _info.getHost().getHostAddress();
+ }
+
+ public int getPort()
+ {
+ return _info.getPort();
+ }
+
+ public String getName()
+ {
+ // If there is more than one service on the network, it will
+ // have a number at the end, but will appear as the following:
+ // "ProtectBabyMonitor\\032(number)
+ // Replace \\032 with a ""
+ return _info.getServiceName().replace("\\\\032", " ");
+ }
+
+ @Override
+ public String toString()
+ {
+ return getName();
+ }
+}