Imported Upstream version 1.1.0
[platform/upstream/iotivity.git] / service / resource-container / examples / android / RCSampleClientApp / app / src / main / java / org / iotivity / service / sample / client / ContainerClientActivity.java
index 319d5e1..86a005f 100644 (file)
@@ -20,8 +20,11 @@ package org.iotivity.service.sample.client;
 
 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;
@@ -29,47 +32,132 @@ import org.iotivity.service.client.RcsAddress;
 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