1 package com.iotivity.service;
3 import java.util.ArrayList;
5 import android.app.Activity;
6 import android.app.AlertDialog;
7 import android.content.DialogInterface;
8 import android.os.Bundle;
9 import android.os.Handler;
10 import android.view.Menu;
11 import android.view.MenuItem;
12 import android.view.View;
13 import android.view.View.OnClickListener;
14 import android.widget.Button;
15 import android.widget.EditText;
16 import android.widget.RelativeLayout;
17 import android.widget.TextView;
19 import com.iotivity.sample_service.R;
21 public class MainActivity extends Activity {
23 static RMInterface RM = new RMInterface();
25 private final static String TAG = "MainActivity";
27 private final CharSequence[] mCheckBoxItems = { Network.WIFI.name(),
28 Network.EDR.name(), Network.LE.name() };
30 private final CharSequence[] mDTLSCheckBoxItems = { DTLS.SECURED.name(),
31 DTLS.UNSECURED.name() };
33 private final CharSequence[] mMsgTyleCheckBoxItems = { MsgType.CON.name(),
37 SERVER, CLIENT, BOTH, UNKNOWN
40 private enum Network {
48 private enum MsgType {
52 private Mode mCurrentMode = Mode.UNKNOWN;
54 private ArrayList<Integer> mSelectedItems = new ArrayList<Integer>();
56 private RelativeLayout mFindResourceLayout = null;
58 private RelativeLayout mSendNotificationLayout = null;
60 private RelativeLayout mSendRequestLayout = null;
62 private RelativeLayout mSendRequestSettingLayout = null;
64 private RelativeLayout mSendResponseNotiSettingLayout = null;
66 private RelativeLayout mReceiveLayout = null;
68 private RelativeLayout mFindTitleLayout = null;
70 private RelativeLayout mRequestTitleLayout = null;
72 private RelativeLayout mResponseNotificationTitleLayout = null;
74 private RelativeLayout mAdvertiseTitleLayout = null;
76 private RelativeLayout mHandleTitleLayout = null;
78 private RelativeLayout mPayLoadClientEditLayout = null;
80 private RelativeLayout mPayLoadServerEditLayout = null;
82 private RelativeLayout mAdvertiseResourceLayout = null;
84 private RelativeLayout mServerButtonLayout = null;
86 private TextView mMode_tv = null;
88 private TextView mNetwork_tv = null;
90 private EditText mUri_ed = null;
92 private EditText mNotification_ed = null;
94 private EditText mReqData_ed = null;
96 private EditText mPayload_ed = null;
98 private Button mFind_btn = null;
100 private Button mNotify_btn = null;
102 private Button mAdvertiseResource_btn = null;
104 private Button mReqeust_btn = null;
106 private Button mReqeust_setting_btn = null;
108 private Button mResponse_Notify_setting_btn = null;
110 private Button mResponse_btn = null;
112 private Button mRecv_btn = null;
114 private Handler mLogHandler = null;
117 * Defined ConnectivityType in cacommon.c
119 * CA_ETHERNET = (1 << 0) CA_WIFI = (1 << 1) CA_EDR = (1 << 2) CA_LE = (1 <<
122 private int CA_WIFI = (1 << 1);
123 private int CA_EDR = (1 << 2);
124 private int CA_LE = (1 << 3);
125 private int isSecured = 0;
126 private int msgType = 0;
127 private int selectedItem = 0;
128 int selectedNetwork = 0;
131 protected void onCreate(Bundle savedInstanceState) {
132 super.onCreate(savedInstanceState);
133 setContentView(R.layout.activity_main);
135 RM.setResponseListener(this);
137 mLogHandler = new Handler();
138 TextView logView = (TextView) findViewById(R.id.tv_result);
139 DLog.setTextView(mLogHandler, logView);
143 mReceiveLayout = (RelativeLayout) findViewById(R.id.layout_receive);
146 mSendRequestLayout = (RelativeLayout) findViewById(R.id.layout_request);
147 mSendRequestSettingLayout = (RelativeLayout)
148 findViewById(R.id.layout_request_setting_for_client);
149 mFindResourceLayout = (RelativeLayout) findViewById(R.id.layout_find);
150 mFindTitleLayout = (RelativeLayout) findViewById(R.id.layout_find_title);
151 mRequestTitleLayout = (RelativeLayout) findViewById(R.id.layout_request_title);
152 mHandleTitleLayout = (RelativeLayout) findViewById(R.id.layout_handle_title);
153 mPayLoadClientEditLayout = (RelativeLayout) findViewById(R.id.layout_payload_client_ed);
156 mSendNotificationLayout = (RelativeLayout) findViewById(R.id.layout_notify);
157 mPayLoadServerEditLayout = (RelativeLayout) findViewById(R.id.layout_payload_server_ed);
158 mSendResponseNotiSettingLayout = (RelativeLayout)
159 findViewById(R.id.layout_request_setting_for_server);
160 mServerButtonLayout = (RelativeLayout) findViewById(R.id.layout_server_bt);
161 mResponseNotificationTitleLayout = (RelativeLayout)
162 findViewById(R.id.layout_Response_Noti_title);
163 mAdvertiseTitleLayout = (RelativeLayout) findViewById(R.id.layout_advertise_title);
164 mAdvertiseResourceLayout = (RelativeLayout) findViewById(R.id.layout_advertise_resource);
166 mMode_tv = (TextView) findViewById(R.id.tv_mode);
167 mNetwork_tv = (TextView) findViewById(R.id.tv_network);
169 mUri_ed = (EditText) findViewById(R.id.et_uri);
170 mNotification_ed = (EditText) findViewById(R.id.et_notification);
171 mReqData_ed = (EditText) findViewById(R.id.et_req_data);
172 mPayload_ed = (EditText) findViewById(R.id.et_payload_data_for_server);
174 mFind_btn = (Button) findViewById(R.id.btn_find_resource);
175 mResponse_btn = (Button) findViewById(R.id.btn_sendresponse);
176 mNotify_btn = (Button) findViewById(R.id.btn_notify);
177 mAdvertiseResource_btn = (Button) findViewById(R.id.btn_advertise);
178 mReqeust_btn = (Button) findViewById(R.id.btn_Request);
179 mReqeust_setting_btn = (Button) findViewById(R.id.btn_Request_setting_for_client);
180 mResponse_Notify_setting_btn = (Button)
181 findViewById(R.id.btn_Request_setting_for_server);
182 mRecv_btn = (Button) findViewById(R.id.btn_receive);
184 mFind_btn.setOnClickListener(mFindResourceHandler);
185 mResponse_btn.setOnClickListener(mSendResponseHandler);
186 mNotify_btn.setOnClickListener(mNotifyHandler);
187 mAdvertiseResource_btn.setOnClickListener(mAdvertiseResourceHandler);
188 mReqeust_btn.setOnClickListener(mSendRequestHandler);
189 mReqeust_setting_btn.setOnClickListener(mSendRequestSettingHandler);
190 mResponse_Notify_setting_btn
191 .setOnClickListener(mSendResponseNotiSettingHandler);
192 mRecv_btn.setOnClickListener(mResponseHandler);
194 showSelectModeView();
196 // Initialize Connectivity Abstraction
197 RM.RMInitialize(getApplicationContext());
198 // Select default network(WIFI)
199 RM.RMSelectNetwork(CA_WIFI);
201 RM.RMRegisterHandler();
204 private void showSelectModeView() {
206 mFindResourceLayout.setVisibility(View.INVISIBLE);
207 mSendNotificationLayout.setVisibility(View.INVISIBLE);
208 mSendRequestLayout.setVisibility(View.INVISIBLE);
209 mSendRequestSettingLayout.setVisibility(View.INVISIBLE);
210 mReceiveLayout.setVisibility(View.INVISIBLE);
211 mFindTitleLayout.setVisibility(View.INVISIBLE);
212 mRequestTitleLayout.setVisibility(View.INVISIBLE);
213 mHandleTitleLayout.setVisibility(View.INVISIBLE);
214 mPayLoadClientEditLayout.setVisibility(View.INVISIBLE);
215 mPayLoadServerEditLayout.setVisibility(View.INVISIBLE);
216 mServerButtonLayout.setVisibility(View.INVISIBLE);
217 mResponseNotificationTitleLayout.setVisibility(View.INVISIBLE);
218 mAdvertiseTitleLayout.setVisibility(View.INVISIBLE);
219 mAdvertiseResourceLayout.setVisibility(View.INVISIBLE);
220 mSendResponseNotiSettingLayout.setVisibility(View.INVISIBLE);
222 mMode_tv.setText("Select Mode (Server or Client)");
225 private void showNetworkView() {
227 mNetwork_tv.setText("Select Network Type");
230 private void showModeView() {
232 if (mCurrentMode == Mode.SERVER) {
234 mFindResourceLayout.setVisibility(View.INVISIBLE);
235 mSendNotificationLayout.setVisibility(View.VISIBLE);
236 mSendRequestLayout.setVisibility(View.INVISIBLE);
237 mSendRequestSettingLayout.setVisibility(View.INVISIBLE);
238 mReceiveLayout.setVisibility(View.VISIBLE);
240 mFindTitleLayout.setVisibility(View.INVISIBLE);
241 mRequestTitleLayout.setVisibility(View.INVISIBLE);
242 mHandleTitleLayout.setVisibility(View.VISIBLE);
243 mPayLoadClientEditLayout.setVisibility(View.INVISIBLE);
245 mPayLoadServerEditLayout.setVisibility(View.VISIBLE);
246 mServerButtonLayout.setVisibility(View.VISIBLE);
248 mResponseNotificationTitleLayout.setVisibility(View.VISIBLE);
249 mAdvertiseTitleLayout.setVisibility(View.VISIBLE);
250 mAdvertiseResourceLayout.setVisibility(View.VISIBLE);
252 mSendResponseNotiSettingLayout.setVisibility(View.VISIBLE);
254 mNetwork_tv.setText("");
256 } else if (mCurrentMode == Mode.CLIENT) {
258 mFindResourceLayout.setVisibility(View.VISIBLE);
259 mSendNotificationLayout.setVisibility(View.INVISIBLE);
260 mSendRequestLayout.setVisibility(View.VISIBLE);
261 mSendRequestSettingLayout.setVisibility(View.VISIBLE);
262 mReceiveLayout.setVisibility(View.VISIBLE);
264 mFindTitleLayout.setVisibility(View.VISIBLE);
265 mRequestTitleLayout.setVisibility(View.VISIBLE);
266 mHandleTitleLayout.setVisibility(View.VISIBLE);
267 mPayLoadClientEditLayout.setVisibility(View.VISIBLE);
269 mPayLoadServerEditLayout.setVisibility(View.INVISIBLE);
270 mServerButtonLayout.setVisibility(View.INVISIBLE);
272 mResponseNotificationTitleLayout.setVisibility(View.INVISIBLE);
273 mAdvertiseTitleLayout.setVisibility(View.INVISIBLE);
274 mAdvertiseResourceLayout.setVisibility(View.INVISIBLE);
276 mSendResponseNotiSettingLayout.setVisibility(View.INVISIBLE);
278 mNetwork_tv.setText("");
283 protected void onDestroy() {
286 // Terminate Connectivity Abstraction
288 android.os.Process.killProcess(android.os.Process.myPid());
292 public boolean onCreateOptionsMenu(Menu menu) {
294 menu.add(0, 1, Menu.NONE, "Start Server");
295 menu.add(0, 2, Menu.NONE, "Start Client");
296 menu.add(0, 3, Menu.NONE, "Select Network");
302 public boolean onOptionsItemSelected(MenuItem item) {
304 switch (item.getItemId()) {
308 RM.RMStartListeningServer();
310 if (mSelectedItems.size() == 0) {
311 mCurrentMode = Mode.SERVER;
312 mMode_tv.setText("MODE: " + mCurrentMode.toString());
316 mCurrentMode = Mode.SERVER;
317 mMode_tv.setText("MODE: " + mCurrentMode.toString());
325 RM.RMStartDiscoveryServer();
327 if (mSelectedItems.size() == 0) {
328 mCurrentMode = Mode.CLIENT;
329 mMode_tv.setText("MODE: " + mCurrentMode.toString());
333 mCurrentMode = Mode.CLIENT;
334 mMode_tv.setText("MODE: " + mCurrentMode.toString());
342 showAlertDialog("Select Network");
347 return super.onOptionsItemSelected(item);
350 private OnClickListener mFindResourceHandler = new OnClickListener() {
353 public void onClick(View v) {
355 DLog.v(TAG, "FindResource click");
356 RM.RMFindResource(mUri_ed.getText().toString());
361 private OnClickListener mSendResponseHandler = new OnClickListener() {
364 public void onClick(View v) {
366 DLog.v(TAG, "SendResponse click");
367 RM.RMSendResponse(mNotification_ed.getText().toString(),
368 mPayload_ed.getText().toString(), selectedNetwork,
373 private OnClickListener mNotifyHandler = new OnClickListener() {
376 public void onClick(View v) {
378 DLog.v(TAG, "SendNotification click");
379 RM.RMSendNotification(mNotification_ed.getText().toString(),
380 mPayload_ed.getText().toString(), selectedNetwork,
385 private OnClickListener mAdvertiseResourceHandler = new OnClickListener() {
388 public void onClick(View v) {
390 DLog.v(TAG, "AdvertiseResource click");
391 RM.RMAdvertiseResource(mNotification_ed.getText().toString(),
396 private OnClickListener mSendRequestHandler = new OnClickListener() {
399 public void onClick(View v) {
401 DLog.v(TAG, "SendRequest click");
402 RM.RMSendRequest(mReqData_ed.getText().toString(), mPayload_ed
403 .getText().toString(), selectedNetwork, isSecured, msgType);
407 private OnClickListener mSendRequestSettingHandler = new OnClickListener() {
410 public void onClick(View v) {
412 checkMsgSecured("Select DTLS Type");
413 checkMsgType("Select Msg Type");
417 private OnClickListener mSendResponseNotiSettingHandler = new OnClickListener() {
420 public void onClick(View v) {
422 checkMsgSecured("Select DTLS Type");
426 private OnClickListener mResponseHandler = new OnClickListener() {
429 public void onClick(View v) {
431 RM.RMHandleRequestResponse();
435 private void showAlertDialog(String title) {
437 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
438 builder.setTitle(title)
439 .setMultiChoiceItems(mCheckBoxItems, null,
440 new DialogInterface.OnMultiChoiceClickListener() {
443 public void onClick(DialogInterface dialog,
444 int which, boolean isChecked) {
448 mSelectedItems.add(which);
450 } else if (mSelectedItems.contains(which)) {
452 mSelectedItems.remove(Integer
457 .setPositiveButton("OK", new DialogInterface.OnClickListener() {
460 public void onClick(DialogInterface dialog, int which) {
462 int interestedNetwork = 0;
464 for (int i = 0; i < mSelectedItems.size(); i++) {
466 if (mSelectedItems.get(i) == Network.WIFI.ordinal()) {
467 interestedNetwork |= CA_WIFI;
468 } else if (mSelectedItems.get(i) == Network.EDR
470 interestedNetwork |= CA_EDR;
471 } else if (mSelectedItems.get(i) == Network.LE
473 interestedNetwork |= CA_LE;
477 RM.RMSelectNetwork(interestedNetwork);
478 selectedNetwork = interestedNetwork;
482 mSelectedItems.clear();
485 private void checkMsgSecured(String title) {
487 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
489 builder.setTitle(title)
490 .setSingleChoiceItems(mDTLSCheckBoxItems, -1,
491 new DialogInterface.OnClickListener() {
494 public void onClick(DialogInterface dialog,
496 selectedItem = which;
499 .setPositiveButton("OK", new DialogInterface.OnClickListener() {
502 public void onClick(DialogInterface dialog, int which) {
504 if (selectedItem == DTLS.SECURED.ordinal()) {
506 DLog.v(TAG, "Send secured message");
508 mPayLoadClientEditLayout
509 .setVisibility(View.INVISIBLE);
511 mPayLoadServerEditLayout
512 .setVisibility(View.INVISIBLE);
514 } else if (selectedItem == DTLS.UNSECURED.ordinal()) {
516 DLog.v(TAG, "Send unsecured message");
518 if (mCurrentMode == Mode.SERVER) {
519 mPayLoadServerEditLayout
520 .setVisibility(View.VISIBLE);
521 } else if (mCurrentMode == Mode.CLIENT) {
522 mPayLoadClientEditLayout
523 .setVisibility(View.VISIBLE);
531 private void checkMsgType(String title) {
533 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
534 builder.setTitle(title)
535 .setSingleChoiceItems(mMsgTyleCheckBoxItems, -1,
536 new DialogInterface.OnClickListener() {
539 public void onClick(DialogInterface dialog,
541 selectedItem = which;
544 .setPositiveButton("OK", new DialogInterface.OnClickListener() {
547 public void onClick(DialogInterface dialog, int which) {
549 if (selectedItem == MsgType.CON.ordinal()) {
551 DLog.v(TAG, "Message Type is CON");
553 } else if (selectedItem == MsgType.NON.ordinal()) {
555 DLog.v(TAG, "Message Type is NON");
562 public void OnResponseReceived(String subject, String receivedData) {
563 String callbackData = subject + receivedData;
564 DLog.v(TAG, callbackData);