import android.app.Activity;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
import android.util.Log;
import android.view.View;
+import android.widget.ListView;
import android.widget.TextView;
import org.iotivity.service.RcsException;
import org.iotivity.service.client.RcsDiscoveryManager;
import org.iotivity.service.client.RcsRemoteResourceObject;
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* It contains the discover resource API for Discovering Container Resource
*/
+
public class ContainerClientActivity extends Activity implements
RcsDiscoveryManager.OnResourceDiscoveredListener {
+ public static final int MSG_ID_ATTRIBUTE_RECEIVED = 0;
+ public static final int MSG_ID_CACHEDATA_RECEIVED = 1;
+
private final String LOG_TAG = "[SampleClient] "
+ this.getClass().getSimpleName();
+ private final String RESOURCE_DISCOVERY_URI_KEYWORD = "discomfort";
+
+ private Handler mHandler;
+ private ResourceListAdapter mResourceListViewAdapter;
+
+ private ListView mResourceListView;
private TextView mLogView;
+ private List<String> mFoundResourceUris;
+ private List<ResourceListItem> mFoundResources;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_container_client);
+
+ mFoundResourceUris = new ArrayList<String>();
+ mFoundResources = new ArrayList<ResourceListItem>();
+
+ mHandler = new ContainerClientHandler(this);
+
+ mResourceListViewAdapter = new ResourceListAdapter(this, R.layout.discovered_resource, mFoundResources);
+ mResourceListView = (ListView) findViewById(R.id.ResourceListView);
+ mResourceListView.setAdapter(mResourceListViewAdapter);
+
mLogView = (TextView) findViewById(R.id.log);
}
public void onDiscoverResourceClick(View v) {
try {
- RcsDiscoveryManager.getInstance().discoverResourceByType(
- RcsAddress.multicast(), "oic.r.sensor",
+ RcsDiscoveryManager.getInstance().discoverResource(
+ RcsAddress.multicast(),
ContainerClientActivity.this);
+
+ mFoundResourceUris.clear();
+ mFoundResources.clear();
+ mResourceListViewAdapter.notifyDataSetChanged();
+
mLogView.setText("");
} catch (RcsException e) {
e.printStackTrace();
}
}
+ private boolean IsFoundResource(String resourceUri)
+ {
+ if (mFoundResourceUris.contains(resourceUri))
+ return true;
+
+ return false;
+ }
+
@Override
public void onResourceDiscovered(
final RcsRemoteResourceObject discoveredResource) {
- Log.i(LOG_TAG, "onResourceDiscovered");
runOnUiThread(new Runnable() {
public void run() {
try {
- mLogView.setText(Utils.resourceInfo(discoveredResource));
+ String uri = discoveredResource.getUri();
+ Log.i(LOG_TAG, "onResourceDiscovered -- " + uri);
+
+ if (uri.contains(RESOURCE_DISCOVERY_URI_KEYWORD) && !IsFoundResource(uri)) {
+ mFoundResourceUris.add(uri);
+ mFoundResources.add(new ResourceListItem(uri, discoveredResource, ContainerClientActivity.this.getHandler()));
+ mResourceListViewAdapter.notifyDataSetChanged();
+ }
} catch (RcsException e) {
- Utils.showError(ContainerClientActivity.this, LOG_TAG, e);
+ e.printStackTrace();
}
}
});
}
-}
+
+ private void printLog(String message) {
+ Log.i(LOG_TAG, message);
+ mLogView.setText(message);
+ }
+
+ public Handler getHandler() {
+ return mHandler;
+ }
+
+ private static class ContainerClientHandler extends Handler {
+ private WeakReference<ContainerClientActivity> mActivityRef;
+ private String logMsg;
+
+ private ContainerClientHandler(ContainerClientActivity activity) {
+ mActivityRef = new WeakReference<>(activity);
+ }
+
+ @Override
+ public void handleMessage(Message msg) {
+ super.handleMessage(msg);
+
+ ContainerClientActivity activity = mActivityRef.get();
+ if (activity == null) return;
+
+ switch (msg.what) {
+ case MSG_ID_ATTRIBUTE_RECEIVED:
+ logMsg = "-- ATTRIBUTE_RECEIVED\n";
+ logMsg += msg.obj.toString();
+ break;
+
+ case MSG_ID_CACHEDATA_RECEIVED:
+ logMsg = "-- CACHEDATA_RECEIVED\n";
+ logMsg += msg.obj.toString();
+ break;
+ }
+ activity.printLog(logMsg);
+ }
+ }
+}
\ No newline at end of file